NanoPi NEO3でArmbian よきところでUnixBench

昨日は、armbian.comでダウンロードしたNanoPi NEO3用のイメージを使ったらOSは起動したようだけどログインできなくて何もできず諦めた。 そこでその後、Armbianの最新のソースからNanoPi NEO3用のDebian buster 5.7.10をミニマルでビルドしてイメージファイルを作った。こちらはmicroSDカードに焼いてNanoPi NEO3に挿して電源投入したら特に何もなく普通に起動して、ログインも通常のArmbianの初期ID/Passの root / 1234 でログインできた。FriendlyELECの提供しているNanoPi NEO3用のUbuntu Coreとはだいぶ違うので、今回はビルドしたArmbian (Debian buster)で改めてUnixBenchを動かしてみた。

$ ./Run -c 1 -c 4
Can't locate Time/HiRes.pm in @INC (you may need to install the Time::HiRes module) (@INC contains: /etc/perl /usr/local/lib/aarch64-linux-gnu/perl/5.28.1 /usr/local/share/perl/5.28.1 /usr/lib/aarch64-linux-gnu/perl5/5.28 /usr/share/perl5 /usr/lib/aarch64-linux-gnu/perl/5.28 /usr/share/perl/5.28 /usr/local/lib/site_perl /usr/lib/aarch64-linux-gnu/perl-base) at ./Run line 6.

Armbianの初起動の後にUnixBenchをダウンロードして、いきなり実行しようとしたら怒られた。何が足りないかは表示されるので必要に応じてパッケージをインストールする。

$ sudo apt update
$ apt-cache search HiRes
libmoosex-role-timer-perl - Moose role for measuring elapsed time with Time::HiRes
perl - Larry Wall's Practical Extraction and Report Language

先でTime/HiRes.pmが無いと言われたのでPerlのHiRes.pm関係のパッケージを検索。libmoosex-role-timer-perlがそれらしい。

$ sudo apt install libmoosex-role-timer-perl gcc make libc6-dev

今回ビルドしたArmbianはミニマルなのでよく使うようなのもいろいろ入ってない。まぁ、自分の用途で足りないのは順次足すだけなので個人的は幕の内弁当よりミニマルを好んでる。
Perlのモジュールだけでなくgccやライブラリの類も入っていないので一緒にいれる。UnixBenchを動かすのに必要なのはこの辺り。

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
408000 600000 816000 1008000 1200000 1296000 1512000

前回のFriendlyELEC提供のUbuntuCoreではSoCのクロック上限は1296MHzだったがArmbianでは上限が1512MHzまである。

$ cpufreq-info -p
408000 1512000 ondemand

設定では408MHzから1512MHz(1.5GHz)まで可変のondemand設定になっている。今回は変更しないでこのまま使う。

$ cpufreq-info -s && ./Run -c 1 -c 4 && cpufreq-info -s
408000:302, 600000:21, 816000:19, 1008000:9151, 1200000:85399, 1296000:129732, 1512000:706762  (90860)
========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: nanopineo3: GNU/Linux
   OS: GNU/Linux -- 5.7.10-rockchip64 -- #trunk SMP PREEMPT Mon Jul 27 22:40:16 JST 2020
   Machine: aarch64 (unknown)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   12:36:32 up  2:35,  1 user,  load average: 1.00, 1.00, 1.41; runlevel unknown

------------------------------------------------------------------------
Benchmark Run: 火  7月 28 2020 12:36:32 - 13:04:57
0 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables        7369928.6 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     1698.5 MWIPS (9.9 s, 7 samples)
Execl Throughput                                824.0 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        129077.0 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           36297.6 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        361065.2 KBps  (30.0 s, 2 samples)
Pipe Throughput                              262094.7 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  45083.1 lps   (10.0 s, 7 samples)
Process Creation                               1679.0 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   2102.3 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    463.8 lpm   (60.0 s, 2 samples)
System Call Overhead                         428852.2 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0    7369928.6    631.5
Double-Precision Whetstone                       55.0       1698.5    308.8
Execl Throughput                                 43.0        824.0    191.6
File Copy 1024 bufsize 2000 maxblocks          3960.0     129077.0    326.0
File Copy 256 bufsize 500 maxblocks            1655.0      36297.6    219.3
File Copy 4096 bufsize 8000 maxblocks          5800.0     361065.2    622.5
Pipe Throughput                               12440.0     262094.7    210.7
Pipe-based Context Switching                   4000.0      45083.1    112.7
Process Creation                                126.0       1679.0    133.3
Shell Scripts (1 concurrent)                     42.4       2102.3    495.8
Shell Scripts (8 concurrent)                      6.0        463.8    773.0
System Call Overhead                          15000.0     428852.2    285.9
                                                                   ========
System Benchmarks Index Score                                         302.1

------------------------------------------------------------------------
Benchmark Run: 火  7月 28 2020 13:04:57 - 13:34:27
0 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables       17745604.0 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     5914.4 MWIPS (9.9 s, 7 samples)
Execl Throughput                               1889.7 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        189217.0 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           51289.7 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        601805.5 KBps  (30.0 s, 2 samples)
Pipe Throughput                              673613.4 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  97637.1 lps   (10.0 s, 7 samples)
Process Creation                               3198.8 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   3585.3 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    462.6 lpm   (60.2 s, 2 samples)
System Call Overhead                        1108397.2 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   17745604.0   1520.6
Double-Precision Whetstone                       55.0       5914.4   1075.3
Execl Throughput                                 43.0       1889.7    439.5
File Copy 1024 bufsize 2000 maxblocks          3960.0     189217.0    477.8
File Copy 256 bufsize 500 maxblocks            1655.0      51289.7    309.9
File Copy 4096 bufsize 8000 maxblocks          5800.0     601805.5   1037.6
Pipe Throughput                               12440.0     673613.4    541.5
Pipe-based Context Switching                   4000.0      97637.1    244.1
Process Creation                                126.0       3198.8    253.9
Shell Scripts (1 concurrent)                     42.4       3585.3    845.6
Shell Scripts (8 concurrent)                      6.0        462.6    771.0
System Call Overhead                          15000.0    1108397.2    738.9
                                                                   ========
System Benchmarks Index Score                                         590.2
408000:302, 600000:21, 816000:30, 1008000:22564, 1200000:178454, 1296000:250721, 1512000:826877  (178779)

ということで、12:36開始で13:34に終了、約1時間。UnixBenchの直前と直後にSoCのどのクロックがどの程度使われたか表示。(橙字部分)
見た感じ1008MHzより上が使われているみたいだが1.5GHzはあまり使われていない、温度が急上昇したわけでもないので謎。

シングルのインデックスは302.1ということで、NanoPi NEO2の1GHzと同等。前回FriendlyELEC提供のUbuntuCoreでは237という酷い値だったので数字でいえば25%改善。これは良いんじゃないかしら。しかし、4パラレルは590.2で前回FriendlyELEC提供のUbuntuCoreでは602.9なのであまり変わりがない。数字で言えばむしろ下がってるのが不思議。そして、やっぱりNanoPi NEO2の1GHzの80%のスコア。4パラレルのDhrystone 2の結果が昨日のFriendlyELECのUbuntuCoreより悪化が顕著。SoCが活躍する筈の項目じゃないの?

UnixBench中のシステム監視グラフ
システム監視情報、これはNode Exporterで取得してシステム監視用ホストのPrometheusで収集蓄積、Grafanaでビジュアル化している。
赤い枠で囲ったあたりがUnixBenchが動いていた部分。ただし、グラフ毎に若干左右にズレてるのが上の画像では無視して枠を描いている。だから12:35程度の筈が12:30に枠線があったりする。
1番左下がSoCの温度計のグラフ。UnixBenchの前後はアイドル状態だが、アイドル時で80℃もあるのに、UnixBenchでSoC全開で何故か3℃程度しか上がらない。
アイドル中に見てみるとガバナーがondemandなのに、アイドル時にクロックが下がらなくて1.5GHzに張り付いてる。で、UnixBenchが動いてるときには逆に少し下がってる。凄い謎システム。だからアイドルでもSoCの温度も下がらないのね。この辺りがは早めに修正されることを願うばかり。

関連記事:

NanoPi NEO3が届いた

NanoPi NEO3が来た

NanoPi NEO3が来た 1
7月12日にNanoPi NEO3の販売が始まったことに気づいてそのまま注文。メモリ1GBでオプションはケースだけ。
FriendlyArmから通知された荷物番号がシンガポールボストだったのでコロナ騒ぎ期間輸送が停まっていた印象が強くて届くまで2ヶ月か3ヶ月かと覚悟を決めてたのに拍子抜けするくらいあっさり届いた。
ただ、シンガポールポストの伝票の上に中華郵政(台湾)の伝票が貼られていて、その中華郵政の伝票番号が通知されなかったので日本到着後税関からの追跡情報がわからないまま突然配達された感じ。
2週間での順調な輸送だったからか外箱に大きな潰れはなく綺麗そのもの。これまでと違って箱がだいぶ薄い。中身スカスカで深い箱を使うからグッシャリ潰れるのよね。(外箱: 160 x 160 x 45mm)

NanoPi NEO3が来た 2
内箱。以前は無駄に綺麗な箱に入ってたけど普通のダンボールになった。個人的にはこの方が好感。(内箱: 95 x 90 x 41mm)

NanoPi NEO3が来た 3
中身はプチプチに包まれたケースに組み込み済みのNanoPi NEO3。ちなみに付属品は紙ペラ1枚無し。まぁ以前付いてた紙ペラは正直要らんかった。プチプチはほぼ普通のプチが直径1cmタイプ。ただしシートが両面のほんのちょっとだけ良いやつ。

NanoPi NEO3が来た 4
NanoPi NEO3の本体は基板だけだが、最初からオプションのケースに組み込まれた状態。なので、NanoPi NEO3のヒートシンクが本体に付属するのかケースに付属するのかは不明なまま。ヒートシンクという販売オプションが存在しないのでおそらく本体付属品とは思うけど。
最初はこちらが正面かと思っていたのでNEO3ではNEO,NEO2で後側にあった給電用USBポート(旧はmicroUSB)が前面側に来たのかと思った。なお、NEO3ではついにType-Cになった。どっちでもいいけど。給電は5V/2AなのでMicroUSBでも変わらないのよね。ACアダプタは例によってダイソーのG208を使う。
そしてUSBのType-AのポートはNEO, NEO2ではUSB2.0だったが、NEO3ではついに3.0になった。これは切望してたものなので本当に嬉しい。

NanoPi NEO3が来た 5
背面だと思ってた側。mircoSDカードのスロットとリセット穴とLEDインジケーターが2つある。MicroSDカードのスロットはバネ式でカードを差し込んで固定した状態でケースと面が合う状態。カードを抜く際は爪をスロットに当ててカードを押す感じ。ケースから飛び出てるよりは良いかな。使用中にmicroSDカードが抜ける心配は不要だと思うけど、どうしても心配だったらケースの上からテープを貼ってカードが抜け出るのを抑えてやれば良さそう。
画像中央より左上方向に見えてるSTAT, PWRがLEDインジケータ。PWRは赤いランプで電源が入っていればずっと点灯するみたい。STATは何かの状態用っぽい。FriendyELECが提供するNanoPi NEO3用OSイメージを使用すると、OSが起動すると緑のLEDがチカチカ点滅するみたい。NEO, NEO2と同じくLEDはユーザーが自由に制御できる筈。
で、インジケーターがあってこの面の方がスッキリしてるのでNEO3ではむしろこちらが正面かなと思ったり。PCとかもケーブルコネクタ側が背面だしね。

NanoPi NEO3が来た 6
上下を逆さまにした状態。基板の下側(画像では上側)にたくさんのスリットがある。これは4面すべてにあって、中にヒートシンクが見えている。この白いNEO3のケースは外寸が53 x 53 x 38mmという小さいものなのでヒートシンクとケースの内側の間に冷却ファンを入れる隙間はない。並んだスリットの1つ1つは5 x 1mmなので正直なところ自然の風通しは良くなさそう。一応はヒートシンク側が下だっていうことみたいだし、中のヒートシンクも小さそうだし、放熱という面ではどうかなのしら?

ヒートシンクの大きさを見たかったしどんな風にSoCに取り付けられてるかも見たかったのでケースを開けたいと思ったけど、このケースはネジ式じゃなくてプラの爪で固定されてるっぽい。開封用のヘラとかテレカみたいなのがあれば開けられるかもしれないけど爪が折れてもイヤだし素材的に少なからずは結合部の変形または傷が付きそうな感じなので開けるのは諦めた。

いつもArmbianを使っているのでNanoPi NEO3でもArmbianを使おうとした。起動はしたし、DHCPでIPアドレスも自動設定されSSHで接続するところまではできた。しかし、Armbianの初期接続用の root / 1234 ではログインできなかった。テキトーにありそうなのも試したがすべてNG。ArmbianのNanoPi NEO3用は2020年7月27日時点ではまだWIP(Work In Progress)のステージなのでアチコチおかしくても文句は言えない。

そこで、Armbianは一旦あきらめて、FriendlyELECが提供するOSイメージを使用することに。NanoPi NEO3用WikiページにOSイメージのダウンロード用リンクがあるので、そこからUbuntu Core版をダウンロード。MicroSDカードに焼いてNaniPi NEO3を起動。これは、一般ユーザーの初期IDとパスワードは pi / pi 、管理者用は root / fa 。
これもDHCPのネットワークなら自動的にネットワーク設定されるのでarp -aなどで新しく追加されたホストの存在を調べてsshでログインするだけ。

ベンチマーク

$ suso apt update
$ sudo apt install cpufrequtils

Armbianなら最初からCPUの周波数周りの情報を得られるけどFriendlyELECのイメージでは入っていないのでcpufrequtilsパッケージを追加インストールする。

$ cpufreq-info -s
408000:83572, 600000:2491, 816000:1012, 1008000:1985, 1200000:779, 1296000:3491  (1867)

408MHzから1296MHz(1.3GHz)まで使うみたい。で、OS起動後のアイドリングが多かったので408MHzで動いていた時間が長いっぽい。

UNIX Benchmarksをダウンロードして動かす。

$ wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/byte-unixbench/UnixBench5.1.3.tgz
$ tar -zxvf UnixBench5.1.3.tgz
$ cd ./UnixBench
$ ./Run -c 1 -c 4   #シングルと4パラレルの2回実施

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: NanoPi-NEO3: GNU/Linux
   OS: GNU/Linux -- 5.4.40 -- #63 SMP PREEMPT Thu May 14 14:36:07 CST 2020
   Machine: aarch64 (aarch64)
   Language: en_US.utf8 (charmap="ANSI_X3.4-1968", collate="ANSI_X3.4-1968")
   06:26:45 up 20 min,  1 user,  load average: 0.98, 0.53, 0.33; runlevel 5

------------------------------------------------------------------------
Benchmark Run: Mon Jul 27 2020 06:26:46 - 06:56:25
0 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables        6323478.9 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     1253.5 MWIPS (9.8 s, 7 samples)
Execl Throughput                                763.4 lps   (29.8 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks         65414.5 KBps  (30.2 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           17665.5 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        214384.7 KBps  (30.0 s, 2 samples)
Pipe Throughput                              240266.7 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  34742.7 lps   (10.0 s, 7 samples)
Process Creation                               1445.8 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   1887.2 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    584.4 lpm   (60.1 s, 2 samples)
System Call Overhead                         396953.6 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0    6323478.9    541.9
Double-Precision Whetstone                       55.0       1253.5    227.9
Execl Throughput                                 43.0        763.4    177.5
File Copy 1024 bufsize 2000 maxblocks          3960.0      65414.5    165.2
File Copy 256 bufsize 500 maxblocks            1655.0      17665.5    106.7
File Copy 4096 bufsize 8000 maxblocks          5800.0     214384.7    369.6
Pipe Throughput                               12440.0     240266.7    193.1
Pipe-based Context Switching                   4000.0      34742.7     86.9
Process Creation                                126.0       1445.8    114.7
Shell Scripts (1 concurrent)                     42.4       1887.2    445.1
Shell Scripts (8 concurrent)                      6.0        584.4    974.0
System Call Overhead                          15000.0     396953.6    264.6
                                                                   ========
System Benchmarks Index Score                                         237.1

------------------------------------------------------------------------
Benchmark Run: Mon Jul 27 2020 06:56:25 - 07:24:59
0 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables       25328528.8 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     5010.0 MWIPS (9.8 s, 7 samples)
Execl Throughput                               2349.0 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks         93186.3 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           24195.5 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        328497.0 KBps  (30.0 s, 2 samples)
Pipe Throughput                              956477.1 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 146859.6 lps   (10.0 s, 7 samples)
Process Creation                               4088.7 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   4704.9 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    626.3 lpm   (60.1 s, 2 samples)
System Call Overhead                        1550078.2 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   25328528.8   2170.4
Double-Precision Whetstone                       55.0       5010.0    910.9
Execl Throughput                                 43.0       2349.0    546.3
File Copy 1024 bufsize 2000 maxblocks          3960.0      93186.3    235.3
File Copy 256 bufsize 500 maxblocks            1655.0      24195.5    146.2
File Copy 4096 bufsize 8000 maxblocks          5800.0     328497.0    566.4
Pipe Throughput                               12440.0     956477.1    768.9
Pipe-based Context Switching                   4000.0     146859.6    367.1
Process Creation                                126.0       4088.7    324.5
Shell Scripts (1 concurrent)                     42.4       4704.9   1109.6
Shell Scripts (8 concurrent)                      6.0        626.3   1043.8
System Call Overhead                          15000.0    1550078.2   1033.4
                                                                   ========
System Benchmarks Index Score                                         602.9

$ cpufreq-info -s
408000:192820, 600000:3763, 816000:12140, 1008000:24824, 1200000:17065, 1296000:231971  (25607)
一応、1296MHzで動いている時間がそれなりにあるのでベンチマーク計測中にこのOSで設定された上限の1.3GHzは使われている。SoCの温度が上がってクロックが落とされたかどうかは判らない。温度そのものを現在は見ていないし。
で、計測結果だけど正直なところ良くない。

事前にクロックが抑えられているという情報があったのでNanoPi NEO2より大幅に速いということはなさそうとは判ってはいたけど、計測してみたら3年前のNanoPi NEO2よりかなり遅い。
NanoPi NEO2のSoCはAllwinner H5で以前に計測したときのクロックは1080MHz。UnixBenchのインデックスはシングルが約300、4パラレルが約770。
NanoPi NEO3はSocがRockchip RK3328で、計測時の最高クロックは1300MHz。UnixBenchのインデックスはシングルが約240、4パラレルが約600。
つまり、UnixBenchのインデックススコアで比較するとNanoPi NEO3はNanoPi NEO2の8割の性能ということになる。

RK3328でもNEO2より速いSBCはあるし、それが1.5GHzで動いているようなのでNEO3が1.3GHzで動いていてなんでこんなに下がるのかしら?まぁ、インデックスでの比較だとSoCにあまり関係ない項目の評価も混じってるからSoCのクロックの差だけ気にしても意味ないんだけど。
それでもNanoPi NEO2とトントンくらいを期待してたから正直ガッカリ感がある。

これでUSB3.0も遅いとなるとNanoPi NEO3は期待ハズレになってしまうので、どうか期待程度には速度出ますように。

関連記事:
Up