GNU Parallelはbashスクリプトを毎秒25,000回実行して並列に処理できますか?

GNU Parallelはbashスクリプトを毎秒25,000回実行して並列に処理できますか?

Webサーバーの応答をテストしています。 15個のCPUと30GBのRAMを搭載したコンピュータがあります。このコンピュータで次のbashコマンドを毎秒25,000回実行するにはどうすればよいですか?

 curl -Z url="mywebserver.com" --data "{JSON DATA}"

私は毎秒200回のシェルを実行するより悪いことをしました。

 seq 25000 | parallel -j0 myshell

答え1

単一のGNU並列ジョブ実行によるCPUオーバーヘッドは約1〜10ミリ秒です。これは部分的にPerlで書かれているからですが、ほとんどは後ろから行われている広範なセキュリティテストによるものです。

したがって、GNU Parallelを使用して1秒あたり平均25000のタスクを実行するには、次のようにします。

seq 1000000 | parallel -n100 --pipe --round-robin -I ,, parallel myjob {}

これを行うには約250個のコアが必要です。

parallel外部から呼び出すときに代替文字列を置き換える必要があるparallel状況が発生します。orを外部で使用すると、慣れているように内部で使用できます。)parallel-I dummy-I ,,parallel{}parallel

重要な要約:GNU Parallelは、ランタイムが重要な非常に短い作業には適していません。

xargsここに適切ないくつかのセキュリティテストがあります。

myjob() {
  curl -Z url="mywebserver.com" --data "{JSON DATA}"
}
export -f myjob
seq 25000 | parallel --pipe --block 100 --roundrobin xargs -n1 -P0 bash -c myjob >/dev/null

私の48コアサーバーでの実行時間は2.6秒でした。したがって、必要な1秒にまだ達していません。

関連情報