Linux
不錯的水平不適用於Linux
我有一些高度浮點密集型程序執行很少的 I/O。一種稱為“xspec”,它計算數值模型並每秒將浮點結果返回給主程序(通過標準輸出)。它在 19 級很好。我有另一個簡單的過程“cpufloattest”,它只是在一個緊密的循環中進行數值計算。這不是很好。
我有一個禁用超執行緒的 4 核 i7 系統。我已經開始了每種類型的過程中的 4 個。為什麼 Linux 調度程序 (Linux 3.4.2) 沒有正確限制 niced 程序佔用的 CPU 時間?
Cpu (s): 56.2% us, 1.0% sy, 41.8% ni, 0.0% id, 0.0% wa, 0.9% hi, 0.1% si, 0.0% st 記憶體:總計 12297620k,已使用 12147472k,可用 150148k,831564k 緩衝區 交換:總計 2104508k,已使用 71172k,免費 2033336k,記憶體 4753956k PID 使用者 PR NI VIRT RES SHR S %CPU %MEM TIME+ 命令 32399 jss 20 0 44728 32m 772 R 62.7 0.3 4:17.93 cpufloattest 32400 jss 20 0 44728 32m 744 R 53.1 0.3 4:14.17 cpufloattest 32402 jss 20 0 44728 32m 744 R 51.1 0.3 4:14.09 cpufloattest 32398 jss 20 0 44728 32m 744 R 48.8 0.3 4:15.44 cpufloattest 3989 jss 39 19 1725m 690m 7744 R 44.1 5.8 1459:59 xspec 3981 jss 39 19 1725m 689m 7744 R 42.1 5.7 1459:34 xspec 3985 jss 39 19 1725m 689m 7744 R 42.1 5.7 1460:51 xspec 3993 jss 39 19 1725m 691m 7744 R 38.8 5.8 1458:24 xspec
如果我啟動 8 個 cpufloattest 程序,其中 4 個程序很好(即 4 個佔用大部分 CPU,4 個佔用很少的 CPU),調度程序會按照我的預期執行
我發現了導致這個問題的原因。這是由於 CFS 調度程序的“自動組”功能。如果我做
迴聲 0 > /proc/sys/kernel/sched_autogroup_enabled
然後一切都按照您的預期進行。當 nice 0 程序執行時,nice 19 程序的 CPU 使用率下降到接近零。
我將嘗試找出自動分組正在做什麼來打破我的案例並更新這個答案。
編輯…我在 IRC 上與一些核心人員聊天,他們只是說如果它不適用於我的工作量,我應該禁用它,並且它只是 Linus 喜歡的一個瘋狂的更新檔。我不確定為什麼自動分組不喜歡我的工作量,但這個答案適用於遇到類似問題的人。