
技術入門
情報システムの省電力化を支える技術:
CPU idle
NIC ネットワーク制御ソフトウェアプロジェクト
#省電力#サーバ#CPU
2025/4/25
はじめに
近年、社会を支える情報システムの数が増え、これらシステムが消費する電力量やエネルギーコストの増加を背景に、省電力性に注目が集まりつつあります。同様に、全国に配置される通信システムにも、省電力化が求められています。通信システムにおいて省電力を達成するには、厳しい性能要件を満たしつつ、消費電力を最小限とする設計が必要となります。このためには、ハードウェアの省電力性に関する仕様を深く理解したうえで設計や開発を行う必要のある、技術的な面白さ・チャレンジしがいのある領域です。ネットワークイノベーションセンタでも、様々な省電力化に関する技術検討を進めています[1]。この記事では、「ハードウェアの仕様や特性を理解し、通信システムを研究開発する」ことの一端として、サーバの省電力機能についてご紹介します。サーバの中でも、CPU (Central Processing Unit)は約3-5割と多くの電力消費を占めるので、消費電力観点で重要な部品となっています。そこで、本記事では、CPUに具備される省電力機能であるCPU idleの概要と、ソフトウェアから扱うときの工夫点についてご紹介します。
CPUの省電力化の仕組み
多くのCPUは、負荷に応じて処理性能を変動させ、消費電力や発熱を抑える仕組みを持っています。みなさまも、スマートフォンやパソコンの使用中に、負荷が低いときは本体の温度が低かったのに、重いアプリやゲームを動かすと本体が発熱してきた・・・というご経験があるのではないでしょうか。これらは、スマートフォンやパソコンの中のCPUが、必要な性能に応じて動作を変える省電力化機能を働かせたためです。サーバやスマートフォンに搭載されるプロセッサの多くは、性能の調整のために、"動作スピードを増減させる" 機能と、"使っていない部品を休ませる" 2つの機能を搭載しています。この記事では、後者の技術の一つであるCPU idleについて概説します。
CPU idleとは
CPU idleとは、CPUの省電力機能の一つであり、"計算処理がない時に、CPUの一部を休ませる" 機能です(LPI, C-state, CPU idleなど、様々な呼称がされますが、ここではCPU idleと呼称することとします)。CPUの内部で休むことのできる部品は複数あり、特に重要なものが「計算を行う演算器群」「クロック生成部」の2つです。図1に、CPUの内部構造と、これらの部品の関係を示します。CPUの中にある複数のコアそれぞれが演算器群を持ち、供給されたクロックに応じ計算処理を行います。

CPU idleの興味深い特徴は、「CPUをどこまで休ませるか」を変える複数のモードを持ち、消費電力の削減幅と、処理を再開するまでの時間を調整できる点です。コンピュータの統一規格の一つであるACPI(Advanced Configuration and Power Interface)では、このようなCPU idleの状態として、C0, C1, C2, C3が規定されています[2]。 これらCPU idleの状態は、多くのプロセッサにおいて、それぞれ下記の表1のように、それぞれの「休ませる範囲」を変える形で実現されます。

消費電力の削減だけを考えると、多くを休ませるC3状態が最も消費電力を削減することができます。しかし、C3のように多くの部品を休ませると、処理を再開するために必要となる部品が増え、復帰までの時間が長くなってしまいます。具体的には、クロック生成の再開や、CPU内部のマイクロ命令を休止状態に入る直前の状態に復帰させる、といった処理に時間がかかります。これは、例えるなら、人間が熟睡した後に目が覚め、意識がハッキリするまで時間がかかるのに対し、浅い居眠りの後なら比較的すぐに覚醒できることに近いといえるでしょう。(もちろん、これには、個人差がありますが・・・)この復帰時間は、例えばIntel Skylake CPUでは、最も深いC6状態(上記のACPI C3相当)からだと133マイクロ秒の復帰時間が必要とされています[3]。 一方で、C1のように、一部の部品のみを休ませる場合、計算可能な状態に戻すための時間は短くなります。たとえば、C1(上記のACPI C1相当)では、2マイクロ秒の短い時間での復帰が可能です。このように、CPUの省電力モードと復帰時間には、省電力性と復帰時間のオーバヘッドの間にトレードオフが存在します。1マイクロ秒は、1秒の100万分の1ですから、133マイクロ秒と2マイクロ秒の違いは、人間からするとほぼ同じに見えるかもしれません。しかし、通信システムからみると、とても長い時間の差です。例えば、スマートフォンの通信を支える無線基地局では、数百マイクロ秒以内でリアルタイムに完了させなければならない処理もあり、100マイクロ秒の違いは通信の安定性に大きく影響します。
CPU idleを考慮したソフトウェアの設計
このように、CPUの処理がない時に、CPU idleを深い休止状態に遷移させることで電力を削減することができますが、一方で、深い休止状態に遷移すると、復帰のための時間が長くなり、システムの性能が低下します。このため、省電力性を考慮したソフトウェアの設計では、省電力モードからの復帰時に、どのぐらいの遅延が許されるのか?といった、それぞれのソフトウェアの求める性能を基に省電力モードを選択する、といった工夫が必要になります。
Linux等の多くのオペレーティングシステムでは、計算がなかった過去の時間の長さなどから、最適なCPU idleを判断する仕組みを持っていますが、マイクロ秒オーダの性能要件を求められる通信システムでは、アプリケーションに応じた設計を行うなどの工夫が必要となります。
まとめ
本記事では、CPUの消費電力を削減する技術の一つであるCPU idleについて概説しました。通信システムを支える高い性能を求められるソフトウェアの研究開発では、これらCPUの詳細な挙動を把握し、これに合わせたシステム設計が求められています。通信システムの研究開発を行うネットワークイノベーションセンタでは、CPU等のハードウェアの内部挙動を深く理解したうえで、様々な高効率・高性能なシステムの研究開発に取り組んでいます。
参考文献
[2] https://uefi.org/specifications
[3] https://github.com/torvalds/linux/blob/master/drivers/idle/intel_idle.c
関連するプロジェクト
プロジェクト一覧へ採用情報
採用情報