WSL 和 WSL2 简单对比 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
goreliu
V2EX    Linux

WSL 和 WSL2 简单对比

  • &bsp;
  •   goreliu 2019-07-30 20:30:30 +08:00 41851 次点击
    这是一个创建于 2270 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原文地址: http://www.mocihan.ml/archives/267/

    昨天我升级系统到 Windows 10 Insider Preview Build 18945,折腾了一天多 WSL2,目前基本可用了,以一个普通用户的角度总结下 WSL 和 WSL2 的区别。

    主要从功能性能两个方面简单说下 WSL2 和 WSL 相比的优势和劣势。本来想单独列下易用性,但发现都可以在功能和性能上体现出来。

    功能

    WSL2 的优势

    因为 WSL2 是跑在虚拟机中的完整 Linux,所以功能方面要比 WSL 强大一些。从目前的版本看,至少能做到如下这些 WSL 做不到的事情(并没有全部核实,可能有出入):

    1. 网卡管理、网络抓包、查看网络连接状态、防火墙等较底层的网络相关功能。
    2. 挂载文件(如 ext4 文件、squashfs 文件)和网络资源(如 nfs、ssh )到本地。
    3. tmpfs (在 /run/shm 或者 /dev/shm,/tmp 不是)。
    4. 完整的 cgroups,因此可以运行 Docker 等容器。
    5. 完整的 IPC ( WSL 缺失一部分,比如运行不了 fakeroot )。
    6. 可修改内核参数、添加内核模块,以及替换内核。因此可以支持很多更底层的应用。
    7. 因为之上的这些原因,WSL2 可以更好地享受完整 Linux 系统带来的方便,不需要因为 WSL 的功能缺失而使用各种迂回方法。

    WSL2 的劣势

    功能方面的劣势,主要是和本机系统(即 Windows 宿主机)整合相关的。

    1. 进程不再会显示在任务管理器里,也无法在 WSL2 外操作,包括不再支持本机系统的防火墙规则。
    2. 无法通过 localhost ( 127.0.0.1 )访问本机系统监听的端口(也许以后会支持。目前用 localhost 是可以从本机系统访问 WSL2 的),只能通过其他 IP。
    3. 默认无法从其他机器访问到 WSL2 中监听的端口,需要在本机系统设置端口转发(如 netsh interface portproxy add )。

    其中 2 和 3 后续都可能优化,技术上没有难题。

    WSL2 的功能缺失,相对于原生的(包括虚拟机中的) Linux

    1. 没有声音、显示系统,和 WSL 一致。但有迂回办法(不包括显卡计算)。
    2. 不能访问本机系统的 USB 设备(但可以访问已经在本机系统挂载的硬盘、U 盘、光盘等)、串口设备(这个 WSL 已经支持,WSL2 之后也会支持)、PCI 设备等等。
    3. 网卡管理相关功能不全,比如不能设置静态 IP、不能桥接、不能访问网卡硬件等等。

    但 WSL2 的文件系统镜像可以直接使用 Hyper-V 挂载(可以一个镜像两用,不能同时运行),这样功能比 WSL2 要强一些(比如有显示系统、网卡管理、串口设备支持、受限的本机硬盘直通等等),但还是有一些功能缺失。

    性能

    性能方面,WSL 和 WSL2 各有优势。如果不和本机系统交互,WSL2 的性能非常不错,但访问本机系统的文件会下降很多。

    WSL2 的优势

    1. 进程启动开销大大减少,需要频繁启动进程的场景性能大幅提升。
    2. 本地磁盘(不包括挂载的 /mnt/*)读写性能大幅提升。

    WSL2 的劣势

    1. 通过 9p 挂载的本机系统文件(/mnt/*)和 WSL 中的 drvfs 相比,读写性能大幅下降,主要体现在读取大量小文件场景(比如文件数上百后,ls -l、file *、head -n1 *、git status/diff/... 等等命令会有明显卡顿,耗时为 WSL 中的几倍甚至十几倍)。但仅仅列文件名( ls 要比 ls -l 快几个数量级)或者操作大文件(比如用 dd 读写大文件感觉不到慢)基本没影响。
    2. 内存占用比 WSL 高很多。基本运行起来后就要占 300M 以上(要看 Vmmem 进程,而不是终端模拟器)。而且读写大量本地系统文件(/mnt/*)后内存会飙升,至少有些情况不会回落,即使其他软件将内存快耗尽了 Vmmem 内存占用也不会下降。
    3. 首次启动比 WSL 慢,但平时不需要退出( wsl --shutdown,可以用它来释放内存),可以认为没影响。

    其中 1 也许可以大幅优化,2 之后很可能会优化。

    总结

    总体说功能上变得更强大了,但和本机系统交互的相关功能有所减弱,用起来没有之前方便了。性能上如果不需要和本机系统交互,提升很显著,但如果需要读写本机系统硬盘的文件,性能下降很明显。

    我会继续更新原文。

    第 1 条附言    2019-07-31 07:31:17 +08:00

    User Experience Changes Between WSL 1 and WSL 2 中有这样一点:

    Cross OS file access speed will be slower in initial preview builds

    You will notice slower file speeds compared to WSL 1 when accessing Windows files from a Linux application, or accessing Linux files from a Windows application. This is a result of the architectural changes in WSL 2, and is something that the WSL team is actively investigating on how we can improve this experience.

    我想文件系统互访问速度后续会有优化。

    另外这个连接有一些实用内容(比如镜像文件空间不足的处理方法)。

    第 2 条附言    2019-07-31 09:36:27 +08:00

    简单比较下 CPU 性能

    用 bc 计算下 PI,运行了多次后选择比较稳定的最后三次:

    WSL

    % echo "scale=6000; 4*a(1)" | time bc -l 3.14... bc -l 29.39s user 0.02s system 99% cpu 29.470 total bc -l 29.28s user 0.00s system 99% cpu 29.399 total bc -l 29.20s user 0.05s system 99% cpu 29.381 total 

    WSL2

    % echo "scale=6000; 4*a(1)" | time bc -l 3.14... bc -l 29.61s user 0.00s system 99% cpu 29.615 total bc -l 29.56s user 0.00s system 99% cpu 29.559 total bc -l 29.57s user 0.00s system 99% cpu 29.572 total 

    差别不大,WSL2 稍微慢一点。

    49 条回复    2021-07-08 23:30:16 +08:00
    hronro
        1
    hronro  
       2019-07-30 20:37:12 +08:00
    貌似楼主只比较了 IO 性能?不知道在密集计算上,二者的性能有何差异
    goreliu
        2
    goreliu  
    OP
       2019-07-30 20:45:52 +08:00
    @hronro 有差异的主要应该是 IO 性能,其他方面,可以参考实体机和虚拟机比较之类的评测。
    undeflife
        3
    undeflife  
       2019-07-30 20:55:58 +08:00   1
    12101111
        4
    12101111  
       2019-07-30 21:00:39 +08:00
    CPU 性能 WSL2 有不到 10%的损失,WSL1 等于原生 Windows 或 Linux 性能.
    WSL1 的 fork()性能很差
    kidlj
        5
    kidlj  
       2019-07-30 21:02:11 +08:00 via iPhone
    有 systemd 吗?好奇。
    goreliu
        6
    goreliu  
    OP
       2019-07-30 21:03:15 +08:00
    @undeflife 我在上文里也提到了。但反过来访问现在还不行。
    Osk
        7
    Osk  
       2019-07-30 21:04:11 +08:00 via Android
    感谢分享,但糟糕,是被劝退的感觉。。。
    之前我开玩笑说 wsl 是用来算 hash 值的,结果这么久用下来,还真差不多。
    wsl2 换成这种架构后,更没用的想法了,幸好 wsl1 不是直接被抛弃。。。

    目前虚拟机用着还不错,如果微软以后允许在 Hyper-V 中通过 9p 直通文件系统给 guest 对于我来说这才是真香。。。
    goreliu
        8
    goreliu  
    OP
       2019-07-30 21:07:22 +08:00
    @kidlj 好像是可以折腾的,比如这个: https://github.com/arkane-systems/genie
    Cooky
        9
    Cooky  
       2019-07-30 21:09:30 +08:00 via Android   1
    自己装个虚拟机得了…
    goreliu
        10
    goreliu  
    OP
       2019-07-30 21:12:06 +08:00
    @Osk 我也有一些失望吧(主要是通过 9p 访问大量小文件太慢了,严重影响体验,感觉应该是优化不到位,而不是技术局限),但总体还可以,我还是迁移过来了,另外留了一个 WSL 实例备用。
    goreliu
        11
    goreliu  
    OP
       2019-07-30 21:13:55 +08:00
    @Cooky 在很多方面还是比虚拟机方便不少的,比如可以直接调用 Windows 进程。它和 WSL 一致的地方我没有写,很多功能都保留了。
    devtiange
        12
    devtiange  
       2019-07-31 01:08:23 +08:00
    感谢楼主的总结! 个人觉得这些劣势都不是什么大问题, WSL/WSL2 的定位应该就是一个本机开发环境, 比虚机更轻量一点. 如今 vscode 都能连进去写代码了, 和本机的文件交换也不是那么重要了.
    anguiao
        13
    anguiao  
       2019-07-31 01:27:39 +08:00 via Android
    对我来说,本来也就是提供一个本地的*NIX 开发测试环境,性能什么的我倒不是特别在意,不要太离谱就行,也不会真的拿它来进行最终的部署。
    无论 WSL 底层用的是什么技术,它和系统的整合程度都是第三方虚拟机无法比拟的。对 WSL 2,个人还是十分期待的。
    最后想问一下楼主,20H1 有没有什么影响使用的 bug ?没有的话有点想尝鲜了。
    alexfu
        14
    alexfu  
       2019-07-31 01:51:46 +08:00   1
    WSL2 和 proxifier 冲突被劝退。。
    ericgui
        15
    ericgui  
       2019-07-31 02:17:58 +08:00
    我最近一直非常关心,怎样从 wsl 升级到 wsl2 ?

    是否可以平滑升级?

    我原先的设置,安装的开发环境,是否还都可以继续用?

    请楼主解惑,谢谢!
    goreliu
        16
    goreliu  
    OP
       2019-07-31 07:03:14 +08:00   1
    @devtiange 如果作为开发环境使用,体验会比之前好一些。
    goreliu
        17
    goreliu  
    OP
       2019-07-31 07:05:28 +08:00
    @anguiao 暂时没发现什么 bug。
    love4taylor
        18
    love4taylor  
    PRO
       2019-07-31 07:05:31 +08:00
    WireGuard 会导致 WSL2 无法连接网络, 只能暂时放弃 WSL2 了...
    goreliu
        19
    goreliu  
    OP
       2019-07-31 07:10:11 +08:00   1
    @ericgui 可以平滑升级,环境会完全保留。wsl.exe --set-version <Name> 2 就可以升级了,需要等待几分钟到几十分钟吧。wsl.exe --set-version <Name> 1 可以再降回去。
    goreliu
        20
    goreliu  
    OP
       2019-07-31 07:11:29 +08:00
    @alexfu
    @Love4Taylor

    现在网络相关的问题是多一些,过几个版本再看看吧。
    LokiSharp
        21
    LokiSharp  
       2019-07-31 07:22:10 +08:00 via iPhone   1
    告辞诉还不如直接用 vmware
    ericgui
        22
    ericgui  
       2019-07-31 07:26:39 +08:00
    @goreliu 好的,谢谢大佬
    Qzier
        23
    /div> Qzier  
       2019-07-31 08:20:34 +08:00 via iPhone
    还有个问题,装了 wsl2 后就没法用 vmware 了。
    dk7952638
        24
    dk7952638  
       2019-07-31 08:43:36 +08:00
    WSL2 根本就是一次倒退和妥协
    nullboy
        25
    nullboy  
       2019-07-31 08:44:10 +08:00   1
    这玩意真的有用?
    anguiao
        26
    anguiao  
       2019-07-31 08:44:11 +08:00 via Android
    @Qzier 这个是可以解决的,需要 VMware
    anguiao
        27
    anguiao  
       2019-07-31 08:44:53 +08:00 via Android
    @Qzier 这个是可以解决的,需要 VMware 那边适配。
    sky101001
        28
    sky101001  
       2019-07-31 08:49:37 +08:00
    真希望 wsl 能支持 cuda
    yjfuk
        29
    yjfuk  
       2019-07-31 08:54:18 +08:00
    to run vmware vm:

    bcdedit /set hypervisorlaunchtype off

    Restart

    To run hyper-v vm:

    bcdedit /set hypervisorlaunchtype auto

    Restart
    uleh
        30
    uleh  
       2019-07-31 08:54:20 +08:00
    因为公司统一用麦咖啡,而麦咖啡和 WSL 犯冲,所以一直用的 hyper-v + vagrant,发现也挺好用的
    fcten
        31
    fcten  
       2019-07-31 10:05:56 +08:00
    对于我来说,WSL 满足大部分日常需求了,为了那剩下一小部分需求切换到 WSL2 不值得,有需要的时候开个虚拟机就行了。
    ungrown
        32
    ungrown  
       2019-07-31 10:37:10 +08:00   2
    归根到底,WSL 不是刚需,以我的经验,直接上虚拟机,vbox 就挺好用的,发行版随便选,我现在用个 openwrt-x86 就能满足我的全部需求了,如果有更多需求,上 alpine,再不行直接上 ubuntu-mini。
    虚拟机看似臃肿,实际上跑个小体积的 linux 根本不会对系统产生什么压力,那点负载和占用还不到 windows 的零头。而如此小的代价换来的是近乎实机的应用体验,根本没有 WSL 里面那些莫名其妙的破事。而且我还可以随时快照/复原/迁移。而本地本地网络上的 SSH / VNC 体验流畅无比,还要啥自( W )行( S )车( L )?
    testcaoy7
        33
    testcaoy7  
       2019-07-31 10:39:07 +08:00
    WSL2 会不会和 VMware 等虚拟机发生冲突?
    yinjy
        34
    yinjy  
       2019-07-31 10:41:57 +08:00
    wsl2 是否像 wsl 那样要一直开着一个 wsl 终端才能用吗?
    wly19960911
        35
    wly19960911  
       2019-07-31 10:43:59 +08:00
    @yinjy #34 wsl 早就不用开着终端了. 你更新下系统就可以了
    photon006
        36
    photon006  
       2019-07-31 10:44:16 +08:00   1
    GPU 呢,WSL2 能用宿主机显卡做 machine learning ?
    userdhf
        37
    userdhf  
       2019-07-31 11:01:14 +08:00
    安全问题呢?会不会有被黑的可能,然后通过 wsl 在宿主上各种搞?
    goreliu
        38
    goreliu  
    OP
       2019-07-31 11:08:44 +08:00
    @ungrown 看个人需求吧。
    goreliu
        39
    goreliu  
    OP
       2019-07-31 11:09:32 +08:00
    @photon006 现在不行。
    goreliu
        40
    goreliu  
    OP
       2019-07-31 11:11:26 +08:00
    @userdhf 把 /etc/wsl.conf 里的 automount 和 interop 关掉就和普通虚拟机差不多了,不再能访问宿主机。
    lastone6210
        41
    lastone6210  
       2019-07-31 11:20:12 +08:00
    WSL 和 VSCode 是让我近年来对 MS 好感飙升的玩意, WSL2 预告的时候我还挺期待的, 结果嘛...

    我个人理解 WSL 受欢迎是给了开发者一个从 0 到 1 的解决方案, 不必为了某些 tiny function 而专门开个虚拟机, 而如果真的追求性能, 为什么不直接使用虚拟机甚至实机呢? WSL2 为了性能导致只能和 VMvare 二选一 有些得不偿失
    LengthMin
        42
    LengthMin  
       2019-08-01 11:24:03 +08:00
    wsl2 的 dns 就是 可访问 win 主机 ip:

    cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }'

    参见: https://docs.microsoft.com/en-us/windows/wsl/wsl2-ux-changes#accessing-network-applications
    nullizer
        43
    nullizer  
       2019-08-01 18:15:28 +08:00   1
    只要依然魔改 init,那看都不会看一眼。我程序要用 systemd 怎么办?
    cppgohan
        44
    cppgohan  
       2019-11-24 18:34:18 +08:00   1
    proxifier + wsl2 现在还是凉凉
    Bunnyranch
        45
    Bunnyranch  
       2020-05-30 10:06:14 +08:00
    我在 WSL2 下只安装一个 smartDNS 跑起来也要费 300M 内存吗。。。
    gaopinsong
        46
    gaopinsong  
       2020-06-01 19:26:39 +08:00   1
    估计微软也是知道 WSL2 的这个方案还有很大问题。所以没有直接废弃掉 WSL1 。还可以让你自行切换。
    Cu635
        47
    Cu635  
       2020-08-10 20:58:42 +08:00
    还少说了一个:wsl2 对 ipv6 的支持不完整。
    ruanimal
        48
    ruanimal  
       2021-03-29 17:39:54 +08:00
    在 hyper-v 的虚拟机中,能挂载 9p 文件系统吗?
    Elliota
        49
    Elliota  
       2021-07-08 23:30:16 +08:00
    配置弄高一点,搞个虚拟机不香吗
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     912 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 20:00 PVG 04:00 LAX 13:00 JFK 16:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86