MS-01でUSB4でUSB4NET接続
MS-01ではマシン間をThunderbolt4ケーブルもしくはUSB4ケーブルで接続すると簡易的なhost to hostのネットワークが構築出来る
今回はLinuxとWindowsそれぞれインストールしたMS-01で検証した
実際刺してみるとケーブルを刺すだけで勝手にEthernet over USB4 (USB4NET)を認識し、IPも勝手に振られた
Linux側
code:bash
$ ip a | tail
~中略~
76: thunderbolt0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 02:cf:7b:38:a2:cd brd ff:ff:ff:ff:ff:ff
inet 169.254.193.234/16 brd 169.254.255.255 scope link noprefixroute thunderbolt0
valid_lft forever preferred_lft forever
inet6 fe80::81c6:3b41:231b:e103/64 scope link noprefixroute
valid_lft forever preferred_lft forever
Windows側
code:bash
ipconfig
~中略~
イーサネット アダプター イーサネット 5:
接続固有の DNS サフィックス . . . . .:
リンクローカル IPv6 アドレス. . . . .: fe80::87e7:cb3d:fbae:1f89%60
自動構成 IPv4 アドレス. . . . . . . .: 169.254.196.240
サブネット マスク . . . . . . . . . .: 255.255.0.0
デフォルト ゲートウェイ . . . . . . .
iperf3で帯域幅を計測するとリンク速度が20Gbpsにも関わらず3Gbpsほどしか出ていなかった
code:bash
iperf3.exe -c 169.254.193.234
Connecting to host 169.254.193.234, port 5201
5 local 169.254.196.240 port 55805 connected to 169.254.193.234 port 5201 ID Interval Transfer Bitrate 5 0.00-1.01 sec 184 MBytes 1.53 Gbits/sec 5 1.01-2.01 sec 423 MBytes 3.55 Gbits/sec 5 2.01-3.01 sec 418 MBytes 3.51 Gbits/sec 5 3.01-4.01 sec 410 MBytes 3.44 Gbits/sec 5 4.01-5.01 sec 370 MBytes 3.10 Gbits/sec 5 5.01-6.01 sec 417 MBytes 3.50 Gbits/sec 5 6.01-7.01 sec 412 MBytes 3.46 Gbits/sec 5 7.01-8.01 sec 419 MBytes 3.51 Gbits/sec 5 8.01-9.01 sec 408 MBytes 3.43 Gbits/sec 5 9.01-10.01 sec 274 MBytes 2.30 Gbits/sec - - - - - - - - - - - - - - - - - - - - - - - - -
ID Interval Transfer Bitrate 5 0.00-10.01 sec 3.65 GBytes 3.13 Gbits/sec sender 5 0.00-10.02 sec 3.65 GBytes 3.13 Gbits/sec receiver iperf Done.
リンク速度はLinux/Windowsどちらも20Gbpsとなっている
Linux
code:sh
$ cat /sys/bus/thunderbolt/devices/1-1/tx_speed
20.0 Gb/s
cat /sys/bus/thunderbolt/devices/1-1/tx_speed
20.0 Gb/s
Windows
https://gyazo.com/f131faa57a90574fcf06f7be3285cdcc
Windowsの設定アプリからネットワークとインターネット > 該当のアダプタを確認したらリンク速度がなぜか2820Mbpsになっていた. 「ネットワーク接続」から確認出来る上記のリンク速度と一致していない?
https://gyazo.com/221c2625605e8605f835a9f660ff4c8d
何かWindows側のUSB4NETのドライバかなにかが原因で制限されているように見える
Linux -> Windows方向で帯域幅計測
code:sh
$ iperf3 -c 169.254.196.240
Connecting to host 169.254.196.240, port 5201
5 local 169.254.193.234 port 53470 connected to 169.254.196.240 port 5201 ID Interval Transfer Bitrate Retr Cwnd 5 0.00-1.00 sec 1.90 GBytes 16.3 Gbits/sec 0 4.14 MBytes 5 1.00-2.00 sec 2.01 GBytes 17.3 Gbits/sec 0 4.14 MBytes 5 2.00-3.00 sec 1.93 GBytes 16.6 Gbits/sec 0 4.14 MBytes 5 3.00-4.00 sec 1.88 GBytes 16.1 Gbits/sec 0 4.14 MBytes 5 4.00-5.00 sec 1.82 GBytes 15.6 Gbits/sec 0 4.14 MBytes 5 5.00-6.00 sec 1.89 GBytes 16.2 Gbits/sec 0 4.14 MBytes 5 6.00-7.00 sec 1.94 GBytes 16.7 Gbits/sec 0 4.14 MBytes 5 7.00-8.00 sec 1.97 GBytes 16.9 Gbits/sec 0 4.14 MBytes 5 8.00-9.00 sec 1.97 GBytes 17.0 Gbits/sec 0 4.14 MBytes 5 9.00-10.00 sec 2.02 GBytes 17.3 Gbits/sec 0 4.14 MBytes - - - - - - - - - - - - - - - - - - - - - - - - -
ID Interval Transfer Bitrate Retr 5 0.00-10.00 sec 19.4 GBytes 16.6 Gbits/sec 0 sender 5 0.00-10.00 sec 19.3 GBytes 16.6 Gbits/sec receiver iperf Done.
約16Gbps出てほぼ期待通りの帯域幅になっている
Windows用に配布されているiperf3とLinuxのiperf3の違いによるもの?
windowsでも受信時は問題ないように見えるから送信時だけの問題?
以下のリンクによるとWindows用iperf3では公式ではなくエミュレートしたものとのこと
Windows向けにはntttcpが公式にサポートされておりWindows用とLinux用が存在するのでこれを使用して欲しいとのこと。 Linux
code:sh
$ ntttcp -r -m "20,*,169.254.193.234" -V -t 300 -p 5001
Windows
code:sh
ntttcp -s -m 20,*,169.254.193.234 -v -ns -t 300
Thread Time(s) Throughput(KB/s) Avg B / Compl
====== ======= ================ =============
0 300.011 25762.255 65536.000
1 300.010 26186.860 65536.000
2 300.216 31132.145 65536.000
3 300.011 27188.550 65536.000
4 300.009 32013.333 65536.000
5 300.011 29799.014 65536.000
6 300.218 31449.786 65536.000
7 300.011 23908.243 65536.000
8 300.074 30540.520 65536.000
9 300.009 31002.590 65536.000
10 300.011 25854.199 65536.000
11 300.217 23430.945 65536.000
12 300.043 25485.840 65536.000
13 300.089 32420.888 65536.000
14 300.010 25043.005 65536.000
15 300.076 24534.158 65536.000
16 300.071 22539.092 65536.000
17 300.011 30553.333 65536.000
18 300.026 24052.955 65536.000
19 300.008 28243.300 65536.000
##### Totals: #####
Bytes(MEG) realtime(s) Avg Frame Size Throughput(MB/s)
================ =========== ============== ================
161498.437500 300.015 1459.289 538.301
しかしこちらもスループットは538Mbps = 約4Gbpsとなりiperf3と同じ結果になった
ということはWindowsレベルで外向きのパケットの送信速度もしくはLinuxでの受信速度の制限があるように思える. Windowsでの受信がなぜ20Gbps近くの期待通り出せるのかはまだ不明
追記
もしかしたらWindows -> LinuxはUSB 3.2 Gen 1x1 (最大転送速度5Gbps) の動作になっている?(仮説)であれば最大でも4Gbpsでのスループットしか出ない理由の説明がつく
Linux -> WindowsではUSB 3.2 Gen 2x2の20Gbpsでリンクしている通りの速度になっている
追記2
同様の現象が発生しているのをYoutubeのMS-01レビューでもあった。機器同士のUSB4への対応状況もあったりドライバーのコンフィグにも左右されるなどまだ安定性に欠ける印象
https://youtu.be/1F1Lqpt5V-U?si=SpjLeJoMMzAdIT6Q&t=390
なおSFP+ポートをDAC(Direct Attach Cable)で10Gbpsで接続したところiperf3でLinux-Windows間でそれぞれRX/TXどちらも期待通りの10Gbpsに近いスループットを達成できた
Windows -> Linux
code:bash
iperf3.exe -c 192.168.100.2 -P 3 -l 1M
Connecting to host 192.168.100.2, port 5201
5 local 192.168.100.1 port 50090 connected to 192.168.100.2 port 5201 7 local 192.168.100.1 port 50091 connected to 192.168.100.2 port 5201 9 local 192.168.100.1 port 50092 connected to 192.168.100.2 port 5201 ID Interval Transfer Bitrate 5 0.00-1.01 sec 381 MBytes 3.17 Gbits/sec 7 0.00-1.01 sec 384 MBytes 3.19 Gbits/sec 9 0.00-1.01 sec 373 MBytes 3.10 Gbits/sec SUM 0.00-1.01 sec 1.11 GBytes 9.47 Gbits/sec ~中略~
- - - - - - - - - - - - - - - - - - - - - - - - -
ID Interval Transfer Bitrate 5 0.00-10.01 sec 3.69 GBytes 3.17 Gbits/sec sender 5 0.00-10.01 sec 3.69 GBytes 3.17 Gbits/sec receiver 7 0.00-10.01 sec 3.69 GBytes 3.17 Gbits/sec sender 7 0.00-10.01 sec 3.69 GBytes 3.17 Gbits/sec receiver 9 0.00-10.01 sec 3.66 GBytes 3.14 Gbits/sec sender 9 0.00-10.01 sec 3.66 GBytes 3.14 Gbits/sec receiver SUM 0.00-10.01 sec 11.1 GBytes 9.49 Gbits/sec sender SUM 0.00-10.01 sec 11.1 GBytes 9.48 Gbits/sec receiver iperf Done.
Linux -> Windows
code:bash
iperf3 -c 192.168.100.1 --verbose -l 1M -P 3
iperf 3.16
Linux fedora 6.8.8-300.fc40.x86_64 #1 SMP PREEMPT_DYNAMIC Sat Apr 27 17:53:31 UTC 2024 x86_64 Control connection MSS 1448
Time: Thu, 23 May 2024 20:28:25 GMT
Connecting to host 192.168.100.1, port 5201
Cookie: swh4d2a4ywm2wcbdzwb7meygwb6vxuqrmkds
TCP MSS: 1448 (default)
5 local 192.168.100.2 port 38688 connected to 192.168.100.1 port 5201 7 local 192.168.100.2 port 38696 connected to 192.168.100.1 port 5201 9 local 192.168.100.2 port 38704 connected to 192.168.100.1 port 5201 Starting Test: protocol: TCP, 3 streams, 1048576 byte blocks, omitting 0 seconds, 10 second test, tos 0
ID Interval Transfer Bitrate Retr Cwnd 5 0.00-1.00 sec 376 MBytes 3.15 Gbits/sec 6 813 KBytes 7 0.00-1.00 sec 375 MBytes 3.14 Gbits/sec 5 945 KBytes 9 0.00-1.00 sec 378 MBytes 3.17 Gbits/sec 6 765 KBytes SUM 0.00-1.00 sec 1.10 GBytes 9.46 Gbits/sec 17 - - - - - - - - - - - - - - - - - - - - - - - - -
~中略~
- - - - - - - - - - - - - - - - - - - - - - - - -
Test Complete. Summary Results:
ID Interval Transfer Bitrate Retr 5 0.00-10.00 sec 3.66 GBytes 3.14 Gbits/sec 6 sender 5 0.00-10.00 sec 3.65 GBytes 3.14 Gbits/sec receiver 7 0.00-10.00 sec 3.66 GBytes 3.14 Gbits/sec 5 sender 7 0.00-10.00 sec 3.65 GBytes 3.14 Gbits/sec receiver 9 0.00-10.00 sec 3.66 GBytes 3.14 Gbits/sec 6 sender 9 0.00-10.00 sec 3.65 GBytes 3.14 Gbits/sec receiver SUM 0.00-10.00 sec 11.0 GBytes 9.42 Gbits/sec 17 sender SUM 0.00-10.00 sec 11.0 GBytes 9.41 Gbits/sec receiver CPU Utilization: local/sender 33.5% (0.1%u/33.3%s), remote/receiver 1.4% (0.1%u/1.2%s)
snd_tcp_congestion cubic
iperf Done.
安定性は普通のNICの方が高そうなので普段遣いするにはまだSFP+経由で10Gbpsなどにした方がよさそう