融合文件系统

本方向将研究将 ZenFS 与其他支持 ZNS 的文件系统进行融合,从而扩展其灵活性并提升更多使用场景下的性能。

预期实现

当前 ZenFS 通过在超级块中记录 aux_path 来添加辅助文件系统,用于存储 Lock 文件和 Log(运行日志)文件。

如果能够同时管理 ZenFS 和辅助文件系统,可以让 ZNS 的应用场景更加广泛,也可以适当提高性能。

实现 Zone 的统一分配

在 Btrfs 和 f2fs 对 Zoned Namespace Devices 的适配中,有各自的 Zone 分配逻辑;而 ZenFS 也有自身的 Zone 分配逻辑。通过在 ZNS 上结合通用文件系统与 ZenFS,可以实现在同一个 ZNS 上两种文件系统的动态容量和负载分配。

例如,当文件系统检测到一个路径下有较大的随机写入时,可以将这个目录划分给 ZenFS 进行管理,一个统一的 Zone 管理器将一些 Zones 分配给 ZenFS。当 ZenFS 写入到一定数量的时候,可以向 Zones 的管理程序申请更多的 Zones 用于数据写入。同样的,当 ZenFS 完成垃圾回收,可以将部分空余 Zones 释放出来,并交还给 Zones 管理程序。

通过动态地分配 Zones,可以提高多文件系统融合情况下的空间利用情况,从而提高系统的灵活性。

为了实现 Zone 的统一分配,大致有两种实现方式:

  1. 通过 ZoneFS 和 POSIX 文件接口来管理 Zone 的分配。

    此时,Zone 管理程序、ZenFS、辅助文件系统三者比较独立,Zone 的分配和归还可能需要使用 RPC 实现。

    具体而言,需要在系统中首先启动一个 Zone 的管理程序作为 RPC 服务器,ZenFS 和 辅助文件系统在需要分配和归还 Zones 的时候通过 RPC 获取或者传递目标 Zone 的文件描述符。

  2. 将 ZenFS 独立实现一个 POSIX 接口,并将 Zone 分配逻辑、ZenFS、辅助文件系统一同编译,合成为一个独立的文件系统。

    此时 ZenFS 类似于辅助文件系统的一个加速区域,能够更加智能自动地完成数据库等负载任务……吗

为了实现 Zone 的统一分配,需要修改辅助文件系统的分配逻辑。如果通过 ZoneFS 来支持,还需要其支持 ZoneFS 作为数据后端。

文件系统级「RAID」

有可能可以在 ZenFS、辅助文件系统中实现类似 RAID 的逻辑,通过文件或数据区块的冗余来提高容错。

文件系统级读写分离优化

ZenFS 适合于随机写入,但是不适合随机/顺序读取;辅助文件系统上随机写入性能不如 ZenFS,但是读性能往往高于 ZenFS。如果一个数据区域成为读写热点,那么可以在负载程度不高的情况下将数据拷贝一份到辅助文件系统,用于优化读性能。