あっかぎのページ

Raspberry Piのオーバークロック

20150225_3

前回、SDカードのバックアップをしたので今回はRaspberry Piのオーバクロックをしたいと思います。

バックアップをとっているので、オーバークロックが原因で万が一起動できなくなっても元に戻せるので安心ですね。

Raspberry Piのオーバークロックはとても簡単で

  1. raspi-configで設定
  2. 再起動

この2つの操作だけで簡単にオーバークロックができます。もともとは700MHzで動作していますがraspi-configからは次の選択肢が選べます。

Mode ARM core SDRAM overvolt
None 700 250 400 0
Modest 800 250 400 0
Medium 900 250 450 2
High 950 250 450 6
Turbo 1000 500 600 6
Pi2 1000 500 500 2
  • ARM:演算速度
  • core:GPU速度(主にグラフィック関係)
  • SDRAM:SDRAM速度
  • overvolt:ARM/GPUのcore電圧

デフォルトでは、一番上の「None」設定されています。下に行くほど高速で、最高は「Turbo」の1,000MHz(1GHz)となります。(Pi2は新しく発売されたRaspberry Pi 2用の設定だと思います)

オーバークロックの弊害は動作が不安定になったり寿命が短くなる可能性があることや消費電力が増えることです。使い方によってはダウンクロックすることで消費電力を押さえる場合もあります。Raspberry Piの場合はオーバークロックによる消費電力の増加は小さいようですね。(Raspberry Pi で消費電流を測定する)

Web上を見てみると900MHzくらいで動作実績が多いようで、1GHzは不安定となった報告も見られました。ぼくもTurbo設定では不安定になったので、Pi2に近い設定にして様子を見ています。

各設定については/boot/config.txtを直接編集することで細かく設定することも可能です。その他の詳細についてはこちらをご参照ください。

手順

それでは実際の手順を紹介します。と言っても簡単で、raspi-configでオーバークロックを選択して、次に動作させたいModeを選択して再起動すれば設定完了です。

$ sudo raspi-config

* 「7 Overclock」→「Mode選択」→「了解」
* 「設定画面」→「Finish」→「Would you like to reboot now?」→「Yes」

動作確認

まずはいつも通り起動するかを確認します。もし起動しなかった場合はshiftキーを押しっぱなしで起動させます。そうすると通常モードで立ち上がりますのでraspi-configで再設定してください。

オーバークロック動作はRaspberry Piの個体差がありますので、正常動作するモードを探すことになります。Webを見てみると900MHzくらいでの動作報告が多いので「Medium」くらいがいいかもしれないですね。

きちんと起動したら簡単な動作チェックをしてみます。動作チェックにはこちらのスクリプトを使います。

$ vi test.sh
$ sh test.sh

...
echo "Not crashed yet, probably stable."

test.shの中身 http://elinux.org/RPiconfig#Overclocking より

#!/bin/bash
#Simple stress test for system. If it survives this, it's probably stable.
#Free software, GPL2+

echo "Testing overclock stability..."

#Max out the CPU in the background (one core). Heats it up, loads the power-supply. 
nice yes >/dev/null &

#Read the entire SD card 10x. Tests RAM and I/O
for i in `seq 1 10`; do echo reading: $i; sudo dd if=/dev/mmcblk0 of=/dev/null bs=4M; done

#Writes 512 MB test file, 10x.
for i in `seq 1 10`; do echo writing: $i; dd if=/dev/zero of=deleteme.dat bs=1M count=512; sync; done

#Clean up
killall yes
rm deleteme.dat

#Print summary. Anything nasty will appear in dmesg.
echo -n "CPU freq: " ; cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
echo -n "CPU temp: " ; cat /sys/class/thermal/thermal_zone0/temp
dmesg | tail 

echo "Not crashed yet, probably stable."

CPUに負荷をかけてSDカードの読み書きをしています。最後にCPUの周波数と温度を記録しています。
30分近くかかりますが、最後のecho "Not crashed yet, probably stable."が出力されてdmesgに異常が無ければ正常動作が期待できるとのことです。※CPU温度にも注意して50℃より高い場合は1つ下のModeにした方がいいかもしれません。(夏場やケースに入れるとより厳しい条件となるので)

と・こ・ろ・が・・・

ぼくのRaspberry Piでは上のスクリプトをPassしたのですが、次のベンチマークで動作が止まってしまいました。なので、過信は禁物かも。ちなみに、ぼくは空冷効果のために裸運用です(^^;

性能チェック

オーバークロックして性能が向上したことを確認します。使うのはベンチマークソフトのUnixBenchを使います。

$ curl -O https://byte-unixbench.googlecode.com/files/UnixBench5.1.3.tgz
$ tar zxvf UnixBench5.1.3.tgz
$ cd UnixBench
$ make
$ ./Run

これでベンチマークが実行されます。完了には30分程度かかります。

結果は標準出力に出力されるのと合わせてresultsフォルダにraspberrypi-YYYY-MM-DD-RR(.html)の形でテキストとhtmlが保存されます。オーバークロックの成果を確認するためにオーバークロック前後のベンチマークをとれば比較しやすいと思います。

ぼくの場合はオーバークロックを「Pi2」(+overvolt=6)でしています。その結果がこちらになりました。

オーバークロック前 CPU周波数700MHz SD:class4(抜粋)

Dhrystone 2 using register variables        1665123.7 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                      268.2 MWIPS (10.0 s, 7 samples)
Execl Throughput                                192.7 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks         32747.4 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks            9788.0 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks         84042.7 KBps  (30.0 s, 2 samples)
Pipe Throughput                              134995.9 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  15522.1 lps   (10.0 s, 7 samples)
Process Creation                                488.3 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                    382.4 lpm   (60.1 s, 2 samples)
Shell Scripts (8 concurrent)                     48.7 lpm   (60.3 s, 2 samples)
System Call Overhead                         361545.8 lps   (10.0 s, 7 samples)

System Benchmarks Index Score                                          79.5

オーバークロック後 CPU周波数1000MHz SD:class4(抜粋)

Dhrystone 2 using register variables        2403777.9 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                      386.8 MWIPS (9.9 s, 7 samples)
Execl Throughput                                306.1 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks         54720.6 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           16317.5 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        138016.1 KBps  (30.0 s, 2 samples)
Pipe Throughput                              202328.2 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  26000.8 lps   (10.0 s, 7 samples)
Process Creation                                792.2 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                    601.3 lpm   (60.1 s, 2 samples)
Shell Scripts (8 concurrent)                     77.2 lpm   (60.7 s, 2 samples)
System Call Overhead                         519075.8 lps   (10.0 s, 7 samples)

System Benchmarks Index Score                                         124.6

CPU周波数比で1.4倍(=1000MHz/700MHz)近い差がそのままベンチマークの結果として出ています。特に計算に関する上3つの項目だけでなく、SDカードの読み書きについてもそのままCPU周波数の比率で差が出ていました。

実は、この結果はSDカードのclass4で行ったものですが、class10に変更してもclass4の結果とほぼ同じになりました。ぼくの場合ですがRaspberry Piを使うにおいては、SDカードのclassよりもCPU周波数の方が影響が大きい結果となりました。おそらくRaspberry Pi自体がSDカードのclassに応じて読み書き速度を変えていないためだと思います。参考にオーバクロック前のclass10のデータも載せておきます。

オーバークロック前 CPU周波数700MHz SD:class10(抜粋)

Dhrystone 2 using register variables        1664643.9 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                      268.2 MWIPS (10.0 s, 7 samples)
Execl Throughput                                192.6 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks         32624.0 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks            9819.5 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks         83411.0 KBps  (30.0 s, 2 samples)
Pipe Throughput                              135455.7 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  15520.1 lps   (10.0 s, 7 samples)
Process Creation                                494.0 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                    382.7 lpm   (60.1 s, 2 samples)
Shell Scripts (8 concurrent)                     48.8 lpm   (60.3 s, 2 samples)
System Call Overhead                         363135.7 lps   (10.0 s, 7 samples)

System Benchmarks Index Score                                          79.6

先ほど「ベンチマーク中に止まってしまいました」と書きましたが、止まったのは「Turbo」Modeでした。ファイルの読み書きのベンチ中に動作が止まってしまいました。再度挑戦しても同じように止まったのでTurboはあきらめました。

Also, note that SD card issues are usually affected by the core_freq, rather than the arm_freq, and that there is a surprisingly big jump in this (from 250 MHz to 500 MHz) between the High speed (950 MHz) and Turbo (1 GHz) presets in raspi-config.

SDカードがらみのトラブルはcore周波数の方が影響が大きいとのことで、このあたりの調整をすればよさそうです。

とりあえず、今は「Pi2」(+overvolt=6)でうまく動いています。このまましばらく24時間常時動作させてみて、様子がおかしくなったら上のようにcore周波数などを見直してみようと思います。

最後に

20150225_2

オーバークロックした感想ですが、ベンチマークの性能で1.4倍程度になりました。

それを体感できたのが、viで入力しているときでした。前までは文字補完の候補検索(他ファイル・ライブラリ検索)でかなりモタついていましたが、オーバークロック後は瞬間で文字補完ができるようになりました。あと、vi上で1画面の遷移もラグを感じないくらいまで性能が上がりました。

オーバークロックすることで、個人的には普段使いにはかなり使いやすくなりました。これでインストールにコンパイル作業が必要なときだけ注意すればRaspberry Piの作業でも十分使えそうです。コンパイル系は寝る前にということでw

最後にpcのベンチデータをのせておきます。これはノートPCのSurface Pro(CPU:1.7GHz/64bit RAM:4GB)で仮想エミュレーション上のvagrantで実行した結果です。オーバクロックしたRaspberry Pi(1GHz)よりも10倍近くてすごいですね!(値段も10倍以上ですがw)

Surface Pro(CPU:1.7GHz/64bit RAM:4GB) in vagrant

Dhrystone 2 using register variables       19627501.2 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     2703.6 MWIPS (10.1 s, 7 samples)
Execl Throughput                               4142.6 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        813857.5 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          233908.8 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       2105044.0 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1747120.2 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 316532.3 lps   (10.0 s, 7 samples)
Process Creation                              13164.1 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   7234.1 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    936.7 lpm   (60.0 s, 2 samples)
System Call Overhead                        2995579.8 lps   (10.0 s, 7 samples)

System Benchmarks Index Score                                        1389.6