Недавний релиз ядра Linux 4.9 отличный повод рассказать о предстоящем разгоне WiFi. Сразу оговорюсь — пост не о том, как увеличить зону покрытия или менять регуляторные домены. Ничего такого делать не надо, достаточно обновить ядро после того, как патчи буфероборца Dave Täht будут в стабильной ветке. Значительное повышение скорости достигнуто за счет уменьшения задержки  и избыточной буферизации  в сети. Разработчикам пришлось ради этого перелопатить mac80211, убрать кое-что сверху, добавить снизу и после этого задержки в сети сократились на порядок. Цена вопроса? Патч в 200 строк. Подробности под катом. Bufferbloat — это излишняя буферизация в сетевом оборудовании провайдера, что приводит к нежеланным задержкам передачи данных. При достаточно загруженном канале каждое соединение отъедает миллисекунды, которые затем превращаются в секунды, а иногда и минуты ожидания. Если сетевая задержка равна 1 секунде, то slashdot.org будет загружаться целых 4 минуты! Первая команда использует питоновский wrapper для netperf, это мощный инструмент проведения контрольных замеров сетевых подключений.  Flent загружает канал так, чтобы соединение устанавливалось с секундной задержкой. Установка соединения заняла 99.6% времени исполнения, в результате реальная скорость упала до жалких 77 KB/с. При нулевой задержке та же страница загружается за 8 секунд. Таким образом время кругового пути и задержка имеют большее значение, чем пропускная способность. На стороне провайдера ИБ носит характер эпидемии, но и на пользовательском оборудовании его хватает. Довольно долго каждый сетевой драйвер проектировался с расчетом на нереально высокие потребности буферизации данных, так как разработчики оптимизировали планировщик пакетов для самых высоких скоростей. Однако IRL их редко используют во время WiFi подключения. Вот из-за чего котики загружаются медленно, а видео-звонки превращаются в пытку. Проверьте вашу ИБ без СМС и регистрации. Неприятность в том, что основной bufferbloat на стороне провайдера, исправив ситуацию там, получаешь прирост скорости соединения на халяву. Speedtest ISP Xfinity и Google Fiber. Не сказать, что дело ограничивалось одним лишь нытьем. Начиная с Linux 3.3 вышла целая серия исправлений и оптимизаций направленных на устранение ИБ. Последний в этой серии исправлений алгоритм BBR. Новость с opennet.ru. 
Эти изменения затронули почти все сетевые протоколы, однако обошли стороной WiFi и LTE. Так не могло долго продолжаться и за WiFi взялись всерьез. Проект Make WiFi Fast собрал сотни участников во главе с командой ядерных сетевиков. 
 Dave Täht, который уже на раз спасал интернет за последние шесть лет, атаковал проблему с помощью новых и лучших бенчмарков, которые самому же пришлось разрабатывать. Довольно популярный в научной среде и за ее пределами Iperf3, вообще оказался профнепригодным, так как по умолчанию предполагает нереальные 100 ms ИБ.  Так было до патча. Обратите внимание на огромные задержки в > 10 на верхнем и нижнем уровне WiFi стека. 
 MAC80211 больше не складирует пакеты на нижнем уровне драйвера, а отправляет их промежуточному планировщику, докладывает об этом драйверу и тот забирает их по мере поступления. Благодаря этому MAC80211 имеет больше информации о том, когда происходит передача данных. Задержки от буферизации благодаря этому составили всего 2-12 ms. ИБ удалось избыть настолько, что задержки снизились с пиковых значений 1-2 секунд до 40 msec. Наиболее наглядной иллюстрацией будет картинка на которой видны WiFi сессии на 100 рабочих станций до и после патча.  До патча, лишь 5 станций успешно стартовали. Чудовищные > 15 секунд тормоза. Кликабельно. 

 После патча, все станции успешно стартовали. Задержки приемлемые 150-300 msec. Кликабельно.  Теперь ложка дегтя. Пока лишь драйвера ath9k полностью поддерживают все эти новшества, ath10k уже почти готов. Остальным пока придется подождать, но уверен, остальные драйвера тоже будут активно дорабатываться после того, как патчи попадут в стабильную ветку. BigData