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


14

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


maxcpus=1 コマンドをどこに置くかは不明です。その文字列をgrub.cfg起動オプションとして入れましたか?(コメントで答えるのではなく、質問を更新してください)。
アントン14

私は、Linux上のOS.IフリースケールIMx6 sabreautoボードは、端末エミュレータ「gtkterm」上でコマンドを実行し使用しています
user3818847

このコマンドecho 0> / sys / devices / system / cpu3 / onlineを使用すると、cpu3のシャットダウンが表示されます。今、私が欲しいものを知って、私は効果への変更のためにシステムを再起動する必要があり、であるか、私は再起動せずに続けることができます
user3818847

知る限りでは、カーネルのパラメーターとしてmaxcpus = 1を指定する必要があります(つまり、grubにいるとき)。「/ etc / defaults / grub」を編集してカーネルパラメーターに追加し、「update-grub」を実行して再起動します。これにより、物事が永続的になります。つまり、Linuxの起動時にCPUが1つだけです。
アントン14

2
@ user3818847どのディストリビューションを使用していますか?ブートパラメータの変更(渡すmaxcpus=1)は、ディストリビューションによって異なります。また、/sysあなたが持っているパスは単に間違ったものであり、正しいパスは/sys/devices/system/cpu/cpu3/onlineです。
パトリック14

回答:


28

パトリック・コメントで示されており、あなたは下のパスを得た/sys間違いました。

echo 0 > /sys/devices/system/cpu/cpu3/online

以下を除くすべてのCPUをオフにしたい場合cpu0

for x in /sys/devices/system/cpu/cpu[1-9]*/online; do
  echo 0 >"$x"
done

タイピングmaxcpus=1シェルプロンプトでは効果がありません。より正確には、変数maxcpus1そのシェル内の値に設定しますが、他の効果はありません。カーネルパラメータmaxcpusとして渡すことで、ブート時にCPUの数を設定できます。そのためには、ブートローダーの設定を変更する必要があります(たとえば、U-Bootでカーネルコマンドラインを変更するため)。


ご提案ありがとうございます。それはあなたが提案するコマンドで働いていた
user3818847

これは少なくともカーネル固有のものです。カーネル3.6.6を実行していますが、そのようなファイルはありません。代わりに、すべてのコアを制御するために単一のファイル/sys/devices/system/cpu/online./offlineファイルを使用します。
ダニエルグリスコム

@Gilles- coreオンとオフを切り替えるのにどれくらいの時間がかかるかを知る方法はありますか?
チェタンアービンドパティル

@ChetanArvindPatil時間それ。関係するコードがまだL2キャッシュにない場合、およびコアをオフにする時間までに、RAMアクセスが時間を支配すると思いますが、CPUとOSに大きく依存します。
ジル「SO-悪であるのをやめる」

1
@Xofoカーネルがコアをオフに切り替えると、そのコアはカーネルコードを実行しているため、その特定のコアでスレッドはスケジュールされません。コアがオフになると、スレッドはそのコアでスケジュールされなくなります。スレッドのアフィニティにより、スレッドがすべてオフになっているコアのセットに制限されている場合、どうなるかわかりません。
ジル「SO-悪であるのをやめる」

1

必ずしもコアをオフまたは無効にする必要はありません。

cpusetstasksetを使用します

http://man7.org/linux/man-pages/man7/cpuset.7.html

cpusetは、CPUとメモリノードのリストを定義します...

cpusetファイルシステムは、カーネルcpusetメカニズムへの擬似ファイルシステムインターフェイスであり、プロセスのプロセッサ配置とメモリ配置を制御するために使用されます。通常、/ dev / cpusetにマウントされます。

cpusetの組み込みサポートでコンパイルされたカーネルを備えたシステムでは、すべてのプロセスがcpusetに接続され、cpusetは常に存在します。システムがcpusetsをサポートしている場合、ファイル/ proc / filesystemsにエントリnodev cpusetがあります。cpusetファイルシステムをマウントすることにより(下の「使用例」セクションを参照)、管理者はシステム上のcpusetを構成して、そのシステム上のプロセスのプロセッサーとメモリーの配置を制御できます。デフォルトでは、システム上のcpuset構成が変更されていない場合、またはcpusetファイルシステムがマウントされていない場合、cpusetメカニズムは存在しますが、システムの動作には影響しません。

システムのCPUには、プロセス内で実行可能なすべての論理処理ユニットが含まれます。これには、パッケージ内の複数のプロセッサーコアや、プロセッサーコア内のハイパースレッドが含まれます。メモリノードには、メインメモリのすべての個別のバンクが含まれます。小型およびSMPシステムには通常、システムのすべてのメインメモリを含む1つのメモリノードしかありませんが、NUMA(非均一メモリアクセス)システムには複数のメモリノードがあります。

つまり、6個のコアを持つ1個のCPUがある場合、cpusetを構成し、1つのコア(たとえばコア#3)のみで構成されたcpusetでプロセスを起動します。並列プロセスである場合、すべて1つのコアに限定されるため、1つのコアのみが定義されている特定のcpusetで4つのプロセスを起動した場合、4つのプロセスはそれぞれコア#3で25%のCPU使用率を取得します。

それに基づいて、通常起こることは、cpusetが次のように構成されていることです。

  • たとえば、200以上のコアシステムでは、cpusetAはコア0..60であり、cpusetBはコア61..70です。cpusetCはコア71..80です。ただし、管理者/アーキテクトは構成を選択します。
  • cpusetAは、特定のユーザーおよび/または特定のソフトウェアプログラムに割り当てられます。cpusetBは異なるユーザー/プログラムに割り当てられます。等々。
  • ユーザーが特定のcpuset内でN個のコアを要求するジョブ(プロセス)を起動すると、それらの複数(並列)プロセスはその特定のcpusetに限定されます。また、特定のcpusetに限定されたN個の並列では、これらのプロセスのそれぞれがプロセッサアフィニティまたはCPUアフィニティを使用するため、これらの並列プロセスはcpuset内の異なるコアでスラッシングしません。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.