HeadlinesBriefing favicon HeadlinesBriefing.com

通过记忆化将eBPF CPU成本降低90%

Hacker News •
×

我和我的兄弟花了很多时间从底层开始设计我们的eBPF安全代理,使其非常快速,但最近我们发现我们可以使用记忆化使其更快!几周前,我对eBPF代码进行了性能分析,发现保护中最昂贵的部分实际上不是执行策略,而是确定哪个策略适用于给定的文件打开。

我们的策略是基于路径的,因此我们的eBPF利用了触发文件打开的LSM钩子。然后我们重建路径,向上遍历父目录项,并检查文件或任何祖先目录是否有匹配的策略。虽然这可行,但性能不佳,我们最终会为我们已经看到的文件重复大部分工作。

我们的解决方案是使用三字段键缓存每个inode适用的策略:挂载命名空间ID、挂载ID和inode号。缓存值存储一个access_index和缓存状态。这种缓存方法将我们的内核CPU成本降低了约90%。我们使用一个最大条目数为10000的LRU哈希映射来实现高效查找。

该缓存防止了对重复文件访问的冗余路径遍历,这对于经常重新访问相同文件路径的数据库工作负载(如Postgres)特别有益。我们的开源实现可在https://github.com/bomfather/agent获取。

关键实体:人物:bomfather