文章摘要
WSL 2通过为每个virtio设备分配独立DMA池,解决了virtiofs路径上的主要性能瓶颈,显著提升了Windows与Linux系统间的文件访问速度。这是继WSL 1的DrvFs和Plan 9之后,跨系统文件访问性能的又一次重要改进。
文章总结
标题:WSL 2实现更快的Windows文件系统访问
主要内容: 1. 性能提升 - WSL 2通过为每个virtio设备分配独立DMA池(PR #40654),消除了virtiofs路径上的最后一个主要竞争点 - 该优化需要Microsoft.WSL.Kernel 6.18.26.3-1及以上版本内核支持
- 技术演进历程
- WSL 1(2016):通过DrvFs直接访问NTFS,文件操作性能优异
- WSL 2(2019):采用Hyper-V轻量级VM方案,通过Plan 9(9P)协议实现跨系统文件访问
- 2021年:引入实验性virtiofs方案,通过共享内存减少序列化开销
- 技术细节
- 原方案:所有virtio设备共享单一SWIOTLB缓冲池(4GB DMA边界下的保留内存区域)
- 新方案:内核启动时分配连续物理内存,通过sysfs暴露地址,为每个设备创建独立缓冲池
- 实际应用建议
- 在.wslconfig中设置virtiofs=true
- 通过wsl.exe --update更新到最新内核
- 保持WSL 2会话内存大于1GB(SWIOTLB池需至少64MB空间)
- 主要受益场景:Windows驱动器存储但需在Linux构建的项目(如C:\Users\code下的cargo/npm/mvn操作)
- 当前状态
- 默认仍使用基于Hyper-V套接字的Plan 9协议
- virtiofs仍为可选功能
- 开发工作持续在github.com/microsoft/WSL公开进行
(注:已移除技术细节中的部分协议说明和PR引用等次要信息,保留核心演进脉络和实用建议)
评论总结
以下是评论内容的总结,按主要观点分类:
性能改进期待与疑问
- 用户询问速度提升的具体数据:"I can’t find any benchmarks...anyone have a sense of the speedup?" (评论1)
- 有用户表示若改进如首次重大更新般显著,将接近原生性能:"If it is as good...it will be hard to tell from native" (评论2)
文件系统问题
- 多数用户批评WSL2文件系统性能差:"WSL singlehandedly stemmed...but WSL native filesystem performance gave devs that magical experience" (评论6)
- 解决方案建议:使用EXT4卷可提升速度:"keeping your stuff on a separate EXT4 volume...is much faster" (评论19)
WSL1与WSL2对比
- WSL1被赞性能优异:"WSL1 was really really fast!" (评论17)
- WSL2因虚拟化导致性能下降:"WSL2 came along...fs performance took a shit" (评论17)
转向Linux的趋势
- 文件性能问题促使开发者转向Linux:"Proton, Copilot...pushed people to Linux" (评论6)
- AI工具降低Linux使用门槛:"LLMs made most of the downsides...go away" (评论5)
正面评价
- 部分用户满意现有方案:"WSL is great. I like it" (评论11)
- 已观察到启动速度提升:"saw faster WSL launches straight away" (评论20)
其他技术问题
- USB设备共享问题:"incredibly janky way...share USB peripherals" (评论12)
- 跨文件系统交互困难:"too many problems interfacing across filesystems" (评论8)
关键矛盾点集中在文件系统性能差异(WSL1 vs WSL2)和由此引发的平台迁移趋势,同时存在对WSL实用价值的肯定。