我定义了一个 cpuset 来包含该系统上 24 个 CPU 中的 12 个。
我将一个过程放入其中。/proc/PID/cpuset 给出了正确的答案。
top -p PID,后跟 1,显示不在集合中的 CPU 上的大量 CPU 时间。
另外一个奇怪之处是,尽管没有进行重新优化,但 CPU 时间显示在 %ni 中而不是 %us 中。
Ubuntu 11.10,一台双插槽机器,配备 Intel(R) Xeon(R) CPU X5680 @ 3.33GHz 芯片。
编辑
我错了,我以为这里有四个插座。
答案1
抱歉,这不是 4 插槽机器,56xx 系列芯片仅为双插槽。
X5680 具有六个带超线程的内核,可配置为与 NUMA 中的另一个 X5680 一起工作,因此在 Linux 中会显示 24 个 CPU(2*6*2)。
U11 默认具有 HT 和 NUMA 感知内核,因此,除非另有说明,否则将尝试在相同内核上使用线程并终止运行,以确保高效的 L2 缓存管理。
我不太清楚您使用 cpuset 想要做什么,因为这样做比仅仅交给内核更有可能导致性能配置错误 - 您想要实现什么?
答案2
下载强调效用并在您想要测试的 CPU 屏蔽/集内运行它。类似的东西stress -c 12
可以在 12 个 CPU 上产生负载。它应该在您的发行版的存储库中可用。
我对你关于系统架构的陈述感到担忧。英特尔 X5680 CPU是一款 6 核 CPU,仅适用于 2 插槽配置。当然您有 4 个插槽吗?您是否有可能只是启用了超线程来获得 24 个内核top
?如果是这样,您在 cpuset 中看到的结果就会出现偏差。
您确实有 12 个处理器。如果这是任何类型的关键应用程序,并且您希望进行确定性处理,则应禁用超线程并使用物理 CPU 核心。这意味着您的 cpuset 也必须更小。