F-Stack даёт возможность организовать сетевое взаимодействие в приложениях, применяя вместо сетевого стека операционной системы собственный сетевой стек, функционирующий в пространстве пользователя и напрямую работающий с сетевым оборудованием. Предоставляются специализированные редакции Nginx и Redis, переведённые на использование F-Stack.
Для разработки приложений поддерживается как штатный Posix API (Socket, Epoll, Kqueue), упрощающий перевод на F-Stack существующих приложений, так и собственный программный интерфейс на основе сопрограмм (микропотоков), упрощающий создание сетевых приложений и позволяющий обойтись без сложной логики асинхронной обработки запросов. F-Stack также предоставляет средства для упрощения применения в приложениях с многопроцессной архитектурой.
Для взаимодействия с сетевой картой минуя интерфейсы ядра операционной системы применяется фреймворк DPDK (Data Plane Development Kit), предоставляющий набор библиотек для низкоуровневой работы с сетевыми адаптерами, взаимодействия в многоядерных системах, задействования кольцевых буферов и больших страниц памяти («huge page»). Применение DPDK даёт возможность принимать и отправлять сетевые пакеты с выполнением минимального числа циклов CPU (около 80 циклов на пакет) и разрабатывать высокопроизводительные компоненты сетевого стека. Непосредственно функциональность TCP/IP стека заимствована из FreeBSD 11.1 и выделена в независимую от операционной системы библиотеку.
F-Stack позиционируется как решение, которое можно применять для повышения производительности обработчиков сетевых запросов, в условиях, когда работа штатный TCP/IP стек ядра Linux становится узким местом и ограничивает масштабирование. При этом применение F-Stack даёт достаточно ощутимую оптимизацию и позволяет в некоторых ситуациях увеличить число обрабатываемых мелких запросов в разы.


Увеличение производительности достигается за счёт исключения таких операций, как копирования сетевых пакетов, планирование потоков, обработка прерываний и применение системных вызовов. F-Stack позволяет достигнуть потолка сетевой производительности, возможного для используемой сетевой карты. Например, решения на базе F-Stack продемонстрировали возможность обработки 10 млн параллельных соединений, 5 млн запросов в секунду и 1 млн соединений в секунду.
В новом выпуске:
- Добавлена поддержка VLAN;
- Обеспечена возможность работы в изолированных контейнерах на базе Doker;
- Реализованы интерфейсы ff_dup, ff_dup2, ff_ioctl_freebsd, ff_getsockopt_freebsd и ff_setsockopt_freebsd;
- Добавлен параметр «idle_sleep» для сокращения нагрузки на CPU в ситуации отсутствия входящих пакетов
- Добавлена поддержка сборки для архитектуры ARM64.
- В переведённой на F-Stack редакции Nginx заменены обработчики getpeername, getsockname и shutdown.
- Осуществлён переход на новую версию DPDK 17.11.4 LTS;
- В состав добавлена утилита traffic для отображения текущего трафика, обрабатываемого приложениями на базе F-Stack (напоминает trafshow).
Из планов на будущее отмечается поддержка IPv6, предоставление API для зыков Python, PHP и Go, поддержка API Cyptodev (Intel QAT), использование zerocopy при отправке пакетов, поддержка SPDK и возможность запуска в форме фонового процесса.
Источник: http://www.opennet.ru/opennews/art.shtml?num=51884