Linuxでは、echo 0>/sys/devices/system/cpu/cpu1/onlineを使用してCPUコア(または物理CPU)をシャットダウンできます。ハードウェアがCPUを完全にオフにして電源を切ると仮定すると、無効にするのは良いことではありません。プロセッサのさまざまなスリープ状態に依存するのではなく、コア全体を使用しますか?
To illustrate 4つの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
CPUコアのオンラインステータスを設定するだけです プロセススケジューラにそのコアを使用しないように指示します どのプロセスに対しても。ハードウェアレベルでは、コアは単にアイドル状態(NOP
sを実行)になっていますが、電源は入っています。これにより電力は節約されますが、コンピューターをスリープ状態にするほどの電力は節約されません。どうして?
さて、マザーボード、CPU、GPUはすべてまだ実行中です!コンピュータをスリープ状態にすると、これらのコンポーネントはすべて文字通り電力が供給されなくなり、RAMを存続させるのに十分な電力が使用されます(数ワット程度)。
繰り返しになりますが、電力を節約できることに同意しますが、CPUコアの半分をシャットダウンしても、プロセッサの消費電力が半分になる可能性があります(ただし、実際には、これらのコアはアイドル状態である必要があるため、30〜40%しか節約できません)。これは、電力を使用するシステム内の唯一のコンポーネントではありません。これを行うことで50Wを節約したとしても、コンピュータ全体がまだ消費していることになりますはるかに多くの電力スリープモードでの単なるワットよりも。
最終的な考え:これは実際には素晴らしいアイデアであることに同意しますが、これが多くのCPUメーカーがLinuxをサポートする動的周波数スケーリング(Intelの「SpeedStep」)を組み込んでいる理由でもあります。これらの周波数をニーズに合わせてより適切に設定することにより、全体的なパフォーマンスと電力効率を向上させることができます。これは、ハードウェア(BIOS設定)とソフトウェアの両方で実行できます(Linuxカーネルでは一部のCPUパラメーターを変更できます。詳細については、上記のリンクまたは このWebサイト を参照してください)。
以下はCMOS回路の消費電力の一般式であるため、これは機能します。
P = CV2f、ここでC =静電容量(固定と仮定)、V =電圧、f =周波数。
したがって、周波数を2で割ると、元の消費電力の半分になります。電圧を2で割ると、消費電力が元の1/4に減少します。