Rhel
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,所以它實際上就像我們有隻有 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 核心,但我不確定是否總是如此。