Linux

GNU 並行沒有充分利用我的 CPU

  • February 13, 2017

我在我的 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-workaround

cat myinput | parallel --pipe -N 100 --round-robin -j50 parallel -j100 your_prg

這樣,您將擁有 50 個 GNU Parallel,每個每秒可以產生 100 個作業。

引用自:https://serverfault.com/questions/779935