• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ShadowPower
V2EX  ›  程序员

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

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

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

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


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

    (code=139, signal=null).
    Most recent error: None, 改完之后 codex 打不开了
    Srar
    Srar
    Apr 23
    31
    @INCerry 读出来内容可能和实际文件内容不一样,并且没有任何报错。
    wkla
    wkla
    Apr 23
    32
    @Srar 这个很恐怖啊
    jackmod
    jackmod
    Apr 23
    33
    win 环境的工程文件都放在 refs ( dev drive )里,比 ntfs 稍微好点
    paranoiagu
    paranoiagu
    Apr 23 via Android
    34
    悠着点🤦‍♂️
    MotherShip
    35
    踩了个大坑,这玩意挂载的 Windows 磁盘,owner 是读取的挂载选项,而不是实际文件的元数据,导致我数据卷放在 Windows 侧的 MySQL 容器挂了。agent 给我的选项是:1. 按容器内的 uid 再加一个挂载点,2. 回到 9p ,3. 把数据放 vhdx 里。哎
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1296 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 75ms · UTC 20:35 · PVG 04:35 · LAX 12:35 · JFK 15:35
    ♥ Do have faith in what you're doing.