Read the fucking source code!
--By 鲁迅A picture is worth a thousand words.
--By 高尔基说明:
Linux CPU热插拔,支持在系统启动后,关闭任意一个secondary cpu
(在ARM架构中,CPU0为boot cpu
,不能被关闭),并在需要时重新打开它。
CPU-hotplug
的一个用处是,支持SMP的Suspend
和Resume
,这个也是我看CPU-hotplug
的原因。
代码路径:
include/linux/cpuhotplug.h
kernel/cpu.c
kernel/smpboot.c
arch/arm64/kernel/smp.c
关键的数据结构有三种,如下图所示:
struct cpuhp_cpu_state
:用来存储hotplug的状态;enum cpuhp_state
:枚举各种状态,这个会对应到全局数组中的某一项,而该项中会定义回调函数。当然,也可以通过函数接口来设置回调函数。struct cpuhp_step
:Hotplug state machine step,主要定义了函数指针,当跳转到某一个状态时会回调。Linux内核会创建虚拟总线cpu_subsys
,每个CPU注册的时候,都会挂载在该总线上,CPU的online和offline的操作,最终会回调到该总线上的函数。通过echo 0 > /sys/devices/system/cpu/cpu1/online
和echo 1 > /sys/devices/system/cpu/cpu1/online
来控制CPU的热插拔。
看图吧。
teardown/startup
回调函数;__cpu_up
函数的实现;__cpu_die
和__cpu_disable
函数的实现;CPU的Hogplug框架,针对是各类CPU,是一个通用的处理模式,涉及的面很宽,后续如果要用到的时候再继续研究。
原文:https://www.cnblogs.com/LoyenWang/p/11397084.html