私の具体的なシナリオは次のとおりです。特定のcpusetでDockerコンテナーを起動します。
docker run --cpuset-cpus="0-2" # ...
そのコンテナー内で、エントリポイントとしてシェルスクリプトを実行し、そのシェルスクリプトはある時点でmake
を実行します。良い仕事(-j
)がいくつになるか知りたいのですが。もちろん、割り当てられたCPUの数を環境に渡すこともできますが、それを自動的に検出する方法がはるかに望ましいでしょう。
taskset -c -p $$
またはcat /proc/self/status | grep Cpus_allowed_list
を使用して現在のプロセスのCpus_allowed
を取得できることはわかっていますが、許可されているCPUの実際の数を取得する方法がわかりません。これらのコマンドの出力を解析したり、Cpus_allowed
マスクをいじったりすることは避けたいのですが、オプションがない場合はそれを行います。
nproc
シェルスクリプトツールを使用できます。
したがって、問題のmakeコマンドラインでは-j$(nproc)
になります。