关于 NTFS3 不支持 mmap rw,可行性讨论

2022-10-06 18:01:31 +08:00
 liyafe1997

蹲这个文件系统好久了,特意为了它升级的内核,因为 NTFS-3G 在一些极端情况下性能实在太差(对各种磁盘镜像,比如 VM 的镜像开启 NTFS 透明压缩,此时用 NTFS-3G 直接卡成狗),必须考虑一个内核态的 NTFS Driver 。

在此之前一直用的 Paragon 的 NTFS For Linux ,对个人用户是免费的,这似乎是 Linux 内核态 NTFS Driver 的唯一选择。这个驱动包括后来的 NTFS3 (似乎 NTFS3 就是 Paragon 把它的商业驱动开源得来的,发现各种行为和商业驱动几乎一模一样,包括 mount options )

但是这两玩意(商业驱动和 NTFS3 )一直有个问题,就是不支持对 compressed 的文件 mmap rw 操作,只能 mmap 只能以 read only 方式打开,而 NTFS-3G 是支持的。

我对 mmap 了解不多,read 好理解,用了 page fault 机制 trap 进内核然后进文件系统 driver ,load 文件到相应的 page 上,这个过程可以 trap 进 uncompress 的代码来解压。但是对于写操作,网上的资料不是很多,目前也还没有去看源码。我还不了解对 mmap 的地址写操作之后会发生什么,莫非内核里面有个什么东西来监控这个地址的更改,然后再通知文件系统 write back ?有没有朋友了解这个 mmap write 流程的可以帮补充下,感谢!

但至少,NTFS-3G 这种用户态文件系统都能支持 mmap write ,不知道 NTFS3 迟迟不支持的原因到底是啥,这里面有没有什么坑,如果想填这个坑不知难度多大。

在此先开个脑洞贴~

1684 次点击
所在节点    Linux
1 条回复
heiher
2022-10-06 21:29:59 +08:00
感觉压缩存储的文件支持 mmap write 没有太多的技术障碍吧,对于读来说 read 系统调用和 mmap 都是优先访问文件偏移对应的 page ,对于写也是一样的,压缩存储就是开销要大一点,这可能使 dirty page 的换出或释放的开销大了一些。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/884909

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX