Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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-state 選択を制御するインターフェイスを提供します。Intel P-state は、setpolicy() コールバックを実装します。ドライバーは、cpufreq コアから要求されたポリシーに基づいて、使用する P-state を決定します。プロセッサーが次の P-state を内部で選択できる場合、ドライバーはこの責任をプロセッサーにオフロードします。そうでない場合は、次の P-state を選択するアルゴリズムがドライバーに実装されます。
Intel P-state は、P-state の選択を制御する独自の sysfs ファイルを提供します。これらのファイルは、/sys/devices/system/cpu/intel_pstate/ ディレクトリーにあります。ファイルに加えた変更は、すべての CPU に適用されます。このディレクトリーには、P-state パラメーターの設定に使用される 5 つのファイルが含まれています。
  • max_perf_pct : ドライバーが要求する最大 P ステートを制限し、利用可能なパフォーマンスのパーセンテージで表します。利用可能な P-state パフォーマンスは、no_turbo 設定により削減できます (以下を参照)。
  • min_perf_pct : min_perf_pct: ドライバーによって要求される最小 P ステートを制限します。最大 (ターボなし) パフォーマンスレベルのパーセンテージで表されます。
  • no_turbo : ドライバーがターボ周波数範囲未満の P ステートを選択するように制限します。
  • turbo_pct : ターボ範囲内のハードウェアによってサポートされる合計パフォーマンスの割合を表示します。この数は、ターボが無効になっているかどうかに関係ありません。
  • num_pstates : ハードウェアによってサポートされている P ステートの数を表示します。この数は、ターボが無効になっているかどうかに関係ありません。
現在、Intel P-state は、対応している CPU にデフォルトで使用されています。ユーザーは、カーネルコマンドラインに以下を追加することで、ACPI CPUfreq の使用に切り替えることができます。
intel_pstate=disable

3.2.2. CPUfreq ガバナー

CPUfreq ガバナーは、システム CPU の電源特性を定義します。これは、CPU パフォーマンスに影響を及ぼします。各ガバナーには、ワークロードに関する固有の動作、目的、および適合性があります。このセクションでは、CPUfreq ガバナーを選択して設定する方法、各ガバナーの特性、および各ガバナーが適しているワークロードの種類を説明します。
警告
Red Hat Enterprise Linux 7 には、複数のコア CPUfreq ガバナーが同梱されています。デフォルトでは、Intel P-state ドライバーはアクティブモードで動作します。アクティブモードでは、performancepowersave の 2 つの CPUfreq ガバナーのみが使用可能です。performance および省電力 powersave Intel P-state CPUfreq ガバナーの機能は、同じ名前のコア CPUfreq ガバナーとは異なることに注意してください。

3.2.2.1. コア CPUfreq ガバナー

Red Hat Enterprise Linux 7 で利用可能なさまざまなタイプの CPUfreq ガバナーを以下に示します。

cpufreq_performance

パフォーマンスガバナーは、CPU が可能な限り高いクロック周波数を使用するように強制します。この頻度は静的に設定され、変更されません。このため、この特定のガバナーでは 省電力の利点はありません。これは、数時間の負荷の高いワークロードにのみ適しています。その場合でも、CPU がめったに (またはまったく) アイドル状態にならない時間帯にのみ適しています。

cpufreq_powersave

対照的に、Powersave ガバナーは、CPU が可能な限り低いクロック周波数を使用するように強制します。この頻度は静的に設定され、変更されません。そのため、この特定のガバナーは電力を最大限に節約できますが、CPU パフォーマンスが最も低く なります。

ただし、(原則として) 全負荷時の低速 CPU は、負荷がかかっていない高速 CPU よりも多くの電力を消費するため、"powersave" という用語は誤解を招く場合があります。したがって、予想される低アクティビティー時に Powersave ガバナーを使用するように CPU を設定することが推奨されますが、その間に予想外の高負荷が発生すると、システムが実際により多くの電力を消費する可能性があります。
Powersave ガバナーは、簡単に言えば、「省電力」というよりも、CPU の「速度リミッター」です。これは、システムや、過熱が問題になる可能性がある環境で最も役立ちます。

cpufreq_ondemand

Ondemand ガバナーは動的なガバナーであり、システム負荷が高いときに CPU が最大クロック周波数を達成し、システムがアイドル状態のときに最小クロック周波数を達成できるようにします。これにより、システムはシステム負荷に応じて消費電力を調整できますが、周波数切り替えの間の待ち時間 はかかります。このため、システムがアイドル状態と高負荷のワークロードを頻繁に切り替える場合、レイテンシーは、Ondemand ガバナーが提供するパフォーマンスや省電力の利点を相殺することができます。

ほとんどのシステムでは、Ondemand ガバナーにより、放熱、電力消耗、性能、および管理可能性について最適な妥協点を見つけることができます。システムが 1 日の特定の時間にのみビジー状態の場合、Ondemand ガバナーは、それ以上の介入なしに、負荷に応じて最大周波数と最小周波数を自動的に切り替えます。

cpufreq_userspace

Userspace ガバナーを使用すると、ユーザー空間プログラム、または root で実行しているプロセスで頻度を設定できます。すべてのガバナーの中で、Userspace は最もカスタマイズ可能で、設定方法に応じて、システムのパフォーマンスと消費の最適なバランスを実現できます。

cpufreq_conservative

Ondemand ガバナーと同様に、Conservative ガバナーも使用状況に応じてクロック周波数を調整します。ただし、Ondemand ガバナーはより早く (つまり、最大から最小へ、またその逆) 切り替えますが、Conservative ガバナーはより時間をかけて周波数を切り替えます。

これは、Conservative ガバナーが、単純に最大値と最小値の間で選択するのではなく、負荷に適していると見なされるクロック周波数に調整することを意味します。これにより、消費電力を大幅に節約できる可能性がありますが、Ondemand ガバナーよりも はるかに長い遅延 が発生します。
注記
cron ジョブを使用してガバナーを有効にできます。これにより、指定した時間帯に特定のガバナーを自動的に設定できます。このため、(勤務時間後など) アイドル時間帯には低周波ガバナーを指定し、作業負荷が高い時間帯には高周波ガバナーに戻すことができます。
特定のガバナーを有効にする方法は、「CPUfreq セットアップ」 を参照してください。

3.2.2.2. Intel P-state の CPUfreq ガバナー

Intel P-state ドライバーは、次の 3 つの異なるモードで動作できます。
  • ハードウェア管理の P 状態 (HWP) によるアクティブモード
  • ハードウェア管理の P 状態 (HWP) を使用しないアクティブモード
  • パッシブモード
デフォルトで、Intel P-state ドライバーは、CPU が HWP に対応しているかどうかに応じて、HWP の有無にかかわらずアクティブモードで動作します。
Active mode with hardware-managed P-states
HWP でアクティブモードが使用されている場合、Intel P-state ドライバーは、P-state 選択を実行するように CPU に指示します。ドライバーは、周波数のヒントを提供できます。ただし、最終的な選択は CPU の内部ロジックによって異なります。
HWP でアクティブモードにすると、Intel P-state ドライバーにより、2 つの P-state 選択アルゴリズムが提供されます。
  • パフォーマンス
  • Powersave
Performance ガバナーを使用すると、ドライバーは内部 CPU ロジックにパフォーマンス指向になるように指示します。P-state の範囲は、ドライバーが使用できる範囲の上限に制限されます。
Powersave ガバナーを使用すると、ドライバーは、内部 CPU ロジックに省電力指向になるように指示します。
Active mode without hardware-managed P-states
HWP を使用しないアクティブモードの場合、Intel P-state ドライバーは次の 2 つの P-state 選択アルゴリズムを提供します。
  • パフォーマンス
  • Powersave
Performance ガバナーを使用すると、ドライバーは使用できる最大の P-state を選択します。
Powersave ガバナーを使用すると、ドライバーは、現在の CPU 使用率に比例する P-state を選択します。この動作は、Ondemand CPUfreq コアガバナーに似ています。
パッシブモード
passive モードを使用すると、Intel P-state ドライバーは、従来の CPUfreq スケーリングドライバーと同じように機能します。利用可能なすべての汎用 CPUFreq コアガバナーを使用できます。
Intel P-state ガバナーの詳細は、intel_pstate CPU Performance Scaling Driver を参照してください。

3.2.3. CPUfreq セットアップ

すべての CPUfreq ドライバーは kernel-tools パッケージの一部として組み込まれており、自動的に選択されるため、CPUfreq をセットアップするには、ガバナーを選択するだけで済みます。
以下を使用して、特定の CPU で使用できるガバナーを表示できます。
~]# cpupower frequency-info --governors
次に、以下を使用して、すべての CPU でこれらのガバナーの 1 つを有効にできます。
~]# 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 ガバナーを選択したら、cpupowerfrequency-info コマンドを使用して CPU 速度とポリシー情報を表示し、cpupowerfrequency-set のオプションを使用して各 CPU の速度をさらに調整できます。
cpupowerfrequency-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 単位でリストします。
cpupowerfrequency-set では、次のオプションが利用可能です。
  • --min <freq> および --max <freq> — CPU の ポリシー制限を KHz 単位で設定します。
    重要な影響
    ポリシー制限を設定するときは、--min の前に --max を設定する必要があります。
  • --freq <freq> — CPU の特定のクロック速度を KHz 単位で設定します。CPU のポリシー制限内でのみ速度を設定できます (--min および --max に従って)。
  • --governor <gov> — 新しい CPUfreq ガバナーを設定します。
注記
kernel-tools パッケージがインストールされていない場合は、/sys/devices/system/cpu/cpuid/cpufreq/ にある調整パラメーターで CPUfreq 設定を確認できます。設定および値は、この調整可能パラメーターに書き込むことで変更できます。たとえば、最小クロック速度の cpu0 から 360 KHz を設定するには、次のコマンドを使用します。
echo 360000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq