Se ha lanzado el proyecto F-Stack 2.0, que desarrolla una edición del stack de red de FreeBSD, adaptada para trabajar de forma aislada en el espacio de usuario como una biblioteca. El proyecto fue creado por la mayor empresa de telecomunicaciones de China, Tencent, y se utiliza en sus productos y servicios. El código está escrito en lenguaje C y se distribuye bajo la licencia BSD. Se admite su funcionamiento en Linux y FreeBSD. El proyecto también respalda las ediciones traducidas de Nginx 1.28 y la base de datos Redis 6.2.6, demostrando un rendimiento superior al de las compilaciones estándar que funcionan sobre el stack de red del sistema.
F-Stack permite utilizar en las aplicaciones su propio stack de red local, que no depende del stack de red del sistema operativo, funcionando en el espacio de usuario y trabajando directamente con el hardware de red. F-Stack se posiciona como una solución que permite mejorar el rendimiento de los manejadores de solicitudes de red en situaciones donde el stack TCP/IP del núcleo de Linux se convierte en un cuello de botella y limita la escalabilidad. Teóricamente, F-Stack permite alcanzar el límite de rendimiento de red posible para la tarjeta de red utilizada y, en algunas situaciones, ofrece la posibilidad de aumentar drásticamente el número de pequeñas solicitudes de red que se pueden procesar.
La mejora del rendimiento se logra al eliminar operaciones como la copia de paquetes de red, la programación de hilos, el manejo de interrupciones y las llamadas al sistema. Para interactuar con la tarjeta de red, evitando las interfaces del núcleo del sistema operativo, se utiliza el marco DPDK (Data Plane Development Kit), que desarrolla un conjunto de bibliotecas para trabajar a bajo nivel con adaptadores de red. DPDK permite reducir la sobrecarga y ajustarse al número mínimo de ciclos de CPU al recibir o enviar paquetes de red.
La funcionalidad de la pila TCP/IP corresponde a la pila de red de FreeBSD 15 y se ha desacoplado de este sistema operativo en una biblioteca independiente. Para el desarrollo de aplicaciones, se puede utilizar la API estándar POSIX (socket, epoll, kqueue) o una interfaz de programación propia basada en micro-hilos, que simplifica la creación de aplicaciones de red y permite evitar la lógica compleja del procesamiento asíncrono de solicitudes. Es compatible con aplicaciones no modificadas que se cargan a través de LD_PRELOAD.
Las modificaciones más notables en la nueva versión:
- Los componentes de la pila de red se han actualizado al estado de FreeBSD 15 (anteriormente se utilizaba FreeBSD 13).
- Se ha implementado un modo multihilo (thread_mode=1) en un solo proceso, complementando el modo multiproceso previamente disponible.
- Se ha añadido un modo de operación liviana (primary_slim), en el cual el proceso principal solo realiza las tareas básicas de inicialización y coordinación, y la recepción de paquetes y el manejo de colas de recepción/transmisión (rx/tx) se llevan a cabo únicamente en los procesos hijos.
- Se ha añadido soporte para el mecanismo de aceleración de hardware.
TSO (TCP Segmentation Offload) para delegar a la tarjeta de red las operaciones de combinación de paquetes, con la opción de revertir a la implementación por software. Se ha mejorado el soporte de TSO (TCP Segmentation Offload, delegación al adaptador de red del procesamiento de segmentos de paquetes) para IPv6. - Se ha añadido la capacidad de cambiar el tamaño del MTU (Unidad máxima de transmisión) y se ha implementado soporte para tramas jumbo.
- Se han ampliado las capacidades de gestión de la aceleración de hardware para el cálculo de las sumas de verificación de los paquetes enviados.
- Se ha añadido la función ff_zc_recv() para recibir datos sin almacenamiento intermedio (zero-copy). Se ha rediseñado la función similar ff_zc_send() para el envío. Está optimizada y se ha ampliado. soporte para IPv6 la función ff_rss_check().
- Se ha añadido la opción FF_KERNEL_COEXIST para operar junto con la pila de red del núcleo.
- Se ha proporcionado la capacidad de guardar información sobre el tráfico en volcado pcap con precisión de nanosegundos.
- Se han añadido nuevos parámetros en config.ini: idle_loop_interval, extra_eal_args, drain_ring_size, reload_heartbeat_timeout_ms y reload_udp_idle_ms.
- En la compilación especializada de nginx se ha implementado el soporte para recargar la configuración y actualizar el archivo binario sin romper las conexiones (graceful_reload=1).
Fuente: opennet.ru
