awesome-everything EN
↑ Обратно к восхождению

Сети и протоколы

Развёртывание и стоимость CPU

Суть Обработка пакетов QUIC в пользовательском пространстве обходится на 15–30% дороже по CPU на байт, чем ядерный TCP, и снижает пропускную способность до 45% на быстрых каналах.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 14 min

CDN выкатывает HTTP/3. Утилизация CPU на граничных серверах вырастает на 25%, пропускная способность на гигабитных каналах падает почти вдвое, а 4% клиентов незаметно откатываются на HTTP/2 — без единой ошибки в логах. QUIC действительно лучше по задержке. И действительно дороже в эксплуатации.

Стоимость CPU: почему транспорт в пользовательском пространстве дорог

QUIC работает в пользовательском пространстве — каждый пакет проходит через код приложения, а не по быстрому пути ядра от NIC до сокета. Составляющие стоимости:

  1. Шифрование AES-GCM на пакет — ~15–20 тактов на байт на современных CPU. Ядерный TCP выгружает это на NIC (TLS offload, kTLS). QUIC не может — NIC пока не понимает QUIC.
  2. Декодирование целых переменной длины — номера пакетов, идентификаторы потоков и длины фреймов используют кодировку VarInt из QUIC. Каждое декодирование — условный переход в пользовательском пространстве.
  3. Фреймирование нагрузки — фреймы STREAM, CRYPTO и ACK сериализуются/десериализуются на пакет в пользовательском пространстве. Повторно передаваемые фреймы должны быть пересериализованы с новыми номерами пакетов.
  4. Накладные расходы системных вызовов — без батчинга каждый sendmsg() по UDP — это системный вызов. На 1 Гбит/с с пакетами по 1500 байт это ~83 тыс. syscall/с на ядро.

Измеренный эффект: На гигабитном LAN-канале при полной нагрузке QUIC насыщает ядро CPU раньше, чем канал заполняется. Пропускная способность падает до ~45% по сравнению с HTTP/2 на TCP. На медленных или нестабильных каналах (типичный мобильный) узким местом является сеть, а не CPU, поэтому накладные расходы незаметны.

Стоимость CPU QUIC: тип канала имеет значение
Быстрый LAN (1 Гбит/с)
CPU — узкое место
Пропускная способность −45% vs TCP
Выгода от HoL: незначительна
Используйте TCP
WAN / API (RTT 100 мс)
Сеть — узкое место
Накладные расходы CPU: незаметны
Экономия рукопожатия: +100 мс
Используйте QUIC
Мобильный 4G (нестабильный)
Сеть — узкое место
Накладные расходы CPU: незаметны
Экономия HoL: 575× при потере 0,5%
Используйте QUIC

Оптимизации: UDP GSO, NIC offload, привязка к ядрам

UDP Generic Segmentation Offload (UDP GSO): Вместо одного sendmsg() на пакет 1500 байт — батчинг до 64 КБ нагрузки QUIC в одном системном вызове с подсказкой GSO. Ядро разбивает на отдельные UDP-датаграммы перед DMA на NIC. Результат: ~3–4 syscall на 64 КБ вместо 43. Cloudflare сообщает о ~20% снижении CPU только от GSO.

NIC QUIC offload (Intel E810 и новее): Разбор заголовков QUIC long/short в кремнии, маршрутизация пакетов к нужному потоку QUIC без участия демультиплексора в пользовательском пространстве. Снижает накладные расходы на прерывание на пакет. По состоянию на 2026 год всё ещё экспериментально, но доступно на оптимизированных для облака NIC.

Привязка к ядрам: Держите процесс QUIC на одном физическом ядре. Состояние QUIC (таблица соединений, окна CC, ключевой материал) помещается в кэш L3. Миграция между ядрами сбрасывает кэш-линии, добавляя ~50 нс на пакет.

С GSO + привязкой к ядрам стоимость CPU на байт снижается с 30% до 15–20% накладных расходов по сравнению с ядерным TCP.

Викторина

Почему накладные расходы CPU QUIC снижают пропускную способность на 1 Гбит/с LAN, но не на мобильном канале 10 Мбит/с?

Блокировка UDP и обязательный фолбэк на HTTP/2

~3–5% сетей блокируют UDP — корпоративные прокси, определённые ISP-шлюзы, некоторые LTE-контексты. Когда QUIC молча дропается (нет ICMP-ошибки, просто потерянные пакеты), единственный сигнал для клиента — таймаут, обычно 1–3 секунды до фолбэка на TCP.

Гонка браузера: Современные браузеры запускают и QUIC (UDP 443), и TCP (443) одновременно. Выигрывает то рукопожатие, которое завершится первым. Это ограничивает потери UX от блокировки UDP нулём — TCP побеждает, а QUIC изящно проигрывает гонку. Обратная сторона: при систематической блокировке UDP на пути — лишние усилия на каждом соединении.

Обнаружение Alt-Svc: HTTP/3 анонсируется через Alt-Svc: h3=":443"; ma=3600 в ответе HTTP/2. Браузер кэширует это и пытается использовать QUIC на следующем соединении. Первичные соединения всегда откатываются на TCP, обнаруживают заголовок и переходят на QUIC при следующих запросах.

Требование RFC 9000: Реализации ДОЛЖНЫ поддерживать фолбэк на HTTP/2 over TCP. Деплой без этого нарушает спецификацию и сломается в заблокированных сетях.

Викторина

Пользователь в корпоративной сети сообщает, что загрузка сайта на 2 секунды медленнее обычного. QUIC включён. Что скорее всего происходит и как проверить?

Реальность развёртывания в 2026 году

~21% веб-трафика идёт через HTTP/3. ~35–40% крупных сайтов анонсируют его через Alt-Svc. Принятие бимодально:

  • Мобильные браузеры включают HTTP/3 по умолчанию — задержка и устранение HoL-блокировки важны в сотовых сетях.
  • Десктоп/LAN всё ещё устраивает гонку QUIC vs TCP; TCP часто выигрывает, потому что RTT короткие и HoL-блокировка редка на быстрых путях.

Крупные CDN (Cloudflare, Google, Akamai, Fastly) включают HTTP/3 по умолчанию. Браузеры (Chrome, Safari, Firefox) его поддерживают. Кривая принятия будет расти по мере того, как блокировка UDP станет редкостью, аппаратный offload снизит стоимость CPU, а гонка фолбэков станет универсальной.

Найди ошибку

Трассировка пакетов QUIC — диагностика уровня шифрования и потерь

log
$ quictrace capture.pcapng | head -20
timestamp=0.000 dcid=12345678 type=Initial pkt_num=0 frames=[Crypto[0..120], Padding]
timestamp=0.045 dcid=12345678 type=Initial pkt_num=1 frames=[Crypto[120..240], Padding] # Повторная передача (нет ACK вовремя)
timestamp=0.051 scid=87654321 dcid=12345678 type=Initial pkt_num=0 frames=[Crypto[0..200], Ack[0], Padding]
timestamp=0.052 dcid=87654321 type=Handshake pkt_num=0 frames=[Crypto[200..350]]
timestamp=0.100 scid=87654321 dcid=12345678 type=Handshake pkt_num=0 frames=[Crypto[350..400], Finished]
timestamp=0.101 dcid=87654321 type=1RTT pkt_num=0 frames=[Stream(0, fin, 4096 bytes)]
timestamp=0.151 scid=87654321 dcid=12345678 type=1RTT pkt_num=0 frames=[Stream(0, fin, [все байты 0..4095], Ack[0])]

Клиент видит одну повторную передачу Initial до прихода Initial от сервера. Handshake далее проходит нормально. Что это означает?

Пробелы в наблюдаемости

Шифрование QUIC предотвращает инспекцию пакетов — tcpdump показывает только непрозрачные блобы. Традиционный мониторинг сети (счётчики HTTP-запросов на endpoint, обнаружение медленных клиентов, нарушения на уровне потока) ломается.

Адаптация стека:

  • Приложения экспортируют трассировки QUIC через JSON (формат qlog по RFC 9312) — жизненный цикл соединения, номера пакетов, события CC.
  • Браузеры сообщают PerformanceResourceTiming.nextHopProtocol = "h3" для HTTP/3-соединений.
  • Облачные провайдеры (AWS, GCP) добавляют QUIC-aware метрики потоков.
  • eBPF-пробы на пользовательских QUIC-сокетах могут восстанавливать тайминг пакетов без расшифровки.

Это компромисс по сути: шифрование даёт конфиденциальность и безопасность за счёт операционной непрозрачности.

Выбери лучший вариант

CDN должен выбрать: развернуть QUIC для латентно-чувствительного API (маленький запрос/ответ, межконтинентальный) vs. высокопроизводительного сервиса статических ресурсов (1 Гбит/с, LAN-клиенты).

Спроектируй

Спроектируйте стратегию развёртывания HTTP/3 и QUIC для глобального CDN, обслуживающего мобильных клиентов (90% трафика) и десктоп (10% трафика), при текущей инфраструктуре HTTP/2 на TCP.

  • Существующее развёртывание HTTP/2 стабильно и хорошо настроено; нельзя ломать TCP-пути.
  • Мобильные клиенты разнообразны (iOS 14+, Android 5+, разные браузеры); часть сетей блокирует QUIC.
  • Бюджет CPU на QUIC: не более 20% накладных расходов по сравнению с текущим HTTP/2.
  • Наблюдаемость: измерять частоту принятия QUIC, частоту фолбэков и улучшение задержки по типу устройств.
Реальность QUIC-деплоймента 2026
Накладные расходы CPU vs ядерный TCP
15–30% на байт
Потеря throughput на быстрых каналах 1 Гбит/с
до ~45% vs HTTP/2
Снижение CPU от UDP GSO (Cloudflare)
~20% на соединение
Сети с блокировкой UDP
~3–5%
Веб-трафик через HTTP/3 (2026)
~21%
Крупные сайты, анонсирующие HTTP/3
~35–40%
Таймаут гонки QUIC+TCP в браузере
1–3 с до победы TCP
Почему это работает

Почему не добавить QUIC в ядро? В Linux есть экспериментальные патчи QUIC in-kernel, но сообщество разделено. Ядерный TCP десятилетиями накапливал NIC offload (kTLS, GRO, RSS). Реплицировать это для QUIC займёт годы и привяжет эволюцию QUIC к циклу релизов ядра — противоположность тому, что задумывал RFC 9000. Пользовательский QUIC может выпускать новые алгоритмы CC еженедельно; ядерный QUIC — нет. Стоимость CPU — цена гибкости.

Вспомните перед уходом
  1. 01
    Почему накладные расходы CPU QUIC снижают throughput на 1 Гбит/с LAN, но не на мобильном 10 Мбит/с?
  2. 02
    Что такое UDP GSO и почему Cloudflare сообщает о снижении CPU на ~20% от него?
  3. 03
    CDN видит 4% QUIC-соединений, тихо проваливающихся без ошибки. Вероятная причина и решение?
Итог

Архитектура QUIC в пользовательском пространстве даёт выигрыши по задержке и HoL ценой реальных затрат CPU: на 15–30% больше на байт, чем у ядерного TCP, вплоть до ~45% потери throughput на быстрых 1 Гбит/с каналах, где CPU — не сеть — является узким местом. UDP GSO батчит системные вызовы и восстанавливает ~20% CPU; NIC offload и привязка к ядрам снижают ещё больше. Около 3–5% сетей молча блокируют UDP, требуя гонки TCP в браузере и обязательного фолбэка на HTTP/2. По состоянию на 2026 год ~21% веб-трафика идёт через HTTP/3 с бимодальным принятием — мобильные выигрывают явно, десктоп часто проигрывает TCP в гонке. Шифрование QUIC ломает традиционную инспекцию пакетов; qlog (RFC 9312), браузерные timing API и eBPF-пробы — замена стека наблюдаемости. Правильная стратегия деплоя: QUIC для латентно-чувствительных WAN и мобильных путей, TCP для высокопроизводительного LAN и статических ресурсов.

Связанные уроки
встречается в162
Продолжить восхождение ↑QUIC внутри: тест с множественным выбором
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.