Despois de ano e medio de desenvolvemento lanzamento do proxecto , desenvolvendo unha pila de redes de espazo de usuario de alto rendemento baseada no framework и TCP/IP Pila de FreeBSD (F-Stack non está ligada a FreeBSD e considera FreeBSD como a plataforma principal para o seu uso) Linux). O proxecto utilízase en varios produtos e servizos. , a maior empresa de telecomunicacións da China. Código baixo a licenza BSD. O traballo en é compatible Linux e FreeBSD.
F-Stack permite a creación de redes nas aplicacións mediante o uso da súa propia pila de rede, que opera no espazo do usuario e interactúa directamente cos equipos de rede, en lugar da pila de rede do sistema operativo. edicións especializadas de Nginx e Redis convertidas para usar F-Stack.
Para o desenvolvemento de aplicacións Tanto a API estándar de Posix (Socket, Epoll, Kqueue), que simplifica a migración de aplicacións existentes a F-Stack, como unha API propietaria baseada en corutinas (microfíos), que simplifica a creación de aplicacións de rede e elimina a necesidade dunha lóxica de procesamento de solicitudes asíncrona complexa. F-Stack tamén proporciona ferramentas para simplificar o uso en aplicacións con arquitecturas multiproceso.
Para interactuar coa tarxeta de rede, evitando as interfaces do kernel do sistema operativo, utilízase un framework (Kit de desenvolvemento do plano de datos), que proporciona un conxunto de bibliotecas para traballo de baixo nivel con adaptadores de rede, interacción en sistemas multinúcleo e o uso de búferes en anel e páxinas de memoria enormes. O uso de DPDK permite recibir e enviar paquetes de rede cun número mínimo de ciclos de CPU (aproximadamente 80 ciclos por paquete) e desenvolver compoñentes de pila de rede de alto rendemento. Funcionalidade TCP/IP A pila está tomada de FreeBSD 11.1 e separada nunha biblioteca independente do sistema operativo.
F-Stack está posicionado como unha solución que se pode empregar para mellorar o rendemento dos xestores de solicitudes de rede en condicións nas que o funcionamento normal TCP/IP pila do núcleo Linux convértese nun colo de botella e limita a escalabilidade. Non obstante, o uso de F-Stack proporciona unha optimización significativa e, nalgúns casos, permite un aumento significativo no número de pequenas solicitudes procesadas.
O aumento do rendemento conséguese eliminando operacións como a copia de paquetes de rede, a programación de fíos, o manexo de interrupcións e as chamadas ao sistema. F-Stack permite maximizar o rendemento da rede para a tarxeta de rede utilizada. Por exemplo, as solucións baseadas en F-Stack demostraron a capacidade de manexar 10 millóns de conexións simultáneas, 5 millóns de solicitudes por segundo e 1 millón de conexións por segundo.
Na nova versión:
- Engadiuse soporte VLAN;
- Proporcionouse a capacidade de traballar en contedores illados baseados en Docker;
- Implementáronse as interfaces ff_dup, ff_dup2, ff_ioctl_freebsd, ff_getsockopt_freebsd e ff_setsockopt_freebsd;
- Engadiuse o parámetro "idle_sleep" para reducir a carga da CPU cando non hai paquetes entrantes.
- Engadiuse compatibilidade coa compilación para a arquitectura ARM64;
- Na edición de Nginx traducida a F-Stack, os xestores getpeername, getsockname e shutdown foron substituídos;
- Completouse a transición á nova versión de DPDK 17.11.4 LTS;
- Engadiuse unha utilidade á composición para mostrar o tráfico actual procesado polas aplicacións baseadas en F-Stack (semellante a trafshow).
Dos plans de futuro Compatibilidade con IPv6, API para linguaxes Python, PHP e Go, compatibilidade coa API de Cyptodev (), usando zerocopy ao enviar paquetes, soporte e a capacidade de executarse como un proceso en segundo plano.
Fonte: opennet.ru
