我们有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] 删除。
我来说两句