Linux:スリープ状態ではなくCPUコアのシャットダウン


10

Linuxでは、echo 0> / sys / devices / system / cpu / cpu1 / onlineを使用してCPUコア(または物理CPU)をシャットダウンできます。ハードウェアがCPUを完全にオフにし、電源を切ったとすると、無効にするのは適切ではありません。プロセッサのさまざまなスリープ状態に依存するのではなく、コア全体を使用しますか?

原則を説明するために、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

回答:


6

CPUコアのオンラインステータスを設定すると、プロセススケジューラにそのコアをプロセスに使用しないように指示するだけです。ハードウェアレベルでは、コアは単にアイドル状態(NOPsを実行)ですが、まだ電力が供給されています。これは電力を節約しますが、コンピュータをスリープ状態にするよりも電力を節約できません。どうして?

まあ、マザーボード、CPU、GPUはすべてまだ動いています。コンピューターをスリープ状態にすると、これらのコンポーネントはすべて文字通り電力が供給されなくなり、RAMを維持するのに十分な電力が使用されます(数ワット程度)。

繰り返しますが、電力を節約することに同意しますが、CPUコアの半分を停止してもプロセッサの電力消費量が半分になる可能性があります(ただし、これらのコアはアイドル状態を維持する必要があるため、実際には30〜40%しか節約できません)。これは、電力を使用するシステム内の唯一のコンポーネントとはかけ離れています。これを実行して50Wを節約したとしても、スリープモードでは、コンピューター全体が単なるワットよりもはるかに多くの電力を消費しています。


最終的な考え:これは実際には素晴らしいアイデアであることに同意しますが、これは多くのCPUメーカーがLinuxをサポートする動的周波数スケーリング(Intelの「スピードステップ」)を組み込んでいる理由でもあります。これらの周波数をニーズに合わせて適切に設定することにより、電力効率だけでなく、全体的なパフォーマンスも向上する可能性があります。これは、ハードウェア(BIOS設定)とソフトウェアの両方で実行できます(Linuxカーネルでは、一部のCPUパラメーターを変更できます。詳細については、上記のリンクまたはこのWebサイトを参照してください)。

これは、以下がCMOS回路の消費電力の一般的な方程式であるため機能します。

P = CV 2 f、C =静電容量(固定と仮定)、V =電圧、f =周波数。

したがって、周波数を2で割ると、元の電力消費量の半分になります。電圧を2で割ると、消費電力が元の1/4になります。


少なくともx86 / amd64互換のプロセッサでは、可能であれば、HLT命令はNOPよりもCPUで簡単に実行できると思います。また、さまざまなスリープ状態(または正しくプロセッサ状態C0-C3(ACPI))を参照していました。また、システム全体がスリープ状態にならない場所で常に実行されるシステムについても考えていました。その場合、ハードウェアが実際にCPUへの電力をカットするのか、それがいくつかの構成で実装されているのか知りたいです。お答えいただきありがとうございます。質問はもう少しお待ちください。
ワックスヘッド

@Waxhead CPUの電源を切ると、他のハードウェアに電源が供給されている場合でも、コンピュータ全体が論理的に「オフ」になります(外部電源からのみオンに戻すことができます)。また、のHLT代わりに使用することは正しいかもしれませんがNOP、それは割り込みの使用に結びついています(これは、プロセッサを停止状態から復帰させる方法です)。ほとんどのプロセッサは、電力を削減する代わりに、クロック速度と電圧を動的に変更します(私の答えに方程式を追加しました)。
画期的な

私はこれについてさらに調査を行いました。Linuxは実際にはCPUのホットプラグをサポートしていることがわかります。その場合、BIOS /マザーボードがサポートしていれば、実際にCPUをシャットダウンして交換できます。たとえば、システムの実行中にCPUをソケットから引き抜いて交換できます。参照:cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu誤解していない場合、これがBIOS /マザーボードでサポートされている場合、CPUへの電力を削減します。
Waxhead、2012年

@Breakthrough素敵な投稿ありがとうございます。CPUを低電力状態(システムの再起動なし)にして、必要に応じて元に戻す方法の詳細に関するリファレンスドキュメントを提供できますか
iDebD_gh

@Breakthrough「コアは単にアイドル状態(NOPを実行)です」特定のCPUコアでオフラインを実行すると、「/ proc / interrupts」から消えます。コアがNOP操作を処理しているとどうやって言えますか?
iDebD_gh 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.