Raspberry Pi 3 CPUクロック設定(オーバークロック)

cpufrq00
LXPanelにプラグイン(CPUFreq フロントエンド)を追加するとCPU周波数が確認できます。
ですが負荷によって動作周波数がアップしている気配がありません。
powersaveというところが気になったのでCPU周波数を確認してみました。

ファームウエア

$ uname -a
Linux pi3 4.4.7-v7+ #876 SMP Tue Apr 12 22:28:41 BST 2016 armv7l GNU/Linux

下記はデフォルトの設定、または/boot/config.txtで指定された値を取得します。

$ vcgencmd get_config arm_freq
arm_freq=1200

下記のコマンドは実際の周波数を取得します。

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
600000
$ vcgencmd measure_clock arm
frequency(45)=600000000

確認してみましょう。

$ watch vcgencmd measure_clock arm
Every 2.0s: vcgencmd measure_clock arm                  Wed Apr 12 21:18:01 2016

frequency(45)=600000000

web browserなどを起動して負荷を掛けます。
2秒事に更新しますが全く1.2Gにアップする様子はありません。
デフォルトでは600MHzで動作しているのね。
Ctl+cでexit

Warning
下記の作業記録は最悪Raspberry Piを破損させてしまう可能性があります。
実行するには最低限ヒートシンク+ファンが必要です。安易に実行しないでください。
もし実行するにしてもくれぐれも自己責任にて願います。

debianにはcpufrequtilsというユーティリティがあるのでrasbianで探してインストールします。

$ apt search cpufrequtils
cpufrequtils/stable,now 008-1 armhf
  utilities to deal with the cpufreq Linux kernel feature

# apt install cpufrequtils

cpufreq01
再起動するとpowersaveからondemandに変更されています。詳細な解説は他のサイトの方々が書かれていますのでここでは簡単に眺めてみます。

cpufreq-info

$ cpufreq-info
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
  driver: BCM2835 CPUFreq
  CPUs which run at the same hardware frequency: 0 1 2 3
  CPUs which need to have their frequency coordinated by software: 0 1 2 3
  maximum transition latency: 355 us.
  hardware limits: 600 MHz - 1.20 GHz
  available frequency steps: 600 MHz, 1.20 GHz
  available cpufreq governors: conservative, ondemand, userspace, powersave, performance
  current policy: frequency should be within 600 MHz and 1.20 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency is 600 MHz.
  cpufreq stats: 600 MHz:95.95%, 1.20 GHz:4.05%  (132)
analyzing CPU 1:
---- snip -----
analyzing CPU 2:
---- snip -----
analyzing CPU 3:
---- snip -----

Raspberry Pi 3の場合は600MHzと1.2GHzの2ステップで動作します。

governor(ガバナ)
performance  max 1.2GHz動作(固定)
ondemand   600MHz<–>1.2GHz レスポンス早い
conservative  600MHz<–>1.2GHz レスポンス遅い
powersave   min 600MHz動作(固定)
userspace   今回未検証
ガバナの動作を超簡単に説明するとこんな感じかと思います。

cpufreq-set
# cpufreq-set -g ガバナ名
但し再起動すると以下の起動時の設定が摘要されます。

# cpufreq-set -g performance

Raspberry Pi 3の起動時の設定
cpufrequtilsをインストールすると/etc/init.d/cpufrequtilsのファイルができます。
43行目あたりのGOVERNORの項を起動時に動作させたいガバナ名を記述します。
MAX_SPEED,MIN_SPEEDは0のままにしておきます。

/etc/init.d/cpufrequtils
ENABLE="true"
GOVERNOR="ondemand"
MAX_SPEED="0"
MIN_SPEED="0"

それでは確認してみましょう。LXTerminalを2つ開きます。
cpufreq021つは動作周波数を監視します。
$ watch vcgencmd measure_clock armを実行

もう1つはガバナを切り替えます。

cpufreq03# cpufreq-set -g performance
# cpufreq-set -g powersave
# cpufreq-set -g ondemand
# cpufreq-set -g conservative

ガバナを切り替えると即反映されます。
web browserなどで各ガバナの周波数の切り替わりやCPU温度の上がり具合などを確認できます。
比較的重いプログラミングのMathematicaは起動時間でperformanceとpowersaveの違いが確認できます。
performanceは重いプログラムを連続実行するとCPU温度がどんどん上昇するので注意が必要です。
UnixBenchを実行すると非力なクーラーではリミットの80℃を超えてきます。

cpufreq04

オーバークロック
clock01
Raspberry Pi 3は公式にはオーバークロックはサポートされていません。

しかし/boot/config.txtに今までどおり書いてやると反映されるようです。
参考 Overclocking Raspberry Pi 3

以下を摘要してみました。

# overclock
arm_freq=1300
over_voltage=5
gpu_freq=500
# sdram overclock
sdram_freq=500
sdram_schmoo=0x02000020
over_voltage_sdram_p=6
over_voltage_sdram_i=4
over_voltage_sdram_c=4

当サイトのpi3では特に問題無く稼働するようです。

$ cpufreq-info -c 0
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
  driver: BCM2835 CPUFreq
  CPUs which run at the same hardware frequency: 0 1 2 3
  CPUs which need to have their frequency coordinated by software: 0 1 2 3
  maximum transition latency: 355 us.
  hardware limits: 600 MHz - 1.30 GHz
  available frequency steps: 600 MHz, 1.30 GHz
  available cpufreq governors: conservative, ondemand, userspace, powersave, performance
  current policy: frequency should be within 600 MHz and 1.30 GHz.
                  The governor "performance" may decide which speed to use
                  within this range.
  current CPU frequency is 1.30 GHz.
  cpufreq stats: 600 MHz:13.20%, 1.30 GHz:86.80%  (1)

ダウンクロック
600MHzより低いクロックを設定してみました。
arm_freq=300
正常に起動しますがfrequency steps: 300 MHz, 300 MHzとなっているためガバナを変更しても何も変わりません。

$ cpufreq-info -c 0
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
  driver: BCM2835 CPUFreq
  CPUs which run at the same hardware frequency: 0 1 2 3
  CPUs which need to have their frequency coordinated by software: 0 1 2 3
  maximum transition latency: 355 us.
  hardware limits: 300 MHz - 300 MHz
  available frequency steps: 300 MHz, 300 MHz
  available cpufreq governors: conservative, ondemand, userspace, powersave, performance
  current policy: frequency should be within 300 MHz and 300 MHz.
                  The governor "performance" may decide which speed to use
                  within this range.
  current CPU frequency is 300 MHz.
  cpufreq stats: 300 MHz:100.00%

考察、運用について
起動時はpowersaveまたはondemandで起動する。
通常運用時はガバナを変更しても特に問題無い。
performance時は重いプログラムを連続稼働しない。
CPUヒートシンク+ファンで運用する。
CPU温度に気をつける。
1.3GHzでも特に問題ないようだ。
電源はUSBに消費電流の多いものを接続しなければ2Aでも問題ない。

以上を踏まえて必要に応じてガバナを切り替えて運用してみたいと思います。
cpufreq06
zenityで簡単なダイアログを作成します。

(piで馴染のあるshutdown画面です)

#!/bin/sh
ACTION=$(zenity --list --radiolist \
  --hide-header \
  --title="Cpufrequtils" \
  --text="What would you like to do?" \
  --column "Select" --column="Action" TRUE "performance" FALSE "ondemand" FALSE "conservative" FALSE "powersave")

if [ "$ACTION" = "performance" ]; then
  clear
  sudo cpufreq-set -g performance
elif [ "$ACTION" = "ondemand" ]; then
  clear
  sudo cpufreq-set -g ondemand
elif [ "$ACTION" = "conservative" ]; then
  clear
  sudo cpufreq-set -g conservative
elif [ "$ACTION" = "powersave" ]; then
  clear
  sudo cpufreq-set -g powersave
else
  clear
  echo "cancel"
fi

pi以外のユーザーで実行するにはsudoersに登録する必要があります。
上記を適当なファイル名(cpufreq)にしてホームディレクトリ/binに保存します。

pi@raspberrypi ~ $ mkdir bin
pi@raspberrypi ~ $ cd bin
pi@raspberrypi ~ $ ls -l
-rw-r--r-- 1 pi pi 603  4月 14 02:13 cpufreq
pi@raspberrypi ~ $ chmod 700 cpufreq
pi@raspberrypi ~ $ ls -l
-rwx------ 1 pi pi 603  4月 14 02:13 cpufreq

ディスクトップにショートカットを作成する
cpufreq07
作成したファイルは実行可能ですが実行確認の画面が出るのでショートカットから呼び出します。
alacarte(Main Menu Editor)を起動します。
新しいアイテムからcpufreqを作成OK Main menu OK 閉じます。

cpufreq08
PCManFMファイルマネージャを起動します。
/home/pi/.local/share/applicationsに作成したcpufreqが登録されています。

cpufreqをディスクトップにドラッグしてあとは適当にアイコンを変更します。

cpufreq09
cpufreq10

openbox右クリックメニューに登録するのも使いやすいと思います。