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 млн соединений в секунду. [/list]
В новом выпуске:
- Добавлена поддержка VLAN;
- Обеспечена возможность работы в изолированных контейнерах на базе Docker;
- Реализованы интерфейсы 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 и возможность запуска в форме фонового процесса.
Источник: https://www.opennet.ru/opennews/art.shtml?num=51884
(opennet.ru, основная лента)