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

耶尔

我们有16 cpus的物理Linux机器

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

我们想在那台机器上禁用14 cpus,所以实际上就像我们的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个cpus

阿尔特姆·塔什基诺夫

这可能会或可能不会取决于应用程序。

如果应用程序仅使用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内核,但我不确定情况总是如此。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章