4 个版本
0.1.0-alpha.4 | 2020 年 12 月 17 日 |
---|---|
0.1.0-alpha.3 | 2020 年 12 月 16 日 |
0.1.0-alpha.1 | 2020 年 12 月 15 日 |
#1636 在 文件系统
20KB
465 行
userland-io
动机
在 Linux 内核中开发虚拟块设备是一项艰巨的任务。你必须不仅理解设备管理器框架,还要理解其周围的子系统。用 C 语言编写复杂的代码将花费大量时间,而且生成的代码通常难以维护。我怎么会知道这一点呢?因为我已经实现了 dm-writeboost。
当我遇到 Rust 语言时,我很快就爱上了这门美丽的语言,并开始思考用这种语言编写虚拟块设备会多么美好。与 C 语言相比,使用 Rust 进行并发编程并非难事,而 C 语言则像地狱一样。
fuse-rs 是这样一个文件系统层的框架,但对于块层却没有任何东西。这就是我为什么要开始这个项目。
架构
客户端 IO 来自 NBD。TCP 连接被分割成读半部和写半部,因此读取和写入可以同时执行。NBD 请求被解释并转换为通用请求。
图的右边是通用存储层。通用请求从传输队列中传递。执行器将其异步发送到存储引擎,因此所有请求都并发处理。
未来工作
- 我想在 Windows 和 Mac 上有一个工作的传输会很好。
- 一个新的目标 dm-user 已被 提出 到上游。dm-user 是一个 DM 目标,用于将内核 bio 代理到用户空间,就像 FUSE 一样。这将比 NBD 提供更好的性能,因为不涉及 TCP 通信。如果 dm-user 被合并,我将实现一个新的传输,其中 IO 来自 dm-user。
依赖关系
~7MB
~114K SLoC