Опубликован сетевой стек F-Stack 1.24, представляющий собой редакцию сетевого стека FreeBSD, работающую в пространстве пользователя и использующую фреймворк DPDK для достижения максимальной производительности. Проект создан крупнейшей в Китае телекоммуникационной компанией Tencent и используется в её продуктах и сервисах. Код написан на языке Си и распространяется под лицензией BSD. Поддерживается работа в Linux и FreeBSD.
F-Stack позволяет задействовать в приложениях собственный локальный сетевой стек, не зависящий от сетевого стека операционной системы, функционирующий в пространстве пользователя и напрямую работающий с сетевым оборудованием. F-Stack позиционируется как решение, позволяющее повысить производительность обработчиков сетевых запросов в условиях, когда штатный TCP/IP стек ядра Linux становится узким местом и ограничивает масштабирование – в некоторых ситуациях проект даёт возможность в разы увеличить число обрабатываемых мелких сетевых запросов. Теоретически F-Stack позволяет достигнуть потолка сетевой производительности, возможного для используемой сетевой карты.
Повышение производительности достигается за счёт исключения таких операций, как копирования сетевых пакетов, планирование потоков, обработка прерываний и применение системных вызовов. Для взаимодействия с сетевой картой, минуя интерфейсы ядра операционной системы, применяется фреймворк DPDK (Data Plane Development Kit), развивающий набор библиотек для низкоуровневой работы с сетевыми адаптерами. DPDK даёт возможность снизить накладные расходы и уложиться в минимальное число циклов CPU при приёме или отправке сетевых пакетов.
Функциональность TCP/IP стека соответствует сетевому стеку FreeBSD 13 и выделена из данной операционной системы в независимую библиотеку. Для разработки приложений можно использовать стандартный API POSIX (socket, epoll, kqueue) или собственный программный интерфейс на основе микропотоков, упрощающий создание сетевых приложений и позволяющий обойтись без сложной логики асинхронной обработки запросов.
Проектом поддерживаются переведённые на использование F-Stack редакции многопротокольного сервера Nginx 1.25.2 и СУБД Redis 6.2.6, демонстрирующие производительность выше обычных сборок, работающих поверх системного сетевого стека.
Наиболее заметные изменения в новом выпуске:
- В файле конфигурации config.ini предоставлена возможность выбора между использованием KNI (Kernel NIC Interface) и virtio_user в качестве транспорта для передачи пакетов между ядром и приложением обработки пакетов на базе DPDK. Добавлена возможность использования ratelimit для KNI.
- Добавлена поддержка включения настройки сетевого стека “net.add_addr_allfibs=1” для добавления адресов во все таблицы маршрутизации.
- Добавлен API ff_get_traffic для получения трафика, например, для реализации QoS (Quality of Service).
- Добавлены функции pthread_create и pthread_join, напоминающие аналогичные функции из POSIX.
- Добавлен API ff_dpdk_raw_packet_send для отправки приложением raw-пакетов напрямую через DPDK, а не через сокет.
- Реализована поддержка автоматической настройки VLAN, маршрутизации и policy routing.
- Осуществлён переход на версию DPDK 22.11.6 LTS.
- В реализации Nginx поверх F-Stack добавлена поддержка модуля stream.