3つのCPUコアを無効にして、プロセッサをシングルコアで実行したい。私はコマンドを使用しました:maxcpus=1
。しかし、この後、私はこのコマンドを実行しましたls /sys/devices/system/cpu
。それでもcpu0,cpu1,cpu2,cpu3
。
私も試しました:echo 0 > /sys/devices/system/cpu3/online
ですが、次のエラーが表示されます:no such file or directory
。
パトリックがコメントで示した のように、/sys
の下のパスが間違っていました。
echo 0 > /sys/devices/system/cpu/cpu3/online
cpu0
以外のすべてのCPUをオフにしたい場合:
for x in /sys/devices/system/cpu/cpu[1-9]*/online; do
echo 0 >"$x"
done
シェルプロンプトでmaxcpus=1
を入力しても効果はありません。より正確には、シェルで変数maxcpus
を値1
に設定しますが、他の効果はありません。ブート時にCPUの数を設定するには、maxcpus
を カーネルパラメータ として渡します。そのためには、ブートローダーの設定を変更する必要があります(U-Bootのカーネルコマンドラインを変更するなど)。
必ずしもコアをオフまたはdisableにする必要はありません。
cpusetsとtasksetを使用します
http://man7.org/linux/man-pages/man7/cpuset.7.html
Cpusetは、CPUとメモリノードのリストを定義します...
Cpusetファイルシステムは、カーネルのcpusetメカニズムへの疑似ファイルシステムインターフェイスであり、プロセスのプロセッサ配置とメモリ配置を制御するために使用されます。通常は/ dev/cpusetにマウントされます。
組み込みのcpusetsサポートでコンパイルされたカーネルを備えたシステムでは、すべてのプロセスがcpusetにアタッチされ、cpusetsは常に存在します。システムがcpusetsをサポートしている場合、ファイル/ proc/filesystemsにエントリnodev cpusetがあります。管理者は、cpusetファイルシステムをマウントすることにより(以下の「例」のセクションを参照)、システム上のcpusetを構成して、そのシステム上のプロセスのプロセッサとメモリの配置を制御できます。デフォルトでは、システムのcpuset構成が変更されていない場合、またはcpusetファイルシステムがマウントされていない場合でも、cpusetメカニズムは存在しますが、システムの動作に影響を与えません。
システムのCPUには、プロセスが実行できるすべての論理処理ユニットが含まれます。これには、パッケージ内の複数のプロセッサコアや、プロセッサコア内のハイパースレッドなどが含まれます。メモリノードには、メインメモリのすべての異なるバンクが含まれます。小規模なSMPシステムには通常、システムのすべてのメインメモリを含むメモリノードが1つだけありますが、NUMA(非均一メモリアクセス)システムには複数のメモリノードがあります。
要するに、6つのコアを持つ1つのCPUがある場合、CPUを構成し、1つのコアのみで構成されたcpusetでプロセスを起動します(例:コア#3)。並列プロセスの場合、すべて1つのコアに限定されるため、1つのコアのみが定義されている特定のcpusetで4つのプロセスを起動した場合、4つのプロセスのそれぞれがコア#3で25%のCPU使用率を取得します。
その上で、通常起こることはcpusetが次のように構成されていることです