Linux热插拔CPU并在运行时禁用CPU核心

时间:2020-01-09 14:16:14  来源:igfitidea点击:

我想在正在运行的系统上动态启用或禁用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