Linux 下的 CPU 和 内存热插拔

@2013-11-25 新版功能: 创建

在 Linux 作为虚拟机的 Guest 系统运行时,如果内核启用了 CPU 和内存的热插拔支持, 则可以在虚拟机的 Host 环境下动态调整 CPU 和 内存的配置。对 VMware ESXi, 在虚拟机配置的选项里里需要打开 “内存/CPU 热插拔”选项,之后即可以在 Guest 系统运行时调整相关配置。实际使用时随宿主机和 Guest 的配置不同会遇到不同的限制 条件(如只能增加而不能减少内存,...),以实际使用时的情况为准。

内核的相关的说明文档请参考 Documentation/cpu-hotplug.txtDocumentation/memory-hotplug.txt

CPU 的热插拔通过 /sys/devices/system/cpu/cpuX/online 来控制。其中 X 对应第 X 个 CPU。通过写入 0 或 1 即可控制启用还是禁用该 CPU。 例如

echo 0 > /sys/devices/system/cpu/cpuX/online

禁用第 X 个CPU。

内存的热插拔则对应文件 /sys/devices/system/memory/memory[number]/state ,通过 写入 online/offline 来控制。例如

echo online > /sys/devices/system/memory/memory[number]/state

启用相应的内存区域。

find /sys/devices/system/memory -name state -exec bash -c 'echo online > {}' \;

可以用来启用所有可用的内存区域。