rhel +マイコンピュータでCPUを無効にする方法

rhel +マイコンピュータでCPUを無効にする方法

私たちは16のCPUを持つ物理的なLinuxマシンを持っています。

lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                16

私たちはこのマシンで14個のCPUを無効にしようとしているので、実際にはLinuxマシンには2つのCPUしかありません。

これを達成するために、私は次のことをしました。

echo 0 > /sys/devices/system/cpu/cpu15/online
echo 0 > /sys/devices/system/cpu/cpu14/online
echo 0 > /sys/devices/system/cpu/cpu13/online
echo 0 > /sys/devices/system/cpu/cpu12/online
echo 0 > /sys/devices/system/cpu/cpu1/online
echo 0 > /sys/devices/system/cpu/cpu11/online
echo 0 > /sys/devices/system/cpu/cpu10/online
echo 0 > /sys/devices/system/cpu/cpu9/online
echo 0 > /sys/devices/system/cpu/cpu8/online
echo 0 > /sys/devices/system/cpu/cpu7/online
echo 0 > /sys/devices/system/cpu/cpu6/online
echo 0 > /sys/devices/system/cpu/cpu5/online
echo 0 > /sys/devices/system/cpu/cpu4/online
echo 0 > /sys/devices/system/cpu/cpu5/online
echo 0 > /sys/devices/system/cpu/cpu4/online

次に実行します。mpstat

私達は得た

08:26:13 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
08:26:13 AM  all    0.34    0.00    0.09    0.04    0.00    0.00    0.00    0.00    0.00   99.53
08:26:13 AM    0    0.42    0.00    0.12    0.01    0.00    0.00    0.00    0.00    0.00   99.45
08:26:13 AM    1    0.37    0.00    0.10    0.01    0.00    0.00    0.00    0.00    0.00   99.52
08:26:13 AM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM    8    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM    9    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM   10    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM   11    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM   12    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM   13    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM   14    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM   15    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00

ここに画像の説明を入力してください。

CPU 2つだけがオンラインであることがわかります。

しかし、このアプローチが実際に機能しているかどうかはわかりません。無効になっている他の14個のCPUをPIDが無効にする方法などのアドバイスが必要です。

私のプログラムが14個のCPUを無効にし、プロセスが2個のCPUのみを使用しているかどうかを教えてください。

答え1

これはアプリケーションによって異なり、そうでない場合があります。

アプリケーションが単にAPIを使用して利用可能なコアの数をポーリングすると、Linuxカーネルがすべてのコアを返す可能性があるため、正しく機能しない可能性があります。

ただし、BIOSでCPUコアを無効にすると動作するはずです。これはBIOSの実装によって異なりますので、マザーボードのマニュアルを確認してください。

私があなたなら、この問題に別の方法でアクセスします。つまり、仮想マシンでアプリケーションを実行し、必要なコア数を割り当てます。これにより、ホストオペレーティングシステムは残りのコアを引き続き使用できます。

最後に、echoを14回実行する必要はありません。

bashのより簡単なバージョンは次のとおりです。

echo 0 | sudo tee /sys/devices/system/cpu/cpu{2..15}/online

最後に、HTのある1つではなく2つの物理コアを残します。 CPU トポロジを理解するには、次の手順を実行します。

lscpu -p

一般に、Linuxカーネルは最初に物理カーネルを見た後、HT / SMTカーネルを見ますが、それはいつもそうではありません。

関連情報