Rhel

rhel + 如何在我的機器上禁用 CPU

  • February 24, 2021

我們有 16 個 CPU 的物理 Linux 機器

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

我們想在那台機器上禁用 14 個 cpu,所以它實際上就像我們有隻有 2 個 cpu 的 linux 機器

為了實現這一點,我做了以下

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

在此處輸入圖像描述

我們可以看到只有 2 個 cpu 線上

但我不確定這種方法是否真的有效,我需要建議例如如何確保任何 PID 不會使用其他 14 個被禁用的 cpu?

讓我知道我的程序是否禁用了 14 個 cpu,並且程序將只使用 2 個 cpu

這可能取決於應用程序,也可能不取決於應用程序。

如果應用程序只是使用 API 來輪詢可用核心的數量,它可能無法工作,因為 Linux 核心可能會返回所有核心。

但是,必須在 BIOS 中禁用 CPU 核心 - 這取決於您的 BIOS 實施,因此請查閱您的主機板文件。

如果我是你,我會以不同的方式處理這個問題:我會在 VM 中執行應用程序並為其分配所需數量的核心。這樣,您的主機作業系統仍將能夠使用剩餘的核心。

最後,您不需要執行 echo 14 次。

這是 bash 的一個更簡單的版本:

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

最後,請確保您使用 HT 保留兩個物理核心而不是單個核心。要了解您的 CPU 拓撲,請執行:

lscpu -p

通常 Linux 核心首先看到物理核心,然後是 HT/SMT 核心,但我不確定是否總是如此。

引用自:https://unix.stackexchange.com/questions/636130