3.2. CPUfreq

ご使用のシステムで電力消費と熱の発生を低減する最も効果的な方法の 1 つは、CPUfreq を使用することです。CPUfreq (CPU 速度スケーリングとも呼ばれます) は Linux カーネルのインフラストラクチャーで、節電のために CPU 速度をスケーリングできます。CPU スケーリングは、ACPI イベントに応じたシステム負荷を元に自動的に実施することも、ユーザースペースプログラムにより手動で実施することもできます。これにより、稼働中にプロセッサーのクロック速度を調整できます。したがって、システムは減速したクロック速度で稼働し、節電できます。周波数の変更、クロック速度の変更、および周波数を変更するタイミングに関するルールは、CPUfreq ガバナーによって定義されます。

3.2.1. CPUfreq ドライバー

CPUfreq では、ACPI CPUfreq および Intel P-state の 2 種類のドライバーを使用することができます。

ACPI CPUfreq

ACPI CPUfreq ドライバーは、ACPI を通じて特定 CPU の周波数をコントロールするカーネルドライバーで、これによりカーネルとハードウェア間のコミュニケーションが可能になります。

Intel P-state

Red Hat Enterprise Linux 7 では、Intel P-state ドライバーがサポートされています。このドライバーの提供するインターフェースにより、Intel Xeon E シリーズアーキテクチャーまたはより新しいアーキテクチャーをベースとしたプロセッサーにおける P 状態の選択をコントロールすることができます。Intel P-state では setpolicy() コールバックが実装されています。ドライバーは、cpufreq コアから要求されたポリシーに応じて、使用すべき P 状態を判断します。プロセッサーが内部的に次の P 状態を選択する機能を持っていれば、ドライバーはこの責任をプロセッサーにオフロードします。持っていなければ、次の P 状態を選択するアルゴリズムをドライバーが実装します。
Intel P-state では、P 状態の選択をコントロールするための専用の sysfs ファイルを利用することができます。これらのファイルは、/sys/devices/system/cpu/intel_pstate/ ディレクトリーにあります。これらのファイルに加えたすべての変更は、すべての CPU に適用されます。このディレクトリーに含まれる 5 つのファイルを使用して、P 状態のパラメーターを設定します。
  • max_perf_pct: ドライバーから要求される最大の P 状態を制限します (利用可能なパフォーマンスのパーセンテージで定義)。利用可能な P 状態のパフォーマンスは、no_turbo 設定により低く抑えることができます (下記を参照)。
  • min_perf_pct: ドライバーから要求される最小の P 状態を制限します (最大 (no-turbo) パフォーマンスレベルのパーセンテージで定義)。
  • no_turbo: turbo 周波数範囲以下で P 状態を選択するようにドライバーを制限します。
  • turbo_pct: turbo 範囲にあるハードウェアがサポートするトータルパフォーマンスのパーセンテージを表示します。turbo が無効になっているかどうかは、この数値に影響を与えません。
  • num_pstates: ハードウェアがサポートする P 状態の数を表示します。turbo が無効になっているかどうかは、この数値に影響を与えません。
現在、Intel P-state に対応する CPU では、デフォルトで Intel P-state が使用されます。ACPI CPUfreq の使用に切り替えるには、カーネルコマンドラインに以下のパラメーターを追加します。
intel_pstate=disable

3.2.2. CPUfreq ガバナー

ガバナーは、システムの CPU の電力特性を定義します。これにより、CPU のパフォーマンスが影響を受けます。各ガバナーには、作業負荷に関してそれぞれ固有の動作、目的、および適合性があります。このセクションでは、CPUfreq ガバナーの選択および設定方法、各ガバナーの特性、および各ガバナーに適している作業負荷の種類について説明します。
Red Hat Enterprise Linux 7 では、異なるタイプの CPUfreq ガバナーが利用可能です。それらを以下に示します。
cpufreq_performance

Performance ガバナーは、CPU が最高クロック周波数を使用するように強制します。この周波数は静的に設定され、変化しないため、このガバナーでは、節電する利点はありません。このガバナーは、何時間にも渡るような作業負荷が大きい時だけ、しかも CPU がアイドル状態になることがほとんどない (もしくはまったくならない) 時のみに適しています。

cpufreq_powersave

一方、Powersave ガバナーは、CPU が最低クロック周波数を使用するように強制します。この周波数は静的に設定され変化しないため、このガバナーでは最大の節電を実現しますが、CPU パフォーマンスが一番低く なってしまいます。

しかし「節電 (Powersave) 」という用語は時に誤解を招きます。全負荷で遅い CPU は (原則として)、負荷がない高速の CPU よりも多くの電力を消費します。そのため、低活動が予期できる時には Powersave ガバナーを使用するよう CPU を設定することが推奨されますが、この期間中に予期しない高負荷が発生するとシステムは実際にはより多くの電力を消費することがあります。
Powersave ガバナーは簡単にいうと、CPU にとっては「節電」よりも「スピードリミッター」の意味を持ちます。これは、過熱が問題となる恐れがあるシステムや環境で最も役立ちます。
cpufreq_ondemand

Ondemand ガバナーは動的なガバナーです。システム負荷が大きい時は、CPU は最高クロック周波数を実現し、システムがアイドル状態の時には、CPU は最低クロック周波数を実現します。これにより、システム負荷に対してシステムは電力消費量を適宜調節できますが、そうすることで 周波数変換の間の遅延 が発生してしまいます。そのため、システムがアイドル状態と高負荷の間で頻繁に替わりすぎると、遅延により Ondemand ガバナーが実現できるパフォーマンスおよび/または節電の利点が少なくなる恐れがあります。

ほとんどのシステムでは、Ondemand ガバナーは熱の放出、消費電力、パフォーマンス、および管理のしやすさの間で、最良の妥協策を提供します。1 日の中で特定の時間帯にのみシステムがビジーになる場合は、Ondemand ガバナーはそれ以上介入せずに、負荷に応じて最高周波数と最低周波数の間で自動的に切り替わります。
cpufreq_userspace

Userspace ガバナーを使用すると、ユーザースペースプログラム (または、root で実行しているいずれのプロセス) が周波数を設定できます。Userspace ガバナーは、すべてのガバナーの中で最もカスタマイズ可能であり、設定によってはご使用のシステムでパフォーマンスと電力消費のバランスを最適化できます。

cpufreq_conservative

Ondemand ガバナーと同様に、Conservative ガバナーも使用量に応じてクロック周波数を調節します (Ondemand ガバナーと同様です)。ただし、Ondemand ガバナーがより積極的にクロック周波数を調節するのに対し (最高周波数から最低周波数、そして最高周波数に戻る)、Conservative ガバナーはもっとゆっくりと調節を行います。

これが意味しているのは、Conservative ガバナーは単に最高と最低の周波数を選択するのではなく、負荷に対して適切と判断するクロック周波数に合わせるということです。これは電力消費に著しく貢献する可能性がありますが、Ondemand ガバナーよりも 長い遅延で 行います。

注記

cron ジョブを使用してガバナーを有効にできます。これにより、1 日のある時間帯にあるガバナーを自動的に設定することができます。そのため、アイドル状態 (例えば終業後) の時には、低周波数のガバナーを指定し、高負荷となる時間帯には高周波数に戻るように設定できます。
特定のガバナーを有効にする方法については、「CPUfreq のセットアップ」を参照してください。

3.2.3. CPUfreq のセットアップ

すべての CPUfreq ドライバーは、kernel-tools パッケージの一部としてビルドされ、自動的に選択されます。したがって、ガバナーを選択するだけで CPUfreq をセットアップできます。
以下のコマンドを実行すると、特定の CPU に使用できるガバナーを表示できます。
~]# cpupower frequency-info --governors
以下のコマンドを実行すると、すべての CPU に対してこれらのいずれかのガバナーを有効にできます。
~]# cpupower frequency-set --governor [governor]
特定のコアに対してのみガバナーを有効にするには、CPU メンバーの範囲またはカンマ区切りリストとともに -c を使用します。たとえば、CPU 1〜3 および 5 の Userspace ガバナーを有効にするには、以下のコマンドを実行します。
~]# cpupower -c 1-3,5 frequency-set --governor cpufreq_userspace

3.2.4. CPUfreq ポリシーおよび速度のチューニング

適切な CPUfreq ガバナーを選択した後で、cpupower frequency-info コマンドを使用して CPU 速度とポリシー情報を表示できます。さらに、cpupower frequency-set のオプションを使用して、各 CPU の速度をチューニングできます。
cpupower frequency-info には、以下のオプションを使用できます。
  • --freq: CPUfreq コアに基いて現在の CPU の速度を KHz 単位で表示します。
  • --hwfreq: ハードウェアに基いて現在の CPU の速度を KHz 単位で表示します (root でのみ利用可能)。
  • --driver: この CPU の周波数を設定するために使用する CPUfreq ドライバーを表示します。
  • --governors: このカーネルで使用できる CPUfreq ガバナーを表示します。このファイルには表示されていない CPUfreq ガバナーを使用したい場合は、手順について「CPUfreq のセットアップ」を参照してください。
  • --affected-cpus: 周波数調整ソフトウェアを必要とする CPU を一覧表示します。
  • --policy: 現在の CPUfreq ポリシーの範囲 (KHz 単位) と現在アクティブなガバナーを表示します。
  • --hwlimits: CPU に使用できる周波数 (KHz 単位) を一覧表示します。
cpupower frequency-set では、以下のオプションを使用することができます。
  • --min <freq>--max <freq>: CPU の ポリシー制限 を KHz 単位で設定します。

    重要

    ポリシー制限を設定する場合は、--min よりも前に --max を設定する必要があります。
  • --freq <freq>: CPU に特定のクロック速度を KHz 単位で設定します。設定できる速度は CPU のポリシー制限内に限られます (--min--max)。
  • --governor <gov>: 新しい CPUfreq ガバナーを設定します。

注記

kernel-tools パッケージがインストールされていない場合、CPUfreq の設定は /sys/devices/system/cpu/[cpuid]/cpufreq/ 内にあるパラメーターで確認できます。設定と値は、これらのパラメーターに書き込むことにより変更できます。たとえば、cpu0 の最小クロック速度を 360 KHz に設定する場合は、以下のコマンドを使用します。
echo 360000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq