Raspberry Pi 4に2.5Gbps Ethernetアダプタを接続してみた (2) 成功編
3行まとめ
- Raspberry Pi 4に2.5Gbps Ethernet/USBアダプタ「EDC-QUA3C-B」を接続すると、標準ドライバで正常に動作するものの、通信速度が遅め。
- Realtekのドライバに入れ替えることで通信速度が向上する。(実測1.9Gbps)
- Realtekのドライバにはパッチを当てる必要がある。
はじめに
以前、「Raspberry Pi 4に2.5Gbps Ethernetアダプタを接続してみた (1) 失敗編」という記事を書いたのですが、その時には期待通りの速度が出ず、失敗してしまいました。
その後、検証を進めて「Linux環境でエレコム製の2.5Gbps Ethernet/USBアダプタを使う」という記事を書きました。
前述の記事はx86_64環境について調べたものですが、Raspberry Pi 4(aarch64)環境でも同様に成功したので、備忘録を残しておきます。
使用機材
今回の実験で使用した機材は以下の通りです。
メーカー | 品名 | 型番 | 台数 | 参考リンク |
---|---|---|---|---|
- | Raspberry Pi 4 Model B 4GB | - | 1台 | Amazon |
エレコム | 2.5Gbps Ethernet/USBアダプタ | EDC-QUA3C-B | 1台 | Amazon |
PLANEX | 2.5Gbps Ethernet スイッチングハブ 8ポート | FX2G-08EM | 1台 | Amazon |
MSI | マザーボード(2.5Gbps Ethernet内蔵) | MEG X570 UNIFY | 1台 | Amazon |
BUFFALO | Ethernetケーブル Cat6A 0.5m | BCLS6AN05BK | 2本 | Amazon |
ネットワーク構成
ネットワークの物理構成は以下の通りです。
GPUマシン(gpu) 〜 Cat6Aケーブル 〜 2.5Gbpsスイッチングハブ 〜 Cat6Aケーブル 〜 2.5Gbps Ethernet/USBアダプタ 〜 Raspberry Pi 4(raspi4b4g)
GPUマシン(gpu
)は、マザーボードに内蔵されている2.5Gbps Ethernetを使用しています。
また、2.5Gbpsスイッチングハブには上位の1Gbpsスイッチングハブが接続されており、DHCPが有効な環境です。
環境
Raspberry Pi 4の環境は以下の通りです。
- OS: Ubuntu 22.04 LTS 64ビット版
- Linuxカーネル:
5.15.0-1006-raspi
- Linuxカーネル:
- ホスト名:
raspi4b4g
ubuntu@raspi4b4g$ grep Model /proc/cpuinfo
Model : Raspberry Pi 4 Model B Rev 1.2
ubuntu@raspi4b4g$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
ubuntu@raspi4b4g$ uname -a
Linux raspi4b4g 5.15.0-1006-raspi #6-Ubuntu SMP PREEMPT Mon Apr 25 12:50:48 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux
ドライバ導入前
Raspberry Pi 4に2.5Gbps Ethernet/USBアダプタを接続すると、特に何もしなくてもネットワークデバイスとして認識されます。ただ、ethtool
コマンドで各種情報が表示されない状態でした。
この時点では、ドライバとしてcdc_ncm
が使われています。
ubuntu@raspi4b4g$ lsusb
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 056e:4017 Elecom Co., Ltd USB 10/100/1G/2.5G LAN
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
ubuntu@raspi4b4g$ lsusb -t
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=dwc2/1p, 480M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
|__ Port 2: Dev 2, If 0, Class=Communications, Driver=cdc_ncm, 5000M
|__ Port 2: Dev 2, If 1, Class=CDC Data, Driver=cdc_ncm, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
ubuntu@raspi4b4g$ ip addr show enx04ab18a2a68c
4: enx04ab18a2a68c: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 04:ab:18:a2:a6:8c brd ff:ff:ff:ff:ff:ff
inet 192.168.1.128/24 metric 100 brd 192.168.1.255 scope global dynamic enx04ab18a2a68c
valid_lft 86329sec preferred_lft 86329sec
inet6 fe80::6ab:18ff:fea2:a68c/64 scope link
valid_lft forever preferred_lft forever
ubuntu@raspi4b4g$ sudo ethtool enx04ab18a2a68c
Settings for enx04ab18a2a68c:
Supported ports: [ ]
Supported link modes: Not reported
Supported pause frame use: No
Supports auto-negotiation: No
Supported FEC modes: Not reported
Advertised link modes: Not reported
Advertised pause frame use: No
Advertised auto-negotiation: No
Advertised FEC modes: Not reported
Speed: 2500Mb/s
Duplex: Half
Auto-negotiation: off
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
MDI-X: Unknown
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
ubuntu@raspi4b4g$ inxi -n
Network:
Device-1: bcm2835-mmc driver: mmc_bcm2835
IF: wlan0 state: down mac: dc:a6:32:64:9c:b1
Device-2: bcm2711-genet-v5 driver: bcmgenet
IF: eth0 state: up speed: 1000 Mbps duplex: full mac: dc:a6:32:64:9c:b0
Device-3: Elecom USB 10/100/1G/2.5G LAN type: USB driver: cdc_ncm
IF: enx04ab18a2a68c state: down mac: 04:ab:18:a2:a6:8c
cdc_ncm
ドライバを使用した環境におけるiperf3
コマンドによる速度測定の結果は以下の通りです。
cdc_ncm
ドライバが使用されている状態でも通信を行うことはできましたが、Raspberry Pi 4がサーバの場合は1.32Gbps、クライアントの場合は0.90Gbpsと控えめな通信速度でした。
Raspberry Pi 4がサーバの場合:
ubuntu@raspi4b4g$ iperf3 --bind 192.168.1.128 --server
ubuntu@gpu$ iperf3 --client 192.168.1.128
Connecting to host 192.168.1.128, port 5201
[ 5] local 192.168.1.205 port 50242 connected to 192.168.1.128 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 151 MBytes 1.27 Gbits/sec 75 1.42 MBytes
[ 5] 1.00-2.00 sec 158 MBytes 1.32 Gbits/sec 0 1.55 MBytes
[ 5] 2.00-3.00 sec 159 MBytes 1.33 Gbits/sec 3 1.16 MBytes
[ 5] 3.00-4.00 sec 158 MBytes 1.32 Gbits/sec 0 1.26 MBytes
[ 5] 4.00-5.00 sec 159 MBytes 1.33 Gbits/sec 0 1.35 MBytes
[ 5] 5.00-6.00 sec 158 MBytes 1.32 Gbits/sec 0 1.43 MBytes
[ 5] 6.00-7.00 sec 158 MBytes 1.32 Gbits/sec 0 1.51 MBytes
[ 5] 7.00-8.00 sec 158 MBytes 1.32 Gbits/sec 0 1.58 MBytes
[ 5] 8.00-9.00 sec 158 MBytes 1.32 Gbits/sec 31 1.20 MBytes
[ 5] 9.00-10.00 sec 158 MBytes 1.32 Gbits/sec 0 1.33 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.53 GBytes 1.32 Gbits/sec 109 sender
[ 5] 0.00-10.01 sec 1.53 GBytes 1.32 Gbits/sec receiver
iperf Done.
Raspberry Pi 4がクライアントの場合:
ubuntu@gpu$ iperf3 --bind 192.168.1.205 --server
ubuntu@raspi4b4g$ iperf3 --client 192.168.1.205
Connecting to host 192.168.1.205, port 5201
[ 5] local 192.168.1.128 port 46516 connected to 192.168.1.205 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 108 MBytes 902 Mbits/sec 0 1.10 MBytes
[ 5] 1.00-2.00 sec 110 MBytes 923 Mbits/sec 0 1.10 MBytes
[ 5] 2.00-3.00 sec 109 MBytes 912 Mbits/sec 0 1.10 MBytes
[ 5] 3.00-4.00 sec 108 MBytes 902 Mbits/sec 0 1.10 MBytes
[ 5] 4.00-5.00 sec 106 MBytes 891 Mbits/sec 0 1.10 MBytes
[ 5] 5.00-6.00 sec 110 MBytes 923 Mbits/sec 0 1.10 MBytes
[ 5] 6.00-7.00 sec 110 MBytes 923 Mbits/sec 0 1.10 MBytes
[ 5] 7.00-8.00 sec 110 MBytes 923 Mbits/sec 0 1.10 MBytes
[ 5] 8.00-9.00 sec 108 MBytes 902 Mbits/sec 0 1.10 MBytes
[ 5] 9.00-10.00 sec 106 MBytes 891 Mbits/sec 0 1.10 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.06 GBytes 909 Mbits/sec 0 sender
[ 5] 0.00-10.01 sec 1.06 GBytes 907 Mbits/sec receiver
iperf Done.
Realtekドライバの導入
Realtekのドライバr8152
を導入する手順は以下の通りです。手順はx86_64環境と同じです。詳しくは以下の記事を参照ください。
ubuntu@raspi4b4g$ ls -l r8152-2.16.1.tar.bz2
-rw-r--r-- 1 ubuntu ubuntu 72932 May 11 09:55 r8152-2.16.1.tar.bz2
ubuntu@raspi4b4g$ shasum r8152-2.16.1.tar.bz2
fa2d9ce8e374d3e462ca14509af7a03088767eb9 r8152-2.16.1.tar.bz2
ubuntu@raspi4b4g$ sudo apt install build-essential
ubuntu@raspi4b4g$ tar xfv r8152-2.16.1.tar.bz2
r8152-2.16.1/
r8152-2.16.1/ReadMe.txt
r8152-2.16.1/compatibility.h
r8152-2.16.1/50-usb-realtek-net.rules
r8152-2.16.1/r8152.c
r8152-2.16.1/Makefile
ubuntu@raspi4b4g$ cd r8152-2.16.1/
ubuntu@raspi4b4g$ wget https://gist.githubusercontent.com/nayutaya/0e48e707ea397db1137050d5ffa342cb/raw/7686050988ffee262c6aa53af07d247538db473c/r8152.c.patch
ubuntu@raspi4b4g$ cat r8152.c.patch
--- r8152.c.orig 2022-05-10 18:42:20.935229478 +0900
+++ r8152.c 2022-05-10 18:43:17.759407562 +0900
@@ -20734,6 +20734,9 @@
/* Getac */
REALTEK_USB_DEVICE(0x2baf, 0x0012),
+ /* ELECOM */
+ REALTEK_USB_DEVICE(0x056e, 0x4017),
+
{}
};
ubuntu@raspi4b4g$ patch -u < r8152.c.patch
patching file r8152.c
ubuntu@raspi4b4g$ wget https://gist.githubusercontent.com/nayutaya/0e48e707ea397db1137050d5ffa342cb/raw/7686050988ffee262c6aa53af07d247538db473c/50-usb-realtek-net.rules.patch
ubuntu@raspi4b4g$ cat 50-usb-realtek-net.rules.patch
--- 50-usb-realtek-net.rules.orig 2022-05-10 19:06:50.312255170 +0900
+++ 50-usb-realtek-net.rules 2022-05-10 19:07:51.472438505 +0900
@@ -43,4 +43,7 @@
# LINKSYS
ATTR{idVendor}=="13b1", ATTR{idProduct}=="0041", ATTR{bConfigurationValue}!="$env{REALTEK_MODE1}", ATTR{bConfigurationValue}="$env{REALTEK_MODE1}"
+# ELECOM
+ATTR{idVendor}=="056e", ATTR{idProduct}=="4017", ATTR{bConfigurationValue}!="$env{REALTEK_MODE1}", ATTR{bConfigurationValue}="$env{REALTEK_MODE1}"
+
LABEL="usb_realtek_net_end"
ubuntu@raspi4b4g$ patch -u < 50-usb-realtek-net.rules.patch
patching file 50-usb-realtek-net.rules
ubuntu@raspi4b4g$ make
make -C /lib/modules/5.15.0-1006-raspi/build M=/home/ubuntu/r8152-2.16.1 modules
make[1]: Entering directory '/usr/src/linux-headers-5.15.0-1006-raspi'
CC [M] /home/ubuntu/r8152-2.16.1/r8152.o
MODPOST /home/ubuntu/r8152-2.16.1/Module.symvers
CC [M] /home/ubuntu/r8152-2.16.1/r8152.mod.o
LD [M] /home/ubuntu/r8152-2.16.1/r8152.ko
make[1]: Leaving directory '/usr/src/linux-headers-5.15.0-1006-raspi'
ubuntu@raspi4b4g$ modinfo ./r8152.ko | grep -i 056e
alias: usb:v056Ep4017d*dc*dsc*dp*ic02isc0Dip00in*
alias: usb:v056Ep4017d*dc*dsc*dp*ic02isc06ip00in*
alias: usb:v056Ep4017d*dc*dsc*dp*icFFisc*ip*in*
ubuntu@raspi4b4g$ sudo make install
make -C /lib/modules/5.15.0-1006-raspi/build M=/home/ubuntu/r8152-2.16.1 INSTALL_MOD_DIR=kernel/drivers/net/usb modules_install
make[1]: Entering directory '/usr/src/linux-headers-5.15.0-1006-raspi'
INSTALL /lib/modules/5.15.0-1006-raspi/kernel/drivers/net/usb/r8152.ko
SIGN /lib/modules/5.15.0-1006-raspi/kernel/drivers/net/usb/r8152.ko
At main.c:160:
- SSL error:FFFFFFFF80000002:system library::No such file or directory: ../crypto/bio/bss_file.c:67
- SSL error:10000080:BIO routines::no such file: ../crypto/bio/bss_file.c:75
sign-file: certs/signing_key.pem: No such file or directory
DEPMOD /lib/modules/5.15.0-1006-raspi
Warning: modules_install: missing 'System.map' file. Skipping depmod.
make[1]: Leaving directory '/usr/src/linux-headers-5.15.0-1006-raspi'
modprobe r8152
ubuntu@raspi4b4g$ sudo cp 50-usb-realtek-net.rules /etc/udev/rules.d/
ubuntu@raspi4b4g$ sudo depmod -a
ubuntu@raspi4b4g$ sudo update-initramfs -u
ubuntu@raspi4b4g$ sudo service udev restart
ドライバ導入後
ドライバの導入後、2.5Gbps Ethernet/USBアダプタを抜き挿しすると、当該デバイスのドライバとしてr8152
がロードされます。
また、ethtool
コマンドでも各種情報が表示されるようになっています。
ubuntu@raspi4b4g$ lsusb
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 056e:4017 Elecom Co., Ltd USB 10/100/1G/2.5G LAN
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
ubuntu@raspi4b4g$ lsusb -t
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=dwc2/1p, 480M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
|__ Port 2: Dev 2, If 0, Class=Vendor Specific Class, Driver=r8152, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
ubuntu@raspi4b4g$ ip addr show enx04ab18a2a68c
4: enx04ab18a2a68c: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 04:ab:18:a2:a6:8c brd ff:ff:ff:ff:ff:ff
inet 192.168.1.129/24 metric 100 brd 192.168.1.255 scope global dynamic enx04ab18a2a68c
valid_lft 86325sec preferred_lft 86325sec
inet6 fe80::6ab:18ff:fea2:a68c/64 scope link
valid_lft forever preferred_lft forever
ubuntu@raspi4b4g$ sudo ethtool enx04ab18a2a68c
Settings for enx04ab18a2a68c:
Supported ports: [ MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
2500baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
2500baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Link partner advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
2500baseT/Full
Link partner advertised pause frame use: No
Link partner advertised auto-negotiation: Yes
Link partner advertised FEC modes: Not reported
Speed: 2500Mb/s
Duplex: Full
Auto-negotiation: on
Port: MII
PHYAD: 32
Transceiver: internal
Supports Wake-on: pumbg
Wake-on: g
Current message level: 0x00007fff (32767)
drv probe link timer ifdown ifup rx_err tx_err tx_queued intr tx_done rx_status pktdata hw wol
Link detected: yes
ubuntu@raspi4b4g$ inxi -n
Network:
Device-1: bcm2835-mmc driver: mmc_bcm2835
IF: wlan0 state: down mac: dc:a6:32:64:9c:b1
Device-2: bcm2711-genet-v5 driver: bcmgenet
IF: eth0 state: down mac: dc:a6:32:64:9c:b0
Device-3: Elecom USB 10/100/1G/2.5G LAN type: USB driver: r8152
IF: enx04ab18a2a68c state: up speed: 2500 Mbps duplex: full mac: 04:ab:18:a2:a6:8c
r8152
ドライバを使用した環境におけるiperf3
コマンドによる速度測定の結果は以下の通りです。
r8152
ドライバに入れ替えることで、Raspberry Pi 4がサーバの場合は1.32Gbpsから1.91Gbpsに、クライアントの場合は0.90Gbpsから1.90Gbpsに通信速度が改善されました。
Raspberry Pi 4がサーバの場合:
ubuntu@raspi4b4g$ iperf3 --bind 192.168.1.129 --server
ubuntu@gpu$ iperf3 --client 192.168.1.129
Connecting to host 192.168.1.129, port 5201
[ 5] local 192.168.1.205 port 59978 connected to 192.168.1.129 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 233 MBytes 1.95 Gbits/sec 0 1015 KBytes
[ 5] 1.00-2.00 sec 228 MBytes 1.91 Gbits/sec 0 1015 KBytes
[ 5] 2.00-3.00 sec 228 MBytes 1.91 Gbits/sec 0 1015 KBytes
[ 5] 3.00-4.00 sec 228 MBytes 1.91 Gbits/sec 0 1015 KBytes
[ 5] 4.00-5.00 sec 226 MBytes 1.90 Gbits/sec 0 1015 KBytes
[ 5] 5.00-6.00 sec 228 MBytes 1.91 Gbits/sec 0 1015 KBytes
[ 5] 6.00-7.00 sec 228 MBytes 1.91 Gbits/sec 0 1015 KBytes
[ 5] 7.00-8.00 sec 226 MBytes 1.90 Gbits/sec 0 1015 KBytes
[ 5] 8.00-9.00 sec 228 MBytes 1.91 Gbits/sec 0 1015 KBytes
[ 5] 9.00-10.00 sec 226 MBytes 1.90 Gbits/sec 0 1015 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 2.22 GBytes 1.91 Gbits/sec 0 sender
[ 5] 0.00-10.00 sec 2.22 GBytes 1.90 Gbits/sec receiver
iperf Done.
Raspberry Pi 4がクライアントの場合:
ubuntu@gpu$ iperf3 --bind 192.168.1.205 --server
ubuntu@raspi4b4g$ iperf3 --client 192.168.1.205
Connecting to host 192.168.1.205, port 5201
[ 5] local 192.168.1.129 port 58034 connected to 192.168.1.205 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 227 MBytes 1.90 Gbits/sec 0 1.14 MBytes
[ 5] 1.00-2.00 sec 225 MBytes 1.89 Gbits/sec 0 1.20 MBytes
[ 5] 2.00-3.00 sec 226 MBytes 1.90 Gbits/sec 0 1.20 MBytes
[ 5] 3.00-4.00 sec 225 MBytes 1.89 Gbits/sec 0 1.20 MBytes
[ 5] 4.00-5.00 sec 228 MBytes 1.91 Gbits/sec 0 1.20 MBytes
[ 5] 5.00-6.00 sec 225 MBytes 1.89 Gbits/sec 0 1.20 MBytes
[ 5] 6.00-7.00 sec 225 MBytes 1.89 Gbits/sec 0 1.20 MBytes
[ 5] 7.00-8.00 sec 228 MBytes 1.91 Gbits/sec 0 1.20 MBytes
[ 5] 8.00-9.00 sec 225 MBytes 1.89 Gbits/sec 0 1.20 MBytes
[ 5] 9.00-10.00 sec 226 MBytes 1.90 Gbits/sec 0 1.20 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 2.21 GBytes 1.90 Gbits/sec 0 sender
[ 5] 0.00-10.01 sec 2.20 GBytes 1.89 Gbits/sec receiver
iperf Done.
おわりに
Raspberry Pi 4に2.5Gbps Ethernet/USBアダプタを接続し、1.9Gbpsというそれなりの速度で通信できる環境が整いました。
今後はこの環境を使って、NFS、MinIO、Ceph、Kubernetesなどの検証を進めたいと思っています。
関連記事
Discussion