LINUX.ORG.RU

Высокий пинг у TP-Link TL-WN881ND в Debian. В чём может быть дело?

 , , , ,


1

2

Здравствуйте, господа. Приобрёл WiFi-адаптер TP-Link TL-WN881ND (2-й ревизии) для работы в режиме точки доступа (hostapd) на ОС Debian 9 («Stretch»). 2-я ревизия отличается от первой тем, что 2-я основана на чипе Realtek RTL8192EE, тогда как 1-я основана на чипе Qualcomm Atheros AR9287.

Вывод lspci:

...
01:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8192EE PCIe Wireless Network Adapter
...

Вывод lsmod | grep rtl8192ee:

...
rtl8192ee             114688  0
btcoexist             172032  1 rtl8192ee
rtl_pci                36864  1 rtl8192ee
rtlwifi               102400  3 rtl_pci,btcoexist,rtl8192ee
mac80211              856064  3 rtl_pci,rtlwifi,rtl8192ee
...

Дело, собственно, вот в чём: у 2-й ревизии адаптера наблюдается высокий и неравномерный пинг (минимум 25 ms, максимум 126 ms):

PING ya.ru (87.250.250.242) 56(84) bytes of data.
64 bytes from ya.ru (87.250.250.242): icmp_seq=1 ttl=58 time=101 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=2 ttl=58 time=125 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=3 ttl=58 time=45.8 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=4 ttl=58 time=68.2 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=5 ttl=58 time=91.1 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=6 ttl=58 time=114 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=7 ttl=58 time=34.7 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=8 ttl=58 time=57.1 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=9 ttl=58 time=80.1 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=10 ttl=58 time=103 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=11 ttl=58 time=126 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=12 ttl=58 time=46.8 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=13 ttl=58 time=69.2 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=14 ttl=58 time=92.2 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=15 ttl=58 time=115 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=16 ttl=58 time=35.8 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=17 ttl=58 time=58.1 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=18 ttl=58 time=81.1 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=19 ttl=58 time=104 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=20 ttl=58 time=92.2 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=21 ttl=58 time=47.6 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=22 ttl=58 time=70.1 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=23 ttl=58 time=93.2 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=24 ttl=58 time=57.8 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=25 ttl=58 time=36.0 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=26 ttl=58 time=59.1 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=27 ttl=58 time=80.0 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=28 ttl=58 time=85.4 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=29 ttl=58 time=25.4 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=30 ttl=58 time=48.0 ms

--- ya.ru ping statistics ---
30 packets transmitted, 30 received, 0% packet loss, time 29041ms
rtt min/avg/max/mdev = 25.487/74.892/126.296/28.050 ms

И это всё только в обычном режиме работы. В режиме точки доступа пинг, бывает, достигает и 5 (!) секунд.

У адаптера 1-й ревизии на чипе AR9287 с этим проблем не возникает ни в обычном режиме, ни в режиме точки доступа.

Теперь вопрос: возможно ли как-нибудь улучшить работу адаптера 2-й ревизии?


А на чипе азерос какой пинг, в цифрах? А так скорее дело в модуле, одним словом реалтек.

anonymous ()
Ответ на: комментарий от anonymous

У Qualcomm Atheros AR9287 вывод ping ya.ru -n 10 следующий:

Обмен пакетами с ya.ru [87.250.250.242] с 32 байтами данных:
Ответ от 87.250.250.242: число байт=32 время=21мс TTL=58
Ответ от 87.250.250.242: число байт=32 время=20мс TTL=58
Ответ от 87.250.250.242: число байт=32 время=21мс TTL=58
Ответ от 87.250.250.242: число байт=32 время=20мс TTL=58
Ответ от 87.250.250.242: число байт=32 время=21мс TTL=58
Ответ от 87.250.250.242: число байт=32 время=21мс TTL=58
Ответ от 87.250.250.242: число байт=32 время=21мс TTL=58
Ответ от 87.250.250.242: число байт=32 время=21мс TTL=58
Ответ от 87.250.250.242: число байт=32 время=21мс TTL=58
Ответ от 87.250.250.242: число байт=32 время=20мс TTL=58

Статистика Ping для 87.250.250.242:
    Пакетов: отправлено = 10, получено = 10, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 20мсек, Максимальное = 21 мсек, Среднее = 20 мсек

Sferg ()
Ответ на: комментарий от Sferg

Спасибо, но мог бы просто написать что около 20, было бы норм.

anonymous ()

Глупое предположение, но всё же - может в роутере какая-нибудь дрянь что-нибудь откуда-нибудь куда-то тянет?

Dispetcher14 ★★★★ ()

криволтековское гуано нормально навряд будет работать.

NiTr0 ★★★★★ ()

Проблему подтверждаю. Во первых надо отключить power management.

cat /etc/modprobe.d/rtl8192ee.conf
options rtl8192ee ips=0

Это снижает пинг на 10%, но не решает проблему его нестабильности.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=17.8 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=9.73 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=21.5 ms
64 bytes from 192.168.0.1: icmp_seq=4 ttl=64 time=33.7 ms
64 bytes from 192.168.0.1: icmp_seq=5 ttl=64 time=45.7 ms
64 bytes from 192.168.0.1: icmp_seq=6 ttl=64 time=41.8 ms
64 bytes from 192.168.0.1: icmp_seq=7 ttl=64 time=69.6 ms
64 bytes from 192.168.0.1: icmp_seq=8 ttl=64 time=81.7 ms
64 bytes from 192.168.0.1: icmp_seq=9 ttl=64 time=93.7 ms
64 bytes from 192.168.0.1: icmp_seq=10 ttl=64 time=106 ms
64 bytes from 192.168.0.1: icmp_seq=11 ttl=64 time=15.4 ms
64 bytes from 192.168.0.1: icmp_seq=12 ttl=64 time=27.6 ms
64 bytes from 192.168.0.1: icmp_seq=13 ttl=64 time=24.1 ms
64 bytes from 192.168.0.1: icmp_seq=14 ttl=64 time=52.2 ms
64 bytes from 192.168.0.1: icmp_seq=15 ttl=64 time=42.2 ms
64 bytes from 192.168.0.1: icmp_seq=16 ttl=64 time=77.2 ms
64 bytes from 192.168.0.1: icmp_seq=17 ttl=64 time=78.5 ms
64 bytes from 192.168.0.1: icmp_seq=18 ttl=64 time=102 ms
64 bytes from 192.168.0.1: icmp_seq=19 ttl=64 time=12.3 ms
64 bytes from 192.168.0.1: icmp_seq=20 ttl=64 time=9.57 ms


Это ненормально. Пинг должен быть < 20 ms. Нужно играться с другими параметрами и смотреть исходный код. Если у меня будет время - посмотрю. Но гарантию дать не могу.
anonymous ()

К сожалению колупание параметров ничего не дает. Пинг ужасный только когда на адаптер нет никакой нагрузки. А вот во время прожарки на полную он выдает очень малые тайминги - 2-6 мс. Скорее всего в чип зашита какая-то энергосберегайка, которую фиг отключишь. Запилил баг https://bugzilla.kernel.org/show_bug.cgi?id=202943. Заходите и помогайте мне бороться с реалтеками. Один я не справлюсь.

anonymous ()

У меня абсолютно такая же проблема (угораздило воткнуть две PCIe x1 карточки в оба домашних ПК =)). Отписался в баг, хотел снять статус, проблема осталась или удалось как-то победить?

FlyingBuzz ()
Ответ на: комментарий от Sferg

Нифига ж себе клешня!

Хороший адаптер. Нравится возможность произвольного расположения антенн. Цена не нравится.

А ситуация фиговая, хоть Ларри Фингеру пиши.. Помониторю динамику с багом, хотя, судя по всему, она будет нулевой. Если что, бампну.

FlyingBuzz ()
Ответ на: Нифига ж себе клешня! от FlyingBuzz

Подшаманил на LTS ведре с «левым» риалтековским драйвером. Теперь работает лучше. Отписался в баг.

Update.
I get these results
~]$ ping 192.168.88.1
PING 192.168.88.1 (192.168.88.1) 56(84) bytes of data.
64 bytes from 192.168.88.1: icmp_seq=1 ttl=64 time=0.746 ms
64 bytes from 192.168.88.1: icmp_seq=2 ttl=64 time=0.868 ms
64 bytes from 192.168.88.1: icmp_seq=3 ttl=64 time=0.853 ms
64 bytes from 192.168.88.1: icmp_seq=4 ttl=64 time=0.868 ms
64 bytes from 192.168.88.1: icmp_seq=5 ttl=64 time=0.818 ms
64 bytes from 192.168.88.1: icmp_seq=6 ttl=64 time=0.844 ms
64 bytes from 192.168.88.1: icmp_seq=7 ttl=64 time=0.841 ms
64 bytes from 192.168.88.1: icmp_seq=8 ttl=64 time=0.913 ms
64 bytes from 192.168.88.1: icmp_seq=9 ttl=64 time=0.844 ms
64 bytes from 192.168.88.1: icmp_seq=10 ttl=64 time=0.886 ms
^C
--- 192.168.88.1 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 387ms
rtt min/avg/max/mdev = 0.746/0.848/0.913/0.044 ms

with a driver from rtl8192ee_revised.tar.bz2 file in https://github.com/lwfinger/rtlwifi_new/tree/extended repository built against Linux 4.19.65-1-lts #1 SMP Wed Aug 7 21:48:46 UTC 2019 x86_64 GNU/Linux ArchLinux current LTS kernel.

Connection speed and stability on a heavy load are also not affected.
FlyingBuzz ()
Ответ на: комментарий от router

Ларри Фингер ответил в рассылке, что сравнит поведения карточки с текущим драйвером ядра и этим. Дополнительно выдерет фирмварь из этого драйвера и протестит её с текущим драйвером ядра. Держим руку на пульсе =)

FlyingBuzz ()
Ответ на: комментарий от FlyingBuzz

Пока тишина

Пофиксил сборку «левого» драйвера под linux 5.2.9. Теперь можно жить на свежем)) В треде с linux-wireless пока тишина, там пилят какие-то другие фиксы к выводу 5.3, не до этого.

diff -ru rtl8192ee_revised rtl8192ee_revised_5.x/
diff -ru rtl8192ee_revised/os_dep/linux/os_intfs.c rtl8192ee_revised_5.x/os_dep/linux/os_intfs.c
--- rtl8192ee_revised/os_dep/linux/os_intfs.c	2018-12-04 01:08:08.252696654 +0400
+++ rtl8192ee_revised_5.x/os_dep/linux/os_intfs.c	2019-08-21 21:09:26.863797433 +0400
@@ -1400,9 +1400,9 @@
 	.ndo_open = netdev_open,
 	.ndo_stop = netdev_close,
 	.ndo_start_xmit = rtw_xmit_entry,
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35))
-	.ndo_select_queue	= rtw_select_queue,
-#endif
+//#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35))
+//	.ndo_select_queue	= rtw_select_queue,
+//#endif
 	.ndo_set_mac_address = rtw_net_set_mac_address,
 	.ndo_get_stats = rtw_net_get_stats,
 	.ndo_do_ioctl = rtw_ioctl,
diff -ru rtl8192ee_revised/os_dep/linux/rtw_android.c rtl8192ee_revised_5.x/os_dep/linux/rtw_android.c
--- rtl8192ee_revised/os_dep/linux/rtw_android.c	2018-06-05 12:29:37.000000000 +0400
+++ rtl8192ee_revised_5.x/os_dep/linux/rtw_android.c	2019-08-21 21:11:25.076328148 +0400
@@ -624,7 +624,8 @@
 		goto exit;
 	}
 
-	if (!access_ok(VERIFY_READ, priv_cmd.buf, priv_cmd.total_len)) {
+	if (!access_ok(priv_cmd.buf, priv_cmd.total_len)) {
+	//if (!access_ok(VERIFY_READ, priv_cmd.buf, priv_cmd.total_len)) {
 		RTW_INFO("%s: failed to access memory\n", __FUNCTION__);
 		ret = -EFAULT;
 		goto exit;
diff -ru rtl8192ee_revised/os_dep/osdep_service.c rtl8192ee_revised_5.x/os_dep/osdep_service.c
--- rtl8192ee_revised/os_dep/osdep_service.c	2018-12-03 22:07:46.251665813 +0400
+++ rtl8192ee_revised_5.x/os_dep/osdep_service.c	2019-08-21 21:04:29.141051189 +0400
@@ -2053,7 +2053,7 @@
 		ret = PTR_ERR(fp);
 	else {
 		oldfs = get_fs();
-		set_fs(get_ds());
+		set_fs(KERNEL_DS);
 
 		if (1 != readFile(fp, &buf, 1))
 			ret = PTR_ERR(fp);
@@ -2091,7 +2091,7 @@
 			RTW_INFO("%s openFile path:%s fp=%p\n", __FUNCTION__, path , fp);
 
 			oldfs = get_fs();
-			set_fs(get_ds());
+			set_fs(KERNEL_DS);
 			ret = readFile(fp, buf, sz);
 			set_fs(oldfs);
 			closeFile(fp);
@@ -2126,7 +2126,7 @@
 			RTW_INFO("%s openFile path:%s fp=%p\n", __FUNCTION__, path , fp);
 
 			oldfs = get_fs();
-			set_fs(get_ds());
+			set_fs(KERNEL_DS);
 			ret = writeFile(fp, buf, sz);
 			set_fs(oldfs);
 			closeFile(fp);

FlyingBuzz ()
Ответ на: Пока тишина от FlyingBuzz

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

Возможно, они появятся уже в Linux 5.4.

FlyingBuzz ()
Ответ на: Пока тишина от FlyingBuzz

Умерло после обновления ядра до 5.3. Насколько я понял из dmesg, не может загрузить прошивку (ПОЧЕМУ???). Попросил Ларри Фингера поделиться изменениями, с помощью которых он добился улучшения производительности на своих rtlwifi_new.

FlyingBuzz ()
Ответ на: комментарий от FlyingBuzz

Сравни dmesg в рабочей системе и нерабочей. Могло поменяться расположение фирмвари (путь к ней), имя файла, сама фирмварь могла обновиться. Или показывай кусок dmesg, в котором описано что-там не грузиться.

anonymous ()
Ответ на: комментарий от anonymous

Здесь протокол загрузки на ядре 5.2, ситуация, когда всё работает.

https://pastebin.com/5n8iGRFc

А тут на 5.3, с егогами, сетевое устройство даже не появляется

https://pastebin.com/aMrf1cXT

В логах видно, что различается время сборки модуля. Это одни и те же исходники 1-в-1, просто пересобирал.

FlyingBuzz ()
Ответ на: комментарий от anonymous

Заметил, что при «плохой загрузке» отсутствует строчка

kernel: rtl8192ee 0000:03:00.0: enabling device (0000 -> 0003)

FlyingBuzz ()
Ответ на: комментарий от FlyingBuzz

Получилось забилдить на ядре 5.3.1, вайфай работает, скорость огромная, пинг маленький. Взял версию файла отсуда os_dep/linux/rtw_cfgvendor.c

https://github.com/aircrack-ng/rtl8812au/blob/v5.6.4.1/os_dep/linux/rtw_cfgve...

В которую включен фикс

https://github.com/aircrack-ng/rtl8812au/commit/c2fd51ad82af369529c9c3960f7d5...

FlyingBuzz ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.