4 个版本

0.1.0-alpha.42020 年 12 月 17 日
0.1.0-alpha.32020 年 12 月 16 日
0.1.0-alpha.12020 年 12 月 15 日

#1636文件系统

MIT 许可证

20KB
465

userland-io

Crates.io documentation MIT licensed

动机

在 Linux 内核中开发虚拟块设备是一项艰巨的任务。你必须不仅理解设备管理器框架,还要理解其周围的子系统。用 C 语言编写复杂的代码将花费大量时间,而且生成的代码通常难以维护。我怎么会知道这一点呢?因为我已经实现了 dm-writeboost

当我遇到 Rust 语言时,我很快就爱上了这门美丽的语言,并开始思考用这种语言编写虚拟块设备会多么美好。与 C 语言相比,使用 Rust 进行并发编程并非难事,而 C 语言则像地狱一样。

fuse-rs 是这样一个文件系统层的框架,但对于块层却没有任何东西。这就是我为什么要开始这个项目。

架构

客户端 IO 来自 NBD。TCP 连接被分割成读半部和写半部,因此读取和写入可以同时执行。NBD 请求被解释并转换为通用请求。

图的右边是通用存储层。通用请求从传输队列中传递。执行器将其异步发送到存储引擎,因此所有请求都并发处理。

Architecture

未来工作

  • 我想在 Windows 和 Mac 上有一个工作的传输会很好。
  • 一个新的目标 dm-user 已被 提出 到上游。dm-user 是一个 DM 目标,用于将内核 bio 代理到用户空间,就像 FUSE 一样。这将比 NBD 提供更好的性能,因为不涉及 TCP 通信。如果 dm-user 被合并,我将实现一个新的传输,其中 IO 来自 dm-user。

依赖关系

~7MB
~114K SLoC