CPU hotplug Support in Linux(tm) Kernel
Maintainers:
CPU Hotplug Core:
Rusty Russell <rusty@rustcorp.com.au>
Srivatsa Vaddagiri <vatsa@in.ibm.com>
i386:
Zwane Mwaikambo <zwane@arm.linux.org.uk>
ppc64:
Nathan Lynch <nathanl@austin.ibm.com>
Joel Schopp <jschopp@austin.ibm.com>
ia64/x86_64:
Ashok Raj <ashok.raj@intel.com>
s390:
Heiko Carstens <heiko.carstens@de.ibm.com>
Authors: Ashok Raj <ashok.raj@intel.com>
Lots of feedback: Nathan Lynch <nathanl@austin.ibm.com>,
Joel Schopp jschopp@austin.ibm.com
翻译: Arethe Qin
引言
系统体系结构上的现代高级特性使处理器具备了错误报告与错误更正的能力。CPU体系结构支持分区,这使得单个CPU的计算资源也能够满足虚拟机的需要。一些OEM已经支持了NUMA硬件的热插拔,物理节点的插入与移除需要处理器热插拔技术的支持。
这种高级特性需要内核在必要时能移除正在使用的CPU.[provisioning reasons?]比如,为了RAS的需要,必须将一个执行恶意代码的CPU保持在系统执行路径之外。因此,在Linux内核中需要支持CPU热插拔技术。
一个更具新意的CPU热插拔的应用是对SMP系统的挂起/恢复的支持。多核或HT技术使得在一台笔记本上也能运行SMP内核,但是目前的支持挂起/恢复的SMP技术还在研发中。
CPU 热插拔的一般概况
命令行设置
maxcpus=n
在系统启动的CPU个数限制为n。如果你有4个CPU,但maxcpus=2,就只能启动2个CPU。但随后可以将更多的CPU加入到系统中,更多的信息可以在FAQ中获得。
additional_cpus=n (*)
这个选项可以限制可热插拔的CPU的个数。通过这个选项,我们可以计算出系统能够支持的CPU的最大数目:
cpu_possible_map = cpu_present_map + additional_cpus
cede_offline = {"off","on"}
在扩展的pseries平台上,此选项可以禁用/使能将一个离线处理器设为扩展的H_CEDE状态。如果没有特别说明,cede_offline默认被设为”on”。
加(*)的选项仅适用于以下平台:
-ia64
Ia64使用ACPI的MADT表中被禁用的局部apic的数量来确定潜在的可热插拔CPU的数量。在实现中,仅应使用此方法获取CPU数目,决对不能依赖于上述表格中描述被禁用APIC数目的apicid的值。不能在BIOS中将这些可热插拔的CPU设为不可用的设备。参数"additional_cpus=x"可以用来描述cpu_possible_map中可热插拔的CPU。
possible_cpus=n
[s390, x86_64]使用该选项来设置可热插拔的CPU。该选项设置了cpu_possible_map中的possible_cpu对应的位。因此,即使系统重启,也应保证此位图中的位的数量为常数。
CPU位图及相关的一些问题
[更多关于cpumaps及操作原语的信息,请关注include/linux/cpumask.h,该文件中包含了更多的信息。]