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

在此输入图像描述

我们可以看到只有2个cpu在线

但我不确定这种方法是否真的有效,我需要建议,例如如何确保任何 PID 不会使用其他被禁用的 14 个 cpu?

让我知道我的程序是否禁用 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 的核心。要了解您的 CPU 拓扑,请运行:

lscpu -p

通常,Linux 内核首先看到物理内核,然后是 HT/SMT 内核,但我不确定情况是否总是如此。

相关内容