gpt4 book ai didi

linux - 以编程方式禁用 CPU 内核

转载 作者:IT王子 更新时间:2023-10-29 00:16:59 31 4
gpt4 key购买 nike

在 Linux 中禁用逻辑 CPU 的方法是已知的,基本上是用 echo 0 > /sys/devices/system/cpu/cpu<number>/online .这样,您只是告诉操作系统忽略给定的 ( <number>) CPU。

我的问题更进一步,是否可以不仅忽略它而且以编程方式物理关闭它?我希望该 CPU 不接收任何电源,以使其能耗为零。

我知道可以从 BIOS 禁用内核(并非总是如此),但我想知道是否可以在某个程序中执行此操作。

最佳答案

当你做 echo 0 > /sys/devices/system/cpu/cpu<number>/online ,接下来会发生什么取决于特定的 CPU。在 ARM 嵌入式系统上,内核通常会禁用驱动特定核心 PLL 的时钟,以便您有效地获得所需内容。

在 Intel X86 系统上,您只能禁用中断并调用 hlt指令(Linux 内核所做的)。这有效地将 CPU 置于节能状态,直到它根据用户请求被另一个 CPU 唤醒。如果你有一台笔记本电脑,你可以通过读取 /sys/class/power_supply/BAT{0,1}/current_now 中的功率来验证当你禁用核心时功率消耗确实下降了。 (或 uevent 用于所有值,例如电压)或使用“powertop”实用程序。

例如,下面是用于在 Intel CPU 的 Linux 内核中禁用 CPU 内核的调用链。 https://github.com/torvalds/linux/blob/master/drivers/cpufreq/intel_pstate.c

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 设置为最低功耗级别,尽管这似乎并不是绝对必要的。

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。嗯,我意识到除了查看内核源代码之外,我对英特尔一无所知。

关于linux - 以编程方式禁用 CPU 内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44907731/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com