web-dev-qa-db-ja.com

bzip2 -dを並行して実行すると、CPUリソースが十分に活用されないのはなぜですか?

1000個の.bz2ファイルと48コアのマシンがあります。そこで、bzip2 -dを並行して実行して、解凍を高速化することにしました。しかし、私が見つけたのは、topでのCPUの使用率が非常に最適ではないということです。たとえば、それらのほとんどはステータスDです。それはなぜですか? awkコマンドを並行して実行すると、使用率は簡単に90%に達する可能性があります。

ls *.bz2  | xargs -P42 -n1 -I {} bash -c 'bzip2 -d {}'



top - 02:00:18 up 74 days, 18:44,  1 user,  load average: 43.48, 71.56, 98.47
Tasks: 518 total,   1 running, 517 sleeping,   0 stopped,   0 zombie
%Cpu(s): 16.1 us,  0.4 sy,  0.0 ni, 33.4 id, 50.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 26372707+total, 28146360 free,  4073868 used, 23150684+buff/cache
KiB Swap: 16777212 total,  9176276 free,  7600936 used. 25842281+avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 93025 xxx  20   0    7908   4208    524 D  22.5  0.0   0:48.88 bzip2
 93033 xxx  20   0    7908   4208    524 D  22.2  0.0   0:49.80 bzip2
 92999 xxx  20   0    7908   4208    524 D  21.9  0.0   0:48.03 bzip2
 93037 xxx  20   0    7908   4204    524 D  21.9  0.0   0:48.23 bzip2
 93028 xxx  20   0    7908   4208    524 D  21.5  0.0   0:50.01 bzip2
 93029 xxx  20   0    7908   4208    524 D  21.2  0.0   0:48.99 bzip2
 93010 xxx  20   0    7908   4208    524 D  20.9  0.0   0:48.67 bzip2
 93000 xxx  20   0    7908   4208    524 D  20.5  0.0   0:46.93 bzip2
 93017 xxx  20   0    7908   4208    524 D  20.5  0.0   0:49.94 bzip2
 93024 xxx  20   0    7908   4208    524 D  20.5  0.0   0:48.33 bzip2
 93012 xxx  20   0    7908   4204    524 D  20.2  0.0   0:50.15 bzip2
 93035 xxx  20   0    7908   4208    524 D  20.2  0.0   0:46.70 bzip2
 93030 xxx  20   0    7908   4208    524 D  19.9  0.0   0:49.31 bzip2
 93009 xxx  20   0    7908   4208    524 D  19.5  0.0   0:50.94 bzip2
 93036 xxx  20   0    7908   4208    524 D  19.5  0.0   0:49.81 bzip2
 93015 xxx  20   0    7908   4208    524 D  19.2  0.0   0:47.92 bzip2
 93018 xxx  20   0    7908   4208    524 D  19.2  0.0   0:46.80 bzip2
 93020 xxx  20   0    7908   4208    524 D  18.9  0.0   0:46.07 bzip2
 93022 xxx  20   0    7908   4208    524 D  18.9  0.0   0:48.09 bzip2
 93034 xxx  20   0    7908   4204    524 D  18.9  0.0   0:45.20 bzip2
 93001 xxx  20   0    7908   4204    524 D  18.5  0.0   0:46.34 bzip2
 93003 xxx  20   0    7908   4208    524 D  18.5  0.0   0:49.36 bzip2
 93007 xxx  20   0    7908   4208    524 D  18.5  0.0   0:40.25 bzip2
 93008 xxx  20   0    7908   4204    524 D  18.5  0.0   0:47.40 bzip2
 93016 xxx  20   0    7908   4208    524 D  18.5  0.0   0:49.45 bzip2
 93026 xxx  20   0    7908   4204    524 D  18.5  0.0   0:49.37 bzip2
 93011 xxx  20   0    7908   4208    524 D  18.2  0.0   0:46.10 bzip2
 93021 xxx  20   0    7908   4208    524 D  18.2  0.0   0:48.18 bzip2
 93031 xxx  20   0    7908   4208    524 D  17.9  0.0   0:47.79 bzip2
 93013 xxx  20   0    7908   4208    524 D  17.5  0.0   0:51.38 bzip2
 93014 xxx  20   0    7908   4208    524 D  17.2  0.0   0:48.84 bzip2
 93032 xxx  20   0    7908   4208    524 D  17.2  0.0   0:50.32 bzip2
 93038 xxx  20   0    7908   4208    524 D  17.2  0.0   0:49.15 bzip2
 93006 xxx  20   0    7908   4208    524 D  16.9  0.0   0:38.50 bzip2
 93027 xxx  20   0    7908   4208    524 D  16.9  0.0   0:44.81 bzip2
 93039 xxx  20   0    7908   4208    524 D  16.9  0.0   0:48.65 bzip2
 93004 xxx  20   0    7908   4208    524 D  16.6  0.0   0:39.21 bzip2
 93040 xxx  20   0    7908   4208    524 D  16.6  0.0   0:44.44 bzip2
 93002 xxx  20   0    7908   4208    524 D  16.2  0.0   0:38.31 bzip2
 93023 xxx  20   0    7908   4204    524 D  16.2  0.0   0:45.50 bzip2
 93019 xxx  20   0    7908   4208    524 D  15.6  0.0   0:46.01 bzip2
 93005 xxx  20   0    7908   4208    524 D  14.9  0.0   0:39.37 bzip2
1
John Jiang

Dは正式には「無停電スリープ」を意味しますが、実際にはディスクを意味します。ストレージが遅すぎて要求した負荷を処理できないため、これをこれ以上並列化することはできません。

CPUは確かに42スレッドのbzipを処理できますが、ディスクは追いつくことができません。

2
Michael Hampton