Tailscale ускорила VPN-клиент: экономия памяти, многопоточность и кэш карты сети

Tailscale опубликовала блог-пост с описанием новых оптимизаций производительности своего клиента и уровня передачи данных. Первое изменение касается обработки мелких пакетов: большинство сетевых пакетов имеют размер около 1 КиБ, но реализация WireGuard в Tailscale (wireguard-go) выделяет под каждый входящий пакет буфер фиксированного размера 64 КиБ, чтобы использовать эффективные механизмы Linux вроде Generic Receive Offload. Из-за этого мелкий пакет каждый раз копировался в отдельный крупный буфер. На Linux и Android Tailscale теперь оставляет пакеты на месте внутри общего блока чтения и просто отмечает их границы, не копируя данные заново. Это дало примерно 5% прироста скорости в типичных сетевых конфигурациях, а также позволило сократить очереди пакетов, которые раньше были избыточно глубокими.
Освободившуюся память компания направила на новую многопоточную систему обработки для маршрутизаторов подсетей (subnet routers), коннекторов приложений (app connectors) и выходных узлов (exit nodes). Раньше пакеты разных независимых потоков соединений обрабатывались в одном упорядоченном однопоточном конвейере, общая "полоса" на все соединения, поскольку принимающее приложение не должно получать свои пакеты не по порядку. Теперь каждому потоку пакетов выделяется своя "полоса", и они обрабатываются параллельно, задействуя несколько ядер процессора. Это увеличивает суммарную пропускную способность и снижает задержку между приёмом и пересылкой пакетов, особенно заметно для коннекторов приложений и выходных узлов, обслуживающих много пользователей с короткоживущими соединениями. Сотрудник Tailscale Алекс Валюшко пояснил, что это ведёт к более быстрой обработке данных с момента их чтения из сети до передачи операционной системе. Эта многопоточная технология должна появиться во второй половине 2026 года.
Ещё один источник прироста скорости, использование возможности writev в Linux: клиент Tailscale может передавать ядру несколько фрагментов данных пакета за одну операцию вместо их предварительного копирования и объединения, что снижает число копирований и операций записи.
Отдельная функция, кэширование карты сети (netmap caching), ускоряет запуск клиента. Обычно устройство при подключении к Tailscale сначала обращается к управляющей плоскости (control plane), что на типичной сети занимает около 100 миллисекунд, и получает "карту сети" со списком доступных устройств и путей к ним. При плохом соединении, например, в самолёте или отеле с агрессивной фильтрацией, этот процесс может сильно замедлиться или не завершиться вовсе. При включённом кэшировании каждое устройство хранит копию карты сети на диске и при старте может использовать её, чтобы установить соединения с другими устройствами тайлнета, пока не станет доступна управляющая плоскость с актуальными данными. Сотрудник компании Клаус Ленсбёл отметил, что именно в условиях плохой связи кэширование карты сети приносит больше всего пользы. По наблюдениям Tailscale, на тайлнетах с плохой доступностью управляющей плоскости трафик через уровень передачи данных при "тёплом" запуске от кэша начинается в один-два порядка быстрее, чем при "холодном" запуске.
У функции есть ограничения: кэширование работает только если устройство хотя бы раз уже подключалось к тайлнету и получало карту сети, требует постоянного места на диске, а на очень крупных тайлнетах обновление кэша может создавать заметную дисковую нагрузку, из-за этого компания не рекомендует включать её на устройствах с медленными или чувствительными к износу накопителями вроде SD-карт.
По срокам: снижение расхода памяти на Linux/Android ожидается в клиенте версии v1.104; многопоточность для маршрутизаторов подсетей и коннекторов приложений, в релизе после v1.104; дополнительные выигрыши в памяти и пропускной способности на Linux/Android частично реализованы весной 2026 года, а полностью, тоже в релизе после v1.104; кэширование карты сети сейчас доступно как экспериментальный флаг и должно стать включённым по умолчанию в v1.104 после дополнительного тестирования, а на мобильных клиентах появится позже. Отдельно Tailscale сообщила, что изучает создание собственного инструментария для тестирования и диагностики производительности сети, поскольку существующие инструменты плохо понимают специфичные для Tailscale состояния соединений, например, идёт ли трафик через ретранслятор DERP или напрямую.
Ключевые факты
- Отказ от копирования мелких (~1 КиБ) пакетов в буферы 64 КиБ на Linux/Android дал около 5% прироста скорости
- Новая многопоточная обработка пакетов для маршрутизаторов подсетей, коннекторов приложений и выходных узлов ожидается во второй половине 2026 года
- Использование writev в Linux снижает число копирований данных при передаче ядру и повышает пропускную способность
- Кэширование карты сети ускоряет запуск клиента на один-два порядка при плохой связи с управляющей плоскостью; сейчас доступно как флаг, по умолчанию появится в v1.104
- Снижение расхода памяти запланировано на клиент v1.104, многопоточность и дополнительные улучшения пропускной способности, на релиз после v1.104
Почему это важно
Tailscale, популярное mesh-VPN решение, которым пользуются для CI, удалённой разработки, робототехнических устройств и телеметрии. Описанные в посте изменения касаются не единичной функции, а базовых механизмов обработки трафика, памяти, многопоточности и старта соединения, что напрямую влияет на задержку и пропускную способность у всех пользователей продукта.
Кому это важно
Инженерам инфраструктуры и DevOps, которые используют Tailscale для маршрутизации подсетей, доступа к приложениям через app connectors и exit nodes, а также разработчикам чувствительных к задержке систем, от роботов на edge-устройствах до агентных рабочих процессов, которым важен быстрый и предсказуемый старт соединения.
Как это применить
Часть улучшений (экономия памяти на мелких пакетах) станет доступна автоматически в клиенте версии v1.104 на Linux и Android; многопоточность для маршрутизаторов подсетей и коннекторов приложений появится позже, в релизе после v1.104. Кэширование карты сети уже можно включить как экспериментальный флаг в текущем клиенте, а по умолчанию оно должно заработать в v1.104 после дополнительного тестирования; на мобильных платформах, ещё позже.
Можно ли доверять
Это официальный блог Tailscale с цитатами двух названных сотрудников компании, Алекса Валюшко и Клауса Ленсбёла. Часть цифр (5% ускорение, прирост в 1-2 порядка от кэширования) приведена без описания методологии тестирования и конкретного оборудования, так что это ориентировочные, а не строго верифицируемые независимо показатели.
Риски и подводные камни
Кэширование карты сети работает только если устройство уже хотя бы раз подключалось к тайлнету и требует постоянного места на диске; на очень крупных тайлнетах обновление кэша может создавать заметную дисковую нагрузку, а на медленных или чувствительных к износу накопителях вроде SD-карт компания советует функцию не включать. Описанные выигрыши в памяти и части пропускной способности пока ограничены Linux и Android, на других платформах эти улучшения не действуют.
«Это выливается в меньшую задержку, по сути, более быструю обработку данных с момента, когда мы считываем их из сети, до момента передачи операционной системе»
— Алекс Валюшко, сотрудник технического отдела Tailscale