🌐 Как я «чинил» 500-мегабитный канал, который работал на 5% мощности
Типичная ситуация: у тебя есть два сервера (один в Москве, другой в Европе). Оба бодро рапортуют о канале в 500 Мбит/с до спидтеста (В нидерланды), но туннель WireGuard между ними едва выдает 30-40 Мбит/с. Пакеты теряются пачками (до 50% потерь на UDP!), а TCP превращается в тыкву.
Рассказываю по порядку, как я лечил этот «хронический кашель» сетевого стека.
😱 Проблема: «Дырявая труба»
При тестах iperf3 я увидел страшное:
TCP: 30-40 Мбит/с и тысячи ретрансмиссий.
UDP: Подаем 500 Мбит - доходит только половина.
CPU: Загрузка всего 50%, но есть нюанс - Steal Time до 15%. Это значит, что гипервизор «подворовывает» ресурсы процессора у нашей виртуалки.
Почему так происходило?
TCP Cubic — слишком «трусливый»: Стандартный алгоритм TCP (Cubic) при любой потере пакета думает, что в сети затор, и в ужасе режет скорость в два раза. На «грязных» каналах с потерями 1-2% он просто не может разогнаться.
UDP Bursts (Взрывы трафика): UDP не умеет тормозить. Он выстреливает пакеты огромными пачками. На виртуалке с 1 ядром и высоким Steal Time ядро просто не успевает «проснуться», чтобы забрать пакеты из очереди. Буфер переполняется - пакеты летят в корзину.
Bad Peering: Маршрут между провайдерами оказался перегружен на одном из стыков.
Решение: Тяжелая артиллерия Linux
Я решил не менять провайдера, а заставить систему работать в агрессивном режиме.
TCP BBR (Bottleneck Bandwidth and RTT):
Я переключил алгоритм контроля заторов на BBR от Google. В отличие от Cubic, BBR не боится потерь пакетов. Он смотрит на реальную запускную способность и задержку.
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr
FQ (Fair Queuing) + Pacing:
Для BBR я включил планировщик FQ. Его киллер-фича — Pacing (темпирование). Теперь UDP-пакеты не вылетают безумной толпой, забивая буферы, а идут ровным строем с микропаузами. Это позволило сетевой карте «переваривать» трафик без дропов.
Расширение «зала ожидания» (Buffers):
Я увеличил системные буферы и очереди (net.core.netdev_max_backlog), чтобы у процессора было больше времени на обработку пакетов в моменты, когда его отвлекает гипервизор.
📈 Результаты
После тюнинга цифры в iperf3 заиграли другими красками:
✅ TCP: 40 Мбит/с ➡️ 130 Мбит/с (рост в 3.2 раза!)
✅ UDP: 220 Мбит/с ➡️ 335 Мбит/с
✅ Jitter: Снизился с 1.0 мс до 0.2 мс (стабильность!)
Мораль: Если ваш VPN тормозит — не спешите ругать WireGuard или провайдера (Хотя объективно, провайдер VDSka говно). Возможно, ваша ОС просто слишком вежливая для этого сурового интернета. Включайте BBR + FQ и расширяйте буферы. 🚀
#devops #networking #linux #bbr #wireguard #performance