Несколько дней назад мы рассмотрели Ethernet-адаптер USB 3.0 на 2,5 Гбит/с на базе чипа Realtek RTL8156B в Ubuntu 20.04, и, скажем так, его надежность и производительность нас не впечатлили. Мы получили некоторые рекомендации, такие как замена кабелей, размер MTU и т. д.
Замена кабелей не помогла, но в одном комментарии упоминалось, что проблема может быть в драйвере cdc_ncm, в другом говорилось, что обновление до ядра Linux 5.14 должно установить правильный драйвер r8152… Так что мы просто сделали это:
sudo apt install linux-oem-20.04d
Обновили Linux 5.13 (поставляется с Ubuntu 20.04 + HWE) до Linux 5.14, но система продолжала использовать драйвер cdc_ncm с полудуплексным каналом:
jaufranc@cnx-laptop-4:~$ inxi -n
Network:
Device-1: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet
driver: r8169
IF: enp2s0f1 state: down mac: 98:28:a6:0f:06:07
Device-2: Qualcomm Atheros QCA9377 802.11ac Wireless Network Adapter
driver: ath10k_pci
IF: wlp3s0 state: up mac: 70:c9:4e:b7:84:77
Device-3: Realtek USB 10/100/1G/2.5G LAN type: USB driver: cdc_ncm
IF: enx1cbfced40321 state: up speed: 2500 Mbps duplex: half
mac: 1c:bf:ce:d4:03:21
jaufranc@cnx-laptop-4:~$ uname -a
Linux cnx-laptop-4 5.14.0-1022-oem #24-Ubuntu SMP Mon Jan 31 16:00:31 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
Потом мы подумали, что, возможно, нам придется использовать правила udev, чтобы предотвратить загрузку драйвера cdc_ncm, и действительно для этого есть 50-usb-realtek-net.rules в драйвере r8152. Поэтому мы скопировали файл в папку /etc/udev/rules.d/. Так как не перезагружалось, то нам пришлось выгрузить ненужные нам модули, и перезапустить udev:
sudo rmmod cdc_mbim
sudo rmmod cdc_ncm
service udev restart
Давайте посмотрим…
sudo inxi -n
Network:
Device-1: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet
driver: r8169
IF: enp2s0f1 state: down mac: 98:28:a6:0f:06:07
Device-2: Qualcomm Atheros QCA9377 802.11ac Wireless Network Adapter
driver: ath10k_pci
IF: wlp3s0 state: up mac: 70:c9:4e:b7:84:77
Device-3: Realtek USB 10/100/1G/2.5G LAN type: USB driver: r8152
IF: enx1cbfced40321 state: up speed: 2500 Mbps duplex: full
mac: 1c:bf:ce:d4:03:21
Здорово! Теперь он использует драйвер r8152, и у нас есть полнодуплексное соединение.
Давайте еще раз пройдемся по всем нашим тестам, чтобы сравнить результаты.
iperf2
загрузка:
iperf -t 60 -c 192.168.31.12
------------------------------------------------------------
Client connecting to 192.168.31.12, TCP port 5001
TCP window size: 1.40 MByte (default)
------------------------------------------------------------
[ 3] local 192.168.31.166 port 41266 connected with 192.168.31.12 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-60.0 sec 16.4 GBytes 2.35 Gbits/sec
скачивание:
iperf -t 60 -c 192.168.31.166
------------------------------------------------------------
Client connecting to 192.168.31.166, TCP port 5001
TCP window size: 901 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.31.12 port 37188 connected with 192.168.31.166 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-60.0 sec 10.8 GBytes 1.55 Gbits/sec
Есть улучшение скорости загрузки (было 600 Мбит/с с драйвером cdc_ncm), но все еще не близко к 2,3 Гбит/с.
Ради интереса, давайте попробуем полный дуплекс:
Client connecting to 192.168.31.166, TCP port 5001
TCP window size: 799 KByte (default)
------------------------------------------------------------
[ 4] local 192.168.31.12 port 5001 connected with 192.168.31.166 port 41290
[ 6] local 192.168.31.12 port 37194 connected with 192.168.31.166 port 5001
[ 6] 0.0-60.1 sec 8.06 GBytes 1.15 Gbits/sec
[ 4] 0.0-60.4 sec 16.3 GBytes 2.32 Gbits/sec
Это на самом деле не так уж плохо.
iperf3
загрузка:
iperf3 -t 60 -c 192.168.31.12 -i 5
Connecting to host 192.168.31.12, port 5201
[ 5] local 192.168.31.166 port 32848 connected to 192.168.31.12 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-5.00 sec 1.37 GBytes 2.36 Gbits/sec 0 847 KBytes
[ 5] 5.00-10.00 sec 1.37 GBytes 2.35 Gbits/sec 0 889 KBytes
[ 5] 10.00-15.00 sec 1.37 GBytes 2.35 Gbits/sec 0 1.14 MBytes
[ 5] 15.00-20.00 sec 1.37 GBytes 2.35 Gbits/sec 0 1.14 MBytes
[ 5] 20.00-25.00 sec 1.37 GBytes 2.35 Gbits/sec 0 1.14 MBytes
[ 5] 25.00-30.00 sec 1.37 GBytes 2.35 Gbits/sec 0 1.14 MBytes
[ 5] 30.00-35.00 sec 1.37 GBytes 2.35 Gbits/sec 0 1.73 MBytes
[ 5] 35.00-40.00 sec 1.37 GBytes 2.35 Gbits/sec 0 1.73 MBytes
[ 5] 40.00-45.00 sec 1.37 GBytes 2.35 Gbits/sec 0 3.92 MBytes
[ 5] 45.00-50.00 sec 1.37 GBytes 2.35 Gbits/sec 0 3.92 MBytes
[ 5] 50.00-55.00 sec 1.37 GBytes 2.35 Gbits/sec 0 3.92 MBytes
[ 5] 55.00-60.00 sec 1.37 GBytes 2.35 Gbits/sec 0 3.92 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-60.00 sec 16.4 GBytes 2.35 Gbits/sec 0 sender
[ 5] 0.00-60.05 sec 16.4 GBytes 2.35 Gbits/sec receiver
iperf Done.
скачивание:
iperf3 -t 60 -c 192.168.31.166 -i 5
Connecting to host 192.168.31.166, port 5201
[ 5] local 192.168.31.12 port 53112 connected to 192.168.31.166 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-5.00 sec 802 MBytes 1.35 Gbits/sec 641 222 KBytes
[ 5] 5.00-10.00 sec 856 MBytes 1.44 Gbits/sec 618 83.4 KBytes
[ 5] 10.00-15.00 sec 852 MBytes 1.43 Gbits/sec 583 87.7 KBytes
[ 5] 15.00-20.00 sec 843 MBytes 1.41 Gbits/sec 592 168 KBytes
[ 5] 20.00-25.00 sec 831 MBytes 1.39 Gbits/sec 642 91.9 KBytes
[ 5] 25.00-30.00 sec 810 MBytes 1.36 Gbits/sec 666 97.6 KBytes
[ 5] 30.00-35.00 sec 831 MBytes 1.39 Gbits/sec 590 123 KBytes
[ 5] 35.00-40.00 sec 827 MBytes 1.39 Gbits/sec 652 298 KBytes
[ 5] 40.00-45.00 sec 843 MBytes 1.41 Gbits/sec 605 93.3 KBytes
[ 5] 45.00-50.00 sec 844 MBytes 1.42 Gbits/sec 635 96.2 KBytes
[ 5] 50.00-55.00 sec 862 MBytes 1.45 Gbits/sec 565 84.8 KBytes
[ 5] 55.00-60.00 sec 858 MBytes 1.44 Gbits/sec 583 82.0 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-60.00 sec 9.82 GBytes 1.41 Gbits/sec 7372 sender
[ 5] 0.00-60.00 sec 9.82 GBytes 1.41 Gbits/sec receiver
iperf Done.
Примерно так же, как iperf2.
iperf3 много лет не поддерживал полнодуплексный режим, но в версии 3.7 эта функция была вновь представлена. Итак, давайте попробуем:
iperf3 -t 60 -c 192.168.31.12 --bidir -i 5
Connecting to host 192.168.31.12, port 5201
[ 5] local 192.168.31.166 port 32858 connected to 192.168.31.12 port 5201
[ 7] local 192.168.31.166 port 32860 connected to 192.168.31.12 port 5201
[ ID][Role] Interval Transfer Bitrate Retr Cwnd
[ 5][TX-C] 0.00-5.00 sec 1.36 GBytes 2.34 Gbits/sec 0 1.41 MBytes
[ 7][RX-C] 0.00-5.00 sec 643 MBytes 1.08 Gbits/sec
[ 5][TX-C] 5.00-10.00 sec 1.36 GBytes 2.34 Gbits/sec 0 1.48 MBytes
[ 7][RX-C] 5.00-10.00 sec 673 MBytes 1.13 Gbits/sec
[ 5][TX-C] 10.00-15.00 sec 1.36 GBytes 2.34 Gbits/sec 0 1.78 MBytes
[ 7][RX-C] 10.00-15.00 sec 690 MBytes 1.16 Gbits/sec
[ 5][TX-C] 15.00-20.00 sec 1.36 GBytes 2.34 Gbits/sec 0 1.78 MBytes
[ 7][RX-C] 15.00-20.00 sec 695 MBytes 1.17 Gbits/sec
[ 5][TX-C] 20.00-25.00 sec 1.36 GBytes 2.34 Gbits/sec 0 1.78 MBytes
[ 7][RX-C] 20.00-25.00 sec 703 MBytes 1.18 Gbits/sec
[ 5][TX-C] 25.00-30.00 sec 1.36 GBytes 2.34 Gbits/sec 0 1.78 MBytes
[ 7][RX-C] 25.00-30.00 sec 704 MBytes 1.18 Gbits/sec
[ 5][TX-C] 30.00-35.00 sec 1.36 GBytes 2.34 Gbits/sec 0 1.78 MBytes
[ 7][RX-C] 30.00-35.00 sec 711 MBytes 1.19 Gbits/sec
[ 5][TX-C] 35.00-40.00 sec 1.36 GBytes 2.34 Gbits/sec 0 1.78 MBytes
[ 7][RX-C] 35.00-40.00 sec 697 MBytes 1.17 Gbits/sec
[ 5][TX-C] 40.00-45.00 sec 28.8 MBytes 48.2 Mbits/sec 4 1.41 KBytes
[ 7][RX-C] 40.00-45.00 sec 15.0 MBytes 25.2 Mbits/sec
[ 5][TX-C] 45.00-50.00 sec 0.00 Bytes 0.00 bits/sec 1 1.41 KBytes
[ 7][RX-C] 45.00-50.00 sec 0.00 Bytes 0.00 bits/sec
[ 5][TX-C] 50.00-55.00 sec 0.00 Bytes 0.00 bits/sec 1 1.41 KBytes
[ 7][RX-C] 50.00-55.00 sec 0.00 Bytes 0.00 bits/sec
iperf3: error - control socket has closed unexpectedly
Что случилось? В журнале ядра также есть сообщения об ошибках.
[18424.279351] r8152 2-1:1.0 enx1cbfced40321: Tx status -71
[18424.287497] r8152 2-1:1.0 enx1cbfced40321: Tx status -71
[18424.295735] r8152 2-1:1.0 enx1cbfced40321: Tx status -71
[18424.303858] r8152 2-1:1.0 enx1cbfced40321: Tx status -71
[18430.885965] net_ratelimit: 107 callbacks suppressed
[18430.885975] r8152 2-1:1.0 enx1cbfced40321: Tx status -71
[18431.251643] r8152 2-1:1.0 enx1cbfced40321: Tx status -71
[18431.909792] r8152 2-1:1.0 enx1cbfced40321: Tx status -71
[18437.797786] r8152 2-1:1.0 enx1cbfced40321: Tx status -71
Мы не единственные, у кого есть эта проблема, и это открытая проблема в репозитории драйвера r8156 на Github. Вот ответ от разработчика для справки:
Есть подозрение, что проблема в адаптере Ethernet, так как имеется много сообщений о том, что он работает с DS918+. (Например, дизайн линии электропередач, перегрев и т. д.)
https://github.com/bb-qq/r8152/wiki/CompatibilityНе могли бы вы попробовать другого поставщика? Кроме того, использование USB-концентратора с внешним источником питания может улучшить ситуацию.
В этот момент Ethernet вообще не работал, и нам пришлось отключить и снова вставить USB-ключ. Второй раз «сработало».
iperf3 -t 60 -c 192.168.31.12 --bidir -i 5
Connecting to host 192.168.31.12, port 5201
[ 5] local 192.168.31.166 port 32872 connected to 192.168.31.12 port 5201
[ 7] local 192.168.31.166 port 32874 connected to 192.168.31.12 port 5201
[ ID][Role] Interval Transfer Bitrate Retr Cwnd
[ 5][TX-C] 0.00-5.00 sec 1.36 GBytes 2.34 Gbits/sec 0 1.59 MBytes
[ 7][RX-C] 0.00-5.00 sec 515 MBytes 864 Mbits/sec
[ 5][TX-C] 5.00-10.00 sec 1.36 GBytes 2.34 Gbits/sec 0 1.75 MBytes
[ 7][RX-C] 5.00-10.00 sec 489 MBytes 820 Mbits/sec
[ 5][TX-C] 10.00-15.00 sec 1.36 GBytes 2.34 Gbits/sec 0 1.75 MBytes
[ 7][RX-C] 10.00-15.00 sec 530 MBytes 889 Mbits/sec
[ 5][TX-C] 15.00-20.00 sec 1.36 GBytes 2.34 Gbits/sec 0 1.75 MBytes
[ 7][RX-C] 15.00-20.00 sec 564 MBytes 947 Mbits/sec
[ 5][TX-C] 20.00-25.00 sec 1.36 GBytes 2.34 Gbits/sec 0 1.75 MBytes
[ 7][RX-C] 20.00-25.00 sec 560 MBytes 940 Mbits/sec
[ 5][TX-C] 25.00-30.00 sec 1.36 GBytes 2.34 Gbits/sec 0 2.63 MBytes
[ 7][RX-C] 25.00-30.00 sec 578 MBytes 970 Mbits/sec
[ 5][TX-C] 30.00-35.00 sec 1.36 GBytes 2.34 Gbits/sec 0 2.63 MBytes
[ 7][RX-C] 30.00-35.00 sec 561 MBytes 942 Mbits/sec
[ 5][TX-C] 35.00-40.00 sec 1.36 GBytes 2.34 Gbits/sec 0 2.63 MBytes
[ 7][RX-C] 35.00-40.00 sec 572 MBytes 960 Mbits/sec
[ 5][TX-C] 40.00-45.00 sec 1.36 GBytes 2.34 Gbits/sec 0 2.63 MBytes
[ 7][RX-C] 40.00-45.00 sec 570 MBytes 956 Mbits/sec
[ 5][TX-C] 45.00-50.00 sec 1.36 GBytes 2.34 Gbits/sec 0 2.63 MBytes
[ 7][RX-C] 45.00-50.00 sec 572 MBytes 960 Mbits/sec
[ 5][TX-C] 50.00-55.00 sec 1.36 GBytes 2.34 Gbits/sec 0 2.63 MBytes
[ 7][RX-C] 50.00-55.00 sec 570 MBytes 957 Mbits/sec
[ 5][TX-C] 55.00-60.00 sec 1.36 GBytes 2.34 Gbits/sec 0 2.63 MBytes
[ 7][RX-C] 55.00-60.00 sec 571 MBytes 958 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID][Role] Interval Transfer Bitrate Retr
[ 5][TX-C] 0.00-60.00 sec 16.3 GBytes 2.34 Gbits/sec 0 sender
[ 5][TX-C] 0.00-60.05 sec 16.3 GBytes 2.34 Gbits/sec receiver
[ 7][RX-C] 0.00-60.00 sec 6.50 GBytes 931 Mbits/sec 58 sender
[ 7][RX-C] 0.00-60.05 sec 6.50 GBytes 929 Mbits/sec receiver
iperf Done.
На стороне Rx все еще есть повторные передачи, которые могут помочь объяснить более низкую скорость.
SAMBA
От нашего ноутбука с ключом RTL8156B и твердотельным накопителем SATA до мини-ПК UP Xtreme i11 с портом 2,5GbE и док-станцией MINIX USB-C с твердотельным накопителем на 480 ГБ.
Около 930 Мбит/с с драйвером r8152 против 750 Мбит/с с драйвером cdc_ncm.
Теперь с мини-ПК на ноутбук (также известный как загрузка)…
Это медленнее, как и ожидалось, 837 Мбит/с, но лучше, чем менее 500 Мбит/с, которые мы получили с драйвером cdc_ncm.
SCP
ноутбук к мини-ПК:
time scp Libero_SoC_v2021.2_lin.bin devkit@192.168.31.12:/home/devkit/NEO_Storage
devkit@192.168.31.12's password:
Libero_SoC_v2021.2_lin.bin 100% 10GB 115.0MB/s 01:32
real 1m34.981s
user 0m55.750s
sys 0m42.668s
мини ПК к ноутбуку:
time scp devkit@192.168.31.12:/home/devkit/NEO_Storage/Libero_SoC_v2021.2_lin.bin .
devkit@192.168.31.12's password:
Libero_SoC_v2021.2_lin.bin 100% 10GB 111.7MB/s 01:35
real 1m36.896s
user 0m56.926s
sys 0m55.330s
Это почти одинаковая скорость между загрузкой и выгрузкой с помощью scp, что странно. Узким местом здесь выглядит мой SATA SSD:
iozone -e -I -a -s 1000M -r 16384k -i 0 -i 1
Iozone: Performance Test of File I/O
Version $Revision: 3.489 $
Compiled for 64 bit mode.
Build: linux-AMD64
random random bkwd record stride
kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread
1024000 16384 141794 139550 149591 145020
Скорость чтения ограничена примерно 145 МБ/с, а скорость записи — около 140 МБ/с.
Твердотельный накопитель, используемый в док-станции MINIX NEO Storage Plus USB-C, намного быстрее: в последний раз, когда мы тестировали, 379 МБ/с для последовательного чтения и 240+ МБ/с для последовательной записи.
Итак, давайте посмотрим, какую скорость мы можем получить, выбрасывая данные в /dev/null.
скачивание на ноутбук:
time scp -c aes128-ctr devkit@192.168.31.12:/home/devkit/NEO_Storage/Libero_SoC_v2021.2_lin.bin /dev/null
devkit@192.168.31.12's password:
Libero_SoC_v2021.2_lin.bin 100% 10GB 133.0MB/s 01:20
real 1m21.880s
user 0m18.931s
sys 0m33.838s
загрузка с ноутбука:
time scp -c aes128-ctr Libero_SoC_v2021.2_lin.bin devkit@192.168.31.12:/dev/null
devkit@192.168.31.12's password:
Libero_SoC_v2021.2_lin.bin 100% 10GB 239.9MB/s 00:44
real 0m46.094s
user 0m17.174s
sys 0m36.793s
Так что это больше похоже на загрузку, по крайней мере. У нас все еще есть проблема со скоростью загрузки, но производительность все еще значительно улучшилась с драйвером r8152.
Тестирование с NanoPi R4S
Хотя это намного лучше, но не оптимально. У нас есть маршрутизатор NanoPi R4S с двумя портами USB 3.0, поэтому мы сначала попробовали его, используя последний образ OpenWrt (FriendlyWrt) 21.02 с Linux 5.15:
root@FriendlyWrt:~# iperf3 -t 60 -c 192.168.2.207 --bidir -i 5
Connecting to host 192.168.2.207, port 5201
[ 5] local 192.168.2.161 port 21836 connected to 192.168.2.207 port 5201
[ 7] local 192.168.2.161 port 21838 connected to 192.168.2.207 port 5201
[ ID][Role] Interval Transfer Bitrate Retr Cwnd
[ 5][TX-C] 0.00-5.00 sec 348 MBytes 583 Mbits/sec 4 413 KBytes
[ 7][RX-C] 0.00-5.00 sec 220 MBytes 369 Mbits/sec
[ 5][TX-C] 5.00-10.00 sec 480 MBytes 805 Mbits/sec 5 684 KBytes
[ 7][RX-C] 5.00-10.00 sec 218 MBytes 366 Mbits/sec
[ 5][TX-C] 10.00-15.00 sec 574 MBytes 963 Mbits/sec 47 557 KBytes
[ 7][RX-C] 10.00-15.00 sec 183 MBytes 307 Mbits/sec
[ 5][TX-C] 15.00-20.00 sec 481 MBytes 807 Mbits/sec 3 699 KBytes
[ 7][RX-C] 15.00-20.00 sec 179 MBytes 301 Mbits/sec
[ 5][TX-C] 20.00-25.00 sec 464 MBytes 779 Mbits/sec 18 701 KBytes
[ 7][RX-C] 20.00-25.00 sec 214 MBytes 359 Mbits/sec
[ 5][TX-C] 25.00-30.00 sec 549 MBytes 920 Mbits/sec 26 580 KBytes
[ 7][RX-C] 25.00-30.00 sec 178 MBytes 298 Mbits/sec
[ 5][TX-C] 30.00-35.00 sec 472 MBytes 792 Mbits/sec 3 526 KBytes
[ 7][RX-C] 30.00-35.00 sec 207 MBytes 347 Mbits/sec
[ 5][TX-C] 35.00-40.00 sec 465 MBytes 781 Mbits/sec 15 410 KBytes
[ 7][RX-C] 35.00-40.00 sec 195 MBytes 326 Mbits/sec
[ 5][TX-C] 40.00-45.00 sec 385 MBytes 645 Mbits/sec 0 376 KBytes
[ 7][RX-C] 40.00-45.00 sec 217 MBytes 364 Mbits/sec
[ 5][TX-C] 45.00-50.00 sec 497 MBytes 833 Mbits/sec 9 478 KBytes
[ 7][RX-C] 45.00-50.00 sec 201 MBytes 338 Mbits/sec
[ 5][TX-C] 50.00-55.00 sec 434 MBytes 728 Mbits/sec 0 543 KBytes
[ 7][RX-C] 50.00-55.00 sec 208 MBytes 349 Mbits/sec
[ 5][TX-C] 55.00-60.00 sec 451 MBytes 756 Mbits/sec 6 823 KBytes
[ 7][RX-C] 55.00-60.00 sec 220 MBytes 370 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID][Role] Interval Transfer Bitrate Retr
[ 5][TX-C] 0.00-60.00 sec 5.47 GBytes 783 Mbits/sec 136 sender
[ 5][TX-C] 0.00-60.01 sec 5.47 GBytes 783 Mbits/sec receiver
[ 7][RX-C] 0.00-60.00 sec 2.39 GBytes 342 Mbits/sec 94 sender
[ 7][RX-C] 0.00-60.01 sec 2.38 GBytes 341 Mbits/sec receiver
iperf Done.
Ужасно, с огромным количеством повторных передач с обеих сторон.
[ 276.268986] usb 8-1: New USB device found, idVendor=0bda, idProduct=8156, bcdDevice=31.00
[ 276.269798] usb 8-1: New USB device strings: Mfr=1, Product=2, SerialNumber=6
[ 276.270471] usb 8-1: Product: USB 10/100/1G/2.5G LAN
[ 276.272112] usb 8-1: Manufacturer: Realtek
[ 276.272519] usb 8-1: SerialNumber: 0013000000
[ 276.359625] cdc_ncm 8-1:2.0: MAC-Address: 1c:bf:ce:d4:03:21
[ 276.360178] cdc_ncm 8-1:2.0: setting rx_max = 16384
[ 276.360758] cdc_ncm 8-1:2.0: setting tx_max = 16384
[ 276.362948] cdc_ncm 8-1:2.0 eth2: register 'cdc_ncm' at usb-xhci-hcd.1.auto-1, CDC NCM, 1c:bf:ce:d4:03:21
[ 459.919597] IPv6: ADDRCONF(NETDEV_CHANGE): eth2: link becomes ready
Глядя на журнал ядра, наш USB-ключ RTL8156B снова использует этот драйвер CDC NCM, точно так же, как в Ubuntu… Там тоже есть драйвер r8152, но какой бы модуль мы ни удаляли в /etc/modules.d, загружается либо CDC NCM, либо eth2. интерфейс вообще не отображается. Поэтому мы перешли на ОС FriendlyCore на основе Ubuntu 20.04, также с Linux 5.15, которая будет ближе к настройке нашего ноутбука.
Как и следовало ожидать, адаптер RTL8156B по умолчанию использует драйвер CDC NCM в Ubuntu:
[ 682.701529] usb 8-1: new SuperSpeed USB device number 3 using xhci-hcd
[ 682.727125] usb 8-1: New USB device found, idVendor=0bda, idProduct=8156, bcdDevice=31.00
[ 682.727163] usb 8-1: New USB device strings: Mfr=1, Product=2, SerialNumber=6
[ 682.727179] usb 8-1: Product: USB 10/100/1G/2.5G LAN
[ 682.727191] usb 8-1: Manufacturer: Realtek
[ 682.727203] usb 8-1: SerialNumber: 0013000000
[ 682.806350] cdc_ncm 8-1:2.0: MAC-Address: 1c:bf:ce:d4:03:21
[ 682.806387] cdc_ncm 8-1:2.0: setting rx_max = 16384
[ 682.806561] cdc_ncm 8-1:2.0: setting tx_max = 16384
[ 682.807963] cdc_ncm 8-1:2.0 eth1: register 'cdc_ncm' at usb-xhci-hcd.1.auto-1, CDC NCM, 1c:bf:ce:d4:03:21
[ 682.834550] cdc_ncm 8-1:2.0 enx1cbfced40321: renamed from eth1
eth1 не отображается с ifconfig, поэтому я просто изменил правила udev, чтобы использовать драйвер r8152…
[ 882.081445] usb 7-1: new high-speed USB device number 3 using xhci-hcd
[ 882.209358] usb 7-1: Device not responding to setup address.
[ 882.417542] usb 7-1: Device not responding to setup address.
[ 882.625432] usb 7-1: device not accepting address 3, error -71
[ 886.597570] usb 8-1: new SuperSpeed USB device number 4 using xhci-hcd
[ 886.619484] usb 8-1: New USB device found, idVendor=0bda, idProduct=8156, bcdDevice=31.00
[ 886.619534] usb 8-1: New USB device strings: Mfr=1, Product=2, SerialNumber=6
[ 886.619556] usb 8-1: Product: USB 10/100/1G/2.5G LAN
[ 886.619574] usb 8-1: Manufacturer: Realtek
[ 886.619591] usb 8-1: SerialNumber: 0013000000
[ 886.911033] usb 8-1: reset SuperSpeed USB device number 4 using xhci-hcd
[ 886.960598] r8152 8-1:1.0: Direct firmware load for rtl_nic/rtl8156b-2.fw failed with error -2
[ 886.960631] r8152 8-1:1.0: Falling back to sysfs fallback for: rtl_nic/rtl8156b-2.fw
[ 947.165730] r8152 8-1:1.0: unable to load firmware patch rtl_nic/rtl8156b-2.fw (-110)
[ 947.210940] r8152 8-1:1.0 (unnamed net_device) (uninitialized): netif_napi_add() called with weight 256
[ 947.237480] r8152 8-1:1.0 eth1: v1.12.11
[ 947.254755] usbcore: registered new interface driver cdc_ncm
[ 947.257112] usbcore: registered new interface driver cdc_mbim
[ 947.290865] r8152 8-1:1.0 enx1cbfced40321: renamed from eth1
Это становится удручающим. Сначала обновим систему.
sudo apt update
sudo apt install python3-pip
sudo pip3 install apt-mirror-updater
apt-mirror-updater -c http://ftp.tu-chemnitz.de/pub/linux/ubuntu-ports
sudo apt dist-upgrade
Мы выполнили все эти шаги, так как образ FriendlyCore использует серверы из Китая, которые очень медленны по сравнению с нашими (простой запуск apt update может занять 15 минут), обновление, возможно, было быстрее, хотя все же заняло пару часов! (Подробности см. в разделе «Изменение зеркала Ubuntu Apt из командной строки» ).
В проблеме с прошивкой не помогло. Вместо этого мы ищем файл rtl_nic/rtl8156b-2.fw . Он находится в firmware-realtek Debian или linux-firmware Ubuntu Impish.
Мы скачали последний, распаковали rtl8156b-2.fw и скопировали его в /etc/firmware/rtl_nic. Теперь все работает:
[ 2172.098871] usb 8-1: new SuperSpeed USB device number 4 using xhci-hcd
[ 2172.120681] usb 8-1: New USB device found, idVendor=0bda, idProduct=8156, bcdDevice=31.00
[ 2172.120731] usb 8-1: New USB device strings: Mfr=1, Product=2, SerialNumber=6
[ 2172.120754] usb 8-1: Product: USB 10/100/1G/2.5G LAN
[ 2172.120771] usb 8-1: Manufacturer: Realtek
[ 2172.120788] usb 8-1: SerialNumber: 0013000000
[ 2172.183460] cdc_ncm 8-1:2.0: MAC-Address: 1c:bf:ce:d4:03:21
[ 2172.183494] cdc_ncm 8-1:2.0: setting rx_max = 16384
[ 2172.183620] cdc_ncm 8-1:2.0: setting tx_max = 16384
[ 2172.184904] cdc_ncm 8-1:2.0 eth1: register 'cdc_ncm' at usb-xhci-hcd.1.auto-1, CDC NCM, 1c:bf:ce:d4:03:21
[ 2172.189439] cdc_ncm 8-1:2.0 eth1: unregister 'cdc_ncm' usb-xhci-hcd.1.auto-1, CDC NCM
[ 2172.451015] usb 8-1: reset SuperSpeed USB device number 4 using xhci-hcd
[ 2172.535166] r8152 8-1:1.0: load rtl8156b-2 v1 04/15/21 successfully
[ 2172.598459] r8152 8-1:1.0 eth1: v1.12.11
Почему-то интерфейс до сих пор не запущен, и добавление его вручную в /etc/network/interfaces.d не работает.
Вернемся к ноутбуку Ubuntu с прошивкой rtl8156b-2.fw
Вернемся к нашему ноутбуку и скопируем файл прошивки в каталог /lib/firmware/rtl_nic . Результат был такой же, как и в NanoPi R4S:
[23050.245495] usb 2-1: new SuperSpeed USB device number 3 using xhci_hcd
[23050.266025] usb 2-1: New USB device found, idVendor=0bda, idProduct=8156, bcdDevice=31.00
[23050.266038] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=6
[23050.266043] usb 2-1: Product: USB 10/100/1G/2.5G LAN
[23050.266047] usb 2-1: Manufacturer: Realtek
[23050.266050] usb 2-1: SerialNumber: 0013000000
[23050.325714] cdc_ncm 2-1:2.0: MAC-Address: 1c:bf:ce:d4:03:21
[23050.325720] cdc_ncm 2-1:2.0: setting rx_max = 16384
[23050.325762] cdc_ncm 2-1:2.0: setting tx_max = 16384
[23050.326199] cdc_ncm 2-1:2.0 eth0: register 'cdc_ncm' at usb-0000:04:00.3-1, CDC NCM, 1c:bf:ce:d4:03:21
[23050.334723] cdc_ncm 2-1:2.0 eth0: unregister 'cdc_ncm' usb-0000:04:00.3-1, CDC NCM
[23050.559779] usb 2-1: reset SuperSpeed USB device number 3 using xhci_hcd
[23050.617459] r8152 2-1:1.0: load rtl8156b-2 v1 04/15/21 successfully
[23050.654344] r8152 2-1:1.0 eth0: v1.12.11
Попробуем загрузить iperf3:
iperf3 -t 30 -c 192.168.31.12 -i 5
Connecting to host 192.168.31.12, port 5201
[ 5] local 192.168.31.166 port 50222 connected to 192.168.31.12 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-5.00 sec 1.37 GBytes 2.36 Gbits/sec 0 609 KBytes
[ 5] 5.00-10.00 sec 1.37 GBytes 2.35 Gbits/sec 0 691 KBytes
[ 5] 10.00-15.00 sec 1.37 GBytes 2.35 Gbits/sec 0 1.35 MBytes
[ 5] 15.00-20.00 sec 1.37 GBytes 2.35 Gbits/sec 0 1.35 MBytes
[ 5] 20.00-25.00 sec 1.37 GBytes 2.35 Gbits/sec 0 1.35 MBytes
[ 5] 25.00-30.00 sec 1.37 GBytes 2.35 Gbits/sec 0 1.35 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-30.00 sec 8.22 GBytes 2.35 Gbits/sec 0 sender
[ 5] 0.00-30.04 sec 8.22 GBytes 2.35 Gbits/sec receiver
iperf Done.
То же, что и раньше, так что никакого регресса. Теперь перейдем к скачиванию iperf3:
iperf3 -t 30 -c 192.168.31.12 -i 5 -R
Connecting to host 192.168.31.12, port 5201
Reverse mode, remote host 192.168.31.12 is sending
[ 5] local 192.168.31.166 port 50226 connected to 192.168.31.12 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-5.00 sec 969 MBytes 1.63 Gbits/sec
[ 5] 5.00-10.00 sec 990 MBytes 1.66 Gbits/sec
[ 5] 10.00-15.00 sec 982 MBytes 1.65 Gbits/sec
[ 5] 15.00-20.00 sec 984 MBytes 1.65 Gbits/sec
[ 5] 20.00-25.00 sec 1012 MBytes 1.70 Gbits/sec
[ 5] 25.00-30.00 sec 1007 MBytes 1.69 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-30.02 sec 5.81 GBytes 1.66 Gbits/sec 3181 sender
[ 5] 0.00-30.00 sec 5.80 GBytes 1.66 Gbits/sec receiver
iperf Done.
Улучшения есть, хотя количество повторных передач зашкаливает. Мы уже очень устали… Дайте нам знать, если у вас есть другие идеи.
Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.