HeadlinesBriefing favicon HeadlinesBriefing.com

Снижение затрат CPU eBPF на 90% с помощью мемоизации

Hacker News •
×

Мой брат и я потратили много времени на проектирование нашего агента безопасности eBPF, чтобы он был действительно быстрым с самого начала, но недавно мы обнаружили, что можем сделать его намного быстрее с помощью мемоизации! Несколько недель назад я профилировал код eBPF и обнаружил, что самая дорогая часть защиты на самом деле не заключается в применении политики, а в определении того, какая политика применяется к данному открытию файла.

Наши политики основаны на пути, поэтому наш eBPF использует крючок LSM, который срабатывает при открытии файла. Затем мы восстанавливаем путь, поднимаемся по родительским dentries и проверяем, имеет ли файл или любой родительский каталог соответствующую политику. Хотя это работает, это непроизводительно, и мы в итоге повторяем большую часть работы для файлов, которые мы уже видели.

Наше решение заключалось в кэшировании того, какая политика применяется к каждому inode, с использованием трехполевого ключа: ID пространства имен монтирования, ID монтирования и номер inode. Значение кэша хранит access_index и состояние кэша. Этот подход к кэшированию снизил наши затраты CPU ядра примерно на 90%. Мы используем хэш-карту LRU с максимумом 10000 записей для эффективных поисков.

Кэш предотвращает повторные обходы пути для повторных обращений к файлам, что особенно полезно для нагрузок баз данных, таких как Postgres, которые часто повторно обращаются к одним и тем же путям файлов. Наша реализация с открытым исходным кодом доступна по адресу https://github.com/bomfather/agent.

Ключевые сущности: Люди: bomfather