Se ha presentado la primera versión de la biblioteca Aya, que permite crear controladores eBPF en el lenguaje Rust, ejecutándose dentro del núcleo de Linux en una máquina virtual especial con JIT. A diferencia de otras herramientas para desarrollar programas eBPF, Aya no utiliza libbpf ni el compilador bcc, sino que ofrece su propia implementación, escrita en Rust, que utiliza el paquete crate libc para acceder directamente a las llamadas del sistema del núcleo. No se requiere tener herramientas del lenguaje C ni archivos de encabezado del núcleo para compilar Aya. El código de la biblioteca se distribuye bajo las licencias MIT y Apache 2.0.
Principales características:
- Soporte para el formato BTF (BPF Type Format), que proporciona información sobre tipos en pseudocódigo BPF para la verificación de tipos y la coincidencia con los tipos proporcionados por el núcleo actual. La aplicación de BTF permite crear controladores eBPF universales que se pueden utilizar sin recompilación con diferentes versiones del núcleo de Linux.
- Soporte para llamadas «bpf-to-bpf», variables globales e inicializadores, lo que permite estructurar programas para eBPF de manera similar a los programas convencionales, utilizando aya como runtime, redefiniendo funciones teniendo en cuenta la operación en eBPF.
- Soporte para varios tipos de núcleo, incluyendo arreglos normales, mapas hash, pilas, colas, trazas de pila, así como estructuras para sockets y seguimiento del rendimiento.
- Posibilidad de crear varios tipos de programas eBTF, incluyendo programas para filtrado y gestión de tráfico, controladores cgroup y diversas operaciones con sockets, programas XDP.
- Soporte para plataformas de procesamiento asíncrono de solicitudes en modo no bloqueante como tokio y async-std.
- Compilación rápida, sin dependencia de la reconstrucción del núcleo y de los archivos de encabezado del núcleo.
El proyecto se considera aún experimental: la API aún no está estabilizada y sigue evolucionando. Además, aún no se han implementado todas las funcionalidades planeadas. Para finales de año, los desarrolladores esperan llevar la funcionalidad de Aya a un nivel comparable con libbpf, y en enero de 2022, formar el primer lanzamiento estable. También se planea integrar partes de Aya necesarias para escribir código en Rust para el núcleo de Linux con componentes que operan en espacio de usuario y se utilizan para cargar, adjuntar e interactuar con programas eBPF.
Recordemos que eBPF es un intérprete de bytecode integrado en el núcleo de Linux que permite crear manejadores de operaciones de red, rastrear el rendimiento del sistema, interceptar llamadas al sistema, controlar el acceso, procesar eventos con seguimiento de tiempo, contar la frecuencia y duración de las operaciones, y realizar rastreo utilizando kprobes/uprobes/tracepoints. Gracias a la utilización de la compilación JIT, el bytecode se traduce en tiempo real a instrucciones de máquina y se ejecuta con el rendimiento de código nativo. XDP proporciona herramientas para ejecutar programas BPF a nivel del controlador de red, con la posibilidad de acceso directo al búfer DMA de paquetes, lo que permite crear manejadores de alto rendimiento para operar bajo una alta carga de red.
Fuente: opennet.ru
