Устранение проблем с производительностью USB-ключа Realtek RTL8156B 2.5GbE в Ubuntu


Несколько дней назад мы рассмотрели Ethernet-адаптер USB 3.0 на 2,5 Гбит/с на базе чипа Realtek RTL8156B в Ubuntu 20.04, и, скажем так, его надежность и производительность нас не впечатлили. Мы получили некоторые рекомендации, такие как замена кабелей, размер MTU и т. д.

Замена кабелей не помогла, но в одном комментарии упоминалось, что проблема может быть в драйвере cdc_ncm, в другом говорилось, что обновление до ядра Linux 5.14 должно установить правильный драйвер r8152… Так что мы просто сделали это:

Обновили Linux 5.13 (поставляется с Ubuntu 20.04 + HWE) до Linux 5.14, но система продолжала использовать драйвер cdc_ncm с полудуплексным каналом:

Потом мы подумали, что, возможно, нам придется использовать правила udev, чтобы предотвратить загрузку драйвера cdc_ncm, и действительно для этого есть 50-usb-realtek-net.rules в драйвере r8152. Поэтому мы скопировали файл в папку /etc/udev/rules.d/. Так как не перезагружалось, то нам пришлось выгрузить ненужные нам модули, и перезапустить udev:

Давайте посмотрим…

Здорово! Теперь он использует драйвер r8152, и у нас есть полнодуплексное соединение.

Давайте еще раз пройдемся по всем нашим тестам, чтобы сравнить результаты.

iperf2

загрузка:

скачивание:

Есть улучшение скорости загрузки (было 600 Мбит/с с драйвером cdc_ncm), но все еще не близко к 2,3 Гбит/с.

Ради интереса, давайте попробуем полный дуплекс:

Это на самом деле не так уж плохо.

iperf3

загрузка:

скачивание:

Примерно так же, как iperf2.

iperf3 много лет не поддерживал полнодуплексный режим, но в версии 3.7 эта функция была вновь представлена. Итак, давайте попробуем:

Что случилось? В журнале ядра также есть сообщения об ошибках.

Мы не единственные, у кого есть эта проблема, и это открытая проблема в репозитории драйвера r8156 на Github. Вот ответ от разработчика для справки:

Есть подозрение, что проблема в адаптере Ethernet, так как имеется много сообщений о том, что он работает с DS918+. (Например, дизайн линии электропередач, перегрев и т. д.)
https://github.com/bb-qq/r8152/wiki/Compatibility

Не могли бы вы попробовать другого поставщика? Кроме того, использование USB-концентратора с внешним источником питания может улучшить ситуацию.

В этот момент Ethernet вообще не работал, и нам пришлось отключить и снова вставить USB-ключ. Второй раз «сработало».

На стороне Rx все еще есть повторные передачи, которые могут помочь объяснить более низкую скорость.

SAMBA

От нашего ноутбука с ключом RTL8156B и твердотельным накопителем SATA до мини-ПК UP Xtreme i11 с портом 2,5GbE и док-станцией MINIX USB-C с твердотельным накопителем на 480 ГБ.

Около 930 Мбит/с с драйвером r8152 против 750 Мбит/с с драйвером cdc_ncm.

Теперь с мини-ПК на ноутбук (также известный как загрузка)…

Это медленнее, как и ожидалось, 837 Мбит/с, но лучше, чем менее 500 Мбит/с, которые мы получили с драйвером cdc_ncm.

SCP

ноутбук к мини-ПК:

мини ПК к ноутбуку:

Это почти одинаковая скорость между загрузкой и выгрузкой с помощью scp, что странно. Узким местом здесь выглядит мой SATA SSD:

Скорость чтения ограничена примерно 145 МБ/с, а скорость записи — около 140 МБ/с.

Твердотельный накопитель, используемый в док-станции MINIX NEO Storage Plus USB-C, намного быстрее: в последний раз, когда мы тестировали, 379 МБ/с для последовательного чтения и 240+ МБ/с для последовательной записи.

Итак, давайте посмотрим, какую скорость мы можем получить, выбрасывая данные в /dev/null.

скачивание на ноутбук:

загрузка с ноутбука:


Так что это больше похоже на загрузку, по крайней мере. У нас все еще есть проблема со скоростью загрузки, но производительность все еще значительно улучшилась с драйвером r8152.

Левая шкала в Мбит/с

Тестирование с NanoPi R4S

Хотя это намного лучше, но не оптимально. У нас есть маршрутизатор NanoPi R4S с двумя портами USB 3.0, поэтому мы сначала попробовали его, используя последний образ OpenWrt (FriendlyWrt) 21.02 с Linux 5.15:

Ужасно, с огромным количеством повторных передач с обеих сторон.

Глядя на журнал ядра, наш USB-ключ RTL8156B снова использует этот драйвер CDC NCM, точно так же, как в Ubuntu… Там тоже есть драйвер r8152, но какой бы модуль мы ни удаляли в /etc/modules.d, загружается либо CDC NCM, либо eth2. интерфейс вообще не отображается. Поэтому мы перешли на ОС FriendlyCore на основе Ubuntu 20.04, также с Linux 5.15, которая будет ближе к настройке нашего ноутбука.

Как и следовало ожидать, адаптер RTL8156B по умолчанию использует драйвер CDC NCM в Ubuntu:

eth1 не отображается с ifconfig, поэтому я просто изменил правила udev, чтобы использовать драйвер r8152…

Это становится удручающим. Сначала обновим систему.

Мы выполнили все эти шаги, так как образ 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. Теперь все работает:

Почему-то интерфейс до сих пор не запущен, и добавление его вручную в /etc/network/interfaces.d не работает.

Вернемся к ноутбуку Ubuntu с прошивкой rtl8156b-2.fw

Вернемся к нашему ноутбуку и скопируем файл прошивки в каталог /lib/firmware/rtl_nic . Результат был такой же, как и в NanoPi R4S:

Попробуем загрузить iperf3:

То же, что и раньше, так что никакого регресса. Теперь перейдем к скачиванию iperf3:

Улучшения есть, хотя количество повторных передач зашкаливает. Мы уже очень устали… Дайте нам знать, если у вас есть другие идеи.

Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.

Оригинал статьи вы можете прочитать здесь.

0 0 vote
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Inline Feedbacks
View all comments