След година и половина разработки издание на проекта , разработващ високопроизводителен мрежови стек, функциониращ в пространството на потребителя, основан на рамката и TCP/IP стека на FreeBSD (F-Stack не е свързан с FreeBSD и разглежда Linux като основна платформа за приложение). Проектът се използва в различни продукти и услуги , най-голямата телекомуникационна компания в Китай. Кодът е под лиценз BSD. Поддържа работа в Linux и FreeBSD.
F-Stack предлага възможност за организиране на мрежово взаимодействие в приложения, като вместо мрежовия стек на операционната система се използва собствен мрежов стек, функциониращ в пространството на потребителя и работещ директно с мрежовото оборудване. специализирани издания на Nginx и Redis, адаптирани за използване с F-Stack.
За разработка на приложения са налични както стандартният Posix API (Socket, Epoll, Kqueue), улесняващ прехода на съществуващи приложения към F-Stack, така и собствен интерфейс на основата на корутини (микропотоците), който опростява създаването на мрежови приложения и позволява избягване на сложна логика за асинхронна обработка на заявки. F-Stack предлага и средства за опростяване на приложението в многопроцесорна архитектура.
За взаимодействие с мрежовата карта, заобикаляйки интерфейсите на ядрата на операционната система, се използва рамката (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;
- Осигурена е възможност за работа в изолирани контейнери на база 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;
- Добавена е утилита за визуализиране на текущия трафик, обработван от приложения, базирани на F-Stack (напомня trafshow).
От плановете за бъдеще поддръжка на IPv6, предоставяне на API за езици Python, PHP и Go, поддръжка на API Cyptodev (), използване на zerocopy при изпращане на пакети, поддръжка и възможност за стартиране под формата на фонов процес.
Източник: opennet.ru
