Linux
GNU 並行沒有充分利用我的 CPU
我在我的 36 核伺服器(EC2 c4.8xlarge/Amazon Linux)上執行這樣的命令。
find . -type f | parallel -j 36 mycommand
要處理的文件數量約為 1,000,000 個,需要幾十分鐘。它應該同時執行 36 個程序。但是,從 的結果來看
top
,最多大約有 10 個程序,並且 70% 是空閒的。ps
顯示更多程序,但大多數已失效。我猜是因為每個都
mycommand
完成得太快了,parallel
無法趕上產生新程序的速度。所以我試圖parallel --nice 20
為自己分配更多的 CPU 時間parallel
,但這沒有用。有沒有人有改善這個的想法?
$ parallel --version GNU parallel 20151022
要處理的文件數量約為 1,000,000 個,需要幾十分鐘。
所以你每秒執行大約 600 個作業。單個 GNU Parallel 作業的成本大約為 2-5 毫秒,因此當您每秒獲得超過 200 個作業時,如果不進行調整,GNU Parallel 將不會表現得更好。
調整是有更多
parallel
的並行產生工作。來自https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Running-more-than-250-jobs-workaroundcat myinput | parallel --pipe -N 100 --round-robin -j50 parallel -j100 your_prg
這樣,您將擁有 50 個 GNU Parallel,每個每秒可以產生 100 個作業。