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 на незагруженной сети — лишняя сложность, которая когда-нибудь выстрелит непонятной просадкой.
Связанные термины
- latency — то, что QoS защищает
- throughput — то, чем приходится жертвовать
- Каналы связи — где возникает узкое место
- IP-телефония — главный потребитель QoS
- Роутеры / OpenWrt — где QoS настраивают в небольших сетях
- TCP и UDP — по-разному реагируют на потери и задержку
Готовы запустить GPU-задачу?
Запустить GPU-сервер