我们有一个长时间运行的进程,它利用 OpenMP 通过在多个线程(每个核心一个)中完成的计算来饱和所有可用的 CPU。
我正在查看服务器上的 top(1),该程序在所有 24 个内核上运行。
正如人们所预料的那样,%CPU 列显示消耗 2380-2400% CPU 的进程。它已经不间断地运行了几个小时:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
27647 xxx 20 0 1416m 232m 11m R 2390.8 0.1 2324:59 pig
然而,平均负载仅在 9 到 11 之间波动:
top - 19:22:37 up 25 days, 5:35, 5 users, load average: 10.78, 10.24, 9.60
而我预计它也会徘徊在 24 或略低于 24。
%CPU 是否在骗我——进程实际上有一半以上的时间在执行 I/O,但仍报告为正在运行?或者平均负载计算不正确?
这是在 Linux、RHEL-6、内核 2.6.32-696.6.3 上...