在现代硬件上 irqbalance 还有用处吗?

在现代硬件上 irqbalance 还有用处吗?

这个问题以前已经被问过,但我相信世界已经发生了足够的变化,值得再次提出。

在当今的系统上,我们拥有支持 NUMA 的 CPU,并且其核心之间共享内存,irqbalance 有什么用处吗?

运行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 系统上运行,然后退出。这会扰乱我们的进程监控。

我们应该研究跑步吗努马德而不是在这样的系统上使用 irqbalance 吗?

这对于 VMware 虚拟化服务器来说尤其有趣。

答案1

以下是 RedHat 的一位技术人员的回答。虽然我相信大多数企业硬件都支持 NUMA。而且据我所知,只要 CPU 配置合适,VMware 也会尝试将您的虚拟机安装在同一个 NUMA 节点上。

如能提供相关经验(尤其是有关 VMware 的经验),我将不胜感激。

这是因为现代服务器确实如此。请记住,多 CPU/多核与 NUMA 不同。许多多 CPU/核系统没有 NUMA。

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

RHEL 6 性能调优指南

RHEL 6 的低延迟性能调优

读完了这些吗?太好了,你不需要再听我说什么了!;-) 但万一你不耐烦了,下面就是你想要它们的原因...

IRQbalance 可防止所有 IRQ 请求都备份到单个 CPU 上。我见过许多具有 4 个以上 CPU 核心的系统运行缓慢,因为各个 CPU 上的所有进程都在等待 CPU 0 处理网络或存储 IRQ 请求。CPU 0 看起来非常非常繁忙,而所有其他 CPU 都不忙,但应用程序却非常慢。应用程序运行缓慢是因为它们正在等待来自 CPU 0 的 IO 请求。

IRQbalance 会尝试以智能方式在所有 CPU 之间平衡 IRQ,并在可能的情况下将 IRQ 处理尽可能靠近进程。这可能是同一个内核、共享同一缓存的同一芯片上的内核或同一 NUMA 区域中的内核。

您应该使用 irqbalance,除非:

您正在手动将您的应用程序/IRQ固定到特定核心,这是有充分理由的(低延迟、实时要求等)。

虚拟客户机。这实际上没有意义,因为除非您将客户机固定到特定的 CPU 和 IRQ 以及专用的网络/存储硬件,否则您可能看不到在裸机上的好处。但您的 KVM/RHEV 主机应该使用 irqbalance 和努马德调整

其他非常重要的调整工具是 tuned profile 和 numad。了解它们!使用它们!

Numad 与 irqbalance 类似,它会尝试确保进程及其内存位于同一个 numa 区域中。使用多核时,我们可以看到延迟显著减少,从而在负载下实现更加平稳可靠的性能。

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

相关内容