LWN:对EROFS的介绍!
关注了就能看到更多这么棒的文章哦~
An introduction to EROFS
By Jake Edge
June 7, 2023
LSFMM+BPF
DeepL assisted translation
https://lwn.net/Articles/934047/
Gao Xiang 在 2023 年 Linux 存储、文件系统、内存管理和 BPF 峰会的文件系统会议上对扩展只读文件系统 (EROFS, Extended Read-Only File System)进行了介绍。EROFS 于 2019 年被添加到 Linux 5.4 中,并且被越来越不局限于其原始目标场景(作为 Android 和嵌入式设备的文件系统)。例如,如今基于 EROFS 的容器映像(container image)有了许多应用。
不幸的是,这次会议对我来说很难理解,因此下面的报告会显得比较零碎和不完整的。有一个会话的 YouTube 视频 (https://www.youtube.com/watch?v=bQ1GT2U4GnU),但音频音量太小,尽管也许不久之后就会得到解决。会议中的幻灯片在这里 https://docs.google.com/presentation/d/16LwD-F0IKy8okkC8qB94v2YgDcWBBE26rmMn_s1Mqxc 。
EROFS 是一个基于 block 的只读文件系统,格式“非常简单”,Xiang 开始说。早期的只读文件系统有很多限制,例如不支持压缩,这是他们要开发 EROFS 的部分原因。EROFS 存储其数据时是按 block 对齐的(block-aligned),这非常适合 page cache 相关的优化,这种对齐方式还可以直接使用 direct I/O 和 DAX 文件系统来进行数据访问。
[Gao Xiang]
SquashFS 是另一个知名的只读文件系统,但它不会以 block-aligned 的方式存储其压缩数据,这会增加 I/O 开销。EROFS 会将数据压缩到文件系统中的固定 4KB block 中,而 SquashFS 中固定大小的 block 是按照未压缩的数据 size。此外还有一点与 EROFS 不同,SquashFS 不允许在其目录中进行随机访问;这意味着 SquashFS 需要对目录中的项目进行线性搜索(linear search)。
用文件系统替换 tar 或 cpio 存档,也是 EROFS 的一个潜在用例。confidential-computing 社区提出了一个内核 tarfs 文件系统的建议,这就允许 guest 虚拟机直接挂载 tar 文件来使用了。但 EROFS 将是一个更好的选择,他说。有一个概念验证性质的 patch set,允许使用 EROFS 直接 mount 人们下载的 tar 文件,这比将压缩包解压缩到 ext4 文件系统中再使用 overlayfs 将其 mount 到 guest 机中要好。
这种方法仍然存在问题,比如使用相同 tar 文件的 guest 之间不能进行 page cache 级别的共享。Aleksa Sarai 同意这存在问题,但认为只要不用 tar 存档文件来作为底层格式就可以更加容易地 fix 这个问题,以及一系列的其他问题。他还说,EROFS 方法比现在的方案要好,但他认为还是需要把容器映像中的 tar 格式替换掉。
目前有很多努力来优化 image 的 layout,而这些努力仅仅是因为需要使用 tar 格式。“在我看来,这根本不合理,” Sarai 说。社区需要停止花费如此多的精力来解决 tar 格式带来的限制。系统上的 guest 中可能有 500 个 Bash 实例,但它们不能以基于 tar 的格式共享相同的 inode,因此它们被视为不同的文件。但是 tar 格式还是继续需要得到支持,Xiang 说,所以需要一个兼容的解决方案。
他继续介绍了 EROFS 的功能,包括对文件数据进行 block based 的删除重复数据的能力。典型的用例是那些将 EROFS 与 Nydlus 一起使用的系统。EROFS 可以选择使用 LZ4/LZMA 来对文件级别进行压缩,但使用较小的压缩块大小,从而减少 SquashFS 发生的内存放大(memory amplification)问题。数据也可以就地解压缩以减少额外的复制。
EROFS 的最新使用场景有三种基本形式。第一个是 EROFS full image,它们以压缩形式使用,以牺牲某些性能为代价来节省空间,或者未压缩并在具有 DAX 或 FS cache 的 guest 之间共享。第二种是 metadata-only 的 EROFS 图像,其中的文件数据放在别的地方,例如 tar 存档或其他二进制格式。第三种是将 EROFS 与 overlayfs 配合使用,如之前讲到的 composefs 中所说的。
使用 EROFS 可能会提高机器学习数据集的性能,Gao 说。这些数据集通常在单个目录中有数百万个小文件。训练过程需要读取整个目录并从列表中随机选择文件。由于布局很紧凑,EROFS 在这些类型的操作中可能比 ext4 快两倍。
会议结束时讨论了如何使用 clone-file-range ioctl() 操作对文件进行 overlayfs 的 copy_up 操作。访问底层文件进行写入时执行 copy_up,文件在修改之前会被复制到更高层。如果这些层是来自同一文件系统的 loopback-mount 方式挂载的文件,则可以进行 cpy-on-write 操作。Amir Goldstein 似乎认为这样做是很可行的,并且会很有用,但要实现这一目标还需要做工作。
全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。
长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~