- PVSM.RU - https://www.pvsm.ru -
— пусть лучше небольшая, но фейербаховская...
Виктор Пелевин «Поколение Пи»
Недавний релиз ядра Linux 4.9 [1] отличный повод рассказать о предстоящем разгоне WiFi. Сразу оговорюсь — пост не о том, как увеличить зону покрытия [2] или менять регуляторные домены [3]. Ничего такого делать не надо, достаточно обновить ядро после того, как патчи буфероборца Dave Täht будут в стабильной ветке.
Значительное повышение скорости достигнуто за счет уменьшения задержки [1] [4] и избыточной буферизации [2] [5] в сети. Разработчикам пришлось ради этого перелопатить mac80211
, убрать кое-что сверху, добавить снизу и после этого задержки в сети сократились на порядок. Цена вопроса? Патч в 200 строк. Подробности под катом.
Bufferbloat [6] — это излишняя буферизация в сетевом оборудовании провайдера, что приводит к нежеланным задержкам передачи данных. При достаточно загруженном канале каждое соединение отъедает миллисекунды, которые затем превращаются в секунды, а иногда и минуты ожидания. Если сетевая задержка равна 1 секунде, то slashdot.org [7] будет загружаться целых 4 минуты!
# flent -l 300 -H server –streams=12 tcp_ndown &
# wget -E -H -k -K -p https://www.slashdot.org
...
FINISHED --2016-10-22 13:43:35--
Total wall clock time: 232.8s
Downloaded: 62 files, 1.8M in 0.9s (77KB/s)
Первая команда использует питоновский wrapper для netperf
, это мощный инструмент [8] проведения контрольных замеров[3] [9] сетевых подключений.
-l 300 #тест длится 5 минут
-H server #подключиться к хосту server
-streams=12 tcp_ndown #12 потоков tcp download
Flent
загружает канал так, чтобы соединение устанавливалось с секундной задержкой. Установка соединения заняла 99.6% времени исполнения, в результате реальная скорость упала до жалких 77 KB/с. При нулевой задержке та же страница загружается за 8 секунд. Таким образом время кругового пути[4] [10] и задержка имеют большее значение, чем пропускная способность.
На стороне провайдера ИБ носит характер эпидемии [11], но и на пользовательском оборудовании его хватает. Довольно долго каждый сетевой драйвер проектировался с расчетом на нереально высокие потребности буферизации данных, так как разработчики оптимизировали планировщик пакетов для самых высоких скоростей. Однако IRL их редко используют во время WiFi подключения. Вот из-за чего котики загружаются медленно, а видео-звонки превращаются в пытку. Проверьте вашу ИБ [12] без СМС и регистрации.
Неприятность в том, что основной bufferbloat на стороне провайдера, исправив ситуацию там, получаешь прирост скорости соединения на холяву. Speedtest ISP Xfinity [13] и Google Fiber [14].
Не сказать, что дело ограничивалось одним лишь нытьем. Начиная с Linux 3.3 вышла целая серия исправлений и оптимизаций направленных на устранение ИБ.
Последний в этой серии исправлений алгоритм BBR. Новость с opennet.ru [15].
В состав ядра включена реализация предложенного компанией Google алгоритма контроля перегрузки TCP (congestion control) — BBR (Bottleneck Bandwidth and RTT), успешно применяемого для увеличения пропускной способности и сокращения задержек передачи данных для трафика с google.com и YouTube. BBR требует внесения изменений только на стороне отправителя, программное обеспечение сетевой инфраструктуры и принимающей стороны остаётся без изменений. Вместо использования потери пакетов как индикатора перегрузки, в BBR применяются методы моделирования канала связи, прогнозирующие имеющуюся пропускную способность через последовательные проверки и оценку времени приема-передачи (RTT), но не доводя до потери пакетов или задержек в передаче. На начальной стадии соединения BBR оценивает потолок пропускной способности канала, затем снижает интенсивность отправки для разгрузки очереди и переходит в режим корректировки, то повышая, то снижая интенсивность отправки, балансируя между максимальной пропускной способностью и незаполненностью очереди пакетов;
Эти изменения затронули почти все сетевые протоколы, однако обошли стороной WiFi и LTE. Так не могло долго продолжаться и за WiFi взялись всерьез. Проект Make WiFi Fast собрал сотни участников во главе с командой ядерных сетевиков.
QDisc
или Queuing Discipline — обычный FIFO планировщик, он находится между IP стеком и драйвером.
fq_codel
не так прост. О нем уже писали на Хабре [16], поэтому не буду повторяться.
fq_codel
— один из самых эффективных и современных алгоритмов, использующий AQM.
Dave Täht, который уже на раз спасал интернет за последние шесть лет, атаковал проблему с помощью новых и лучших бенчмарков, которые самому же пришлось разрабатывать. Довольно популярный в научной среде и за ее пределами Iperf3
, вообще оказался профнепригодным [17], так как по умолчанию предполагает нереальные 100 ms ИБ.
while( testing)
sleep 100ms
while( total_bytes_sent / total_elapsed_time < target_rate)
transmit buffer of data
Так было до патча. Обратите внимание на огромные задержки в > 10 на верхнем и нижнем уровне WiFi стека.
fq_codel
. у него минимальный размер, не больше 2 TXOP.
MAC80211 больше не складирует пакеты на нижнем уровне драйвера, а отправляет их промежуточному планировщику, докладывает об этом драйверу и тот забирает их по мере поступления. Благодаря этому MAC80211 имеет больше информации о том, когда происходит передача данных. Задержки от буферизации благодаря этому составили всего 2-12 ms.
ИБ удалось избыть настолько, что задержки снизились с пиковых значений 1-2 секунд до 40 msec. Наиболее наглядной иллюстрацией будет картинка на которой видны WiFi сессии на 100 рабочих станций до и после патча.
До патча, лишь 5 станций успешно стартовали. Чудовищные > 15 секунд тормоза. Кликабельно.
После патча, все станции успешно стартовали. Задержки приемлемые 150-300 msec. Кликабельно.
Теперь ложка дегтя. Пока лишь драйвера ath9k [19] полностью поддерживают все эти новшества, ath10k
уже почти готов. Остальным пока придется подождать, но уверен, остальные драйвера тоже будут активно дорабатываться после того, как патчи попадут в стабильную ветку.
Автор: temujin
Источник [29]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/wi-fi/220925
Ссылки в тексте:
[1] релиз ядра Linux 4.9: https://habrahabr.ru/company/kingservers/blog/317364/
[2] как увеличить зону покрытия: https://habrahabr.ru/company/remo/blog/310612/
[3] менять регуляторные домены: https://habrahabr.ru/post/317220/
[4] [1]: #cite_ref-1
[5] [2]: #cite_ref-2
[6] Bufferbloat: https://www.bufferbloat.net/projects/
[7] slashdot.org: https://slashdot.org/
[8] мощный инструмент: https://flent.org/
[9] [3]: #cite_ref-3
[10] [4]: #cite_ref-4
[11] носит характер эпидемии: http://www.dslreports.com/speedtest/results/bufferbloat?up=1
[12] Проверьте вашу ИБ: http://dslreports.com/speedtest
[13] ISP Xfinity: http://www.dslreports.com/speedtest/5408767
[14] Google Fiber: http://www.dslreports.com/speedtest/5448121
[15] Новость с opennet.ru: http://www.opennet.ru/opennews/art.shtml?num=45662
[16] писали на Хабре: https://habrahabr.ru/post/194274/
[17] оказался профнепригодным: http://burntchrome.blogspot.com/2016/09/iperf3-and-microbursts.html
[18] Image: https://habrastorage.org/files/0a9/79a/f24/0a979af24ccf45cdbed9f35cb53aba35.png
[19] драйвера ath9k: https://lede-project.org/
[20] Making WiFI Fast: https://lwn.net/Articles/705884/
[21] Linux WiFi latencies: http://www.linuxplumbersconf.com/2016/ocw//system/presentations/3963/original/linuxplumbers_wifi_latency-3Nov.pdf
[22] Петиция в FCC: http://fqcodel.bufferbloat.net/~d/fcc_saner_software_practices.pdf
[23] Проект Make WiFi Fast.: https://docs.google.com/document/d/1Se36svYE1Uzpppe1HWnEyat_sAGghB3kE285LElJBW4
[24] Queueing in the Linux Network Stack: https://www.coverfire.com/articles/queueing-in-the-linux-network-stack/
[25] ↑: #cite_note-1
[26] ↑: #cite_note-2
[27] ↑: #cite_note-3
[28] ↑: #cite_note-4
[29] Источник: https://habrahabr.ru/post/317548/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.