# 動的電圧・周波数スケーリング（DVFS）ガバナーを構成する

Qualcomm Linuxカーネルベースラインは、システム要件に対応する動的な形で周波数スケーリングを管理するため、複数のDVFS実装をサポートしています。

## CPU DVFSガバナーを選択する

ガバナーを選択してシステムを電力またはパフォーマンスを基準に調整し、同時に `CPUfreq` ガバナー（`powersave/performance/schedutil` ）を変更することができます。デフォルトでは、CPU周波数ガバナーはQualcomm Linuxカーネルで `performance` に設定されています。

表：CPU DVFS変数

| 変数 | 説明 | パス |
| --- | --- | --- |
| scaling_governor<br>    Copy to clipboard | ガバナーをパフォーマンスに設定します。 | echo performance > /sys/devices/system/cpu/cpufreq/policy*/scaling_governor<br>    Copy to clipboard |
| scaling_max_freq<br>    Copy to clipboard | CPUクラスターの最高周波数を設定します。 | /sys/devices/system/cpu/cpufreq/policy*/scaling_max_freq<br>    Copy to clipboard |
| scaling_min_freq<br>    Copy to clipboard | CPUクラスターの最低周波数を設定します。 | /sys/devices/system/cpu/cpufreq/policy*/scaling_min_freq<br>    Copy to clipboard |

`CPUfreq` の詳細については、[CPU frequency and voltage scaling code in the Linux(TM) kernel](https://www.kernel.org/doc/Documentation/cpu-freq/governors.txt) を参照してください。

## キャッシュとメモリのDVFSガバナーを構成する

静的マップDVFSガバナーは、CPU動作周波数を以下のものに合わせます。

- レベル3キャッシュ（L3）
- 最終レベル・キャッシュ・コントローラー（LLCC）
- DDR RAM

CPU周波数ガバナーがパフォーマンスに設定されているか、システム内の負荷が原因で、CPU周波数が最大レベルの場合、L3、LLCC、DDRも最大周波数で実行されます。

このガバナーのドライバーは `drivers/cpufreq/qcom-cpufreq-hw.c` ファイルにあり、静的マッピングは `arch/arm64/boot/dts/qcom/sc7280.dtsi` ファイルにあります。

注釈

Qualcomm SoCの場合については、プラットフォーム専用のDTSIファイルでこの情報を参照してください。

もう一方の帯域幅モニター（BWMON）ガバナーは、CPUからLLCCへのトラフィックとCPUからDDRへのトラフィックの測定値に基づいて、LLCCとDDRの周波数を決定します。このガバナーのドライバーは `drivers/soc/qcom/icc-bwmon.c` ファイルにあります。

**CPU周波数** と **L3/DDR周波数** の間のマッピングは、電力またはパフォーマンスの要件に基づいて調整されます。

DTSIでは、CPUxノードごとに `operating-points-v2 = <&cpux_opp_table>` エントリーがあります。`cpux_opp_table` には、CPU、L3、DDRの各周波数間の静的マッピングが格納されます。

例：

cpu0_opp_300mhz: opp-300000000 {
       opp-hz = /bits/ 64 <300000000>;
       opp-peak-kBps = <800000 9600000>;
    };
    Copy to clipboard

CPU 0が300 MHzで動作する場合、L3に対して9600000が指定されます。これはL3の周波数が300,000 Hz（9600000/w）であることを表します。DDRに対して800,000 Hzが指定された場合、DDRの周波数は200,000 Hz（800000 / w）となります。

それぞれの式で、‘w’ は1サイクルで書き込むことができるバイト数を表します。

- DDRの場合、‘w’ は 4です（各チャネルはサイクルごとに2件のトランザクションを実行し、トランザクションごとに2バイトが処理されます）。
- L3の場合、‘w’ は32です（サイクルごとに1件のトランザクションが実行され、トランザクションごとに32バイトが処理されます）。

注釈

これらの値はDDRのチャネルごとに設定され、マッピングによりCPU周波数がメモリコントローラー（MC）チャネルの帯域幅に関連付けられます。このマップテーブルを調整すると、電力とパフォーマンスの特性に影響します。

動作パフォーマンス・ポイント（OPP）のフレームワークと構文については、[Generic OPP (Operating Performance Points) Bindings](https://www.kernel.org/doc/Documentation/devicetree/bindings/opp/opp.txt) を参照してください。

## スケジューラーDVFS設定を構成する

スケジューラーDVFS設定は `post_boot script` ファイルで定義されます。

すべての起動完了後設定は `meta-qcom-hwe/recipes-core/initscripts/files/post_boot.sh` スクリプトにあります。詳細については、[post_boot.sh](https://github.com/qualcomm-linux/meta-qcom-hwe/blob/scarthgap/recipes-core/initscripts/files/post_boot.sh) を参照してください。

Last Published: Jan 01, 2026

[Previous Topic
スケジューラーを構成する](https://docs.qualcomm.com/bundle/publicresource/80-70020-3JA/topics/scheduler.md) [Next Topic
pinctrlドライバーを構成する](https://docs.qualcomm.com/bundle/publicresource/80-70020-3JA/topics/pinctrl-configuration.md)