十年后数据库还是不敢拥抱NUMA-续篇

十年后数据库还是不敢拥抱NUMA-续篇

💡 原文中文,约6300字,阅读约需15分钟。
📝

内容提要

本文讨论了NUMA对数据库性能的影响,通过测试验证了BIOS和引导参数对NUMA的影响,发现设置numa=off并不能消除性能抖动。文章指出,CPU到内存的距离由物理决定,软件设置无法优化。建议不要设置numa=off。

🔎

延伸解读

BIOS设置才是NUMA行为的决定因素

实验表明,只要BIOS中NUMA开启,无论OS启动参数如何设置,内存延迟都会出现抖动,且抖动模式一致。这说明BIOS层面的内存交织控制是硬件级别的,OS参数无法覆盖。因此,试图通过numa=off来消除抖动是徒劳的,必须从BIOS层面调整。

numa=off的掩耳盗铃效应

设置numa=off后,操作系统看不到NUMA结构,但物理上的远近延迟依然存在。这会导致性能问题被隐藏,而不是被解决。例如,在BIOS开启NUMA时,numa=off并不会改变内存交织行为,延迟抖动依旧。因此,这种做法只会让问题更难排查。

测试工具差异与延迟解读

lmbench和mlc的测试结果数值不同(如68/100ns vs 81/145ns),但快慢差距比例一致。这是因为测试方法不同:lmbench通过大规模数据读写取平均值,而mlc可能针对特定核心。理解这一点有助于正确解读延迟数据,避免误判。

❓

Q&A

NUMA对数据库性能的影响是什么?

NUMA对数据库性能的影响主要由CPU到内存的物理距离决定,不同的CPU核心与内存之间的距离不同,导致性能差异。

设置numa=off会有什么后果?

设置numa=off并不能消除性能抖动,反而可能掩盖NUMA结构,导致用户看不到潜在的性能问题。

BIOS设置对内存性能有何影响?

BIOS中的NUMA设置会影响内存的交织和延迟,BIOS设置为ON时,内存延迟会存在抖动。

为什么不建议在OS启动参数中设置numa=off?

不建议设置numa=off,因为这无法解决性能抖动问题,反而会隐藏NUMA结构带来的性能问题。

内存交织的效果在BIOS关闭时如何表现?

在BIOS关闭时,内存交织表现为稳定的平均值,而在BIOS开启时则表现为不稳定的延迟。

lmbench和mlc测试结果有什么不同?

lmbench和mlc测试结果的差异反映了不同测试方法的影响,但快慢差距基本一致。

🏷️

标签

➡️

继续阅读