在现代硬件上还有不平衡的用法吗?

这个问题之前已经被问过了,但是我相信世界已经发生了变化,所以再次被问到。

irqbalance在今天的系统上有什么用处,我们有NUMAfunction的CPU,内核之间共享内存?

运行irqbalance --oneshot --debug显示现代VMware ESXi环境中的虚拟客户机正在共享内核之间的NUMA节点。

 # irqbalance --oneshot --debug 3 Package 0: numa_node is 0 cpu mask is 0000000f (load 0) Cache domain 0: numa_node is 0 cpu mask is 0000000f (load 0) CPU number 0 numa_node is 0 (load 0) CPU number 1 numa_node is 0 (load 0) CPU number 2 numa_node is 0 (load 0) CPU number 3 numa_node is 0 (load 0) 

在这种情况下,irqbalance将检测到它正在NUMA系统上运行,然后退出。 这与我们的stream程监控混乱。

我们应该考虑在这样的系统上运行numad而不是irqbalance吗?

这对于VMware虚拟化服务器来说非常有趣。

以下是RedHat技术人员的一个答案。 尽pipe我确实认为大多数企业硬件都支持NUMA。 据我所知,只要CPUconfiguration合适,VMware也会尝试将虚拟机安装在同一个NUMA节点上。

经验(特别是关于VMware)将不胜感激。

这是真实的“因为”现代服务器。 请记住,Multi-CPU / Muli-Core与NUMA不一样。 有许多没有NUMA的多CPU /核心系统。

在阅读下面的解释之前,请阅读上面的IRQ Affinity文档以及以下指南:

RHEL 6性能调优指南

RHEL 6低延迟性能调优

得到了所有的阅读? 太棒了,你需要从我这里听到更多! ;-)但万一你不耐烦,这就是为什么你想要他们…

IRQbalance保持所有IRQ请求在单个CPU上备份。 我看到很多带有4+ CPU内核的系统执行速度很慢,因为各种CPU上的所有进程都在CPU 0上等待处理networking或存储IRQ请求。 CPU 0看起来非常非常繁忙,所有其他CPU都不忙,但是应用程序非常慢。 应用程序很慢,因为它们正在等待来自CPU 0的IO请求。

IRQbalance尝试以一种智能的方式平衡所有CPU,并尽可能使IRQ处理尽可能接近过程。 这可能是相同的核心,共享相同caching的同一芯片上的核心,或同一个NUMA区域中的核心。

你应该使用irqbalance,除非:

由于很好的原因(低延迟,实时性要求等),您需要手动将应用程序/ IRQ固定到特定内核。

虚拟客人。 这并没有什么意义,因为除非您将客户机固定在特定的CPU和IRQ以及专用的networking/存储硬件上,否则您将不会看到裸机带来的好处。 但是您的KVM / RHEV主机应该使用irqbalance和numad并进行调优

其他非常重要的调整工具是调整configuration文件和numad。 阅读关于他们! 使用它们!

Numad类似于irqbalance,它试图确保一个进程和它的内存在同一个numa区域。 有了许多内核,我们看到显着降低的延迟,导致在负载下更可靠的性能。

如果您熟练,勤奋,定期监控或具有非常可预测的工作负载,则可以通过手动将进程/ IRQ固定到CPU来获得更好的性能。 即使在这些情况下,irqbalance和numad也非常接近匹配。 但是如果你不确定或者你的工作量是不可预测的,你应该使用irqbalance和numad。