もりねずみーのやつ

インターネット上でしか生きられません

Raspberry Pi 4でオーバークロック

前書き

Raspberry Pi Advent Carendar 2019 4日目のもりねずみーです。

最近病んでます。

はい。

今回は油冷はしません。期待していた方、ごめんなさい。

理由は、Raspberry Pi 3B+以降に相応しい(?)CPUクーラーが売っていたため、それを利用します。

f:id:aburos:20191204184646j:plain

準備

hanpenblog.com

オーバークロック

とりあえず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はCSIDSIが2レーンになった、HDMIがmicroHDMI端子になった、など、中々ニッチな方向に進んでいる感が拒めないですが、産業用途としてのプロトタイプあるいはプロダクトにもってこいの製品になっていっていると思います。

ただ、デスクトップ用途としては、UnixBenchのスコアの通りで、まだまだ厳しい、というか、ラズパイに性能を求めても次が出る頃には「うーん、こんなもんなのかなぁ」のいたちごっこになっているような気がします。

ここは(こんな小さなシングルボードコンピュータとしての)ラズパイでここまで出来るんだぜって割り切っていたほうが、良いかもしれませんね。