Red Hat Training

A Red Hat training course is available for RHEL 8

17.3. CPUfreq の概要

システムの消費電力と熱出力を低減する最も効果的な方法の 1 つが CPUfreq です。これは、Red Hat Enterprise Linux 8 の x86 アーキテクチャーおよび ARM64 アーキテクチャーで対応しています。CPUfreq は CPU 速度スケーリングとも呼ばれ、Linux カーネルのインフラストラクチャーで、電力を節約するために CPU 周波数をスケーリングできます。

CPU スケーリングは、Advanced Configuration and Power Interface (ACPI) イベントに応じて、またはユーザー空間プログラムにより手動でシステムの負荷に応じて自動的に行われるため、プロセッサーのクロック速度を即座に調整できます。これにより、システムは減速したクロック速度で実行でき、電力を節約できます。周波数のシフトに関するルール (クロック速度の高速化または低速化、および周波数のシフト) は、CPUfreq ガバナーで定義されています。

root で cpupower frequency-info コマンドを使用すると、cpufreq の情報を表示できます。

17.3.1. CPUfreq ドライバー

root で cpupower frequency-info --driver コマンドを使用すると、現在の CPUfreq ドライバーを表示できます。

使用可能な CPUfreq 用のドライバーは、以下の 2 つです。

ACPI CPUfreq
Advanced Configuration and Power Interface (ACPI) の CPUfreq ドライバーは、ACPI を介して特定の CPU の周波数を制御するカーネルドライバーです。これにより、カーネルとハードウェア間の通信が保証されます。
Intel P-state

Red Hat Enterprise Linux 8 では、Intel P-state ドライバーに対応しています。このドライバーは、Intel Xeon E シリーズアーキテクチャーまたは新しいアーキテクチャーに基づくプロセッサーで、P-state 選択を制御するインターフェイスを提供します。

現在、Intel P-state は、対応している CPU にデフォルトで使用されています。intel_pstate=disable コマンドをカーネルコマンドラインに追加すると、ACPI CPUfreq の使用に切り替えることができます。

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 パラメーターの設定に使用される以下のファイルが含まれます。

  • max_perf_pct は、ドライバーによって要求される最大 P-state を制限します。これは、使用可能なパフォーマンスのパーセンテージで表されます。利用可能な P-state パフォーマンスは、no_turbo 設定により削減できます。
  • min_perf_pct は、ドライバーによって要求される最小の P-state を制限します。これは、最大の no-turbo パフォーマンスレベルのパーセンテージで表されます。
  • no_turbo は、ドライバーを、ターボ周波数レンジの下にある P-state を選択するように制限します。
  • turbo_pct は、対応しているハードウェアのパフォーマンス合計のうち、ターボ領域にあるものの割合を表示します。この数字は、turbo が無効になっているかどうかに関係ありません。
  • num_pstates は、ハードウェアで対応している P-state の数を表示します。この数は、ターボが無効になっているかどうかに関係ありません。

関連情報

  • man ページの cpupower-frequency-info(1)

17.3.2. コア CPUfreq ガバナー

CPUfreq ガバナーは、システム CPU の電源特性を定義します。これは、CPU パフォーマンスに影響を及ぼします。各ガバナーには、ワークロードに関する固有の動作、目的、および適合性があります。cpupower frequency-info --governor コマンドを root で実行すると、利用可能な CPUfreq ガバナーを表示できます。

Red Hat Enterprise Linux 8 には、複数のコア CPUfreq ガバナーが同梱されています。

cpufreq_performance
CPU は、可能な限り最も高いクロック周波数を使用するように強制されています。この周波数は静的に設定され、変更されません。このため、この特定のガバナーでは省電力の利点はありません。これは、ワークロードが重い時間帯にのみ適しており、CPU がめったにアイドル状態にならないか、まったくアイドル状態にならない時間帯にのみ適しています。
cpufreq_powersave
CPU は、可能な限り最低のクロック周波数を使用するように強制されています。この周波数は静的に設定され、変更されません。このガバナーを使用すると、最大限の電力を削減できますが、CPU パフォーマンスは低くなります。ただし、原則として、全負荷時の低速 CPU は、負荷がかかっていない高速 CPU よりも多くの電力を消費するため、"powersave" という用語は誤解を招く場合があります。したがって、予想される低アクティビティー時に powersave ガバナーを使用するように CPU を設定することが推奨されますが、その間に予想外の高負荷が発生すると、システムが実際により多くの電力を消費する可能性があります。powersave ガバナーは、省電力というよりも CPU の速度リミッターです。これは、システムや、過熱が問題になる可能性がある環境で最も役立ちます。
cpufreq_ondemand
これは動的ガバナーで、システムの負荷が高い場合には CPU を有効にして最大クロック周波数を実現し、システムがアイドル状態の場合には最小クロック周波数を実現できます。これにより、システムはシステム負荷に応じて消費電力を調整できますが、周波数切り替えの間の待ち時間はかかります。このため、システムがアイドル状態と高負荷のワークロードを頻繁に切り替える場合、レイテンシーは、ondemand ガバナーが提供するパフォーマンスや省電力の利点を相殺することができます。ほとんどのシステムでは、ondemand ガバナーにより、放熱、電力消耗、性能、および管理可能性について最適な妥協点を見つけることができます。システムが 1 日の特定の時間にのみビジー状態の場合、ondemand ガバナーは、それ以上の介入なしに、負荷に応じて最大周波数と最小周波数を自動的に切り替えます。
cpufreq_userspace
これにより、ユーザー空間プログラムや root で実行しているプロセスが、周波数を設定できます。すべてのガバナーの中で、userspace は最もカスタマイズ可能で、設定方法に応じて、システムのパフォーマンスと消費の最適なバランスを実現できます。
cpufreq_conservative
ondemand ガバナーと同様に、conservative ガバナーも用途に合わせてクロック周波数を調整します。ただし、conservative ガバナーは、周波数を徐々に切り替えます。つまり、conservative ガバナーは、単に最大/最小を選択するのではなく、負荷に対して最善と思われるクロック周波数に調整されます。これにより、消費電力を大幅に節約できる可能性がありますが、ondemand ガバナーよりもはるかに長い遅延が発生します。
注記

cron ジョブを使用して、ガバナーを有効にできます。これにより、指定した時間帯に特定のガバナーを自動的に設定できます。このため、勤務時間後など、アイドル時間帯には低周波ガバナーを指定し、作業負荷が高い時間帯には高周波ガバナーに戻すことができます。

指定したガバナーを有効にする手順については、Setting up CPUfreq governor を参照してください。

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

デフォルトで、Intel P-state ドライバーは、CPU が HWP に対応しているかどうかに応じて、Hardware p-state (HWP) の有無にかかわらずアクティブモードで動作します。

cpupower frequency-info --governor コマンドを root で実行すると、利用可能な CPUfreq ガバナーを表示できます。

注記

performance および powersave Intel P-state CPUfreq ガバナーの機能は、同じ名前のコア CPUfreq ガバナーと比較されます。

Intel P-state ドライバーは、以下の 3 つの異なるモードで動作できます。

Active mode with hardware-managed P-states

HWP でアクティブモードが使用されている場合、Intel P-state ドライバーは、P-state 選択を実行するように CPU に指示します。ドライバーは、周波数のヒントを提供できます。ただし、最終的な選択は CPU の内部ロジックによって異なります。HWP でアクティブモードにすると、Intel P-state ドライバーにより、2 つの P-state 選択アルゴリズムが提供されます。

  • performance: performance ガバナーを使用すると、ドライバーは内部 CPU ロジックにパフォーマンス指向になるように指示します。P-state の範囲は、ドライバーが使用できる範囲の上限に制限されます。
  • powersave: powersave ガバナーを使用すると、ドライバーは、内部 CPU ロジックに省電力指向になるように指示します。
Active mode without hardware-managed P-states

HWP を使用しないアクティブモードの場合、Intel P-state ドライバーは次の 2 つの P-state 選択アルゴリズムを提供します。

  • performance: performance ガバナーを使用すると、ドライバーは使用できる最大の P-state を選択します。
  • powersave: powersave ガバナーを使用すると、ドライバーは、現在の CPU 使用率に比例する P-state を選択します。この動作は、ondemand CPUfreq コアガバナーに似ています。
パッシブモード
passive モードを使用すると、Intel P-state ドライバーは、従来の CPUfreq スケーリングドライバーと同じように機能します。利用可能なすべての汎用 CPUFreq コアガバナーを使用できます。

17.3.4. CPUfreq ガバナーの設定

すべての CPUfreq ドライバーは kernel-tools パッケージに組み込まれ、自動的に選択されます。CPUfreq を設定するには、ガバナーを選択する必要があります。

前提条件

  • cpupower を使用するには、kernel-tools をインストールします。

    # yum install kernel-tools

手順

  1. 特定の CPU で使用できるガバナーを表示します。

    # cpupower frequency-info --governors
    analyzing CPU 0:
      available cpufreq governors: performance powersave
  2. すべての CPU で、ガバナーのいずれかを有効にします。

    # cpupower frequency-set --governor performance

    必要に応じて、performance ガバナーを、cpufreq ガバナー名に置き換えます。

    特定のコアでガバナーのみを有効にするには、CPU 番号の範囲またはコンマ区切りのリストで -c を使用します。たとえば、CPU 1-3 および 5 の userspace ガバナーを有効にするには、次のコマンドを使用します。

    # cpupower -c 1-3,5 frequency-set --governor cpufreq_userspace
注記

kernel-tools がインストールされていない場合は、/sys/devices/system/cpu/cpuid/cpufreq/ ディレクトリーに CPUfreq 設定が表示されます。設定および値は、この調整可能パラメーターに書き込むことで変更できます。たとえば、最小クロック速度の cpu0 から 360MHz を設定するには、次のコマンドを使用します。

# echo 360000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq

検証

  • ガバナーが有効になっていることを確認します。

    # cpupower frequency-info
    analyzing CPU 0:
      driver: intel_pstate
      CPUs which run at the same hardware frequency: 0
      CPUs which need to have their frequency coordinated by software: 0
      maximum transition latency:  Cannot determine or is not supported.
      hardware limits: 400 MHz - 4.20 GHz
      available cpufreq governors: performance powersave
      current policy: frequency should be within 400 MHz and 4.20 GHz.
            The governor "performance" may decide which speed to use within this range.
      current CPU frequency: Unable to call hardware
      current CPU frequency: 3.88 GHz (asserted by call to kernel)
      boost state support:
        Supported: yes
        Active: yes

    現行ポリシーでは、直近で有効になった cpufreq ガバナーが表示されます。この場合、performance になります。

関連情報

  • man ページの cpupower-frequency-info(1) および cpupower-frequency-set(1)