GNU/Linux >> Linux の 問題 >  >> Linux

1 つの CPU を無効にする方法

いくつかのテストを行った後、以下のような結果が得られました:

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

4 番目の CPU を無効にします。

「4 番目の CPU を無効にする」とは、以降のプロセスが 4 番目の CPU に割り当てられなくなることを意味します。つまり、「4 番目の CPU を無効にする」前に 4 番目の CPU に配置されていたプロセスは、CPU を無効にしている間、CPU から移動されません。

0、1、2、3 の 4 つの CPU があるとします。つまり、次のことができます。

echo 0 > /sys/devices/system/cpu/cpu1/online
echo 0 > /sys/devices/system/cpu/cpu2/online
echo 0 > /sys/devices/system/cpu/cpu3/online
./MyShell.sh

./MyShell.sh を強制する CPU0 に割り当てられます。

ちなみに、再起動するとすべての CPU が自動的に有効になります。


@Yvesの回答に加えて、実際には isolcpus を使用できます カーネル パラメータ

Debian または Ubuntu で 4 番目の CPU/コア (CPU 3) を無効にするには:

/etc/default/grubisolcpus=3 を追加 GRUB_CMDLINE_LINUX_DEFAULT

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=3"

実行

sudo update-grub

サーバーを再起動します。

<ブロック引用>

isolcpus — カーネル スケジューラから CPU を分離します。

概要 isolcpus=cpu_number [, cpu_number ,...]

説明 cpu_numbervalues で定義されているように、指定された CPU を一般的なカーネル SMP バランシングおよびスケジュール管理から削除します。プロセスを「分離された」CPU に移動したり、分離したりする唯一の方法は、CPU アフィニティ syscall を使用することです。 cpu_number は 0 から始まるため、最大値はシステム上の CPU の数より 1 少ない値です。

このオプションは、CPU を分離するための推奨される方法です。システム内のすべてのタスクの CPU マスクを手動で設定すると、問題が発生したり、ロード バランサのパフォーマンスが最適化されないことがあります。

興味深いことに、このカーネル パラメータを使用すると、後で CPU アフィニティを 1 つのプロセスに使用したり、プロセスを CPU に固定したりして、その CPU で実行中のユーザー プロセスがなくなるように、CPU を確保できます。

さらに、非常に負荷の高い特定のプロセスが独自の CPU で動作することを保証することで、サーバーをより安定させることもできます。このセットアップに気付く前に、Meru が Linux ベースのコントローラーでそれを行っているのを見たことがあります。

プロセスを 4 番目の CPU (CPU 3) に割り当てる関連コマンドは次のとおりです。

sudo taskset -cp PID
<ブロック引用>

taskset 指定された PID で実行中のプロセスの CPU アフィニティを設定または取得するか、指定された CPU アフィニティで新しい COMMAND を起動するために使用されます。 CPU アフィニティは、プロセスをシステム上の特定の CPU セットに「結合」するスケジューラ プロパティです。 Linux スケジューラは指定された CPU アフィニティを尊重し、プロセスは他の CPU では実行されません。Linux スケジューラは自然な CPU アフィニティもサポートすることに注意してください。したがって、特定の CPUaffinity を強制することは、特定のアプリケーションでのみ有効です。


まとめ

この質問にはいくつかの手法が適用されます。

isolcpus = 4 を設定 grub と再起動では、ユーザー ランド プロセスに対して 5 番目の CPU/CPU 4 を永久に無効にすることができます。

echo 0 > /sys/devices/system/cpu/cpu4/online 5 番目の CPU/CPU 4 を無効にします。これは、既に割り当てられているプロセスに対して引き続き機能しますが、新しいプロセスは CPU 4 に割り当てられなくなります。

taskset -c 3 ./MyShell.sh MyShell.sh を強制します 4 番目の CPU/CPU 3 に割り当てられますが、isolcpus がそれを除外していない場合、4 番目の CPU は他のユーザー ランド プロセスを受け入れることができます。

PS。余談ですが、isolcpus を使用した私の最良の例 /taskset フィールドでは、非常に忙しいの SSL フロントエンドでした。 Ansible/ssh もう私をリモートで入れません。

上記で説明した手法を適用したところ、それ以来、非常に安定した方法で動作し続けました.


Linux
  1. CentOSでSELinuxを無効にする方法は?

  2. CentOS / RHEL で CPU を有効/無効にする方法 (CPU 数の制限)

  3. CentOS / RHEL 6:IPv6 を無効にする方法

  1. CPU使用率を取得する方法

  2. 画面上の通知を無効にする方法 -D -R

  3. Linux でプロセスを 1 つの CPU コアに制限する方法は?

  1. SELinuxを一時的または永続的に無効にする方法

  2. NGINXでETagを無効にする方法

  3. crontab -l ですべてを無効にする方法は?