Linux:CPU 内核关闭而不是睡眠状态

Wax*_*ead 10 linux cpu performance powersave hotplug

在 Linux 中,您可以使用 echo 0 > /sys/devices/system/cpu/cpu1/online 关闭 CPU 内核(或物理 CPU) 假设硬件完全关闭 CPU 并切断其电源,禁用它不是更好内核完全而不是依赖于处理器的各种睡眠状态?

为了说明原理,我正在考虑针对具有四个 CPU 的系统的这些思路(伪代码):

if(loadavg > 3.00) echo 1 > /sys/devices/system/cpu/cpu3/online
if(loadavg < 3.00) echo 0 > /sys/devices/system/cpu/cpu3/online

if(loadavg > 2.00) echo 1 > /sys/devices/system/cpu/cpu2/online
if(loadavg < 2.00) echo 0 > /sys/devices/system/cpu/cpu2/online

if(loadavg > 1.00) echo 1 > /sys/devices/system/cpu/cpu1/online
if(loadavg < 1.00) echo 0 > /sys/devices/system/cpu/cpu1/online
Run Code Online (Sandbox Code Playgroud)

Bre*_*ugh 6

设置 CPU 内核的在线状态只是告诉进程调度程序不要将该内核用于任何进程。在硬件层面上,核心只是闲置(做NOPs),但仍在供电。虽然这将节省电量,但​​它节省的电量几乎不如让计算机进入睡眠状态。为什么?

好吧,您的主板、CPU 和 GPU 都仍在运行!当您将计算机置于睡眠状态时,所有这些组件实际上都未通电,并且仅使用了足以使您的 RAM 保持活动状态的电量(大约几瓦)。

同样,虽然我同意它会节省电量,但​​即使关闭一半的 CPU 内核也可能会将处理器的功耗减半(尽管实际上,由于这些内核仍然需要闲置,因此您可能只能节省 30-40%),但是这远不是系统中唯一使用电力的组件。即使您通过这样做节省了 50W,您的整个计算机仍然比睡眠模式下的瓦特消耗更多的电量


最后的想法:虽然我同意这在实践中是一个好主意,但这也是许多 CPU 制造商包含动态频率缩放(英特尔的“Speed Step”)并支持 Linux 的原因。通过更适合您的需要设置这些频率,您可能会获得更好的整体性能和电源效率。这可以在硬件(BIOS 设置)和软件(Linux 内核允许您修改一些 CPU 参数,请参阅我上面发布的链接或此网站了解详细信息)中完成。

这是有效的,因为以下是 CMOS 电路功耗的通用公式:

P = CV 2 f,其中 C = 电容(假设固定),V = 电压,f = 频率。

因此,将频率除以 2 将使原始功耗减半。将电压除以 2 会将功耗降低到原来的 1/4。