NanoPi NEO3のUSB3.0ポートのネットワーク速度

NanoPi NEO3

NanoPi NEO3を買ったのはUSB3.0のポートがあるから。ここにネットワークアダプタをつなぐことでルーターにするのが目的。だから、USB3.0対応ネットワークアダプタをつないで速い転送ができないと目論見が崩れ去ってしまう。NanoPi R2Sを買わなかったことを後悔することになるだろう。
そこで、実際にどれくらい速度が出るのか測ってみた。

NanoPi NEO3がサーバー(受信側) IPv4

$ iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.n.yyy, port 29891
[  5] local 192.168.n.xxx port 5201 connected to 192.168.n.yyy port 28173
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  57.7 MBytes   484 Mbits/sec                  
[  5]   1.00-2.00   sec  78.8 MBytes   661 Mbits/sec                  
[  5]   2.00-3.00   sec  78.7 MBytes   660 Mbits/sec                  
[  5]   3.00-4.00   sec  78.7 MBytes   660 Mbits/sec                  
[  5]   4.00-5.00   sec  78.7 MBytes   660 Mbits/sec                  
[  5]   5.00-6.00   sec  78.8 MBytes   661 Mbits/sec                  
[  5]   6.00-7.00   sec  78.8 MBytes   661 Mbits/sec                  
[  5]   7.00-8.00   sec  78.7 MBytes   660 Mbits/sec                  
[  5]   8.00-9.00   sec  78.8 MBytes   661 Mbits/sec                  
[  5]   9.00-10.00  sec  78.8 MBytes   661 Mbits/sec                  
[  5]  10.00-10.28  sec  21.7 MBytes   660 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.28  sec   788 MBytes   643 Mbits/sec                  receiver
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

NanoPi NEO3がサーバー(受信側) IPv6

$ iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from fdc1:nnnn:nnnn::yyyy, port 63452
[  5] local fdc1:nnnn:nnnn::xxxx port 5201 connected to fdc1:nnnn:nnnn::yyyy port 14219
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  55.5 MBytes   465 Mbits/sec                  
[  5]   1.00-2.00   sec  76.4 MBytes   641 Mbits/sec                  
[  5]   2.00-3.00   sec  76.4 MBytes   641 Mbits/sec                  
[  5]   3.00-4.00   sec  76.3 MBytes   640 Mbits/sec                  
[  5]   4.00-5.00   sec  76.5 MBytes   641 Mbits/sec                  
[  5]   5.00-6.00   sec  76.4 MBytes   641 Mbits/sec                  
[  5]   6.00-7.00   sec  76.5 MBytes   641 Mbits/sec                  
[  5]   7.00-8.00   sec  76.5 MBytes   642 Mbits/sec                  
[  5]   8.00-9.00   sec  76.4 MBytes   641 Mbits/sec                  
[  5]   9.00-10.00  sec  76.4 MBytes   641 Mbits/sec                  
[  5]  10.00-10.28  sec  21.3 MBytes   640 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.28  sec   765 MBytes   624 Mbits/sec                  receiver
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

NanoPi NEO3がクライアント(送信側) IPv4

$ iperf3 -c 192.168.n.yyy
Connecting to host 192.168.n.yyy, port 5201
[  5] local 192.168.n.xxx port 52000 connected to 192.168.n.yyy port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  88.1 MBytes   739 Mbits/sec    0   2.00 MBytes       
[  5]   1.00-2.00   sec  85.0 MBytes   713 Mbits/sec    0   2.00 MBytes       
[  5]   2.00-3.00   sec  83.8 MBytes   703 Mbits/sec    0   2.00 MBytes       
[  5]   3.00-4.00   sec  85.0 MBytes   713 Mbits/sec    0   2.00 MBytes       
[  5]   4.00-5.00   sec  83.8 MBytes   703 Mbits/sec    0   2.00 MBytes       
[  5]   5.00-6.00   sec  85.0 MBytes   713 Mbits/sec    0   2.00 MBytes       
[  5]   6.00-7.00   sec  83.8 MBytes   703 Mbits/sec    0   2.00 MBytes       
[  5]   7.00-8.00   sec  85.0 MBytes   713 Mbits/sec    0   2.00 MBytes       
[  5]   8.00-9.00   sec  85.0 MBytes   713 Mbits/sec    0   2.00 MBytes       
[  5]   9.00-10.00  sec  83.8 MBytes   703 Mbits/sec    0   2.00 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   848 MBytes   711 Mbits/sec    0             sender
[  5]   0.00-10.00  sec   846 MBytes   709 Mbits/sec                  receiver

iperf Done.

NanoPi NEO3がクライアント(送信側) IPv6

$ iperf3 -c fdc1:nnnn:nnnn::yyyy
Connecting to host fdc1:nnnn:nnnn::yyyy, port 5201
[  5] local fdc1:nnnn:nnnn::xxxx port 50810 connected to fdc1:nnnn:nnnn::yyyy port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  89.0 MBytes   746 Mbits/sec    0   2.01 MBytes       
[  5]   1.00-2.00   sec  86.2 MBytes   724 Mbits/sec    0   2.01 MBytes       
[  5]   2.00-3.00   sec  86.2 MBytes   724 Mbits/sec    0   2.01 MBytes       
[  5]   3.00-4.00   sec  86.2 MBytes   724 Mbits/sec    0   2.01 MBytes       
[  5]   4.00-5.00   sec  86.2 MBytes   724 Mbits/sec    0   2.01 MBytes       
[  5]   5.00-6.00   sec  86.2 MBytes   724 Mbits/sec    0   2.01 MBytes       
[  5]   6.00-7.00   sec  86.2 MBytes   724 Mbits/sec    0   2.01 MBytes       
[  5]   7.00-8.00   sec  86.2 MBytes   723 Mbits/sec    0   2.01 MBytes       
[  5]   8.00-9.00   sec  86.2 MBytes   724 Mbits/sec    0   2.01 MBytes       
[  5]   9.00-10.00  sec  86.2 MBytes   723 Mbits/sec    0   2.01 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   865 MBytes   726 Mbits/sec    0             sender
[  5]   0.00-10.00  sec   862 MBytes   723 Mbits/sec                  receiver

iperf Done.

NanoPi NEO3 & USB3.0のネットワークアダプタの転送速度

IPv4の受信メインだと640Mbps程度
IPv6の受信メインだと620Mbps程度
IPv4の送信メインだと710Mbps程度
IPv6の送信メインだと720Mbps程度

NanoPi NEO2はUSB2.0(論理値480Mbps)の制限で実際は300Mbps+α程度だったけど、NanoPi NEO3ではUSB3.0のネットワークアダプタを使うとその倍近く出ることが判った。

ちなみにNano Pi NEO3の有線LANポートを使用した場合の転送速度。(NanoPi NEOの有線も)

IPv4の受信: 640Mbps (NanoPi NEO2: 615Mbps)
IPv6の受信: 650Mbps (NanoPi NEO2: 620Mbps)
IPv4の送信: 940Mbps (NanoPi NEO2: 890Mbps)
IPv6の送信: 920Mbps (NanoPi NEO2: 870Mbps)

NanoPi NEO2は以前にiperfで計測していて、その時は今回より良い結果だった。今回はお茶を挽いてるホストが無かったのでiperf3の通信相手のホストが計測専用という状態ではなく、ネットワークも使われていない状態ではなかったので以前より良くない状態で計測している。なので今回はNanoPi NEO2もiperf3を使って同じ劣悪条件で測り直しています。それでNanoPi NEO2の結果が以前より悪くなっています。

NanoPi NEO3の内蔵有線LANとnanoPi NEO2の内蔵有線LANのiperf3計測では全てでNanoPi NEO3の方がNanoPi NEO2より良好な速度が得られた。 NanoPi NEP3に接続したUSB3.0ネットワークアダプタとNanoPi NEO2の内蔵有線LANでは受信はNanoPi NEO3のUSB3.0ネットワークアダプタが同じかやや速く、送信はNanoPi NEO2の内蔵有線LANの方が150Mbps以上も速いということが判った。

まとめ

NanoPi NEO3の内蔵有線LANは速い。USB3.0ネットワークアダプタでは、USB2.0のNanoPi NEO2に接続した場合の倍の速度が出る。しかし、メチャメチャ速いというほどではない。

NanoPi NEO3はプラスチックケースが放熱に向かなさ過ぎる。アイドル状態で80〜90℃は酷い。「がとらぼ」の中の人のようにルーターにするつもりなら素直に(メタルケース付きで)NanoPi R2Sを買った方が良いかも・・・

関連記事:

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の温度も下がらないのね。この辺りがは早めに修正されることを願うばかり。

関連記事:
Up