web-dev-qa-db-ja.com

LinuxのクアッドコアプロセッサーでCPUコアを無効にする

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

14
user3818847

パトリックがコメントで示した のように、/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にする必要はありません。

cpusetstasksetを使用します

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が次のように構成されていることです

  • たとえば200以上のコアシステムでは、cpusetAはコア0..60であり、それらがどこにあっても、cpusetBはコア61..70です。 cpusetCはコア71..80です。ただし、管理者/アーキテクトは設定を選択します。
  • cpusetAは特定のユーザーまたは特定のソフトウェアプログラム、あるいはその両方に割り当てられます。 cpusetBは異なるユーザー/プログラムに割り当てられます。等々。
  • ユーザーは、特定のcpuset内で[〜#〜] n [〜#〜]コアを要求するジョブ(プロセス)を起動し、複数(並列)になりましたプロセスは、指定されたcpusetに制限されます。そして、それらの[〜#〜] n [〜#〜]が特定のcpusetに限定されている場合、それらの各プロセスはを使用する/使用する必要がありますプロセッサアフィニティまたはcpuアフィニティ。これらの並列プロセスは、cpuset内の異なるコアでスラッシュしません。

また: https://linux.die.net/man/1/taskset

1
ron