Win10 20H1 发布在即,来看看瞩目的 WSL2。
WSL2,基于 Hyper-V 轻量级虚拟机。
首先,WSL2 要求系统为 19041 或更高,并启用 VirtualMachinePlatform feature。
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
然后,设定 WSL2 为默认,手动将之前的 WSL1 distro 升级到 WSL2。
wsl --set-default-version 2
wsl --list --verbose
wsl --set-version <distribution name> <versionNumber>
WSL2 文件
WSL2,使用 9p 挂载 win盘分区,WSL1 则使用 drvfs,都需要对挂载 metadata 做配置,以适应 fmask、umask、dmask 要求。
关于性能,WSL2 本地磁盘的性能会提高(虚拟机挂载 ext4.vhdx);9p 挂载的 win盘分区,和 drvfs 相比,还是要看之后的表现。
WSL2 内存
WSL2 运行一段时间可能会占用可观的内存,观察 vmmem 进程, 刚运行时,占用内存 300MB,使用一段时间,内存可能占用 2000MB 以上, 在退出 WSL2 一段时间后,vmmem 会分阶段退还内存,最后退出。
WSL2 在读写大量本地文件(/mnt/*)时内存可能暴涨,虽然据 build 19013 1 称, 内存在一段时间空闲后可以退还给宿主系统,但触发条件不清楚;可以关闭 WSL2 来强行释放。
内存可通过 .wslconfig
2 中的 memory 等相关参数控制。
WSL2 网络
WSL2 使用 Hyper-V Virtual Ethernet Adapter,在自己的子网内,拥有自己的 IP。
IPv6 尚未支持。
Npcap 0.9991 可以抓取 Hyper-V Virtual Ethernet Adapter.
宿主机 访问 WSL2
- 18945 开始,可以使用 localhost 或 WSL2.ip 访问 WSL2 网络服务;
- 从宿主机访问 WSL2 中监听 127.0.0.1:port 的服务,使用 localhost,或 在 WSL2 中将其他请求转发到 127.0.0.1;
WSL2 访问 宿主机
- WSL2 内部不能使用 localhost 访问宿主机,宿主机 IP 可以从
/etc/resolv.conf
中的 nameserver 得到; - DNS 有时出问题,可能需要修改 nameserver,但重启试试也可能恢复正常;
Example 配置
%USERPROFILE%/.wslconfig
, /etc/wsl.conf
详见 MS 文档2.
后续
Win 10 停在 10.0.19044, 更多特性需要在 Win11 中体验.