限られたCPUコアのみで並列実行

限られたCPUコアのみで並列実行

12 コアのサーバーがあり、ファイルを入力引数として受け取り、それを処理するスクリプトを実行したいと考えています。8 コアのみを使用して、8 つのコアで一度に 8 つのファイルを並列処理し、1 つの処理が完了したら次の処理にジャンプしたいと考えています。

私は次のようにやってみましたxargs:

ls /data/paths/ | grep new | xargs -i -P 8 -n 1 bash main.sh {}

しかし、コアを見ると、スナップショットに CPU 使用率が添付されています。ここに画像の説明を入力してください

次のように並列で実行してみました。

ls /data/paths/ | grep new | parallel -j 8 --no-notice bash main.sh {}

私の条件は、CPU を 8 個までに制限することです。

編集:

実行すると、ps -ef | grep main.sh8 個ではなく 11 ~ 12 個のプロセスが表示されます。

答え1

使用できますtasksetプロセスの CPU アフィニティを設定します。次のコマンドを実行すると、xargsコマンドが最初の 8 つの仮想 CPU コアのみを使用するようになります。

ls /data/paths/ | grep new | taskset -c 0-7 xargs -i -P 8 -n 1 bash main.sh {}

注意してくださいマンタスクセット:

プロセスの CPU アフィニティを変更するには、ユーザーは CAP_SYS_NICE を所有している必要があります。

関連情報