Skip to main content
QUICK REVIEW

[论文解读] BPF for storage: an exokernel-inspired approach

Yu Jian Wu, Hongyi Wang|arXiv (Cornell University)|Feb 25, 2021
Advanced Data Storage Technologies参考文献 20被引用 4
一句话总结

本文提出使用 eBPF 通过在内核 I/O 栈深处注入用户自定义函数来加速存储 I/O,绕过文件系统和块层以降低延迟并提高 IOPS。通过启用基于 BPF 的磁盘数据结构(如 B-树)遍历,该方法在 NVMe 设备上实现了超过 2.5 倍的 IOPS 提升和 50% 的延迟降低,同时通过类 exokernel 的机制保持了文件系统的安全性。

ABSTRACT

The overhead of the kernel storage path accounts for half of the access latency for new NVMe storage devices. We explore using BPF to reduce this overhead, by injecting user-defined functions deep in the kernel's I/O processing stack. When issuing a series of dependent I/O requests, this approach can increase IOPS by over 2.5$ imes$ and cut latency by half, by bypassing kernel layers and avoiding user-kernel boundary crossings. However, we must avoid losing important properties when bypassing the file system and block layer such as the safety guarantees of the file system and translation between physical blocks addresses and file offsets. We sketch potential solutions to these problems, inspired by exokernel file systems from the late 90s, whose time, we believe, has finally come!

研究动机与目标

  • 减少存储栈中内核的软件开销,该开销在现代 NVMe 设备上占 I/O 延迟的约 50%。
  • 通过 eBPF 实现无需内核修改或应用层重写的应用特定低层 I/O 处理。
  • 在绕过传统内核层的同时,保持文件系统安全性和访问控制保证。
  • 为依赖操作(如索引遍历)提供高效、高吞吐量的 I/O 链接支持。
  • 在不依赖传统内核调度机制的前提下,确保基于 BPF 的存储操作具有并发性和公平性。

提出的方法

  • 在内核 I/O 路径深处注入 eBPF 程序,直接在内核中处理 I/O 请求,避免用户态-内核态切换。
  • 使用 BPF 通过在不返回用户空间的情况下链接多个 I/O 操作,遍历磁盘上的数据结构(例如 B-树、LSM 树)。
  • 在 NVMe 层引入钩子,当文件系统数据块被释放时跟踪并使 BPF 发出的 I/O 失效,以确保一致性。
  • 在 NVMe 层实现每个进程的计数器,以限制链接 I/O 的提交数量,防止无限循环或资源耗尽。
  • 借鉴 exokernel 原理,允许用户自定义理解文件系统元数据,同时保持隔离性和安全性。
  • 设计一种缓存模型,使 BPF 函数返回应用层对象而非页,与现代应用层缓存管理对齐。

实验结果

研究问题

  • RQ1如何使用 eBPF 在不牺牲安全性或可移植性的情况下,减少快速存储栈中的内核 I/O 开销?
  • RQ2当绕过文件系统和块层时,需要何种机制来强制实施文件系统访问控制和数据完整性?
  • RQ3如何使基于 BPF 的 I/O 链接在状态化、依赖性操作(如索引遍历)中既安全又高效?
  • RQ4何种机制可确保在并发 BPF 基础 I/O 工作负载中实现公平性并防止资源耗尽?
  • RQ5基于 BPF 的存储操作如何与现有的 Linux 文件系统和 I/O 调度策略互操作?

主要发现

  • 基于 BPF 的 I/O 链接将 I/O 延迟降低 50%,在现代 NVMe 存储设备上将 IOPS 提升超过 2.5 倍。
  • 通过消除用户态-内核态切换并绕过文件系统和块层,该方法实现了显著的性能提升。
  • 在 NVMe 层的钩子机制可在文件数据块被释放时使 BPF 发出的 I/O 失效,以极低开销保持一致性。
  • 每个进程的 I/O 链计数器可防止无限制的 I/O 循环,并在多进程环境中支持公平性。
  • 该设计支持对不可变数据结构(如 LSM SSTable 和磁盘上的 B-树)的只读 BPF 遍历,这些结构在现代存储系统中很常见。
  • 该方法与应用层缓存集成良好,避免干扰内核缓冲区缓存,从而实现高效、细粒度的对象级数据管理。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。