F-Stack — это редакция сетевого стека FreeBSD, оформленная как отдельная библиотека для работы в пользовательском пространстве. Код написан на языке Си и распространяется под лицензией BSD, поддерживаются Linux и FreeBSD. Проект создан китайской телекоммуникационной компанией Tencent и используется в её сервисах.
Смысл решения в том, чтобы приложения могли задействовать собственный локальный стек, не зависящий от сетевого стека операционной системы. Это актуально, когда штатный TCP/IP ядра Linux становится узким местом и ограничивает масштабирование. По заявлению проекта, теоретически F-Stack позволяет выйти на потолок сетевой производительности карты, а в некоторых ситуациях — в разы увеличить число обрабатываемых мелких запросов.
Прирост достигается за счёт отказа от копирования пакетов, планирования потоков, обработки прерываний и системных вызовов. С сетевой картой библиотека взаимодействует через фреймворк DPDK, который даёт низкоуровневый доступ к адаптерам и снижает накладные расходы. Функциональность TCP/IP соответствует стеку FreeBSD 15. Для разработки доступны стандартный API POSIX (socket, epoll, kqueue) и собственный интерфейс на микропотоках; немодифицированные приложения можно подключать через LD_PRELOAD.
В версии 2.0 компоненты стека обновлены с FreeBSD 13 до FreeBSD 15. Появился многопоточный режим в одном процессе (thread_mode=1) в дополнение к многопроцессному, а также легковесный режим primary_slim, при котором основной процесс занимается только инициализацией и координацией, а приём пакетов и обработка очередей rx/tx идут на дочерних процессах. Добавлена поддержка аппаратного ускорения TSO, в том числе улучшенная для IPv6, возможность менять MTU и поддержка jumbo-кадров, расширено управление аппаратным расчётом контрольных сумм.
Среди других изменений — функция ff_zc_recv() для приёма данных без промежуточной буферизации, переработанная ff_zc_send(), опция FF_KERNEL_COEXIST для совместной работы с сетевым стеком ядра и сохранение трафика в pcap-дампах с наносекундной точностью. В config.ini добавлены параметры idle_loop_interval, extra_eal_args, drain_ring_size, reload_heartbeat_timeout_ms и reload_udp_idle_ms. Проект также поддерживает переведённые на F-Stack редакции Nginx 1.28 и СУБД Redis 6.2.6, которые, по данным источника, показывают производительность выше обычных сборок поверх системного стека; в сборке nginx реализована перезагрузка конфигурации и обновление бинарного файла без разрыва соединений.
Почему это важно
Для бизнеса и владельцев высоконагруженных сайтов F-Stack — способ выжать больше из имеющегося железа там, где возможности ядра Linux уже исчерпаны: например, при обработке большого числа мелких запросов. Разработчикам он интересен готовыми сборками Nginx и Redis и совместимостью со стандартным API, хотя переход на обход ядра требует понимания DPDK и меняет привычную модель эксплуатации. Для российских команд это ещё и открытая BSD-лицензия и поддержка Linux — можно тестировать без вендорских обязательств, но стоит помнить, что проект развивает Tencent и его развитие зависит от интереса компании.
Источник: OpenNET. Материал пересказан ИИ-агентом.