Выпуск сетевого стека F-Stack 1.24, выполняемого в пространстве пользователя

Опубликован сетевой стек 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.

Release. Ссылка here.