HeadlinesBriefing favicon HeadlinesBriefing.com

Redução de 90% do custo de CPU do eBPF com memoização

Hacker News •
×

Meu irmão e eu gastamos muito tempo projetando nosso agente de segurança eBPF para ser realmente rápido desde o início, mas recentemente descobrimos que poderíamos torná-lo muito mais rápido usando memoização! Há algumas semanas, fiz um perfil do código eBPF e descobri que a parte mais cara da proteção não é realmente aplicar uma política, mas descobrir qual política se aplica a uma determinada abertura de arquivo.

Nossas políticas são baseadas em caminho, então nosso eBPF usa um gancho LSM que é acionado na abertura de arquivos. Então reconstruímos o caminho, subimos pelos dentries pais e verificamos se o arquivo ou algum diretório ancestral tem uma política correspondente. Embora funcione, não é performático, e acabamos repetindo grande parte do trabalho para arquivos que já vimos.

Nossa solução foi armazenar em cache qual política se aplica a cada inode usando uma chave de três campos: ID do namespace de montagem, ID de montagem e número de inode. O valor do cache armazena um access_index e o estado do cache. Essa abordagem de cache reduziu nosso custo de CPU do kernel em cerca de 90%. Usamos um mapa de hash LRU com 10000 entradas máximas para pesquisas eficientes.

O cache evita caminhadas de caminho redundantes para acessos de arquivos repetidos, o que é especialmente benéfico para cargas de trabalho de banco de dados como Postgres que frequentemente reacessam os mesmos caminhos de arquivo. Nossa implementação de código aberto está disponível em https://github.com/bomfather/agent.

Entidades-chave: Pessoas: bomfather