HeadlinesBriefing favicon HeadlinesBriefing.com

Reducción del 90% del costo de CPU de eBPF con memoización

Hacker News •
×

Mi hermano y yo pasamos mucho tiempo diseñando nuestro agente de seguridad eBPF para que fuera realmente rápido desde cero, pero recientemente descubrimos que podríamos hacerlo mucho más rápido usando memoización. Hace un par de semanas, perfilaron el código eBPF y descubrieron que la parte más costosa de la protección no es en realidad hacer cumplir una política, sino determinar qué política se aplica a una apertura de archivo dada.

Nuestras políticas son basadas en rutas, por lo que nuestro eBPF aprovecha un gancho LSM que se activa en la apertura de archivos. Luego reconstruimos la ruta, recorremos los dentries padres y verificamos si el archivo o algún directorio ancestro tiene una política coincidente. Si bien esto funciona, no es eficiente en términos de rendimiento, y terminamos repitiendo gran parte del trabajo para archivos que ya hemos visto.

Nuestra solución fue almacenar en caché qué política se aplica a cada inode usando una clave de tres campos: ID de espacio de nombres de montaje, ID de montaje y número de inode. El valor de la caché almacena un access_index y el estado de la caché. Este enfoque de almacenamiento en caché redujo nuestro costo de CPU del kernel en aproximadamente un 90%. Utilizamos un mapa hash LRU con un máximo de 10000 entradas para búsquedas eficientes.

La caché evita las caminatas de ruta redundantes para accesos de archivos repetidos, lo cual es especialmente beneficioso para cargas de trabajo de bases de datos como Postgres que reacceden con frecuencia a las mismas rutas de archivo. Nuestra implementación de código abierto está disponible en https://github.com/bomfather/agent.

Entidades clave: Personas: bomfather