Difference between revisions of "CPU Frequency Scaling (日本語)"

From ArchWiki
Jump to: navigation, search
(update link(s) (avoid redirect))
m (CPU 周波数ドライバー: remove needless attributes from wiki tables and/or use class="wikitable")
Line 59: Line 59:
 
''cpupower'' はネイティブ CPU の制限を知るためにモジュールを必要とします:
 
''cpupower'' はネイティブ CPU の制限を知るためにモジュールを必要とします:
  
{| border="1"
+
{| class="wikitable"
 
!モジュール!!説明
 
!モジュール!!説明
 
|-
 
|-

Revision as of 10:01, 16 March 2014

Template:Related articles start (日本語)

  • Power saving
  • Laptop Mode Tools
  • pm-utils
  • PHC
  • </ul></div>

    CPU 周波数スケーリングを使うことで電力を節約するためにオペレーティングシステムが CPU の周波数を調整することが出来るようになります。CPU の周波数はユーザースペースのプログラムを使って手動で変更したり、システムの負担や、ACPI イベントにあわせて自動的に調整することが可能です。

    CPU 周波数スケーリングは Linux カーネル内に実装されており、そのインフラストラクチャは cpufreq と呼ばれています。カーネル 3.4 から必要なモジュールが自動でロードされるようになり推奨の ondemand governor がデフォルトで有効になっています。しかしながら、cpupower, acpid, Laptop Mode Tools などのユーザースペースツールや、デスクトップ環境から提供されている GUI ツールを使って高度な設定をすることも可能です。

    ユーザースペースツール

    cpupower

    cpupower は CPU 周波数スケーリングを手伝うように作られたユーザースペースのユーティリティの集まりです。このパッケージがなくてもスケーリングを使うことはできますが、便利なコマンドラインユーティリティや起動時に governor を変えるための systemd のサービスが入っているためインストールすることが推奨されています。

    cpupower の設定ファイルは /etc/default/cpupower です。この設定ファイルは /usr/lib/systemd/scripts/cpupower の bash スクリプトによって読み込まれます。bash スクリプトは cpupower.servicesystemd によって有効にされます。ブート時に起動するには cpupower.service を有効にしてください。

    GNOME Shell 拡張

    GNOME Shell のフロントエンドがいくつか AUR で利用できます:

    Granola

    GranolaAUR (AUR から利用できます) は cpu の使用量を監視して userspace governor を使ってパフォーマンスに影響を与えずに電力使用量を減らすデーモンです。ほとんどの環境ではデフォルトの設定で動作します。

    動作するかテストするには、次を実行してください:

    $ cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
    

    そして CPU の周波数が最大値を下回っているか確認してください。

    CPU 周波数ドライバー

    Note:
    • カーネル 3.4 から、ネイティブ CPU モジュールは自動的にロードされます。
    • カーネル 3.9 から、新しい Intel の CPU には下に書かれているドライバーの代わりに新しい pstate パワースケーリングドライバーが自動的に使われます。このドライバーは他のドライバーよりも優先され、モジュールではなく初めから備えられています。現在 Sandy Bridge や Ivy Bridge などの CPU でこのドライバーが自動的に使用されます。このドライバーを使っていて問題が生じた際は、kernel 行に intel_pstate=disable を追加してください。同じユーザースペースユーティリティを使うこともできますがコントロールはできません。
    • 上記の P State の挙動は /sys/devices/system/cpu/intel_pstate で変えることができます。例えば、CPU の温度を低く保つために # echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo で Intel Turbo Boost を無効にすることが可能です。
    • 新しい Intel の CPU は Linux Thermal Daemon (AUR の thermaldAUR から使えます) でコントロールでき P-states, T-states, Intel power clamp ドライバーを使って熱を積極的にコントロールします。

    cpupower はネイティブ CPU の制限を知るためにモジュールを必要とします:

    モジュール 説明
    acpi-cpufreq ACPI Processor Performance States を利用する CPUFreq ドライバー。このドライバーは Intel Enhanced SpeedStep もサポートしています (以前は speedstep-centrino モジュールによってサポートされていました)。
    speedstep-lib Intel speedstep が有効になっているプロセッサ (ほとんどの atom と古い pentium (< 3)) の CPUFreq ドライバー。
    powernow-k8 K8/K10 Athlon64/Opteron/Phenom プロセッサの CPUFreq ドライバー。linux 3.7 からは廃止されているので、acpi_cpufreq を使って下さい。
    pcc-cpufreq このドライバーは Proliant サーバーで使われている Hewlett-Packard と Microsoft Corporation による Processor Clocking Control インターフェイスをサポートしています。
    p4-clockmod Intel Pentium 4 / Xeon / Celeron プロセッサの CPUFreq ドライバー。有効にするとクロックをスキップして CPU の温度を下げます。
    基本的には Speedstep ドライバーを使って下さい。

    利用可能なモジュールの完全なリストを表示するには、次を実行してください:

    $ ls /lib/modules/$(uname -r)/kernel/drivers/cpufreq/
    

    適切なモジュールをロードしてください (詳しくはカーネルモジュールを見て下さい)。cpufreq ドライバーが正しくロードされていれば、次のコマンドで CPU の詳細が表示されます:

    $ cpupower frequency-info
    

    最大・最小周波数を設定する

    ごく稀に、手動で最大・最小周波数を設定しなくてはならないことがあります。

    最大クロック周波数を設定するには (clock_freq には単位を付けて下さい: GHz, MHz):

    # cpupower frequency-set -u clock_freq
    

    最小クロック周波数を設定するには:

    # cpupower frequency-set -d clock_freq
    

    CPU を特定の周波数で動作するように設定するには:

    # cpupower frequency-set -f clock_freq
    
    Note:
    • 単一の CPU コアだけを調整するには、-c core_number を加えて下さい。
    • governor, 最大・最小周波数は /etc/default/cpupower で設定できます。

    スケーリング governor

    Governors (see table below) are power schemes for the cpu. Only one may be active at a time. For details, see the kernel documentation in the kernel source.

    Governor 説明
    ondemand cpu の負担が 95% の時に CPU を動的に切り替えます
    performance 最大周波数で cpu を動作させます
    conservative 負担が 75% の時に CPU を動的に切り替えます
    powersave 最小周波数で cpu を動作させます
    userspace ユーザーが指定した周波数で cpu を動作させます

    スケーリングドライバーによって、以上の governor の一つがデフォルトでロードされます:

    • AMD と古い Intel の CPU では ondemand
    • Intel Sandybridge 以降の CPU では powersave

    特定の governor を有効にするには、次を実行してください:

    # cpupower frequency-set -g governor
    
    Note:
    • 単一の CPU コアだけを調整するには、上のコマンドに -c core_number を加えて下さい。
    • governor を有効にするには特定のカーネルモジュール (cpufreq_governor) がロードされることを必要とします。カーネル 3.4 から、これらのモジュールは自動的にロードされます。

    Alternatively, you can activate a governor on every available CPU manually:

    # echo governor | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor >/dev/null
    
    Tip: cpu の速度をリアルタイムで表示するには、次を実行してください:
    $ watch grep \"cpu MHz\" /proc/cpuinfo
    

    ondemand governor を調整する

    詳細はカーネルドキュメントを見て下さい。

    threshold を切り替える

    To set the threshold for stepping up to another frequency:

    # echo -n percent > /sys/devices/system/cpu/cpufreq/<governor>/up_threshold
    

    To set the threshold for stepping down to another frequency:

    # echo -n percent > /sys/devices/system/cpu/cpufreq/<governor>/down_threshold
    

    サンプリングレート

    The sampling rate determines how frequently the governor checks to tune the CPU. Setting sampling_down_factor greater than 1 improves performance by reducing the overhead of load evaluation and keeping the CPU at its highest clock frequency due to high load. This tunable has no effect on behavior at lower CPU frequencies/loads.

    To read the value (default = 1), run:

    $ cat /sys/devices/system/cpu/cpufreq/ondemand/sampling_down_factor
    

    To set the value, run:

    # echo -n value > /sys/devices/system/cpu/cpufreq/ondemand/sampling_down_factor
    

    ACPI イベントとの対話

    Users may configure scaling governors to switch automatically based on different ACPI events such as connecting the AC adapter or closing a laptop lid. A quick example is given below, however it may be worth reading full article on acpid.

    Events are defined in /etc/acpi/handler.sh. If the acpid package is installed, the file should already exist and be executable. For example, to change the scaling governor from performance to conservative when the AC adapter is disconnected and change it back if reconnected:

    /etc/acpi/handler.sh
    [...]
    
    ac_adapter)
        case "$2" in
            AC*)
                case "$4" in
                    00000000)
                        echo "conservative" >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor    
                        echo -n $minspeed >$setspeed
                        #/etc/laptop-mode/laptop-mode start
                    ;;
                    00000001)
                        echo "performance" >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
                        echo -n $maxspeed >$setspeed
                        #/etc/laptop-mode/laptop-mode stop
                    ;;
                esac
            ;;
            *) logger "ACPI action undefined: $2" ;;
        esac
    ;;
    
    [...]
    

    GNOME での特権取得

    Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

    Reason: See the note below. (Discuss in Talk:CPU Frequency Scaling (日本語)#)
    Note: systemd introduced logind which handles consolekit and policykit actions. The following code below does not work. With logind, simply edit in the file /usr/share/polkit-1/actions/org.gnome.cpufreqselector.policy the <defaults> elements according to your needs and the polkit manual [1].

    GNOME has a nice applet to change the governor on the fly. To use it without the need to enter the root password, simply create following file:

    /var/lib/polkit-1/localauthority/50-local.d/org.gnome.cpufreqselector.pkla
    [org.gnome.cpufreqselector]
    Identity=unix-user:user
    Action=org.gnome.cpufreqselector
    ResultAny=no
    ResultInactive=no
    ResultActive=yes

    Where the word user is replaced with the username of interest.

    The desktop-privilegesAUR package in the AUR contains a similar .pkla file for authorizing all users of the power group to change the governor.

    トラブルシューティング

    Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

    Reason: please use the first argument of the template to provide a brief explanation. (Discuss in Talk:CPU Frequency Scaling (日本語)#)
    • Some applications, like ntop, do not respond well to automatic frequency scaling. In the case of ntop it can result in segmentation faults and lots of lost information as even the on-demand governor cannot change the frequency quickly enough when a lot of packets suddenly arrive at the monitored network interface that cannot be handled by the current processor speed.
    • Some CPU's may suffer from poor performance with the default settings of the on-demand governor (e.g. flash videos not playing smoothly or stuttering window animations). Instead of completely disabling frequency scaling to resolve these issues, the aggressiveness of frequency scaling can be increased by lowering the up_threshold sysctl variable for each CPU. See how to change the on-demand governor's threshold.
    • Sometimes the on-demand governor may not throttle to the maximum frequency but one step below. This can be solved by setting max_freq value slightly higher than the real maximum. For example, if frequency range of the CPU is from 2.00 GHz to 3.00 GHz, setting max_freq to 3.01 GHz can be a good idea.
    • Some combinations of ALSA drivers and sound chips may cause audio skipping as the governor changes between frequencies, switching back to a non-changing governor seems to stop the audio skipping.

    BIOS 周波数の制限

    Some CPU/BIOS configurations may have difficulties to scale to the maximum frequency or scale to higher frequencies at all. This is most likely caused by BIOS events telling the OS to limit the frequency resulting in /sys/devices/system/cpu/cpu0/cpufreq/bios_limit set to a lower value.

    Either you just made a specific Setting in the BIOS Setup Utility, (Frequency, Thermal Management, etc.) you can blame a buggy/outdated BIOS or the BIOS might have a serious reason for throttling the CPU on it's own.

    Reasons like that can be (assuming your machine's a notebook) that the battery is removed (or near death) so you're on AC-power only. In this case a weak AC-source might not supply enough electricity to fulfill extreme peak demands by the overall system and as there is no battery to assist this could lead to data loss, data corruption or in worst case even hardware damage!

    Not all BIOS'es limit the CPU-Frequency in this case, but for example most IBM/Lenovo Thinkpads do. Refer to thinkwiki for more thinkpad related info on this topic.

    If you checked there's not just an odd BIOS setting and you know what you're doing you can make the Kernel ignore these BIOS-limitations.

    Warning: Make sure you read and understood the section above. CPU frequency limitation is a safety feature of your BIOS and you should not need to work around it.

    A special parameter has to be passed to the processor module.

    For trying this temporarily change the value in /sys/module/processor/parameters/ignore_ppc from 0 to 1.

    For setting it permanent refer to Kernel modules or just read on. Add processor.ignore_ppc=1 to your kernel boot line or create

    /etc/modprobe.d/ignore_ppc.conf
    # If the frequency of your machine gets wrongly limited by BIOS, this should help
    options processor ignore_ppc=1

    参照