第11章 電源管理

目次

11.1. CPU における電源管理
11.2. Linux カーネルの CPUfreq インフラストラクチャ
11.3. 電源関係の設定の閲覧/管理/チューニング
11.4. 特殊なチューニングオプション
11.5. 電源管理プロファイルの作成と使用
11.6. トラブルシューティング
11.7. さらなる情報

概要

電源管理とは、現状のシステムにおける要件を満たしたまま、エネルギー消費に かかるコストを減らし、同時にシステムの冷却を行なうための仕組みです。 そのため、電源管理はシステムに対する実際の性能要件と省電力のバランスを 追い求める問題になります。電源管理はシステムの様々な箇所で実施することが できます。デバイスに対する電源管理機能の仕様や、その電源管理機能に対する オペレーティングシステム向けのインターフェイスの集合体は、 Advanced Configuration and Power Interface (ACPI) として規定されています。 サーバ用途における省電力は主にプロセッサ上で実現できるものであるため、 本章では省電力に関する複数の分析ツールや、関連パラメータの影響について 紹介しています。

11.1. CPU における電源管理

CPU では様々な方法で電源消費を制御することができます。たとえばプロセッサを 一時的に待機させたり (C-ステート) 、 CPU の動作周波数を変更したり (P-ステート) することができるほか、 CPU の減速を設定したり (T-ステート) することもできます。下記の章では、それぞれのアプローチにおける概要説明と、 それらの重要性を説明します。より詳しい仕様説明をご希望の場合は、 http://www.acpi.info/spec.htm をお読みください。

11.1.1. C-ステート (プロセッサの動作設定)

新しいプロセッサであれば、 C-ステート と呼ばれる 省電力モードに対応しています。これは、使用されていない CPU 内 コンポーネントの電源を落とすことで省電力を実現するものです。 C-ステートは その昔、ラップトップ機のみで利用できる機能でしたが、サーバ上でも使用できる ようになっています (たとえば Intel* プロセッサでは、 Nehalem と呼ばれる世代のプロセッサから利用できる ようになっています) 。

プロセッサが C0 ステートで動作している場合、これは 何らかの命令を実行していることを示しています。その他の C-ステートの場合は 特に実行すべき命令が与えられていないことを示しています。また、 C に続く番号 がより高いほど、より深い待機状態にあることを示し、省電力のためにより多くの コンポーネントが待機状態に置かれます。深い待機状態ほどより省電力になります が、待機状態が深ければ深いほど復元時の遅延が増大 (つまり C0 ステートに戻るまでの時間が長く) なります。

ステートによっては、さらに細かい省電力レベルを提供する目的で、サブモードを 提供している場合があります。どの C-ステートやサブモードに対応しているかは プロセッサによって異なりますが、 C1 については常に 対応しています。

表11.1「C-ステート」 では、一般的に使用されている C-ステートについて説明を示しています。

表11.1 C-ステート

モード

説明

C0

動作モードです。 CPU のすべてのコンポーネントに電源が投入されて いる状態です。

C1

第一段階の待機状態です。ソフトウエアを介した CPU の内部クロックが 停止します。バスインターフェイスと APIC はフルスピードで動作し続けます。

C2

ハードウエアを介した CPU の内部メインクロックが停止します。 プロセッサが管理する、ソフトウエアから閲覧可能な状態は保持され ますが、割り込みによる待機状態の解除には、より長い時間がかかります。

C3

すべての CPU 内部クロックを停止します。プロセッサは自身のキャッシュに ついての一貫性を保持しなくなりますが、その他の状態は管理し続けます。 プロセッサによっては C3 ステートに複数のバリエーションが用意されていて、 割り込みによる待機状態解除にかかる時間がそれぞれ異なります。


11.1.2. P-ステート (プロセッサの性能設定)

プロセッサが動作状態にある (C0 ステート) 場合、 CPU に対して性能設定 (P-ステート) を行なうことができます。 C-ステートが 待機状態を設定するのに対して、 P-ステート は CPU の 動作周波数と電圧に関する性能設定を行ないます。

P に続く数値が大きければ大きいほど、より低い周波数と低い電圧でプロセッサが 動作することになります。また、 P に続く数値はプロセッサ固有のもので、 どれだけの周波数と電圧になるのかは、プロセッサによって様々です。ただし P0 は常に最高の性能を提供する状態を指します。また、 P-ステートの数値が大きければ大きいほどプロセッサの速度が低くなり、それと ともに電力消費も小さくなります。たとえば P3-ステートにあるプロセッサは、 P1-ステートにあるプロセッサに比べて動作が遅く、電力消費も小さな状態です。 また、何らかの P-ステートで動作するには、プロセッサが動作中である C0-ステートでなければなりません。なお、 CPU の P-ステートは Advanced Configuration and Power Interface (ACPI) 仕様 (http://www.acpi.info/spec.htm) で規定されています。

C-ステートと P-ステートはそれぞれ独立した仕組みです。

11.1.3. T-ステート (プロセッサの減速設定)

T-ステートとは、プロセッサの温度上昇を防ぐためにその動作周波数を遅くする 状態を指す言葉です。これは固定の割合で CPU の動作を強制的に減速させる ことで実現します。減速設定は T1 (CPU に対して強制的な 減速を行なわない状態) から Tn までの範囲が存在していて、それぞれ n の数値が 大きければ大きいほど、減速する割合が大きくなります。

なお、減速設定では電圧の調整を行なうことはなく、 CPU を一定時間だけ待機させる 仕組みであるため、処理を完了するまでの時間が長くなるほか、省電力という 意味では逆効果になることに注意してください。

また、 T-ステートは主に温度上昇を防ぐ効果を期待して利用するものです。 T-ステートは C-ステートの移行 (より高い C-ステートへの移行) を阻害する場合が あるため、 C-ステートに対応した CPU の場合は、かえって消費電力を増やして しまう場合があります。

11.1.4. ターボ機能

ある時期から、 CPU での電源消費と性能のチューニングは、もはや周波数制御 だけの話ではなくなってしまいました。新しいプロセッサの場合、これに加えて 性能と省電力の両方についてバランスを保つために、深いスリープ状態と従来の 周波数制御が使用され、場合によっては周波数を上げる場合もあるように なりました。最新の AMD* および Intel* プロセッサでは、ターボ機能 (Turbo CORE* や Turbo Boost* と呼ばれています) が提供され、特定の CPU コアの周波数を動的に増加させる一方、その他のコアをより深いスリープ状態に 移行させるようになっています。これにより、有効なスレッドに対する性能を 上げることができる一方、熱設計電力 (Thermal Design Power (TDP)) を維持 することができるようになっています。

しかしながら、どの CPU コアがターボ機能を利用して周波数を上げるのかに ついては、アーキテクチャに大きく依存します。このような機能を有効に活用する ための方法については、 11.3.1項 「cpupower ツールの使用」 をお読みください。

11.2. Linux カーネルの CPUfreq インフラストラクチャ

プロセッサの性能設定 (P-ステート) とプロセッサの動作設定 (C-ステート) は、 それぞれプロセッサを異なる動作周波数に切り替えたり、電源消費を抑えるために 電圧を調整したりする機能です。

システムの稼働中、動的にプロセッサの周波数を変更するにあたっては、 CPUfreq インフラストラクチャを利用して、静的または動的な電源ポリシーを設定することが できます。ここで使用される主なコンポーネントは CPUfreq サブシステム (ローレベルの技術仕様から、ハイレベルのポリシー設定に至るまでの汎用的な インターフェイスを提供するサブシステム) のほか、カーネル内蔵の調整器 (様々な 判断条件で CPU の周波数を変更するポリシーベースの調整器) や、それらの技術に 対応するための CPU 固有のドライバなどがあります。

動作速度を動的に調整して速度を落とすことで省電力を実現することができる ほか、発熱量を減らすこともできます。

11.2.1. カーネル内蔵の調整器

あらかじめ用意された CPU 電源制御の方式の 1 つとして、カーネル内蔵の 調整器 (ガバナーとも呼びます) を利用することができます。 CPUfreq の 調整器は、周波数の変更と省電力の調整を行なう際に P-ステートを利用 します。動的な調整器は、 CPU に対して必要とされる性能を満たす範囲で、 動的に CPU の周波数を切り替えます。これらの調整器はカスタマイズを 行なって細かい調整を行なうことができるようになっています。

CPUfreq サブシステムでは、下記の調整器を利用することができます:

性能重視型調整器 (Performance Governor)

最大限の性能を発揮するため、 CPU の動作周波数は最高値に固定されます。 そのため、この調整器では省電力への考慮は行なわれないということに なります。

チューニングオプション: 調整器が使用する最大の周波数範囲を 設定することができます (たとえば cpupower コマンドラインツールを利用して行なうことができます) 。

省電力重視型調整器 (Powersave Governor)

CPU の動作周波数は最低値に固定されます。この調整器は、プロセッサの 負荷に関係なく周波数が固定されて変更されないことから、性能面への影響が 最も大きく存在する調整器になります。

ただし、この調整器を利用しても期待通りの省電力を実現できない場合も あります。これは一般的に、 C-ステートを利用した一時休止のほうがより よい省電力を実現できるためです。また、省電力重視型調整器を利用して 動作周波数を最小限の値に固定すると、それだけ必要な処理を行なうのに 時間がかかることになるため、システムが C-ステートに入るまでの時間も 長くなります。

チューニングオプション: 調整器が使用する最小の周波数範囲を設定する ことができます (たとえば cpupower コマンドラインツールを利用して行なうことができます) 。

オンデマンド型調整器 (On-demand Governor)

動的に CPU 動作周波数を調整するカーネル実装ポリシーです。調整器は プロセッサの使用率を監視し、特定の閾 (しきい) 値を超えると調整器が 動作し、利用可能な最大の周波数に設定します。使用率が特定の閾値を 下回ると、周波数を 1 段階下げます。さらに使用率が低いままである場合は、 最小値になるまで段階的に周波数を下げ続けます。

openSUSE では、オンデマンド型の調整器が既定値になっていて、 もっともよくテストされています。

チューニングオプション: 調整器が使用する周波数範囲と、調整器が使用率を チェックする頻度、および調整を行なう際の使用率の閾値をそれぞれ設定する ことができます。またオンデマンド型調整器では、 ignore_nice_load と呼ばれる値を調整することも できます。詳しくは 手順11.1「プロセッサ使用率における nice 値の無視」 をお読みください。

保守型調整器 (Conservative Governor)

この調整器はオンデマンド型のものに似た仕組みで、プロセッサの使用率に 応じて動作周波数を調整します。ただし周波数を上げる場合には、より 段階的な変更を行なうようになっています。プロセッサの使用率が特定の 閾値を超えると、 (オンデマンド型の調整器が行なうように) すぐに最大値を 設定することはなく、次に設定可能な高い周波数を設定するようになっています。

チューニングオプション: 調整器が使用する周波数範囲と調整器が使用率を チェックする頻度、使用率の閾値と周波数の設定間隔をそれぞれ設定する ことができます。

11.2.2. 関連するファイルとディレクトリ

お使いのシステムで CPUfreq サブシステムが有効化されていれば (openSUSE では規定で有効化されています) 、 /sys/devices/system/cpu/ ディレクトリ以下に関連するファイルやディレクトリが存在するはずです。 また、このディレクトリ内の内容を一覧表示すると、 cpu{0..x} というサブディレクトリが各 CPU に対して存在していて、それ以外にも いくつかのファイルが存在することがわかります。さらに、それぞれのプロセッサ のディレクトリ以下には cpufreq というサブディレクトリが 存在していて、それぞれ CPUfreq に関連するパラメータ設定を行なうことが できるようになっています。それらのうちのいくつかは (root で) 書き込みが 可能で、それ以外は読み込み専用になっています。お使いのシステムでオンデマンド型 調整器や保守型調整器を利用している場合は、 cpufreq 以下のディレクトリに、調整器ごとのサブディレクトリが存在しています。

[Note]プロセッサに対する設定項目について

cpufreq ディレクトリ以下に存在する設定は プロセッサによって異なります。すべてのプロセッサに対して同じポリシーを 設定したい場合は、それぞれのプロセッサ用にパラメータを調整する必要があります。 なお、現在の設定 (/sys/devices/system/cpu*/cpufreq ディレクトリ内) を手作業で参照したり変更したりする代わりに、 cpupower パッケージ を利用することをお勧めします。

11.3. 電源関係の設定の閲覧/管理/チューニング

電源関係の設定について、閲覧や管理、チューニングを行なうには、下記のコマンド ラインツールが利用できます:

cpupower ツールの使用

新しく提供されるようになった cpupower ツールは、 対象のマシンで利用可能な 全ての CPU 電源関係の パラメータについて、ターボ (またはブースト) 状態を含む概要を表示できる ように設計されています。これらのツールでは CPUfreq サブシステムや cpuidle サブシステムのほか、周波数制御や負荷状態とは関係のない設定に ついても、制御を行なうことができます。このような統合型フレームワークの 仕組みにより、カーネル関連のパラメータとハードウエアの統計情報の両方に アクセスできるため、性能関連のベンチマークを行なうのに便利な仕組みに なっています。また、ターボ状態や負荷状態の依存関係を調べる機能もあります。

powerTOP を利用した電力消費の監視

powerTOP は様々な情報源からの情報 (プログラムやデバイスドライバ、カーネル オプションや、プロセッサのスリープ状態からの復帰割り込みについて、その 量や発信源の分析情報) を組み合わせ、 1 つの画面内に表示することが できます。これにより、不用意に高い電源消費について原因を探ったり (たとえば、 プロセッサのスリープ状態を頻繁に解除しているプロセスを調べたり) すること ができるほか、これらを回避するためのシステム設定の最適化についても支援を 行ないます。

11.3.1. cpupower ツールの使用

cpupower パッケージをインストール すると、 cpupower で始まるサブコマンドを利用できるように なります。詳しくは cpupower --help で表示される ヘルプ、もしくは一般的なマニュアルページ man cpupower か、各サブコマンドのマニュアルページ man cpupower-サブコマンド をお読みください。

cpufreq-infocpufreq-set として使用していたコマンドは、それぞれ frequency-infofrequency-set のサブコマンドに置き換えることができます。 ただし、出力内容が拡張されているほか、文法や動作について若干の差異がある ことに注意してください:

cpufreq*cpupower の文法の違い

  • コマンドを適用する CPU 番号を指定する場合、いずれのコマンドとも -c オプションを使用します。ただしサブコマンド構造に より、 -c を書くべき場所が cpupower では異なっています:

    cpupower -c 4 frequency-info (cpufreq-info -c 4 と同じ意味になります)

    cpupower では -c を利用して適用 する CPU を指定します。たとえば下記のコマンドでは、それぞれ 1 , 2, 3, 5 の各 CPU に設定を適用する意味になります:

    cpupower -c 1-3,5 frequency-set

  • cpufreq*cpupower-c オプション無しで実行した場合、動作が異なります:

    cpufreq-set では、自動的に CPU 0 に対する処理として解釈するのに対し、 cpupower frequency-set では全ての CPU に対する処理と解釈します。また、 cpupower *info コマンドに何も指定しない場合は、 CPU 0 にのみアクセス するのに対し、 cpufreq-info は全ての CPU にアクセス します。

11.3.1.1. cpupower を利用した設定の確認

cpufreq-info と同じく、 cpupower frequency-info でも、カーネル内で 使用されている cpufreq ドライバの統計情報を表示することができます。 これに加えて、 cpupower では BIOS でターボ機能 (ブースト機能) に対応しているかどうかも表示することができます。 何もオプションを指定しないで実行した場合、出力は下記のようになります:

例11.1 cpupower frequency-info の出力例

analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 0 1 2 3
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 10.0 us.
  hardware limits: 2.00 GHz - 2.83 GHz
  available frequency steps: 2.83 GHz, 2.34 GHz, 2.00 GHz
  available cpufreq governors: conservative, userspace, powersave, ondemand, performance
  current policy: frequency should be within 2.00 GHz and 2.83 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency is 2.00 GHz (asserted by call to hardware).
  boost state support:
    Supported: yes
    Active: yes
    

全ての CPU に対する設定値を表示したい場合は、 cpupower -c all frequency-info と実行してください。

11.3.1.2. cpupower を利用したカーネル負荷状態の表示

idle-info サブコマンドでは、カーネル内で使用されている cpuidle ドライバに関する統計情報を表示することができます。 cpuidle カーネル フレームワークに対応するアーキテクチャであれば、全てのアーキテクチャで動作 します。

例11.2 cpupower idle-info の出力例

CPUidle driver: acpi_idle
CPUidle governor: menu

Analyzing CPU 0:
Number of idle states: 3
Available idle states: C1 C2
C1:
Flags/Description: ACPI FFH INTEL MWAIT 0x0
Latency: 1
Usage: 3156464
Duration: 233680359
C2:
Flags/Description: ACPI FFH INTEL MWAIT 0x10
Latency: 1
Usage: 273007117
Duration: 103148860538

11.3.1.3. cpupower を利用したカーネルとハードウエア状態の監視

cpupower で最もパワフルな拡張が monitor サブコマンドです。プロセッサの構造や周波数 を報告するほか、特定の時間内における負荷状態の統計情報を表示すること ができます。規定の時間間隔は 1 秒ですが、 -i オプションを指定することで変更することもできます。 また、本ツールでは個別のプロセッサのスリープ状態と周波数カウンタも 実装されています。これらはカーネルの統計情報からの値と、ハードウエア レジスタの値からそれぞれ採取した値です。利用可能なモニタは、お使いの システムのハードウエアに依存します。利用可能なモニタを表示するには、 cpupower monitor -l コマンドを実行して ください。個別の監視機能に関する説明は、 cpupower-monitor のマニュアル ページをお読みください。

monitor サブコマンドは、特定の負荷に対して性能の ベンチマークを実行することができるほか、カーネルの統計情報と ハードウエアの統計情報を比較することもできます。

例11.3 cpupower monitor の出力例

|Mperf               || Idle_Stats
 1                      2 
CPU | C0   | Cx   | Freq || POLL | C1   | C2   | C3
   0|  3.71| 96.29|  2833||  0.00|  0.00|  0.02| 96.32
   1| 100.0| -0.00|  2833||  0.00|  0.00|  0.00|  0.00
   2|  9.06| 90.94|  1983||  0.00|  7.69|  6.98| 76.45
   3|  7.43| 92.57|  2039||  0.00|  2.60| 12.62| 77.52
     

1

Mperf は一定時間内での CPU の平均周波数のほか、ブースト時の周波数 を表示します。これに加えて、 CPU の動作状態 (C0) と何らかのスリープ状態 (Cx) について、それぞれの 時間的な割合も表示されます。既定の採取間隔は 1 秒で、値はハードウエアレジスタから直接読み込まれます。ターボ状態は BIOS で管理されているため、すぐに表示することはできません。ターボ 機能を持つ新しいプロセッサの場合、 Mperf は特定の CPU に関する 周波数情報を確認する唯一の方法となります。

2

Idle_Stats は cpuidle カーネルサブシステム内の統計情報を表示します。 カーネルは負荷状態が切り替わるごとにこれらの値を更新するため、計測の 開始と終了の前後では、これらの値が正確にならない場合があります。

上記の例にある (一般的な) 監視機能に加え、アーキテクチャ固有の監視機能 も備わっています。詳しい情報は cpupower-monitor のマニュアルページをお読みください。


個別の監視データについて値を比較することで、それらの関係性や依存関係を 調べることができるほか、特定の負荷に対して省電力機構が正しく動作して いるかどうかを評価することもできます。 例 11.3 の例では、 CPU 0 がほぼ無負荷状態 (Cx の値が ほぼ 100%) であるのに、非常に高い周波数で動作しています。それに加えて、 CPU 01 が同じ周波数の値に なっているため、それらに依存関係があることを示しています。

11.3.1.4. cpupower を利用した設定変更

cpufreq-set と同様に、 rootcpupower frequency-set を実行することで、設定値 を変更することができます。これにより調整器が選択する最大と最小の周波数を 設定することができるほか、新しい調整器を作成することもできます。また -c オプションを使用すると、設定を適用するプロセッサを 選択することもできます。これにより、個別のプロセッサに対していちいち設定 することなく、全てのプロセッサに対して一括でポリシーを設定することが できます。利用可能なオプションについて、詳しくは cpupower-freqency-set のマニュアルページ、もしくは cpupower frequency-set --help で表示されるヘルプメッセージをお読みください。

11.3.2. powerTOP を利用した電力消費の監視

システムの電源消費量を監視するためにある便利なツールとして、 powerTOP というツールもあります。このソフトウエアは、不用意に高く電源を 消費している原因を探ることができる (たとえばプロセッサが一時的に休止している 状態から、動作状態に戻している主なプロセスの検出など) ほか、これらを防ぐために 適用すべきシステム設定の最適化などを行ないます。なお、 powertop パッケージは Intel および AMD の両プロセッサに対応しています。

powerTOP は様々な情報源からの情報を組み合わせて 1 画面に表示します (たとえば プログラムやデバイスドライバの分析、カーネルオプション、一時休止状態から 動作状態に戻しているプロセスなど) 。 例11.4「powerTOP の出力例」 では、利用可能な情報分類を示しています:

例11.4 powerTOP の出力例

Cn               Avg  residency       P-states   (frequencies)
1                 2      3              4            5
C0 (cpu running)        (11.6%)       2.00 Ghz       0.1%
polling         0.0ms   ( 0.0%)       2.00 Ghz       0.0%
C1              4.4ms   (57.3%)       1.87 Ghz       0.0%
C2             10.0ms   (31.1%)       1064 Mhz      99.9%


Wakeups-from-idle per second : 11.2     interval: 5.0s 6
no ACPI power usage estimate available 7


Top causes for wakeups: 8
96.2% (826.0)       <interrupt> : extra timer interrupt
 0.9% (  8.0)     <kernel core> : usb_hcd_poll_rh_status (rh_timer_func)
 0.3% (  2.4)       <interrupt> : megasas
 0.2% (  2.0)     <kernel core> : clocksource_watchdog (clocksource_watchdog)
 0.2% (  1.6)       <interrupt> : eth1-TxRx-0
 0.1% (  1.0)       <interrupt> : eth1-TxRx-4

[...]

Suggestion: 9 Enable SATA ALPM link power management via:
echo min_power > /sys/class/scsi_host/host0/link_power_management_policy
or press the S key.

1

この列には C-ステートの一覧が表示されます。 CPU が動作しているときは 0 の状態に、動作していないときは 0 以外の状態になります。利用可能な C-ステートや、 CPU がどれだけ深い スリープ状態に移行するのかについては、 CPU によって異なります。

2

この列には、特定の C-ステートであり続けた平均時間が、ミリ秒単位で表示されます。

3

この列には、特定の C-ステートであり続けた時間の割合が表示されます。 一時休止状態で省電力をうまく活用するには、できるだけ深い (番号の大きい) C-ステートに移行する必要があります。加えて、これらの C-ステートに 長くあり続けるようにすると、より電力を削減することができます。

4

この列にはプロセッサの動作周波数と、お使いのシステムに対応するカーネル ドライバが表示されます。

5

この列には、計測の間に CPU コアが異なる動作周波数にあり続けた時間が 表示されます。

6

CPU が一時休止状態から動作状態に移行した頻度が、秒あたりの回数 (割り込み 回数) で表示されます。低い値ほどより良い省電力であることを示しています。 powerTOP では、 interval (間隔) と呼ばれる更新間隔を -t オプションで調整することができます。既定値は 5 秒です。

7

powerTOP をラップトップ機で実行している場合、この行には ACPI 情報が 表示され、どれだけの電力を消費しているのかとバッテリー容量が枯渇する までの予測時間が表示されます。サーバの場合、この情報は利用できません。

8

なぜシステムが必要以上に動作しているのかについて、理由を表示します。 powerTOP はデータの採取間隔内で、もっとも CPU を動作状態に戻している 項目についてランキング表示を行ないます。

9

お使いのマシンで、電源消費を改善するための提案が表示されます。


より詳しい情報については、 http://www.lesswatts.org/projects/powertop/ にある powerTOP プロジェクトのページをお読みください。 ヒント情報や FAQ なども記載されています。

11.4. 特殊なチューニングオプション

下記のセクションでは、設定しておいたほうがよりよいと思われる各種の設定について 述べています。

11.4.1. P-ステート向けのチューニングオプション

CPUfreq サブシステムでは、 P-ステート向けにいくつかのチューニングオプション が用意されています。異なる調整器への切り替えを行なうことができるほか、使用する 動作周波数の最大値と最小値を設定したり、調整器ごとの詳細パラメータを設定したり することもできます。

システム稼働中に異なる調整器に切り替えたい場合は、 cpupower frequency-set コマンドに -g オプションを付けて実行します。たとえば下記のコマンドを root で実行する と、オンデマンド型の調整器を有効にすることができます:

cpupower frequency-set -g ondemand

再起動やシャットダウンを行なった後も調整器の設定を維持したい場合は、 11.5項 「電源管理プロファイルの作成と使用」 で説明している pm-profiler をご利用ください。

調整器が使用する動作周波数の最大値と最小値を設定したい場合は、 それぞれ -d-u オプションを指定して 実行します。

cpupowercpufreq* で設定できる 項目以外にも、調整器のパラメータを手作業で調整することもできます。たとえば プロセッサ使用率における nice 値の無視 などがあります。

手順11.1 プロセッサ使用率における nice 値の無視

オンデマンド型や保守型の調整器を利用している場合、 ignore_nice_load と呼ばれるパラメータを変更することができます。

各プロセスには nice 値と呼ばれる値が設定されています。この値はカーネル 側で使用される値で、他のプロセスに比べてどれだけのプロセッサ時間が 必要であるのかを示しています。より大きな nice 値 (nicer とも呼びます) ほど、プロセスの優先順位は低くなり、プロセスに与えられる 時間が少なくなります。

オンデマンド型や保守型の調整器を利用している場合、 ignore_nice_load パラメータを 1 に設定すると、 nice 値が 0 以外に設定されているプロセスが、 プロセッサ全体の使用率としてカウントされないようになります。逆に ignore_nice_load0 (既定値) に設定されている場合は、すべてのプロセスが使用率としてカウントされます。 このパラメータは、プロセッサの資源を大きく占有するプロセスを動作させて いるものの、これらは調整器の判断材料から外したい場合に便利な機能です。

  1. まずは下記のようにして、設定を変更したい調整器のサブディレクトリに 移動します:

    cd /sys/devices/system/cpu/cpu0/cpufreq/conservative/
  2. 現在の ignore_nice_load の値を確認するには、 下記のように実行します:

    cat ignore_nice_load
  3. 1 に変更したい場合は、下記のように実行します:

    echo 1 > ignore_nice_load
[Tip]コアに対する設定の反映について

cpu0 に対して ignore_nice_load を設定した場合は、残りの全てのコアに対しても自動的に同じ値が適用されます。 この場合、調整器のパラメータを変更したいプロセッサ全てに対して、 上記の作業を繰り返したりする必要はありません。

動的な周波数制御によって引き起こされる性能損失について、もう1 つ存在する 影響パラメータには、サンプリングレート (調整器が現在の CPU 負荷を確認し、 プロセッサの周波数を変更する間隔) があります この設定の既定値は BIOS に 依存して決まる値で、できる限り低い値を設定してください。新しいシステムの 場合は、既定で適切な値が設定されていて、手作業で調整する必要はありません。

11.4.2. C-ステート向けのチューニングオプション

規定では openSUSE は適切な C-ステートを使用します。最適化を行なうに あたって唯一調整すべきパラメータは、 sched_mc_power_savings のパラメータです。すべての CPU コアを最小限に使用するよう負荷を分散させる代わりに、カーネルはできるだけ 少ないコアだけを動作させて、それ以外を一時的に休止させるようにすることが できます。これにより不要なコアがより高い C-ステートに移行することになり、 結果として省電力を実現できるようになっています。ただし、実際の電力消費には 多数の要素が絡み合ってくるものであることに注意してください。これにはたとえば、 利用可能なプロセッサ数や、どの C-ステートに対応しているか (特に C3 から C6 までの、より深い休止) などが あります。

sched_mc_power_savings0 (既定値) に設定されている場合、特別なスケジューリングは行なわれません。 1 に設定されている場合、スケジューラはすべてのプロセッサに 対して少しずつ負荷を与えるのではなく、できる限り少ない数のプロセッサで 処理を行なおうとします。 このパラメータを変更するには、下記の手順で行ないます:

手順11.2 コア上でのプロセスのスケジュール

  1. コマンドライン上で root に切り替えます。

  2. sched_mc_power_savings の現在地を表示するには、 下記のコマンドを入力します:

    cpupower info -m
  3. sched_mc_power_savings1 に設定するには、下記のコマンドを入力します:

    cpupower set -m 1

11.5. 電源管理プロファイルの作成と使用

openSUSE では、 pm-profiler と呼ばれるサーバ用のツールが提供されて います。これは設定ファイルを利用して特定の電源管理機能を有効にしたり 無効にしたりするスクリプトのインフラストラクチャです。これにより異なる プロファイルを定義し、別々の設定をファイル内に保持できるようになります。 新しいプロファイルを作成する際の設定の雛形は、 /usr/share/doc/packages/pm-profiler/config.template に配置されています。雛形には、プロファイル内で使用可能な多数のパラメータ が書かれているほか、それらの使用方法やその他のドキュメンテーションへの リンクがコメントで書かれています。なお、作成したプロファイルは /etc/pm-profiler/ 内に保存するほか、システムが起動 する際に適用されるべきプロファイルは、 /etc/pm-profiler.conf で設定します。

手順11.3 電源管理プロファイルの作成と切り替え

新しいプロファイルを作成するには、下記の手順で行ないます:

  1. /etc/pm-profiler/ ディレクトリ内に、プロファイル 名のサブディレクトリを作成します。下記のように実行します:

     mkdir /etc/pm-profiler/testprofile
  2. 新しいプロファイル用のファイルを作成するには、まずプロファイルの雛形を 新しく作成したディレクトリにコピーします:

    cp /usr/share/doc/packages/pm-profiler/config.template \
         /etc/pm-profiler/testprofile/config
  3. /etc/pm-profiler/testprofile/config 内の設定を 編集し、保存します。なお、不要な変数については削除することもできます。 削除した場合は、空の (何も設定されていない) ものとして扱われ、該当する 設定項目は何も変更されません。

  4. 次に /etc/pm-profiler.conf を編集します。 PM_PROFILER_PROFILE では、システムの起動時に 適用されるプロファイルを設定します。何も指定しない場合は、既定の システムまたはカーネル設定が使用されます。新しく作成したプロファイルを 使用するようにするには、下記のようにします:

    PM_PROFILER_PROFILE="testprofile"
        

    ここで入力するプロファイル名は、プロファイルの設定ファイルのパス指定に 利用した名前 (/etc/pm-profiler/testprofile/config) と一致していなければなりません。なお、 /etc/pm-profiler/testprofile/config 内で指定した NAME と一致する必要はありません。

  5. プロファイルを有効にするには、下記のように実行します:

    rcpm-profiler start

    または

    /usr/lib/pm-profiler/enable-profile testprofile 

それぞれのプロファイルの設定ファイルについては、エディタなどで作成したり 編集したりしなければなりませんが、プロファイルを切り替える作業については YaST から行なうことができます。 電源管理設定 を開くには、 YaST を起動して システム+電源管理 を選択するか、もしくは root の状態から、コマンドラインで yast2 power-management を実行します。ドロップダウンリストには利用可能なプロファイルが表示されます。 既定のプロファイル は、システムの既定値をそのまま 受け入れる意味になります。使用したいプロファイルを選択し、 完了 を押してください。

11.6. トラブルシューティング

BIOS オプションが有効になっていますか?

C-ステートや P-ステートを使用する場合は、 BIOS オプションを確認してください:

  • C-ステートを利用するには、 CPU C State などの オプションが有効になっていることを確認してください。

  • P-ステートや CPUfreq の調整器を利用するには、 Processor Performance States などのオプションが 有効になっていることを確認してください。

CPU をアップグレードする際は、 BIOS についてもアップグレードを行なう 必要があるかどうかを検討する必要があります。 BIOS は新しい CPU を 認識し、利用可能な動作周波数をオペレーティングシステム側に渡す 必要があるためです。

CPUfreq サブシステムは有効になっていますか?

openSUSE では CPUfreq サブシステムは既定で有効に設定されます。 サブシステムが有効になっているかどうかを確認するには、お使いのシステムで 下記のパスが存在しているかどうかを確認してください: /sys/devices/system/cpu/cpufreq (お使いのシステムが マルチコアである場合は /sys/devices/system/cpu/cpu*/cpufreq) 。 cpufreq ディレクトリが存在していれば、サブシステムは 有効に設定されています。

ログファイルに何か記載されていませんか?

まずは CPUfreq サブシステム関連のログ出力がないかどうか、 syslog (通常は /var/log/messages) を確認します。ここには 深刻なエラーだけが出力されます。

お使いのマシンで CPUfreq サブシステムについて何らかの問題が発生して いる場合、追加のデバッグ出力を有効に設定してください。これを行なうには、 起動時のパラメータに cpufreq.debug=7 を追加するか、 もしくは root で下記のコマンドを実行します:

echo 7 > /sys/module/cpufreq/parameters/debug

上記を実行すると、状態遷移時に dmesg 内に分析に 役立つ詳しい情報が出力されるようになります。ただし上記の手順では 冗長な出力が行なわれるため、本当に問題が発生した場合にのみ実施する ことをお勧めします。

11.7. さらなる情報


openSUSE システム分析とチューニングガイド 13.1