Networking

QoS

Quality of Service — механизмы приоритизации трафика, которые решают, чьи пакеты пройдут первыми при нехватке полосы.

Что такое QoS

QoS (Quality of Service, качество обслуживания) — набор механизмов, управляющих очередями пакетов на сетевом устройстве. Когда трафика больше, чем пропускает канал, кто-то обязан подождать. Без QoS решение принимается тупо по порядку прибытия: голосовой звонок встаёт в очередь за загрузкой торрента. С QoS вы задаёте правила, кто важнее.

Ключевое понимание: QoS не расширяет канал. Он лишь распределяет дефицит. Если полосы хватает всем, QoS не делает ничего — он включается ровно в момент перегрузки.

Что настраивают

Механизм Что делает Зачем
Классификация относит пакет к классу трафика отделить голос от бэкапа
Приоритизация пропускает важные очереди первыми снизить latency
Shaping придерживает трафик до заданной скорости сгладить всплески
Policing отбрасывает превышение жёсткий лимит
Управление очередью борется с раздуванием буферов убрать лаги

Разница между shaping и policing существенна: первый ставит пакеты в очередь и задерживает, второй просто выкидывает. Для TCP shaping мягче — потери заставляют его сбрасывать скорость.

Метки DSCP

Приоритет переносится в самом IP-пакете: 6 бит поля DSCP в заголовке. Метка ставится один раз у источника, и дальше каждое устройство на пути решает, уважать её или нет.

Класс DSCP Для чего
EF 46 голос — минимальная задержка
AF41 34 видео
CS6 48 служебный трафик маршрутизации
BE 0 всё остальное, по умолчанию

Важная оговорка: в интернете ваши метки почти наверняка перезапишут или проигнорируют. DSCP работает внутри управляемой сети — вашей локалки, VPN-туннеля, канала с провайдером, где приоритеты прописаны в договоре.

Bufferbloat — главная причина лагов

Самая частая проблема, которую лечит QoS, называется bufferbloat: производители напихали в устройства огромные буферы, и при загрузке канала пакеты не теряются, а копятся в очереди. Пинг, который в покое был 15 мс, при заливке файла улетает до 300–1000 мс. Формально потерь нет, а созвон рассыпается.

Лечится не приоритетами, а современным управлением очередью — fq_codel или cake, которые держат очередь короткой:

# посмотреть текущую дисциплину
$ tc qdisc show dev eth0
qdisc fq_codel 0: root refcnt 2 limit 10240p flows 1024 quantum 1514

# CAKE с ограничением по скорости аплинка
$ sudo tc qdisc replace dev eth0 root cake bandwidth 90mbit

# статистика: смотреть на drops и backlog
$ tc -s qdisc show dev eth0

Полосу задают на 85–95% реальной скорости канала — иначе очередь образуется у провайдера, где вы ей уже не управляете. Проверять результат надо не скоростью, а пингом под нагрузкой: хороший QoS — это когда задержка при полной загрузке почти не растёт.

Где это нужно на серверах

  • IP-телефония и видео. Единственный по-настоящему обязательный случай: голосу нужны стабильные задержка и джиттер, а полосы — считанные килобиты.
  • Бэкапы и репликация. Ночной бэкап на полной скорости выедает канал у продакшена. Ограничение через shaping решает вопрос.
  • Гостевой Wi-Fi и общие каналы. Лимит на класс, чтобы один пользователь не съел всё.
  • Внутри ЦОД — обычно нет. При 10–100 Гбит/с и запасе полосы QoS не нужен, дешевле добавить канал. Исключение — сети хранения и RDMA, где применяют приоритеты и управление потоком.

Общее правило: сначала убедитесь, что канал действительно узкий. QoS на незагруженной сети — лишняя сложность, которая когда-нибудь выстрелит непонятной просадкой.

Связанные термины

Готовы запустить GPU-задачу?

Запустить GPU-сервер