Raspberry Piのオーバークロック
前回、SDカードのバックアップをしたので今回はRaspberry Piのオーバクロックをしたいと思います。
バックアップをとっているので、オーバークロックが原因で万が一起動できなくなっても元に戻せるので安心ですね。
Raspberry Piのオーバークロックはとても簡単で
- raspi-configで設定
- 再起動
この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周波数などを見直してみようと思います。
最後に
オーバークロックした感想ですが、ベンチマークの性能で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