跳到主内容
快讯直播
AI智模界
教程

升级到 WSL3:安装、性能对比与配置调优

适用场景

这套方案适合已经在 Windows 上用 WSL2 做开发、跑 Linux 工具链、Docker、Python/CUDA 推理或训练的人。典型问题是:项目放在 /mnt/c 下编译慢,npm install、pip install、git status 卡顿,Docker 构建耗时,网络转发和内存回收不如预期。升级到 WSL3 的目标不是追新,而是用同一台 Windows 机器获得更接近原生 Linux 的 I/O、网络和进程启动体验。公开讨论中,WSL3 在部分场景相对 WSL2 有 5%–60% 的提升区间,具体取决于硬件、文件位置和负载类型;CPU 密集任务可能差异较小,I/O 和网络相关任务更容易看到变化。

> 说明:WSL3 的发布状态、版本参数、配置节名和预览通道以微软官方文档与 wsl --help 当前输出为准。如果当前系统还没有提供 WSL3,先按本文把 WSL 升级到官方最新版,等对应渠道可用后再切换;不要手动改不认识的文件或强行替换内核。

环境与前置条件

  • 操作系统:Windows 10 64 位较新版本或 Windows 11,建议保持系统更新。具体支持矩阵以官方文档为准。
  • 虚拟化:BIOS/UEFI 中开启 Intel VT-x 或 AMD-V;Windows 功能启用“适用于 Linux 的 Windows 子系统”和“虚拟机平台”。
  • 权限:安装和启用功能需要管理员 PowerShell。
  • 内存:普通开发建议 16GB 起步;跑容器、编译大型项目建议 32GB;跑本地 AI 模型按模型大小准备 32GB、64GB 或更多。
  • 显存:NVIDIA GPU 用户需要 Windows 侧安装官方驱动,WSL 内通常不要安装 Linux 显示驱动。CUDA、PyTorch 等版本组合以官方文档为准。
  • 磁盘:建议 NVMe/SSD。WSL 发行版本身预留 20GB 以上;AI 模型、数据集、Docker 镜像另算。把 WSL 的虚拟磁盘放在剩余空间充足的分区。
  • 备份:升级前导出已有发行版,避免转换失败后无法回退。

分步骤部署

第 1 步:确认 Windows、虚拟化和现有 WSL 状态

在 Windows 搜索“启用或关闭 Windows 功能”,确认已勾选“适用于 Linux 的 Windows 子系统”和“虚拟机平台”。也可以用管理员 PowerShell:

```powershell

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

```

在任务管理器“性能”页查看 CPU 虚拟化是否已启用。若显示已禁用,重启进 BIOS/UEFI 开启 Virtualization、VT-x、AMD-V 或 SVM。

查看现有发行版:

```powershell

wsl --list --verbose

wsl --status

```

成功标志:能看到发行版名称、状态和当前 WSL 版本。若命令不存在,先执行 wsl --install,再重启。

第 2 步:备份现有发行版

先建备份目录,再导出。把 <发行版名称> 换成 wsl --list --verbose 里的名字:

```powershell

New-Item -ItemType Directory -Force D:\wsl-backup

wsl --export <发行版名称> D:\wsl-backup\<发行版名称>-backup.tar

```

成功标志:D:\wsl-backup 下出现 .tar 文件,大小与发行版数据量相符。备份文件不要放在 C 盘空间紧张的位置。

第 3 步:更新 WSL 组件

管理员 PowerShell 执行:

```powershell

wsl --update

wsl --shutdown

wsl --version

```

若 WSL3 通过预览通道提供,按官方说明加入对应通道后更新;命令以官方页面为准。成功标志:wsl --version 能输出 WSL 版本、内核版本、WSLg 版本等信息,不再提示内核过旧。

第 4 步:设置默认版本并转换现有发行版

先看帮助,确认当前版本支持的版本参数:

```powershell

wsl --help

```

如果帮助中显示 WSL3 对应参数为 3,则执行:

```powershell

wsl --set-default-version 3

wsl --shutdown

wsl --set-version <发行版名称> 3

```

如果官方参数不是 3,把上面命令中的 3 换成官方给出的值。转换过程可能持续几分钟,不要中断。成功标志:命令返回转换完成或类似提示,再次执行 wsl --list --verbose,发行版 VERSION 列显示为 3。

若转换失败,优先检查 wsl --update 是否成功、Windows 是否重启过、发行版是否在支持列表。也可以用“导出再导入”的方式创建 WSL3 发行版:

```powershell

wsl --import <新发行版名称> D:\wsl\<新发行版名称> D:\wsl-backup\<发行版名称>-backup.tar --version 3

```

第 5 步:安装新发行版(可选)

列出可安装发行版:

```powershell

wsl --list --online

```

安装时替换为实际名称:

```powershell

wsl --install -d <发行版名称>

```

首次启动会要求创建 Linux 用户名和密码。成功标志:进入 Linux shell,能执行 uname -a。

第 6 步:配置 /etc/wsl.conf

在 Linux 内编辑:

```bash

sudo tee /etc/wsl.conf >/dev/null <<'EOF'

[boot]

systemd=true

[user]

default=<你的Linux用户名>

[automount]

enabled=true

options="metadata,umask=22,fmask=11"

[interop]

appendWindowsPath=false

EOF

```

systemd=true 让依赖 systemd 的服务可用;appendWindowsPath=false 能减少 PATH 扫描,提升 shell 启动和命令查找速度,但之后调用 Windows 程序需要写全路径。若需要直接调用 code、explorer.exe,可把该项改为 true 或删除。保存后:

```powershell

wsl --shutdown

wsl -d <发行版名称>

```

第 7 步:配置 .wslconfig

在 Windows 用户目录创建或编辑 C:\Users\<Windows用户名>\.wslconfig。节名以官方文档为准;若 WSL3 使用 [wsl3],就写对应节,若仍兼容 [wsl2],键名通常相同:

```ini

[wsl3]

memory=8GB

processors=4

swap=4GB

pageReporting=true

localhostForwarding=true

networkingMode=mirrored

dnsTunneling=true

firewall=true

autoProxy=true

sparseVhd=true

```

含义:限制 WSL 占用内存、CPU 核数;swap 控制交换空间;networkingMode=mirrored 可改善网络兼容性;dnsTunneling 缓解 DNS 问题;sparseVhd 让虚拟磁盘按需增长。AI 训练需要大内存时,把 memory 调高,但给 Windows 留出余量。修改后必须:

```powershell

wsl --shutdown

```

第 8 步:Linux 内核与文件系统调优

创建 sysctl 配置:

```bash

sudo tee /etc/sysctl.d/99-wsl.conf >/dev/null <<'EOF'

vm.swappiness=10

vm.max_map_count=262144

fs.inotify.max_user_watches=524288

fs.file-max=1048576

EOF

sudo sysctl --system

```

项目文件尽量放在 Linux 文件系统,例如 /home/$USER/projects,不要长期放在 /mnt/c/Users/...。跨文件系统访问适合临时取文件,不适合大规模编译、训练和容器构建。定期回收虚拟磁盘:

```bash

sudo fstrim -av

```

第 9 步:GPU 与容器配置(可选)

Windows 侧安装官方 GPU 驱动后,在 WSL 内验证:

```bash

nvidia-smi

```

成功标志:能看到 GPU 型号、驱动版本和显存信息。CUDA Toolkit、PyTorch、TensorFlow 的安装按官方说明选择匹配组合。Docker 用户可在 Docker Desktop 中启用 WSL 后端,或在 WSL 内按官方文档安装 Docker Engine。容器数据放 Linux 文件系统,通常比挂载 Windows 目录更顺。

第 10 步:跑性能基准,对比 WSL2 与 WSL3

先安装工具:

```bash

sudo apt update

sudo apt install -y sysbench fio iperf3

```

CPU:

```bash

sysbench cpu --threads=$(nproc) run

```

内存:

```bash

sysbench memory --memory-block-size=1M --memory-total-size=10G run

```

顺序写:

```bash

cd /home/$USER

dd if=/dev/zero of=./dd-test bs=1M count=4096 oflag=direct status=progress

sync

```

顺序读:

```bash

dd if=./dd-test of=/dev/null bs=1M iflag=direct status=progress

```

随机写:

```bash

fio --name=randwrite --ioengine=libaio --rw=randwrite --bs=4k --numjobs=4 --size=1G --runtime=60 --time_based --group_reporting

```

网络:

```bash

iperf3 -c <服务器地址>

```

构建类负载可以用同一份项目分别测:

```bash

time npm ci

time make -j$(nproc)

```

对比方法:同一台机器、同一电源模式、关闭后台大任务,WSL2 和 WSL3 各跑至少 3 次,取中位数。公开讨论中 5%–60% 的提升区间常出现在 I/O、网络、启动等场景;不要用一次跑分下结论。

验证部署是否成功

依次执行:

```powershell

wsl --version

wsl --list --verbose

wsl -d <发行版名称> -- uname -a

wsl -d <发行版名称> -- systemctl is-system-running

```

预期结果:

  • wsl --version 输出 WSL、内核等版本信息。
  • wsl --list --verbose 中目标发行版 STATE 为 Running 或 Stopped,VERSION 为 3。
  • uname -a 输出 Linux 内核和架构信息。
  • systemctl is-system-running 输出 running 或 degraded,说明 systemd 已接管。

GPU 和性能验证:

```bash

nvidia-smi

sysbench cpu --threads=$(nproc) run

dd if=/dev/zero of=./dd-test bs=1M count=1024 oflag=direct status=progress

rm ./dd-test

```

能正常输出 GPU 信息、CPU 事件数和磁盘吞吐,说明基础环境可用。把升级前后的同一组结果记录到表格,比单看某个数字更有意义。

常见报错与解决

  • WSL 2 requires an update to its kernel component. → WSL 内核组件过旧或未安装 → wsl --update,然后 wsl --shutdown,必要时重启 Windows。
  • Please enable the Virtual Machine Platform Windows feature and ensure virtualization is enabled in the BIOS. → 虚拟机平台未启用或 BIOS 虚拟化关闭 → 管理员执行 dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart,进入 BIOS 开启 VT-x/AMD-V,重启。
  • WslRegisterDistribution failed with error: 0x80370102 → 虚拟化未开启或被其他虚拟化软件占用 → 任务管理器确认虚拟化已启用;BIOS 开启虚拟化;执行 bcdedit /set hypervisorlaunchtype auto;重启。
  • The term 'wsl' is not recognized as the name of a cmdlet... → WSL 未安装或 PATH 异常 → 管理员执行 wsl --install;若仍不行,用第 1 步的两条 dism.exe 命令启用功能后重启。
  • There is no distribution with the supplied name. → 发行版名称拼写错误或未安装 → wsl --list --verbose 查看名称;wsl --list --online 查看可安装项;wsl --install -d <发行版名称>。
  • The operation could not be started because a required feature is not installed. → Windows 功能未启用 → 启用 Microsoft-Windows-Subsystem-Linux 和 VirtualMachinePlatform,重启后再执行 WSL 命令。
  • .wslconfig 配置不生效 → 文件位置、文件名或节名不对 → 放到 C:\Users\<Windows用户名>\.wslconfig;确认节名与官方文档一致;执行 wsl --shutdown 后重新进入。
  • WSL 虚拟磁盘占用持续变大 → 删除文件后 vhdx 未自动收缩 → wsl --shutdown;Linux 内执行 sudo fstrim -av;Windows 侧可用 diskpart 的 compact vdisk,或按官方说明使用 wsl --manage <发行版名称> --set-sparse true。
  • nvidia-smi: command not found → Windows 驱动未装或 WSL 内误装 Linux 显示驱动 → Windows 侧安装官方 GPU 驱动;WSL 内不要安装 Linux 显示驱动;重启后执行 nvidia-smi。

后续维护

备份:定期导出发行版,命令:

```powershell

wsl --export <发行版名称> D:\wsl-backup\<发行版名称>-backup.tar

```

恢复或迁移到新机器:

```powershell

wsl --import <新发行版名称> D:\wsl\<新发行版名称> D:\wsl-backup\<发行版名称>-backup.tar --version 3

```

升级:Windows 侧定期执行 wsl --update;Linux 内定期执行 sudo apt update && sudo apt upgrade。WSL3 的预览通道、内核更新和版本参数以官方文档为准。

日志与监控:用 wsl --status 看整体状态;Linux 内用 dmesg、journalctl -xe、/var/log 排查问题;性能监控用 htop、iotop、iostat -x 1、free -h、df -h;GPU 用 nvidia-smi dmon 或 nvtop。

清理:定期执行 sudo fstrim -av;Docker 用 docker system prune;Conda 用 conda clean -a;删除不再使用的数据集和模型缓存。把 .wslconfig、/etc/wsl.conf、/etc/sysctl.d/99-wsl.conf 放进 dotfiles 或笔记,换机后可快速复现。每次升级 WSL 后,用同一组基准命令做回归对比,确认吞吐、延迟和内存占用没有异常。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。