V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ShadowPower
V2EX  ›  程序员

刚发现 WSL2 可以通过 virtiofs 访问 NTFS 分区, IO 速度明显提升

  •  3
     
  •   ShadowPower · Apr 22 · 4121 views
    虽然任何文档里都没有相关说明,但是根据 changelog 和代码提交记录,可以得知这个功能以及具体的开关。开启方法:

    1. 升级到 Pre Release 版本:
    wsl --update --pre-release

    2. 改 .wslconfig:
    [wsl2]
    virtiofs=true

    3. 重启 WSL:
    wsl --shutdown

    然后就好了

    验证是否生效,在 WSL 里执行:
    findmnt -T /mnt/c -o TARGET,SOURCE,FSTYPE,OPTIONS

    如果 FSTYPE 的值为 virtiofs ,说明生效了


    更完整的配置是:
    [wsl2]
    virtio=true
    virtiofs=true
    hostFileSystemAccess=true

    如果有手动配置成 false 的配置项,可以改成 true



    我今天都在用这个版本跑 AI Agent 改 NTFS 目录下的代码。原先有个项目跑单元测试要 3 分半,现在只要 1 分钟了
    Supplement 1  ·  Apr 23
    我实际测试了一下性能,结果如下:
    ext4 vhdx:
    1) 大文件顺序吞吐
    顺序写入 : 1780.9 MiB/s | 1781 IOPS | 平均时延 8.96 ms
    顺序读取 : 2240.7 MiB/s | 2241 IOPS | 平均时延 7.08 ms

    2) 4K 随机 I/O
    读写比例 : 70% read / 30% write
    随机读取 : 131.9 MiB/s | 33759 IOPS | 平均时延 696.17 us
    随机写入 : 56.6 MiB/s | 14488 IOPS | 平均时延 583.29 us

    3) 目录访问时延
    ioping : min/avg/max/mdev = 542.8 us / 1.87 ms / 4.76 ms / 1.22 ms

    9p:
    1) 大文件顺序吞吐
    顺序写入 : 117.9 MiB/s | 118 IOPS | 平均时延 134.74 ms
    顺序读取 : 141.0 MiB/s | 141 IOPS | 平均时延 112.49 ms

    2) 4K 随机 I/O
    读写比例 : 70% read / 30% write
    随机读取 : 12.2 MiB/s | 3131 IOPS | 平均时延 7.15 ms
    随机写入 : 5.2 MiB/s | 1339 IOPS | 平均时延 7.15 ms

    3) 目录访问时延
    ioping : min/avg/max/mdev = 289.8 us / 336.5 us / 389.6 us / 29.4 us

    virtiofs:
    1) 大文件顺序吞吐
    顺序写入 : 214.1 MiB/s | 214 IOPS | 平均时延 74.15 ms
    顺序读取 : 239.9 MiB/s | 240 IOPS | 平均时延 66.29 ms

    2) 4K 随机 I/O
    读写比例 : 70% read / 30% write
    随机读取 : 146.9 MiB/s | 37595 IOPS | 平均时延 599.21 us
    随机写入 : 63.1 MiB/s | 16149 IOPS | 平均时延 583.33 us

    3) 目录访问时延
    ioping : min/avg/max/mdev = 208.5 us / 239.3 us / 281.8 us / 24.5 us


    结论是:
    顺序读写只比 9p 快一倍
    但是 4K 随机读写比 ext4 vhdx 还要快
    这意味着对于代码编译、构建的场景提升显著,而对于大量日志读写、AI 模型加载的性能提升一般
    34 replies    2026-04-23 22:57:53 +08:00
    loading
        1
    loading  
       Apr 22 via Android
    突然想到,如果 windows 开个服务,然后走网络呢…
    zhengfan2016
        2
    zhengfan2016  
       Apr 22
    那是不是以后不需要把代码文件移到 wsl 内部了,这个好哇
    YanSeven
        3
    YanSeven  
       Apr 22
    @zhengfan2016 我之前都是一个软链接链进去。
    familiar
        4
    familiar  
       Apr 22
    想起来前面微软说的今年要提升 wsl 的提升跨系统文件读写速度,优化网络等。不知道这个 virtiofs 配置是不是这个计划里面的
    MuyuQ
        5
    MuyuQ  
       Apr 22
    @familiar 2026 年 3 月底 WSL 2.7.1 预发布版( Pre-release )正式带了大量 virtiofs 改进(包括 statx 支持、目录挂载、权限修复等),4 月份社区讨论和实际使用明显增多。 还真是微软的承诺兑现。
    iorilu
        6
    iorilu  
       Apr 22
    不错阿, 好东西还藏着, 为什么不公开
    loading
        7
    loading  
       Apr 22 via Android
    @iorilu Pre Release 版本
    gibber
        8
    gibber  
       Apr 22
    windows10 是不是更新不了这个版本
    Ipsum
        9
    Ipsum  
       Apr 22 via Android
    以前用 windows 开发的诟病终于修了?可惜,现在主用 mac OS 了。
    COOOOOOde
        10
    COOOOOOde  
       Apr 23
    来晚了, 25 年已把开发机改成 macos 了, 现在只用 win 娱乐
    yulon
        11
    yulon  
       Apr 23
    @iorilu 就怕刚公开就停止维护了(
    andyangyu
        12
    andyangyu  
       Apr 23
    我改了之后没有效果,进入一个代码目录都要卡几十秒钟
    Srar
        13
    Srar  
       Apr 23
    开启选项后遇到读取文件会有静默错误
    INCerry
        14
    INCerry  
       Apr 23
    @Srar 具体会是什么样的问题?
    scegg
        15
    scegg  
       Apr 23
    好像有个问题,当外部文件发生变化时,linux 内收不到变更通知。inotify 没打通。
    Hephaistos
        16
    Hephaistos  
       Apr 23
    额,别在工作机上用 Pre Release ,release 之前特性都可能删的
    javalaw2010
        17
    javalaw2010  
       Apr 23
    虽然但是,ntfs 和 ext4 文件系统不一致还是有可能导致问题的,ntfs 默认大小写不敏感,虽然有办法开启大小写敏感,但是我想大部分人创建项目的时候应该不会记得这个步骤。。。但至少是迈出了这一步吧
    WispZhan
        18
    WispZhan  
       Apr 23
    Linux 最新内核对 NTFS 的支持也提升了。 以后只会更好。

    https://www.phoronix.com/news/Linux-7.1-New-NTFS-Driver
    artiga033
        19
    artiga033  
       Apr 23 via Android
    看起来不错,但是我已经没有跨文件系统大量随机读写的需求了。需要在 win 侧跑的代码都是和 Windows 强相关的,linux 下也跑不了;别的代码全放 wsl 侧也挺好,毕竟某些语言天生就看不起 Windows 呢(
    paranoiagu
        20
    paranoiagu  
       Apr 23
    这么操作一下,原来的数据还在的吧。
    ShadowPower
        21
    ShadowPower  
    OP
       Apr 23
    @paranoiagu 都在,能正常使用
    paranoiagu
        22
    paranoiagu  
       Apr 23
    @ShadowPower 谢谢。那我也来搞一下
    paranoiagu
        23
    paranoiagu  
       Apr 23
    你们都文档吗?我刚试了一下。想把虚拟硬盘的数据 mv 到物理硬盘,结果一顿报错。移回来,更加报错。

    移过去: [磁盘空间肯定有的]
    mv: error writing 'xxxxxxxxxxxxxxxxxxx': No space left on device


    移回来:
    mv: error writing 'xxxxxxxxxxxxxx': Bad address
    INCerry
        24
    INCerry  
       Apr 23
    开启后我遇到了一个问题,会导致虚拟机 hang 死无法结束进程,只能重启。
    ssshn115
        25
    ssshn115  
       Apr 23
    已升级还没测试。
    发现个问题,原本在 wsl2 运行的容器挂载的是 windows 目录,现在无法启动了,已经把挂载目录迁移到 wsl 内部了。
    Jack66
        26
    Jack66  
       Apr 23
    我也明显感受快,虽然没测,代码都在 wsl
    guoxu1231
        27
    guoxu1231  
       Apr 23
    要我说就别折腾 windows 相关开发环境了, 全部 wsl2 或者 macos
    stimw
        28
    stimw  
       Apr 23
    做渲染相关的梭哈 wsl 肯定是不方便的,只能虚拟机。
    fcymk2
        29
    fcymk2  
       Apr 23
    还是比开个 samba 的慢
    m290236573
        30
    m290236573  
       Apr 23
    Codex crashed with the following error:

    (code=139, signal=null).
    Most recent error: None, 改完之后 codex 打不开了
    Srar
        31
    Srar  
       Apr 23
    @INCerry 读出来内容可能和实际文件内容不一样,并且没有任何报错。
    wkla
        32
    wkla  
       Apr 23
    @Srar 这个很恐怖啊
    jackmod
        33
    jackmod  
       Apr 23
    win 环境的工程文件都放在 refs ( dev drive )里,比 ntfs 稍微好点
    paranoiagu
        34
    paranoiagu  
       Apr 23 via Android
    悠着点🤦‍♂️
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1263 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 114ms · UTC 16:50 · PVG 00:50 · LAX 09:50 · JFK 12:50
    ♥ Do have faith in what you're doing.