不同top的CPU模式如何相互對應?
我正在使用 NumPy 和 Python 的 3 池多處理在具有 4 個 Intel Xeon E5-4620 的伺服器上執行一些矩陣乘法,總共 64 個核心。
Solaris 模式下的頂部顯示(the):
top - 16:00:55 up 7 days, 16:42, 2 users, load average: 292.74, 295.09, 297.44 Tasks: 704 total, 8 running, 696 sleeping, 0 stopped, 0 zombie %Cpu(s): 76.6 us, 23.4 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 52830358+total, 52306323+free, 3022900 used, 2217456 buff/cache KiB Swap: 6553596 total, 6553596 free, 0 used. 52376304+avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 75266 splitti+ 20 0 3050540 294912 10808 R 25.0 0.1 27649:20 python3 75264 splitti+ 20 0 3050028 292448 10936 R 21.7 0.1 27750:10 python3 75286 splitti+ 20 0 3006504 325704 10668 R 20.3 0.1 26831:30 python3 75598 splitti+ 20 0 3006820 326264 11164 R 20.2 0.1 27221:56 python3 75288 splitti+ 20 0 3006504 325696 10660 R 10.5 0.1 26351:29 python3 75265 splitti+ 20 0 3050028 294292 10728 R 1.6 0.1 22889:05 python3 ...
在 Irix 模式下:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 75266 splitti+ 20 0 3050028 292292 10808 R 1494 0.1 27712:54 python3 75264 splitti+ 20 0 3050540 295028 10936 R 1390 0.1 27803:50 python3 75288 splitti+ 20 0 3006504 325696 10660 R 1305 0.1 26395:29 python3 75598 splitti+ 20 0 3006820 326112 11164 R 1240 0.1 27275:08 python3 75286 splitti+ 20 0 3006504 325628 10668 R 752.6 0.1 26874:41 python3 75265 splitti+ 20 0 3050028 294292 10728 R 153.9 0.1 22893:03 python3 ...
在每個核心模式下:
top - 16:03:40 up 7 days, 16:45, 2 users, load average: 299.56, 297.12, 297.83 Tasks: 704 total, 8 running, 696 sleeping, 0 stopped, 0 zombie %Cpu0 : 76.9 us, 23.1 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu1 : 71.9 us, 28.1 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu2 : 70.4 us, 29.6 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu3 : 74.6 us, 25.4 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu4 : 73.9 us, 26.1 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu5 : 79.9 us, 20.1 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu6 : 80.9 us, 19.1 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu7 : 78.9 us, 21.1 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu8 : 80.3 us, 19.7 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu9 : 78.9 us, 21.1 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu10 : 80.2 us, 19.8 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st ...
問題: 這些價值觀是如何联繫起來的?
如果 top 顯示每個核心使用率約為 80%,每個程序 Solaris 模式下顯示 25%,那麼 50% 的核心使用率在哪裡消失了?這 9 個 Python 程序(我只粘貼了 6 個)如何使用所有 64 個核心?
top
手冊頁對 CPU 百分比的描述如下:自上次螢幕更新以來任務佔用的 CPU 時間份額,以佔總 CPU 時間的百分比表示。
在真正的 SMP 環境中,如果一個程序是多執行緒的,並且 top 沒有線上程模式下執行,則可能會報告大於 100% 的數量。您可以使用“H”互動命令切換執行緒模式。
同樣對於多處理器環境,如果 Irix 模式關閉,top 將在 Solaris 模式下執行,其中任務的 cpu 使用率將除以 CPU 總數。您可以使用“I”互動命令切換 Irix/Solaris 模式。
在 Solaris 模式下,百分比顯示每個程序正在使用多少總 CPU 容量;因此,標識符為 75266 的程序在上一個刷新周期中使用了所有 CPU 容量的 25%。在 Irix 模式下,百分比顯示每個程序正在使用一個CPU“單元”的多少;因此,標識符為 75266 的程序在上一個刷新周期中使用了相當於 14.94 個核心的 CPU 時間(推測它正在執行 15 個或更多執行緒,這解釋了九個程序如何使用超過九個核心)。
您可以通過除以或乘以執行單元的數量從一種類型的計算轉到另一種類型:15 幾乎是 64 的 25%(足夠接近以匹配,因為您的螢幕“截圖”不是相同的刷新周期)。