我有一个计算密集型过程,需要在多核处理器上运行多次,但“top”并没有以有用的方式显示利用率或负载。
例如,假设我的任务在我的六核十二线程 SMT CPU 的单核上以单线程方式运行 1 分钟。如果我使用六个线程启动同一个任务六次,它仍然会在 1 分钟内完成,top 显示平均负载为 6.0,CPU 使用率为 50% us,id 为 50%。在 top 进程列表中,六个进程的 CPU 使用率都为 100%。如果我执行相同的操作,但启动 12 个线程,它会在 2 分钟内完成这 12 个任务,top 显示平均负载为 12.0,CPU 使用率为 100% us,id 为 0%,并且每个进程的 CPU 使用率都为 100%。
现在,6 线程和 12 线程的示例都以相同的满载速率进行处理,即每分钟完成 1/6 个作业,但为什么 top 显示 6 线程的情况有 50% 的空闲率,而事实并非如此?有没有更好的方法来确定 CPU 的实际负载?
这是在 Ubuntu 24.12 上的 Ryzen 5600X 处理器上运行的。
编辑:12 个任务的顶级输出:
top - 08:35:37 up 54 days, 20:49, 3 users, load average: 12.20, 6.70, 2.80
Tasks: 346 total, 13 running, 332 sleeping, 0 stopped, 1 zombie
%Cpu(s): 98.2 us, 1.7 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
MiB Mem : 64221.7 total, 1572.7 free, 4983.4 used, 58684.1 buff/cache
MiB Swap: 8192.0 total, 7863.7 free, 328.3 used. 59238.3 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2249765 user 20 0 126952 64132 51200 R 100.0 0.1 3:48.87 sonicLiquidFoam
2249759 user 20 0 127060 64220 51200 R 100.0 0.1 3:48.93 sonicLiquidFoam
2249757 user 20 0 126624 64064 51328 R 100.0 0.1 3:49.32 sonicLiquidFoam
2249761 user 20 0 128276 64868 50688 R 100.0 0.1 3:47.65 sonicLiquidFoam
2249762 user 20 0 127652 63688 50432 R 100.0 0.1 3:49.13 sonicLiquidFoam
2249755 user 20 0 128844 66128 51200 R 100.0 0.1 3:46.06 sonicLiquidFoam
2249766 user 20 0 126576 63952 51328 R 100.0 0.1 3:47.87 sonicLiquidFoam
2249764 user 20 0 126612 63824 51072 R 99.0 0.1 3:48.59 sonicLiquidFoam
2249760 user 20 0 126888 63972 51072 R 98.7 0.1 3:45.06 sonicLiquidFoam
2249758 user 20 0 127500 64860 51200 R 97.7 0.1 3:48.64 sonicLiquidFoam
2249763 user 20 0 127916 64944 51072 R 97.0 0.1 3:39.58 sonicLiquidFoam
2249756 user 20 0 126828 63948 51072 R 96.0 0.1 3:48.77 sonicLiquidFoam
对于 6 项任务:
top - 08:40:22 up 54 days, 20:53, 3 users, load average: 6.11, 6.67, 3.90
Tasks: 335 total, 7 running, 327 sleeping, 0 stopped, 1 zombie
%Cpu(s): 50.0 us, 1.0 sy, 0.0 ni, 49.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 64221.7 total, 1616.2 free, 4914.6 used, 58710.3 buff/cache
MiB Swap: 8192.0 total, 7863.7 free, 328.3 used. 59307.1 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2250032 user 20 0 127392 64676 51200 R 100.0 0.1 2:39.15 sonicLiquidFoam
2250027 user 20 0 126828 63096 50176 R 100.0 0.1 2:39.23 sonicLiquidFoam
2250028 user 20 0 127060 63260 50176 R 100.0 0.1 2:39.23 sonicLiquidFoam
2250029 user 20 0 128844 66124 51200 R 100.0 0.1 2:39.12 sonicLiquidFoam
2250030 user 20 0 128276 65508 51200 R 100.0 0.1 2:39.21 sonicLiquidFoam
2250031 user 20 0 126596 63808 51072 R 100.0 0.1 2:39.21 sonicLiquidFoam