[Перевод] Разбираемся в необычной проблеме с WiFi

Что?


В конце прошлого года я начал сталкиваться с необычными периодически возникающими проблемами подключения на десктопе. В целом, подключение было стабильным и со средними задержками; однако во (вроде бы) случайные моменты времени на протяжении недели через каждые пару секунд возникали резкие пики задержек в две с лишним тысячи миллисекунд.

9fkcj3pxtpcrfygyih61ykirc4y.png


Из-за этого было невозможно пользоваться всем ПО для аудио-/видеозвонков и играть в большинство онлайн-игр.

Эта проблема возникла примерно во время моего переезда через всю страну из штата Вашингтон в Южную Каролину, поэтому было слишком много факторов, чтобы с лёгкостью выявить источник. Однако в основном проблема влияла только на игры и аудио-/видеозвонки, поэтому я особо не обращал на неё внимания.

На протяжении последней пары месяцев я постепенно пытался разобраться, что происходит, но до сегодняшнего дня мне этого сделать не удавалось.

Почему?


Изначально в проблеме было ясно только то, что она затронула исключительно мой настольный компьютер. Ноутбук и другие устройства, подключенные к WiFi, не имели этой проблемы, даже если поместить их в то же место, где находился десктоп.

Первым делом я купил на Amazon новый WiFi-адаптер с хорошими отзывами. Это не решило проблему. Зато в комплекте с адаптером я нашёл предложение выслать бесплатную флэшку на 64 ГБ в обмен на хороший отзыв.

(В конечном итоге это оказалась довольно скверная покупка.)

vberyduilshxlfw0gnpupadybh4.png


Позже (не из-за описываемой в статье проблемы) я собрал совершенно новый настольный компьютер, в котором не было ничего из старого компьютера, за исключением нового WiFi-адаптера. На компьютере была «с нуля» установлена Windows 10.

Всё было отлично, у нового компьютера не возникало проблем! Я подозревал, что в процессе переезда в Южную Каролину повредились USB-разъёмы старой материнской платы, и что причина в этом. Ведь теперь-то всё в порядке?

Нет. Всё не было в порядке.

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

Я попробовал подключать несколько разных WiFi-адаптеров из своих запасов.

Я пытался сменить канал WiFi, поскольку мне казалось, что он накладывается на канал соседей.

Я попробовал отключить Windows Update Delivery Optimization (службу обновлений p2p). После её отключения и перезапуска компьютера проблема, казалось, была решена, но позже возникла снова.

В какой-то момент проблема с WiFi и прерывание звонков в Skype настолько достала одного из моих братьев, что он купил мне на Amazon ещё один (чуть менее подозрительный) WiFi-адаптер. Казалось, он временно устранил проблему после установки драйвера Realtek и перезапуска, но потом она вернулась.

45xjvgkby4mqtbi2d9gstcht4am.png


ЭНДРЮ, ПОЧИНИ СВОЙ ЧЁРТОВ WIFI, РАДИ БОГА. ВАЖНО: устанавливай драйвер Realtek 8812au с веб-сайта, НЕ с веб-сайта производителя

Похоже было, что проблему устранить невозможно.


Сегодня в последней отчаянной попытке устранить проблему я сделал следующее:

  • Отключил вентилятор в своей комнате
  • Отсоединил USB-донгл беспроводного планшета для рисования Wacom.
  • Закрыл FireFox
  • Закрыл MediBang Paint Pro


Проблема исчезла.

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

Я представить не мог, как эту проблему могли бы вызвать браузер или приложение для рисования, но всё равно проверил их.

Сначала я запустил FireFox, открыл несколько вкладок с разными сайтами и подождал…

Ничего.

Затем я запустил MediBang Paint Pro.

tcgwjsimvoxcegxmqcazdvp4sa4.png


Почему?!


Какого чёрта, почему ПО для цифрового рисования вызывает всплески задержек WiFi?

Оказалось, что люди много раз жаловались на эту проблему с MBPP.

Если посмотреть в Process Monitor, то можно увидеть, что действительно происходит что-то странное.

3w8r5wpyhw5ouggc85mnhqfe0rc.png


uux7pq6e-g2zgu62tn8pzyffqr0.png


В тот самый момент, когда возникает всплеск задержек, MBPP начинает опрашивать ключи реестра всех сетевых интерфейсов.

Чтобы глубже разобраться в том, почему это происходит, мы можем подключиться к процессу с помощью отладчика (в данном случае x64dbg) и установить точки останова на API Win32 Reg*.

b1gbwzpmlqace8k9wwtrpyg0ifc.png


Рано или поздно мы попадём в точку останова RegOpenKeyExInternalW, после чего изучим стек вызовов, чтобы понять, где откуда выполняется вызов.

29pvthxdwqzux_ry7ysh5jx5pjm.png


Посмотрев на стек вызовов, мы видим, что первая несистемная библиотека в стеке — это qt5network.

Как ни удивительно, дальнейшая отладка не потребуется — поиск в Google по запросу «q5network ping issue» приводит нас к QTBUG-40332.<

Если я верно всё понимаю, любое приложение Qt5 (младше версии 5.14), использующее QNetworkAccessManager, каждые десять секунд проверяет изменения в интерфейсе WiFi с целью управления носителем, что вызывает серьёзные всплески задержек или полную потерю пакетов. Даже если экземпляр QNetworkAccessManager создаётся внутри для чего-то простого, например, для HTTP-запроса.

Похоже, обойти эту проблему достаточно легко — присвоить переменной окружения QT_BEARER_POLL_TIMEOUT значение -1.

Жаль, что я не знал этого восемь месяцев назад.

TL; DR


Последние семь-восемь месяцев библиотека Qt5 портила WiFi всего моего компьютера просто из-за запуска MediBang Paint Pro.

По глупости я связывал это со множеством других вещей, ведь кто мог представить, что Qt будет причиной проблем с WiFi во всей системе?

Дополнительная информация по теме


© Habrahabr.ru