当你做回声0> / sys / devices / system / cpu / cpu< number> / online,接下来会发生什么取决于特定的CPU.在ARM嵌入式系统上,内核通常会禁用驱动特定内核PLL的时钟,以便您有效地获得所需内容.
在Intel X86系统上,您只能禁用中断并调用hlt指令(Linux Kernel会执行此操作).这有效地使CPU处于省电状态,直到被用户请求的另一个CPU唤醒.如果你有一台笔记本电脑,你可以通过读取来自/ sys / class / power_supply / BAT {0,1} / current_now(或所有值,如电压的uevent)的电源来验证当你禁用核心时功耗是否确实下降或使用“powertop”实用程序.
arch / x86 / kernel / smp.c:smp_ops.play_dead = native_play_dead,
arch / x86 / kernel / smpboot.c:native_play_dead() – > play_dead_common() – > local_irq_disable()
在此之前,CPUFREQ还会在禁用CPU之前将CPU设置为最低功耗级别,尽管这似乎并不是绝对必要的.
intel_pstate_stop_cpu – > intel_cpufreq_stop_cpu – > intel_pstate_set_min_pstate – > intel_pstate_set_pstate – > wrmsrl_on_cpu(cpu-> cpu,MSR_IA32_PERF_CTL,pstate_funcs.get_val(cpu,pstate));
在Intel X86上似乎没有官方的方法来禁用实际的时钟和电压调节器.即使有,它也将特定于主板,因此您最接近的赌注可能是调查BIOS,如coreboot.嗯,我意识到除了研究内核资源外我对英特尔一无所知.