我的系统中有 4 个核心。核心 2 在 htop 中经常显示 100% 的使用率。同时核心 1、3、4 大部分时间显示约 5% 的使用率。
这正常吗?有没有办法更好地将核心 2 的负载分配给其他核心?这是否可取?
答案1
是的,这可能是正常的。取决于操作系统的管理程度。影响这一点的两个重要工具是
- 任务集它可以指示进程可以使用哪个 CPU
- 设置IRQ 亲和性你的 pci 设备
IRQ 亲和性很容易修复。执行一些 IO,观察 /proc/interrupts,如果看到 MSI-foo 都在同一 CPU 上,则分发它们。您通常希望在“真实核心”上处理 IRQ,因为它们是最快的。一旦您弄清楚了这一点,编写一个脚本将其提交给系统启动,您就大功告成了。
进程很麻烦,因为它们可以在 CPU 之间迁移。要“正确执行”,您确实需要为相关进程设置 cgroup。或者……您可以采取偷懒的方法,为程序 X 制作一个调用任务集 ... _X 的包装器脚本。
使用 fio 之类的基准来衡量您的前后性能,否则您的所有调整都是徒劳的。如果您无法衡量您的更改,您就不知道它们的价值。
例如,我这里有一个 24 CPU、2 个 numa 节点的系统,它有一个存储设备,可以为每个 CPU 创建一个 MSI 中断……然后将它们全部绑定到 CPU 0 :-p。将 IRQ 亲和性分散到前 12 个核心四倍fio 记录的 IO 吞吐量。但该系统实际上具有大量带宽,而典型的桌面则没有。
祝你好运。表演工作很有趣,但也很辛苦 :)