次のアプリケーションを起動できるスクリプト(.sh)があります。
#!/bin/sh
./application1 configuration1.cfg param1 param2 param3 &
sleep 2
./application2 configuration2.cfg param1 param2 param3 &
sleep 2
など
プロセスを開始するときにCPUアフィニティを割り当てる方法はありますか?
あとは本当にやりたかったです。 C ++ではプログラムでこれを行うことができますが、シェルが最善の方法のようです。
それでは、起動後に実際にそのCPU/コアに固定されているかどうかを確認できますか?
答え1
ユーティリティプログラムがありますが、taskset
util-linuxの一部であることは、この目的のためのものです。たとえば、
taskset -c 0-15 script
実行され、script
IDが0〜15のCPUのみを使用するように制限されます。
スクリプトが実際に正しいCPUで実行されるように制限されていることを確認するには、ファイルを表示します。ファイルには(ビットマップ、CPU 0が許可されている場合は最下位ビットが設定されます)、および(CPU IDリスト)/proc/<pid>/status
という項目が含まれています。 )。Cpus_allowed
Cpus_allowed_list
答え2
私自身も「学習経験」をしていますが、これが関連している可能性があります。
特定のCPUのバックグラウンドでbashスクリプトを実行するには、次のようにします。
taskset -c 1 ./myScript &
myScriptに次の行を含めます。
echo MyScript: $$\($BASHPID\) taskset -cp $BASHPID
$BASHPIDは私にとって新しいものです。 「現在の Bash プロセスのプロセス ID です。場合によっては $$ と異なる場合があります。」
個人的には、私は特定のCPUのバックグラウンドでbash機能を実行するのに苦労しています。
taskset -c 1 ./myFunction &
...提供:ワークセット:myFunctionを実行できません:対応するファイルまたはディレクトリがありません
数回の間違った起動後
(taskset -cp 1 $BASHPID;myFunction)&
…有望に見えますね。