私たちは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カーネルを見ますが、それはいつもそうではありません。