HeadlinesBriefing favicon HeadlinesBriefing.com

eBPF-CPU-Kosten um 90% durch Memoisation senken

Hacker News •
×

Mein Bruder und ich haben viel Zeit damit verbracht, unseren eBPF-Sicherheitsagenten von Grund auf neu so schnell wie möglich zu gestalten, aber kürzlich haben wir herausgefunden, dass wir ihn durch Memoisation viel schneller machen können! Vor ein paar Wochen habe ich den eBPF-Code profiliert und festgestellt, dass der teuerste Teil des Schutzes tatsächlich nicht die Durchsetzung einer Richtlinie ist, sondern die Bestimmung, welche Richtlinie auf eine bestimmte Dateiöffnung zutrifft.

Unsere Richtlinien sind pfadbasiert, daher nutzt unser eBPF einen LSM-Hook, der bei der Dateieröffnung ausgelöst wird. Dann rekonstruieren wir den Pfad, gehen die übergeordneten Dentries hoch und prüfen, ob die Datei oder ein übergeordnetes Verzeichnis eine übereinstimmende Richtlinie hat. Obwohl dies funktioniert, ist es nicht performant, und wir wiederholen einen Großteil der Arbeit für Dateien, die wir bereits gesehen haben.

Unsere Lösung bestand darin, die für jeden inode geltende Richtlinie mithilfe eines dreifeldigen Schlüssels zu cachen: Mount-Namespace-ID, Mount-ID und Inode-Nummer. Der Cache-Wert speichert einen access_index und den Cache-Zustand. Dieser Caching-Ansatz hat unsere Kernel-CPU-Kosten um etwa 90% gesenkt. Wir verwenden eine LRU-Hash-Map mit maximal 10000 Einträgen für effiziente Suchen.

Der Cache verhindert redundante Pfaddurchläufe für wiederholte Dateizugriffe, was besonders für Datenbankworkloads wie Postgres von Vorteil ist, die häufig auf dieselben Dateipfade zugreifen. Unsere Open-Source-Implementierung ist verfügbar unter https://github.com/bomfather/agent.

Schlüsselentitäten: Personen: bomfather