Linux热插拔CPU并在运行时禁用CPU核心
我想在正在运行的系统上动态启用或禁用CPU。如何在正在运行的Linux系统上热插拔CPU?如何在运行时在Linux操作系统上禁用cpu核心? Linux内核确实支持cpu-hotplug机制。您可以启用或禁用CPU或CPU核心,而无需重新引导系统。 CPU热插拔不仅可以用来替换有缺陷的组件,还可以在其他情况下应用,以提高系统的生产率。例如,在运行多个Linux分区的单个系统上,随着工作负载的变化,能够在不重新启动或中断工作负载的情况下,根据需要将CPU从一个分区移动到另一个分区将非常有用。 这称为动态分区。
其他应用程序包括即时按需扩容,其中系统中存在额外的CPU,但尚未激活。
这对于预测增长并因此需要更多计算能力但在购买时没有能力负担的客户而言很有用。
请注意,并非所有服务器都支持cpu热插拔,但是几乎所有服务器都可以支持在Linux操作系统上禁用或启用cpu核心。
有几个OEMS也支持可热插拔的NUMA硬件,其中物理节点的插入和移除要求支持CPU热插拔。
本教程将说明如何在Linux上热插拔CPU和禁用/启用内核。
列出系统中所有当前的cpus和核心
执行以下命令:
# cd /sys/devices/system/cpu # ls -l
输出示例:
total 0 drwxr-xr-x 4 root root 0 Apr 2 12:03 cpu0 drwxr-xr-x 4 root root 0 Feb 15 07:06 cpu1 drwxr-xr-x 4 root root 0 Feb 15 07:06 cpu2 drwxr-xr-x 4 root root 0 Feb 15 07:06 cpu3 drwxr-xr-x 4 root root 0 Feb 15 07:06 cpu4 drwxr-xr-x 4 root root 0 Feb 15 07:06 cpu5 drwxr-xr-x 4 root root 0 Feb 15 07:06 cpu6 drwxr-xr-x 4 root root 0 Feb 15 07:06 cpu7 -rw-r--r-- 1 root root 4096 Apr 2 12:03 sched_mc_power_savings
我有从逻辑上从cpu0到cpu7总共有8个核心cpu。
要获得更多人类可读的格式,请尝试:
# lscpu
输出示例:
Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 32 On-line CPU(s) list: 0-31 Thread(s) per core: 2 Core(s) per socket: 8 Socket(s): 2 NUMA node(s): 2 Vendor ID: GenuineIntel CPU family: 6 Model: 45 Stepping: 7 CPU MHz: 2000.209 BogoMIPS: 4001.65 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 20480K NUMA node0 CPU(s): 0-7,16-23 NUMA node1 CPU(s): 8-15,24-31
在每个目录下,您会找到一个联机文件,该文件是逻辑上使处理器联机/脱机的控制文件。
如何逻辑上关闭(离线)cpu#6?
警告:在Linux系统上无法禁用CPU0,即不要尝试使cpu0脱机。
某些体系结构可能对特定的CPU有一些特殊的依赖性。
例如,在IA64平台中,我们可以将平台中断发送给OS。
也称为平台错误中断(CPEI)。
在当前的ACPI规范中,我们没有办法更改目标CPU。
因此,如果当前的ACPI版本不支持这种重定向,我们通过使其不可移动来禁用该CPU。
在这种情况下,您还会注意到cpu0下缺少在线文件。
执行以下命令:
# echo 0 > /sys/devices/system/cpu/cpu6/online # grep "processor" /proc/cpuinfo
如何逻辑上打开(在线)cpu#6?
执行以下命令:
# echo 1 > /sys/devices/system/cpu/cpu6/online # grep "processor" /proc/cpuinfo
如何在多核服务器上启用和禁用CPU核
完成后,如果您的BIOS和服务器供应商支持这种操作,则实际上可以删除CPU。
如何验证cpu在线和离线?
执行以下cat命令以查看在线的cpus列表:
# cat /sys/devices/system/cpu/online
要查看所有脱机cpus的列表,请运行:
# cat /sys/devices/system/cpu/offline