HeadlinesBriefing favicon HeadlinesBriefing.com

Réduction de 90% du coût CPU eBPF grâce à la mémoïsation

Hacker News •
×

Mon frère et moi avons passé beaucoup de temps à concevoir notre agent de sécurité eBPF pour qu'il soit vraiment rapide dès le départ, mais récemment nous avons découvert que nous pouvions le rendre beaucoup plus rapide en utilisant la mémoïsation ! Il y a quelques semaines, j'ai profilé le code eBPF et découvert que la partie la plus coûteuse de la protection n'est pas en réalité d'appliquer une politique, mais de déterminer quelle politique s'applique à une ouverture de fichier donnée.

Nos politiques sont basées sur les chemins, donc notre eBPF exploite un crochet LSM qui se déclenche à l'ouverture d'un fichier. Nous reconstruisons ensuite le chemin, remontons les dents parents et vérifions si le fichier ou un répertoire ancêtre a une politique correspondante. Bien que cela fonctionne, ce n'est pas performant, et nous finissons par répéter une grande partie du travail pour les fichiers que nous avons déjà vus.

Notre solution était de mettre en cache quelle politique s'applique à chaque inode en utilisant une clé à trois champs : ID d'espace de noms de montage, ID de montage et numéro d'inode. La valeur du cache stocke un access_index et l'état du cache. Cette approche de mise en cache a réduit notre coût CPU du noyau d'environ 90%. Nous utilisons une carte de hachage LRU avec un maximum de 10000 entrées pour des recherches efficaces.

Le cache empêche les marches de chemin redondantes pour les accès aux fichiers répétés, ce qui est particulièrement bénéfique pour les charges de travail de bases de données comme Postgres qui réaccèdent fréquemment aux mêmes chemins de fichiers. Notre implémentation open source est disponible sur https://github.com/bomfather/agent.

Entités clés : Personnes : bomfather