Raspberry Pi 4でオーバークロック
前書き
Raspberry Pi Advent Carendar 2019 4日目のもりねずみーです。
最近病んでます。
はい。
今回は油冷はしません。期待していた方、ごめんなさい。
理由は、Raspberry Pi 3B+以降に相応しい(?)CPUクーラーが売っていたため、それを利用します。
準備
- Raspberry Pi 4(本体)
- CPUクーラー(空冷) https://amzn.to/33OQlBa
- 電源
- 今回はAmazonで3A動作確認済み的なUSBアダプタを使いまわして、ケーブルはAnkerのPowerLineIIを使い、USB Type-Cから供給します。理由についてはType-C問題について詳しい記事がたくさんありますので、そちらを参考に。
- OS:Arch Linux ARM
- ストレージ:SSD
- Raspberry Pi 4でUSB3.0にようやく対応しましたので、SDカードにboot領域のみを格納して、SSDにroot領域を格納するようにしました。
- ちなみに、bootcode.binはRaspberry Pi 4では動作しませんでした。対応を期待します。
オーバークロック
とりあえず2GHzにしました。
/boot/config.txtに
over_voltage=6 arm_freq=2000 gpu_freq=750
UnixBench
# # # # # # # ##### ###### # # #### # # # # ## # # # # # # # ## # # # # # # # # # # # ## ##### ##### # # # # ###### # # # # # # ## # # # # # # # # # # # # ## # # # # # # # ## # # # # #### # # # # # ##### ###### # # #### # # Version 5.1.3 Based on the Byte Magazine Unix Benchmark Multi-CPU version Version 5 revisions by Ian Smith, Sunnyvale, CA, USA January 13, 2011 johantheghost at yahoo period com ------------------------------------------------------------------------------ Use directories for: * File I/O tests (named fs***) = /home/alarm/byte-unixbench/UnixBench/tmp * Results = /home/alarm/byte-unixbench/UnixBench/results ------------------------------------------------------------------------------ Use of uninitialized value in printf at ./Run line 1469. Use of uninitialized value in printf at ./Run line 1470. Use of uninitialized value in printf at ./Run line 1469. Use of uninitialized value in printf at ./Run line 1470. Use of uninitialized value in printf at ./Run line 1469. Use of uninitialized value in printf at ./Run line 1470. Use of uninitialized value in printf at ./Run line 1469. Use of uninitialized value in printf at ./Run line 1470. Use of uninitialized value in printf at ./Run line 1721. Use of uninitialized value in printf at ./Run line 1722. Use of uninitialized value in printf at ./Run line 1721. Use of uninitialized value in printf at ./Run line 1722. Use of uninitialized value in printf at ./Run line 1721. Use of uninitialized value in printf at ./Run line 1722. Use of uninitialized value in printf at ./Run line 1721. Use of uninitialized value in printf at ./Run line 1722. 1 x Dhrystone 2 using register variables 1 2 3 4 5 6 7 8 9 10 1 x Double-Precision Whetstone 1 2 3 4 5 6 7 8 9 10 1 x Execl Throughput 1 2 3 1 x File Copy 1024 bufsize 2000 maxblocks 1 2 3 1 x File Copy 256 bufsize 500 maxblocks 1 2 3 1 x File Copy 4096 bufsize 8000 maxblocks 1 2 3 1 x Pipe Throughput 1 2 3 4 5 6 7 8 9 10 1 x Pipe-based Context Switching 1 2 3 4 5 6 7 8 9 10 1 x Process Creation 1 2 3 1 x System Call Overhead 1 2 3 4 5 6 7 8 9 10 1 x Shell Scripts (1 concurrent) 1 2 3 1 x Shell Scripts (8 concurrent) 1 2 3 4 x Dhrystone 2 using register variables 1 2 3 4 5 6 7 8 9 10 4 x Double-Precision Whetstone 1 2 3 4 5 6 7 8 9 10 4 x Execl Throughput 1 2 3 4 x File Copy 1024 bufsize 2000 maxblocks 1 2 3 4 x File Copy 256 bufsize 500 maxblocks 1 2 3 4 x File Copy 4096 bufsize 8000 maxblocks 1 2 3 4 x Pipe Throughput 1 2 3 4 5 6 7 8 9 10 4 x Pipe-based Context Switching 1 2 3 4 5 6 7 8 9 10 4 x Process Creation 1 2 3 4 x System Call Overhead 1 2 3 4 5 6 7 8 9 10 4 x Shell Scripts (1 concurrent) 1 2 3 4 x Shell Scripts (8 concurrent) 1 2 3 ======================================================================== BYTE UNIX Benchmarks (Version 5.1.3) System: alarmpi: GNU/Linux OS: GNU/Linux -- 4.19.86-1-ARCH -- #1 SMP PREEMPT Sat Nov 30 18:54:34 UTC 2019 Machine: armv7l (unknown) Language: en_US.utf8 (charmap="ANSI_X3.4-1968", collate="ANSI_X3.4-1968") CPU 0: ARMv7 Processor rev 3 (v7l) (0.0 bogomips) CPU 1: ARMv7 Processor rev 3 (v7l) (0.0 bogomips) CPU 2: ARMv7 Processor rev 3 (v7l) (0.0 bogomips) CPU 3: ARMv7 Processor rev 3 (v7l) (0.0 bogomips) 04:35:29 up 1 min, 1 user, load average: 0.08, 0.04, 0.01; runlevel ------------------------------------------------------------------------ Benchmark Run: Tue Dec 03 2019 04:35:29 - 05:03:46 4 CPUs in system; running 1 parallel copy of tests Dhrystone 2 using register variables 17017032.0 lps (10.0 s, 7 samples) Double-Precision Whetstone 3312.5 MWIPS (9.9 s, 7 samples) Execl Throughput 1801.8 lps (29.9 s, 2 samples) File Copy 1024 bufsize 2000 maxblocks 219383.1 KBps (30.0 s, 2 samples) File Copy 256 bufsize 500 maxblocks 71315.5 KBps (30.0 s, 2 samples) File Copy 4096 bufsize 8000 maxblocks 508729.7 KBps (30.0 s, 2 samples) Pipe Throughput 272437.6 lps (10.0 s, 7 samples) Pipe-based Context Switching 50547.6 lps (10.0 s, 7 samples) Process Creation 2329.1 lps (30.0 s, 2 samples) Shell Scripts (1 concurrent) 2112.5 lpm (60.0 s, 2 samples) Shell Scripts (8 concurrent) 740.3 lpm (60.1 s, 2 samples) System Call Overhead 555988.0 lps (10.0 s, 7 samples) System Benchmarks Index Values BASELINE RESULT INDEX Dhrystone 2 using register variables 116700.0 17017032.0 1458.2 Double-Precision Whetstone 55.0 3312.5 602.3 Execl Throughput 43.0 1801.8 419.0 File Copy 1024 bufsize 2000 maxblocks 3960.0 219383.1 554.0 File Copy 256 bufsize 500 maxblocks 1655.0 71315.5 430.9 File Copy 4096 bufsize 8000 maxblocks 5800.0 508729.7 877.1 Pipe Throughput 12440.0 272437.6 219.0 Pipe-based Context Switching 4000.0 50547.6 126.4 Process Creation 126.0 2329.1 184.8 Shell Scripts (1 concurrent) 42.4 2112.5 498.2 Shell Scripts (8 concurrent) 6.0 740.3 1233.8 System Call Overhead 15000.0 555988.0 370.7 ======== System Benchmarks Index Score 460.0 ------------------------------------------------------------------------ Benchmark Run: Tue Dec 03 2019 05:03:46 - 05:32:44 4 CPUs in system; running 4 parallel copies of tests Dhrystone 2 using register variables 25806918.0 lps (10.0 s, 7 samples) Double-Precision Whetstone 10044.5 MWIPS (12.4 s, 7 samples) Execl Throughput 4739.7 lps (29.9 s, 2 samples) File Copy 1024 bufsize 2000 maxblocks 492562.1 KBps (30.0 s, 2 samples) File Copy 256 bufsize 500 maxblocks 160814.3 KBps (30.0 s, 2 samples) File Copy 4096 bufsize 8000 maxblocks 997212.8 KBps (30.0 s, 2 samples) Pipe Throughput 1021635.2 lps (10.0 s, 7 samples) Pipe-based Context Switching 295741.6 lps (10.0 s, 7 samples) Process Creation 7433.5 lps (30.0 s, 2 samples) Shell Scripts (1 concurrent) 5725.4 lpm (60.0 s, 2 samples) Shell Scripts (8 concurrent) 712.4 lpm (60.1 s, 2 samples) System Call Overhead 2117343.6 lps (10.0 s, 7 samples) System Benchmarks Index Values BASELINE RESULT INDEX Dhrystone 2 using register variables 116700.0 25806918.0 2211.4 Double-Precision Whetstone 55.0 10044.5 1826.3 Execl Throughput 43.0 4739.7 1102.2 File Copy 1024 bufsize 2000 maxblocks 3960.0 492562.1 1243.8 File Copy 256 bufsize 500 maxblocks 1655.0 160814.3 971.7 File Copy 4096 bufsize 8000 maxblocks 5800.0 997212.8 1719.3 Pipe Throughput 12440.0 1021635.2 821.3 Pipe-based Context Switching 4000.0 295741.6 739.4 Process Creation 126.0 7433.5 590.0 Shell Scripts (1 concurrent) 42.4 5725.4 1350.3 Shell Scripts (8 concurrent) 6.0 712.4 1187.3 System Call Overhead 15000.0 2117343.6 1411.6 ======== System Benchmarks Index Score 1182.8
はい、スコアは1182.8でした。
どれぐらいの性能かというと、Amazon EC2のt2.microくらいです。
今はt3.microというもっと高性能なEC2インスタンスがあるので、またAWSに軍配が上がりましたね。
ただし、これは/boot/config.txtを編集しただけの状態であり、実は定格2.0GHz動作ではありません。
Raspberry Pi 3B+以降、まーいい加減どうにかしてほしい熱問題(サーマルスロットリング)による600MHzまでのCPUの動的クロックダウン機能が働いてしまう状態です。
これをどうにかするには、
# echo "performance" > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
とコマンドを叩いて、ガバナーポリシーとやらを調整(固定化)する必要があります。
これについても詳細に書かれている記事があるので、そちらを参考に。
で、ガバナーポリシーをperformanceにして/opt/vc/bin/vcgencmd measure_clock armを確認してみると、
frequency(48)=2000478464
と表示されます。
この状態で、再度UnixBenchを実施してみたところ、
# # # # # # # ##### ###### # # #### # # # # ## # # # # # # # ## # # # # # # # # # # # ## ##### ##### # # # # ###### # # # # # # ## # # # # # # # # # # # # ## # # # # # # # ## # # # # #### # # # # # ##### ###### # # #### # # Version 5.1.3 Based on the Byte Magazine Unix Benchmark Multi-CPU version Version 5 revisions by Ian Smith, Sunnyvale, CA, USA January 13, 2011 johantheghost at yahoo period com Use of uninitialized value in printf at ./Run line 1379. Use of uninitialized value in printf at ./Run line 1380. Use of uninitialized value in printf at ./Run line 1379. Use of uninitialized value in printf at ./Run line 1380. Use of uninitialized value in printf at ./Run line 1379. Use of uninitialized value in printf at ./Run line 1380. Use of uninitialized value in printf at ./Run line 1379. Use of uninitialized value in printf at ./Run line 1380. Use of uninitialized value in printf at ./Run line 1589. Use of uninitialized value in printf at ./Run line 1590. Use of uninitialized value in printf at ./Run line 1589. Use of uninitialized value in printf at ./Run line 1590. Use of uninitialized value in printf at ./Run line 1589. Use of uninitialized value in printf at ./Run line 1590. Use of uninitialized value in printf at ./Run line 1589. Use of uninitialized value in printf at ./Run line 1590. 1 x Dhrystone 2 using register variables 1 2 3 4 5 6 7 8 9 10 1 x Double-Precision Whetstone 1 2 3 4 5 6 7 8 9 10 1 x Execl Throughput 1 2 3 1 x File Copy 1024 bufsize 2000 maxblocks 1 2 3 1 x File Copy 256 bufsize 500 maxblocks 1 2 3 1 x File Copy 4096 bufsize 8000 maxblocks 1 2 3 1 x Pipe Throughput 1 2 3 4 5 6 7 8 9 10 1 x Pipe-based Context Switching 1 2 3 4 5 6 7 8 9 10 1 x Process Creation 1 2 3 1 x System Call Overhead 1 2 3 4 5 6 7 8 9 10 1 x Shell Scripts (1 concurrent) 1 2 3 1 x Shell Scripts (8 concurrent) 1 2 3 4 x Dhrystone 2 using register variables 1 2 3 4 5 6 7 8 9 10 4 x Double-Precision Whetstone 1 2 3 4 5 6 7 8 9 10 4 x Execl Throughput 1 2 3 4 x File Copy 1024 bufsize 2000 maxblocks 1 2 3 4 x File Copy 256 bufsize 500 maxblocks 1 2 3 4 x File Copy 4096 bufsize 8000 maxblocks 1 2 3 4 x Pipe Throughput 1 2 3 4 5 6 7 8 9 10 4 x Pipe-based Context Switching 1 2 3 4 5 6 7 8 9 10 4 x Process Creation 1 ← ここで停止
となりました。(結果表示できず)
というか、UnixBenchのProcess Creationのフェーズで、止まってしまうのはUnixBenchが悪いのでは…?
Raspberry Pi 4自体はハングアップやカーネルパニックなどは起こしていないので…。
というかUnixBenchの最新版リリースってどこにあるの、もうUnixBenchやめない?
もう20回位試していますが、相変わらずProcess Creationで止まってしまっているので、結果がきちんと出るようになったら、ここに追記します。。。
熱問題について
Raspberry Pi 4を既に入手して、熱問題については相変わらずという記事を書いてらっしゃる方もいるようで、負荷をかけると、やはり78℃〜80℃でクロックダウンしてしまうようですが、今回使用したCPUクーラーは、56℃くらいまでで抑えることが出来ました。
Raspberry Pi 4をデスクトップ用途に使いたい方にとっては、あまりコンパクト性を求めないと思いますので、デカくても冷えればいいという方にはオススメです。
おわりに
オーバークロックに関して、事前に色々調べていて、海外の方が2.147GHzを達成していることを知っていましたが、冷却さえ出来れば2GHz超えは余裕かと思いきや、私が2.147GHzを設定するとブート時に停止してしまったので、2.0GHz付近が限界なのかなと思いました。
Raspberry Pi 4はCSIとDSIが2レーンになった、HDMIがmicroHDMI端子になった、など、中々ニッチな方向に進んでいる感が拒めないですが、産業用途としてのプロトタイプあるいはプロダクトにもってこいの製品になっていっていると思います。
ただ、デスクトップ用途としては、UnixBenchのスコアの通りで、まだまだ厳しい、というか、ラズパイに性能を求めても次が出る頃には「うーん、こんなもんなのかなぁ」のいたちごっこになっているような気がします。
ここは(こんな小さなシングルボードコンピュータとしての)ラズパイでここまで出来るんだぜって割り切っていたほうが、良いかもしれませんね。