Después de un año y medio de desarrollo lanzamiento del proyecto , desarrollando una pila de redes de espacio de usuario de alto rendimiento basada en el marco и TCP/IP Pila FreeBSD (F-Stack no está vinculado a FreeBSD y considera a FreeBSD como la plataforma principal para su uso) LinuxEl proyecto se utiliza en diversos productos y servicios. , la mayor empresa de telecomunicaciones de China. Código bajo la licencia BSD. Se admite el trabajo en Linux y FreeBSD.
F-Stack permite organizar la interacción de red en aplicaciones utilizando, en lugar de la pila de red del sistema operativo, su propia pila de red que opera en el espacio del usuario y trabaja directamente con el equipo de red. Ediciones especializadas de Nginx y Redis, traducidas para usar F-Stack.
Para el desarrollo de aplicaciones tanto la API Posix estándar (Socket, Epoll, Kqueue), que simplifica la transferencia de aplicaciones existentes a F-Stack, como su propia interfaz de programación basada en corrutinas (microthreads), que simplifica la creación de aplicaciones de red y le permite hacer sin la compleja lógica del procesamiento de solicitudes asincrónicas. F-Stack también proporciona herramientas para facilitar su uso en aplicaciones con arquitectura multiproceso.
Para interactuar con una tarjeta de red, sin pasar por las interfaces del kernel del sistema operativo, se utiliza un marco (Kit de desarrollo del plano de datos), que proporciona un conjunto de bibliotecas para trabajar a bajo nivel con adaptadores de red, interactuar en sistemas multinúcleo y utilizar búferes circulares y páginas de memoria enormes. El uso de DPDK permite recibir y enviar paquetes de red con un número mínimo de ciclos de CPU (aproximadamente 80 ciclos por paquete) y desarrollar componentes de pila de red de alto rendimiento. Funcionalidad TCP/IP La pila se ha tomado prestada de FreeBSD 11.1 y se ha separado en una biblioteca independiente del sistema operativo.
F-Stack se posiciona como una solución que puede utilizarse para mejorar el rendimiento de los manejadores de solicitudes de red en condiciones donde el funcionamiento normal TCP/IP pila del kernel Linux Esto se convierte en un cuello de botella y limita la escalabilidad. Sin embargo, el uso de F-Stack proporciona una optimización significativa y, en algunos casos, permite un aumento considerable en la cantidad de solicitudes pequeñas procesadas.
Se logra un mayor rendimiento eliminando operaciones como copiar paquetes de red, programar subprocesos, manejar interrupciones y utilizar llamadas al sistema. F-Stack le permite alcanzar el límite máximo de rendimiento de red posible para la tarjeta de red utilizada. Por ejemplo, las soluciones basadas en F-Stack han demostrado la capacidad de manejar 10 millones de conexiones simultáneas, 5 millones de solicitudes por segundo y 1 millón de conexiones por segundo.
En el nuevo lanzamiento:
- Se agregó soporte para VLAN;
- Brinda la capacidad de trabajar en contenedores aislados basados en Docker;
- Interfaces implementadas ff_dup, ff_dup2, ff_ioctl_freebsd, ff_getsockopt_freebsd y ff_setsockopt_freebsd;
- Se agregó el parámetro "idle_sleep" para reducir la carga de la CPU en situaciones donde no hay paquetes entrantes.
- Se agregó soporte de compilación para la arquitectura ARM64;
- En la edición de Nginx traducida a F-Stack, se reemplazaron los controladores getpeername, getsockname y de apagado;
- Se ha realizado la transición a la nueva versión de DPDK 17.11.4 LTS;
- Se ha añadido una utilidad a la composición. para mostrar el tráfico actual procesado por aplicaciones basadas en F-Stack (que recuerda a trafshow).
De planes para el futuro Compatibilidad con IPv6, provisión de API para los lenguajes Python, PHP y Go, compatibilidad con API Cyptodev (), usando zerocopy al enviar paquetes, soporte y la capacidad de ejecutarse como un proceso en segundo plano.
Fuente: opennet.ru
