Linux在线禁用CPU内核

时间:2019-11-20 08:53:19  来源:igfitidea点击:

在Linux中,如何在线动态禁用CPU核心?
正在运行的Linux系统上如何热插拔CPU?

Linux内核确实支持cpu-hotplug机制。用于在线替换有缺陷的部件,或者将CPU在不同分区间移动。
并非所有服务器都支持cpu热插拔,但是几乎所有服务器都可以支持在Linux操作系统上禁用或启用cpu内核。

查看系统中所有当前的CPU和内核数量

执行以下命令:

# cd /sys/devices/system/cpu
# ls -l

输出示例:

drwxr-xr-x. 5 root root    0 Dec 29 09:14 cpu0
drwxr-xr-x. 5 root root    0 Dec 29 09:14 cpu1
drwxr-xr-x. 2 root root    0 Dec 30 01:59 cpuidle

共有2个CPU核心
查看更详细信息:

# lscpu

输出示例:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 42
Model name:            Intel(R) Core(TM) i3-2350M CPU @ 2.30GHz
Stepping:              7
CPU MHz:               2294.795
BogoMIPS:              4589.59
Hypervisor vendor:     VMware
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              3072K
NUMA node0 CPU(s):     0,1
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt xsave avx hypervisor lahf_lm epb xsaveopt dtherm arat pln pts

可以看到

CPU(s): 2
Core(s) per socket: 2

如何逻辑上禁用cpu1?

在Linux系统上无法禁用CPU0。 另外某些体系结构可能对特定的CPU有一些特殊的依赖性。那样的话也是不能禁用的。

将cpu1设置为离线状态(禁用cpu1):

# echo 0 > /sys/devices/system/cpu/cpu1/online
# grep "processor" /proc/cpuinfo
# lscpu

可以看到离线Off-line的cpu有一个。

CPU(s):                2
On-line CPU(s) list:   0
Off-line CPU(s) list:  1
Thread(s) per core:    1
Core(s) per socket:    1

如何逻辑上启用cpu1(使CPU1在线)?

执行以下命令:

# echo 1 > /sys/devices/system/cpu/cpu1/online
# grep "processor" /proc/cpuinfo
# lscpu

操作之后,如果服务器支持热插拔,就可以把CPU移除更换。

如何验证cpu的在线和离线状态?

查看在线的cpu:

# cat /sys/devices/system/cpu/online

查看离线的cpu:

# cat /sys/devices/system/cpu/offline