【RaspberryPi】つよつよなCooling Fanを装着してオーバークロックにチャレンジ!

前回のエントリでRaspberryPi4BのCPU温度を可視化しました。そこで使用したつよつよヒートシンク+FANであるICE Tower CPU Cooling Fan for Pi 4を使用しました。 非常にすごい冷却性能で、80℃まで上昇していたCPU温度を50℃程度まで抑えることができました。 で、先のエントリでかけなかったことをちょっと書いてみたいと思います。

ICE Tower CPU Cooling Fan for Pi 4(以下ICE Tower Fan)の情報はこちらになります。

jp.seeedstudio.com

このファン自体の性能は既に分かっていますが、ベンチマーク時以外ではどのような冷却性能があるかわからないので、これもグラフ化してみます。

また、CPUのクロックの状態も以下のコマンドで取得可能です。そこで、Node-REDで作成したダッシュボードにこの値も表示する様にします。 負荷がない場合にはCPUのクロックが下がり、負荷があるときにはクロックがアップするようになります。

 $ vcgencmd measure_clock arm
frequency(48)=600169920

以下はRaspberryPi4で取得した値になりますがRaspberryPi4Bではアイドル時には700MHz程度になり、負荷がある場合にはクロックが1.5Mhzまで上昇する様になっています(非オーバークロック時)。

f:id:ueponx:20200514125400p:plain

Node-REDのフローは以下のようにしています。このエントリの一番下に出力したJSONをおいておきます。

f:id:ueponx:20200514125130p:plain

計測環境

という状態になります。 計測時の室温は23℃程度でした。

通常状態のCPU温度

Youtubeの再生を行うとCPUのクロックは1.5GHzまで上昇しますが、アイドル状態になることもたまにあり、クロックが下がっているポイントもあります。最小は600Hzですが、Chromiumが起動していると750Mhzくらいまでしか下がっていません。

f:id:ueponx:20200514125118p:plain

CPU温度に関しては45℃までしか上がっていません。Chromiumを終了すると40℃を下回るので、CPUクロックが1.5GHzまで上がるとCPU温度は5℃ほど上がるようです。

オーバークロックでのCPU温度(通常時)

RaspberryPiのオーバークロックの設定は/boot/config.txtを編集することで行なえます。以下のコマンドでエディタを開き

$ sudo vi /boot/config.txt

以下の部分に追記します。今回は1.5GHzから1.68GHzへクロックアップを行います。ICE Tower Fanを使うということで少し高めに設定したのですが、安定起動したのは1680GHz、over_voltage=0(デフォルト値)としています。

arm_freqのデフォルト値は700MHzとなっていますが、記載していないときの動作は1.5MHzで動作しています何故?over_voltageは、CPU/GPUの電圧を調整し、16〜8の数値を指定します。デフォルト値は0となっています。クロックアップすると電圧降下するそうです。

/boot/config.txtの変更箇所

#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800
# 以下を追加
over_voltage=0
arm_freq=1680

f:id:ueponx:20200514214333p:plain

この結果から46℃までしか上がっていないので、実質2℃程度の温度上昇で治まってくれたようです。ICE Tower Fanの効果かなり高いですね。これはベンチマークの負荷を与えてもほとんど上がらないのではないかと期待できます。

オーバークロックでのCPU温度(ベンチマーク時)

通常時の計測もおわったので、今回はベンチマークUnixBenchを行って温度変化をみてみます。CPUクロックは1.12倍程度ですので、スコアがシングルスレッド311の1.12倍の350弱、マルチスレッド807の1.12倍の900弱ぐらいになるといい感じです。

実際に計測してみてUnixBenchを実行したのですが、途中でRaspbianが落ちてしましました。途中までの結果は以下の様になっています。

f:id:ueponx:20200514215100p:plain

50℃まで行っていますが、熱耐性的には問題ないはずなので別の問題が発生したのかもしれません。この状態では電源LEDが点滅してしまうようですね。2000MHzでも同様の点滅状態になっていました。

仕方ないので、1.68MHzから1.65MHzにクロックを下げてみました。すると問題なくベンチマークは終了しました。

f:id:ueponx:20200514213739p:plain

温度は50℃度以下でほぼ収まったかなと思います。オーバクロック前と比較しても1℃ぐらいしか変化していないようなので、ICE Tower Fanの冷却能力はまだまだ発揮されていないのかもしれません。

スコアは以下の通りです。

------------------------------------------------------------------------
Benchmark Run: 木  5月 14 2020 20:38:36 - 21:06:55
4 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       11228872.6 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     2622.9 MWIPS (9.6 s, 7 samples)
Execl Throughput                                980.2 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        121979.1 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           34567.7 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        334464.2 KBps  (30.0 s, 2 samples)
Pipe Throughput                              175874.3 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  47120.4 lps   (10.0 s, 7 samples)
Process Creation                               2048.0 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   3124.7 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    812.0 lpm   (60.0 s, 2 samples)
System Call Overhead                         542545.0 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   11228872.6    962.2
Double-Precision Whetstone                       55.0       2622.9    476.9
Execl Throughput                                 43.0        980.2    228.0
File Copy 1024 bufsize 2000 maxblocks          3960.0     121979.1    308.0
File Copy 256 bufsize 500 maxblocks            1655.0      34567.7    208.9
File Copy 4096 bufsize 8000 maxblocks          5800.0     334464.2    576.7
Pipe Throughput                               12440.0     175874.3    141.4
Pipe-based Context Switching                   4000.0      47120.4    117.8
Process Creation                                126.0       2048.0    162.5
Shell Scripts (1 concurrent)                     42.4       3124.7    737.0
Shell Scripts (8 concurrent)                      6.0        812.0   1353.3
System Call Overhead                          15000.0     542545.0    361.7
                                                                   ========
System Benchmarks Index Score                                         353.4

------------------------------------------------------------------------
Benchmark Run: 木  5月 14 2020 21:06:55 - 21:35:25
4 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables       44696161.2 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                    10464.4 MWIPS (9.6 s, 7 samples)
Execl Throughput                               2923.8 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        242890.3 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           67868.3 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        651210.0 KBps  (30.0 s, 2 samples)
Pipe Throughput                              660275.8 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 203549.7 lps   (10.0 s, 7 samples)
Process Creation                               5234.4 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   6447.9 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    887.0 lpm   (60.1 s, 2 samples)
System Call Overhead                        2046196.5 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   44696161.2   3830.0
Double-Precision Whetstone                       55.0      10464.4   1902.6
Execl Throughput                                 43.0       2923.8    680.0
File Copy 1024 bufsize 2000 maxblocks          3960.0     242890.3    613.4
File Copy 256 bufsize 500 maxblocks            1655.0      67868.3    410.1
File Copy 4096 bufsize 8000 maxblocks          5800.0     651210.0   1122.8
Pipe Throughput                               12440.0     660275.8    530.8
Pipe-based Context Switching                   4000.0     203549.7    508.9
Process Creation                                126.0       5234.4    415.4
Shell Scripts (1 concurrent)                     42.4       6447.9   1520.7
Shell Scripts (8 concurrent)                      6.0        887.0   1478.3
System Call Overhead                          15000.0    2046196.5   1364.1
                                                                   ========
System Benchmarks Index Score                                         940.9

クロックを少し下げて1.1倍になったのですが、予想よりも良い値が出ました。正直スコアは誤差かもしれませんが、オーバークロックICE Tower Fanがあれば現実的に使用可能だと思います。でも、温度的には高くないので正直1.7GHzくらいの動作ができれば面白かったかなと思います。

ICE Tower Fanで少し気になったこと

1点目

このICE Tower Fanは常に5Vのの電源が必要で、熱によるコントロールをされているわけではありません。そのためOSが起動していなくてもFanが回転し続けるようです。 つまりshutdownコマンドを実行しても、RaspberryPiは通電状態なのでFanが回り続けます。今の所Fanのノイズなどは聞こえませんが、今後Fanの風切り音が気になる可能性もあります。 そのあたりは使ってみてということでしょうか。CPUの温度によるFanコントロールを行えれば面白いかも。CPUの温度から5Vの供給を調整すればもしかしたらいけるのかな?

2点目

ヒートシンク・Fanの固定金具に関してはちょっと気になる部分がありました。写真を見てもらうとわかるのですが、有線のEthernetの近くにあるPoEピンにギリギリのところを固定金具が通っています。PoEのユニットがHATの形状なので、このICE Tower Fanをつけると併用はできないと思いますが、ピンと金具がショートするのかもと思うとちょっと怖いかなと思いました。

f:id:ueponx:20200513163739j:plain

こちらがRaspberry Pi 3 Model B+用PoE HATのページですが、これと同じだと接続は無理ですね。使うのであれば別途スプリッタを使用するのがいいかなと思います。

www.switch-science.com

おわりに

見た目でも、つよつよなICE Tower Fanですが、効果も絶大! オーバークロックでも効果があるので、いろいろ負荷をあたえてみたいなあと思いました。あと、変わったOSのインストールとかもチャレンジしたいですね。

参考

uepon.hatenadiary.com

今回使用したNode-REDのフロー

[
    {
        "id": "64ec0000.b8bd5",
        "type": "tab",
        "label": "フロー 1",
        "disabled": false,
        "info": ""
    },
    {
        "id": "d270983d.486bb8",
        "type": "exec",
        "z": "64ec0000.b8bd5",
        "command": "vcgencmd measure_temp",
        "addpay": false,
        "append": "",
        "useSpawn": "false",
        "timer": "",
        "oldrc": false,
        "name": "",
        "x": 370,
        "y": 120,
        "wires": [
            [
                "b464c627.4d91d8"
            ],
            [],
            []
        ]
    },
    {
        "id": "7594f6a3.9f1ae8",
        "type": "inject",
        "z": "64ec0000.b8bd5",
        "name": "定期実行(15秒)",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "repeat": "15",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "x": 150,
        "y": 180,
        "wires": [
            [
                "d270983d.486bb8",
                "c38acb9a.edf0b8"
            ]
        ]
    },
    {
        "id": "b464c627.4d91d8",
        "type": "change",
        "z": "64ec0000.b8bd5",
        "name": "",
        "rules": [
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "temp=",
                "fromt": "str",
                "to": "",
                "tot": "str"
            },
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "'C",
                "fromt": "str",
                "to": "",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 660,
        "y": 120,
        "wires": [
            [
                "fe50b07f.436fa",
                "f082c175.7ca15"
            ]
        ]
    },
    {
        "id": "fe50b07f.436fa",
        "type": "ui_chart",
        "z": "64ec0000.b8bd5",
        "name": "",
        "group": "3a93bb05.990fc4",
        "order": 0,
        "width": 0,
        "height": 0,
        "label": "温度",
        "chartType": "line",
        "legend": "false",
        "xformat": "HH:mm",
        "interpolate": "linear",
        "nodata": "",
        "dot": false,
        "ymin": "",
        "ymax": "",
        "removeOlder": 1,
        "removeOlderPoints": "",
        "removeOlderUnit": "3600",
        "cutout": 0,
        "useOneColor": false,
        "useUTC": false,
        "colors": [
            "#1f77b4",
            "#aec7e8",
            "#ff7f0e",
            "#2ca02c",
            "#98df8a",
            "#d62728",
            "#ff9896",
            "#9467bd",
            "#c5b0d5"
        ],
        "useOldStyle": false,
        "outputs": 1,
        "x": 890,
        "y": 120,
        "wires": [
            []
        ]
    },
    {
        "id": "f082c175.7ca15",
        "type": "debug",
        "z": "64ec0000.b8bd5",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "x": 910,
        "y": 60,
        "wires": []
    },
    {
        "id": "c38acb9a.edf0b8",
        "type": "exec",
        "z": "64ec0000.b8bd5",
        "command": "vcgencmd measure_clock arm",
        "addpay": false,
        "append": "",
        "useSpawn": "false",
        "timer": "",
        "oldrc": false,
        "name": "",
        "x": 390,
        "y": 240,
        "wires": [
            [
                "9c5555f1.6c68a8"
            ],
            [],
            []
        ]
    },
    {
        "id": "a75bf329.0064f",
        "type": "ui_chart",
        "z": "64ec0000.b8bd5",
        "name": "",
        "group": "3a93bb05.990fc4",
        "order": 1,
        "width": 0,
        "height": 0,
        "label": "クロック周波数",
        "chartType": "line",
        "legend": "false",
        "xformat": "HH:mm",
        "interpolate": "linear",
        "nodata": "",
        "dot": false,
        "ymin": "500000000",
        "ymax": "2000000000",
        "removeOlder": 1,
        "removeOlderPoints": "",
        "removeOlderUnit": "3600",
        "cutout": 0,
        "useOneColor": false,
        "useUTC": false,
        "colors": [
            "#1f77b4",
            "#aec7e8",
            "#ff7f0e",
            "#2ca02c",
            "#98df8a",
            "#d62728",
            "#ff9896",
            "#9467bd",
            "#c5b0d5"
        ],
        "useOldStyle": false,
        "outputs": 1,
        "x": 920,
        "y": 240,
        "wires": [
            []
        ]
    },
    {
        "id": "9c5555f1.6c68a8",
        "type": "change",
        "z": "64ec0000.b8bd5",
        "name": "",
        "rules": [
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "frequency(48)=",
                "fromt": "str",
                "to": "",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 680,
        "y": 240,
        "wires": [
            [
                "a75bf329.0064f",
                "5cf1b0d0.a125b"
            ]
        ]
    },
    {
        "id": "5cf1b0d0.a125b",
        "type": "debug",
        "z": "64ec0000.b8bd5",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "x": 910,
        "y": 280,
        "wires": []
    },
    {
        "id": "3a93bb05.990fc4",
        "type": "ui_group",
        "z": "",
        "name": "CPU情報",
        "tab": "f66e2b50.2d1098",
        "order": 1,
        "disp": true,
        "width": "6",
        "collapse": false
    },
    {
        "id": "f66e2b50.2d1098",
        "type": "ui_tab",
        "z": "",
        "name": "RaspberryPi状態",
        "icon": "dashboard",
        "disabled": false,
        "hidden": false
    }
]
/* -----codeの行番号----- */