V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
liyafe1997
V2EX  ›  Linux

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

  •  
  •   liyafe1997 · 2022-10-06 18:01:31 +08:00 · 1700 次点击
    这是一个创建于 812 天前的主题,其中的信息可能已经有所发展或是发生改变。

    蹲这个文件系统好久了,特意为了它升级的内核,因为 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 迟迟不支持的原因到底是啥,这里面有没有什么坑,如果想填这个坑不知难度多大。

    在此先开个脑洞贴~

    heiher
        1
    heiher  
       2022-10-06 21:29:59 +08:00 via Android
    感觉压缩存储的文件支持 mmap write 没有太多的技术障碍吧,对于读来说 read 系统调用和 mmap 都是优先访问文件偏移对应的 page ,对于写也是一样的,压缩存储就是开销要大一点,这可能使 dirty page 的换出或释放的开销大了一些。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4531 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 05:36 · PVG 13:36 · LAX 21:36 · JFK 00:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.