我應該使用 cpu 使用率還是系統負載?
我用來
ffmpeg
將 H265 影片轉碼為 H264 流。從兩個攝像頭提取影片時,電腦似乎容量過剩。該機配備了 8 核
i7-7700T
. 我的問題是,我應該使用 CPU 使用率(460.7%、331.7%)還是平均負載來評估轉碼任務的 CPU 需求。
平均負載顯示以 1,5 和 15 分鐘為間隔執行和等待的程序數(以 5 秒幀為單位)
CPU 使用率為您提供特定程序的處理器使用情況。在您的情況下哪個更有意義。
ffmpeg
您可以對所有程序求和此值。如果要在特定時刻獲取整個系統的 CPU 使用率,可以使用如下命令:
vmstat 1 2
(獲取第二行,因為第一行是系統啟動時的平均值)
您應該使用平均負載來評估 CPU 需求。
要解釋 CPU 使用率和負載平均數,您應該考慮
- 系統中的物理核心總數(所有 CPU)
- 是否啟用超執行緒
- 在 Linux Load Average 中還包括處於不間斷睡眠狀態等待 I/O 的程序
- CPU 使用率和平均負載數解釋取決於邏輯核心數
- 您應該檢查每個核心 CPU 統計資訊以更準確。按
top
“1”表示每個核心統計數據,按“t”轉換圖表條。i7-7700T 有4 個物理核心,啟用 HT 後有8 個邏輯核心 https://ark.intel.com/content/www/us/en/ark/products/97122/intel-core-i77700t-processor-8m-cache -up-to-3-80-ghz.html
CPU 使用率,%
顯示使用率 - CPU 不空閒並執行由 OS 調度程序調度的任務的時間百分比。
每個核心最多可使用 100%,因此 8 個核心的最大使用容量為 800%。
因此,兩個 ffmpeg 程序以 460.7% + 331.7% = 792.4% 使用所有 8 個核心。
此行中的整個 CPU 統計資訊
%Cpu(s): 19.9 us, 0.7 sy, 78.1 ni, 1.1 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
這裡 19.9% 的使用者空間時間 + 78.1% 的 nice 時間 = 98% 的使用者空間程序的 CPU 使用率。
因此,所有使用者空間程序的 CPU 核心佔 98%,其中 79.2% 執行兩個 ffmpeg 程序。
由於轉碼是一項 CPU 密集型任務,因此您幾乎總是可以在任何 CPU 上獲得接近 100% 的使用率。
平均負載
是一段時間內執行的執行緒數 + 等待執行的執行緒數的平均值。
一個核心在一個時間片執行一個執行緒。
8 個核心可以在一個時間片上執行 8 個執行緒。
如果平均負載 > 邏輯核心數,則係統過載。
這意味著作業系統調度器由於核心繁忙而無法為某些執行緒分配下一個時間片,並將它們放入執行隊列中等待執行。
平均負載中的第二個數字 = 8 核系統上的 25.65 意味著:
- 在過去 5 分鐘內平均執行了 8 個執行緒
- 在過去 5 分鐘內,平均有 17.65 個執行緒在執行隊列中等待
因此系統在 17.65/8*100=220.6% 時過載。