eBPF: La próxima generación de Linux

Según los expertos, eBPF es una tecnología revolucionaria. Para ellos, es la próxima generación de Linux debido a todas las capacidades que ofrece a los desarrolladores. Pero, ¿cuáles son estas capacidades? ¿Cómo puede eBPF ayudar a resolver los problemas del día a día?

¿Qué es eBPF?

Para entender qué es y cómo funciona, primero debemos revisar los orígenes de esta tecnología. 

Orígenes de eBPF

Es posible que el concepto de BPF (Berkeley Packet Filter) ya te sea familiar. Lanzado en 1992 y desarrollado por Steven McCanne y Van Jacobson, “BPF se originó como una tecnología para optimizar los filtros de paquetes. Si ejecutas tcpdump con una expresión (con coincidencia en un host o puerto), se compila en un bytecode BPF óptimo que es ejecutado por una máquina virtual en una sandbox en el kernel”, como explica Brendan Gregg en este post. En otro texto, Gregg también señala la mejora del rastreo de Linux (Linux tracing) a través de los años. Sin embargo, en su experiencia, se había enfrentado a algunas limitaciones usando BPF y kernels.

Trabajando alrededor de estas limitaciones, Alexei Starovoitov propuso inicialmente una reescritura. Luego, desarrolló eBPF, o extended Berkeley Packet Filter, con Daniel Borkmann en 2014. 

Una forma de mejorar y ampliar el BPF

Hoy en día, sus desarrolladores presentan eBPF como “una tecnología revolucionaria con orígenes en el kernel de Linux que puede ejecutar programas en modo sandbox en un kernel del sistema operativo. Se puede utilizar para ampliar, de forma segura y eficiente, las capacidades del kernel sin necesidad de cambiar el código fuente del mismo o cargar módulos del kernel”. Esto permite la posibilidad de “ejecutarse en eventos que no sean paquetes, así como de realizar acciones que no sean de filtrado”, como comenta Gregg. 

Al utilizar eBPF es viable introducir nuevas soluciones relacionadas con la gestión de SDN; la mitigación de DDoS y la detección de intrusos a través de la caída (drop) temprana de paquetes; mejoras en el desempeño de la red, el equilibrio de carga, la observabilidad, y más.

Descripción general de eBFP. Fuente

¿Cómo funciona eBPF?

Como señala el libro BPF Performance Tools, editado por OReilly, eBFP “es una tecnología flexible y eficiente compuesta por un conjunto de instrucciones, objetos de almacenamiento y funciones auxiliares. Se puede considerar una máquina virtual debido a su especificación de conjunto de instrucciones virtuales. Estas instrucciones son ejecutadas por un runtime BPF [refiriéndose a eBPF] del kernel de Linux, que incluye un intérprete y un compilador JIT para convertir instrucciones BPF en instrucciones nativas para su ejecución. Las instrucciones de BPF primero deben pasar a través de un verificador que garantice la seguridad, y debe velar porque el programa BPF no se bloquee o corrompa el kernel (sin embargo, no impide que el usuario final escriba programas sin lógica que pueden ejecutarse, pero que no tienen sentido).”

Una explicación gráfica del funcionamiento de eBPF. Fuente

Conceptos básicos de eBPF

Programas eBPF

Para funcionar, los programas deben ser compatibles con eBPF. A continuación, algunas consideraciones para este tipo de programas:

  • Deben ser basados en eventos.
  • Se ejecutan cuando el kernel o una aplicación pasa un hook point.
  • Los hooks predefinidos incluyen llamadas al sistema, entrada/salida de funciones, puntos de rastreo del kernel, eventos de red, entre otros.
  • Si no existe un hook predefinido para una necesidad particular, es posible crear un kernel probe (kprobe) o un user probe (uprobe) para adjuntar programas eBPF casi en cualquier lugar del kernel o de las aplicaciones de usuario.
  • Es posible escribirlos indirectamente (a través de proyectos como Cilium, bcc o bpftrace que proporcionan una abstracción por encima de eBPF) o directamente (cuando no existe una abstracción de nivel superior).

Otros conceptos básicos

  • Loader & Verification Architecture: el programa pasa por verificación y compilación JIT antes de adjuntarse al hook solicitado.
  • Maps: la documentación indica que “los programas eBPF pueden aprovechar el concepto de mapas para almacenar y recuperar datos en un amplio conjunto de estructuras de datos”. 
  • Helper calls: las llamadas a funciones se pueden convertir en funciones auxiliares para evitar llamar a funciones arbitrarias del kernel.
  • Tail and function calls: pueden llamar y ejecutar otro programa eBPF y reemplazar el contexto de ejecución.

Toolchains de desarrollo

Las toolchains ayudan en el desarrollo y la gestión de programas eBPF. Algunos de los más extendidos y utilizados son:

  • BCC: un framework para escribir programas python con programas eBPF incrustados dentro de ellos. 
  • bpftrace: es un lenguaje de rastreo de alto nivel para Linux eBPF.
  • eBPF Go Library: para desacoplar el proceso de acceso al bytecode eBPF y la carga y gestión de programas eBPF.
  • libbpf C/C++ Library: para desacoplar la carga de archivos de objetos eBPF generados desde el compilador clang/LLVM en el kernel.

Seguridad

Cualquier error en la implementación afecta a componentes vitales de la infraestructura del software. Además, la naturaleza de código abierto de esta tecnología puede generar algún impacto en el sistema. Es por ello que la seguridad es clave para garantizar el éxito. Sobre este punto, eBPF ofrece seguridad de múltiples capas que incluye: privilegios requeridos, verificador, proceso de hardening y abstracciones del contexto del runtime.

¿Por qué usar eBPF?

  • Programabilidad: permite “agregar analizadores de protocolos (parsers) adicionales y programar fácilmente cualquier lógica de reenvío para cumplir con requisitos que pueden cambiar”, según los creadores.
  • Redes: la programabilidad facilita la creación de soluciones de red para cualquier tipo de proyecto, lo que incluye el procesamiento de paquetes.
  • Rastreo y creación de perfiles: al adjuntar programas a los puntos de rastreo, así como a los puntos de probing de kernel y de aplicaciones de usuario, es posible obtener visibilidad y generar insights.
  • Observabilidad y monitoreo: métricas, histogramas, eventos… Los datos provienen de diferentes fuentes, lo que genera una mayor visibilidad. 
  • Seguridad: la capacidad de ver las operaciones de la red facilita la detección de problemas y aumenta el control, al usar el filtrado de llamadas del sistema, el filtrado a nivel de red y el seguimiento del contexto del proceso.

La fundación BPF

El número, así como la diversidad, de implementaciones y de casos de uso para eBFP ha aumentado sustancialmente desde su lanzamiento. Es una buena señal, ya que actualmente está ayudando a crear soluciones en la vida real. Sin embargo, la documentación de los proyectos no siempre es la mejor, con información esparcida entre diferentes fuentes y plataformas. Además, no hay parámetros estandarizados. Como Alexei Starovoitov comentó en el séptimo aniversario de eBFP, esto “lleva a una experiencia de usuario confusa. Las implementaciones de BPF compiten entre sí”.

En respuesta, se crearon la Fundación BPF y el Comité Directivo de BPF “para optimizar la colaboración entre proyectos y garantizar que se mantenga el núcleo de eBPF y esté equipado con una hoja de ruta clara y una visión para el futuro brillante para eBPF. Aquí es donde entra en juego la Fundación eBPF y se establece un comité directivo para ocuparse de la dirección técnica y la visión de eBPF”.

Los desarrolladores que trabajan con esta tecnología también pueden realizar sus contribuciones a través de las comunidades.

Resumen

eBPF “ha pasado de ser una curiosidad de Linux a ser una piedra angular de la forma en que se construyen muchas tecnologías, pero eso no ha ocurrido sin una buena cantidad de problemas”, refleja su creador Alexei Starovoitov. eBPF está siendo utilizado ampliamente para impulsar una amplia variedad de casos de uso. Desde la seguridad, hasta la observabilidad, el balanceo de cargas, el desarrollo de nuevas aplicaciones y mucho más. Empresas grandes y pequeñas en el mundo de la tecnología ya han incorporado eBPF como parte de su stack. Y están reportando resultados positivos.

Scroll to Top