在 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
答案1
设置CPU核心的在线状态告诉进程调度程序不要使用该核心对于任何进程。在硬件层面,核心只是处于空闲状态(执行NOP
s),但仍有电。虽然这会节省电量,但节省的电量远不及让计算机进入睡眠状态。为什么?
嗯,你的主板、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。