我在 Intel Core 2 Duo CPU 上运行了三个进程。通过观察“top”的输出和 CPU 负载图(由 MRTG 绘制,通过 SNMP 收集数据),我可以看到 CPU 负载从未超过 50%,而且,在一天中的大部分时间里,当这些进程繁忙时,CPU 负载的上限为 50%。我的意思是,CPU 负载在早上增长到 50%,并一直保持到深夜。
我的第一个想法是只有一个核心被 100% 使用,因此两个 CPU 各占 50%。但是,由于三进程正在运行,从“top”中我可以看到两个核心都在加载,所以情况并非如此。schedtool 显示这三个进程的 CPU 亲和力默认为 0x03,允许它们使用两个核心。如果我强制一个进程使用一个核心(schedtool -a 0x01),另外两个进程使用第二个核心(schedtool -a 0x02),累计使用率将超过 50%。
为什么三个进程似乎只占用了两个核心的 50%?为什么强制它们使用不同的 CPU 会导致使用率更高?有什么提示吗?
有问题的 PS 进程是反恐精英服务器。
答案1
有了 CPU 亲和力,操作系统可能会避免一些上下文切换,从而导致更高的 CPU 使用率。除非您有一些较高的网络或磁盘 IO,否则我怀疑这种收益不会很大。
此外,top 会汇总多个核心的数据,我曾见过奇怪的舍入/数学错误。在 top 中,尝试查看每个核心(在 top 中点击 1)。这将让您更好地了解每个 CPU 的使用情况。
来自男人
自上次屏幕更新以来,任务所占的 CPU 时间份额,以占总 CPU 时间的百分比表示。在真正的 SMP 环境中,如果“Irix 模式”关闭,top 将以“Solaris 模式”运行,其中任务的 CPU 使用率将除以 CPU 总数。您可以使用“I”交互命令切换“Irix/Solaris”模式。
可能需要使用 sysstat 来查看更多详细的 CPU 指标。mpstat 命令将在这里为您提供帮助:
mpstat -P ALL
01:06:12 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
01:06:12 PM all 0.06 0.00 0.02 1.84 0.00 0.00 0.03 98.05 96.39
01:06:12 PM 0 0.06 0.00 0.02 1.84 0.00 0.00 0.02 98.05 50.98
01:06:12 PM 1 0.58 0.00 0.67 1.81 0.00 0.00 4.10 92.85 50.98
01:06:12 PM 2 0.35 0.00 0.73 1.85 0.00 0.00 4.10 92.98 50.98
01:06:12 PM 3 0.12 0.00 0.38 1.06 0.00 0.00 4.09 94.35 50.98
将吐出所有核心。