从wsl到wsl2明显是退步,为什么还有人鼓吹wsl2?

wsl1中的进程可以被任务管理器看到类似的融合确实值得称道。 wsl2退回虚拟机模式和直接使用任意虚拟机软件启动一个开机自启动的linux虚拟机并挂载…
关注者
514
被浏览
2,307,995

89 个回答

wsl1有wsl1的好处,但对微软来说,有一个很大的缺点:wsl1没有Linux内核,意味着微软要实现一整套对Linux内核的调用(转化为对Windows的api调用)。这个维护量的后续工作可不少。

wsl2在使用上比有明显缺点的,比如网卡地址跟Windows不共享,但是wsl2能直接使用真正的Linux内核,也就可以上docker,未来还可以上图形界面的应用。兼容性也更好(例如,目前wsl1下很多浏览器应用是无法运行的,而wsl2则没有这种问题)

总的来说,wsl1现在跟wsl2互相各有优缺点。没法完全互相替代。有人鼓吹wsl2自然是因为wsl2的那些优点恰好对他很有用。

因为虚拟机并不慢。我在没了解虚拟机的实现机制以前,一直以为虚拟机和模拟器是类似的,就是解释执行原来的机器码。我想,这不肯定慢么。

其实,虚拟机内部的程序至少在用户态的时候和宿主机的效率是一致的。虚拟机内部的比如add指令就是直接物理上宿主机cpu执行的。

所谓的资源隔离仅是在硬件中断上包一层。宿主os收到中断后,把资源有关的信息改写成虚机的,假装自己是cpu,找到虚机的handler执行。如果虚机的handler又用了什么特权指令,又会继续触发中断,宿主要用用户态的指令来模拟这些特权指令。总之,就是套娃。

题外话就是早期vmware为啥特别牛,就是因为x86有些特权指令在用户态不会触发硬件中断。vmware采用了动态二进制改写技术,把内存分为两类区,一类是改写完了的,里面不包含这些x86神奇指令,一类就是原装机器码。当执行一些比如jump指令要跳到未改写区的时候,动态把目标区域的机器码改写一遍,替换神奇指令。这真是太牛了!

所以,虚机io效率低是正常的,计算效率并不低。为了避免中断套娃,aws的nitro和阿里云神龙一开始的目标就是不要让宿主搞这种套娃逻辑的,直接硬件层面虚拟出几套设备,直通虚机os,宿主不用再搞一手数据面转发。当然中断的转发还是要的。