系统中断率高

系统中断率高

我的服务器有24个CPU核心,96G内存,安装了CentOS 7.2 x86_64。

启动我的程序后大的数据集,我的程序将使用大约 50G 内存,并且 Linux 系统将显示较高的系统中断率,但上下文切换率将较低。dstat将显示在 500k int/s 和 1000k int/s 之间。CPU 使用率将接近 100%,大约 40% us,60% sy。

如果数据集较小,程序将使用大约 5G 内存,并且一切都会很好,CPU 使用率 100%,大约 99%us,1%sy。这是预期的。

该程序是我自己写的,是一个多线程程序。它不执行任何网络 IO,很少执行磁盘 IO,主要是内存操作和算术。无论数据集大小如何,线程模型和算法都是相同的。

我的问题是,如何才能准确找出我的程序最常使用哪些中断(并且尽可能摆脱它们以提高性能)?

答案1

我假设您没有配备 24C CPU 的单插槽系统。因此它可能是配备 2x12C 的 NUMA 系统。在这种情况下,我建议确保程序仅使用一个 numa 节点(通常是插槽)及其本地一半的 RAM。

当你使用了50G的时候,这意味着numa局部性无法得到保证,因为它超过了内存的一半。

要检查实际状态,请使用 numastat。如果您使用的是 RHEL,则可以使用 numad 自动处理内存局部性。或者您可以使用numactl --hardware它将为您提供有关 HW NUMA 节点的概述。这里有一个非常好的带有示例的操作方法:

http://fibrevillage.com/sysadmin/534-numactl-installation-and-examples

这样,您就可以在所需的 CPU 上锁定您的程序。

我建议检查您是否正在运行 irqbalance 守护程序,否则您可能有一个核心因中断而过载。

答案2

在 Linux 上:watch cat /proc/interrupts将显示每个中断和 CPU 的中断调用数量。我猜你会看到 LOC(本地计时器)和 RES(重新调度)。

相关内容