[经验分享贴] 虚拟化请使用 HyperV,它是香的!

2020-06-03 03:23:42 +08:00
 black11black

本帖主旨在于分享楼主近期折腾虚拟机,使用 hyperV 的一些体验,我相信还是有很多 v 友跟楼主一样只是普通的开发人员,对于虚拟化的细节也不是门清的,所以分享出来应该还是有一些价值。虽然本帖有安利性质,但楼主本人只是想给没用过的朋友分享一些体验,楼主也并不是微软的迷弟,具体使用请自行斟酌。

=======================================================

起因是楼主最近需要折腾一套 windows 环境下的 linux 服务方案(这个比较蛋疼的需求是一些陈年代码导致的),根据 v 友的建议最后使用 hyperV 得到了完美解决。但是后面事情不止于此,最终还是引出了一些对我以后日常工作也有帮助的经验。

对于绝大多数开发人员而言,应该都是认可在不同使用环境下,windows 和 linux 操作系统各有优势(呃。。这句话有时候可能也需要带上 mac )。认为“不在 linux 下做开发的人都是傻屌”,持这种观点的应该是少数。所以广泛地说,从功能性来讲,对于所有开发人员来说,同时拥有两个操作系统,并且能够无限自由地在他们之间切换,应该属于一种长期以来的终极追求。

我们“普通”的虚拟化,起码对于楼主这种孤陋寡闻的开发人员来说,做互联网开发,总是要经常和虚拟机打交道的。在 windows 系统中开虚拟机以前用过 vmware 和 vbox,而跳出 windows 之外则使用过诸如 exsi 之类的工具、使用互联网服务则是 ovz 、kvm 等等。起码在我司中我已经是接触比较多的人了,但是其实并不是很了解原理,因为确实事实上底层并不重要。

这里话说回 HyperV 。先说 hyperV 是什么,hyperV 是 win10 自带的一个 windows 下的虚拟机管理工具,底层实现方式与 vmware 等工具不同,表层实现目的都是为了在 windows 下开虚拟机。

那么楼主最近在选择虚拟化方案中,按照 v 友的建议选择了 hyperV,做到了些什么呢?简单来说做了以下几点

可能楼主本人是孤陋寡闻的,但是起码对于楼主来说以上这几点中并未完全地在其他某款 windows 虚拟化工具中体验到过,所以才来发这个贴,感觉体验还是相当不错的。

=====================================

以下具体介绍一下上文提到的特性和楼主以前使用的其他虚拟机的不同。

1 、网络层的桥接,相当于在主机和虚拟机之间加一层二级交换机,使用体验上相当于在路由器上再插一台物理机器。实现了(在几乎任何情况下的)功能完整的网络互通,同时进程间通讯又不需要绕道到路由层解决,基本是完美的解决方案了。对比 wmware 默认是桥接==》打平,vbox 默认用 nat 模式==》主机访问虚拟机需要用配置端口映射这种蛋疼的方式,vbox 打输。

2 、文件系统基于 smb 的完全原生级别挂载,意思是你同时跑 windows 和 linux 的服务,基于一个共同的文件夹,方便之处无需赘言(顺带一提 smb 也和 hyperv 一样放到了 windows 可开启功能的设置里,系统原生,无需第三方工具)。对比 vmware 和 vbox 自己实现的文件共享系统(我不知道他们底层基于什么),总归还是稳的。以前用 vmware 配过 smb,如果专门就那次配置而言的话,hyperV 的配置要简单很多。但对比上述两个软件自带的共享来说还是要复杂一些,主要问题是楼主配置的时候这方面没在墙内找到什么技术博客写这方面的资料。

3 、完整的开关机和内存管理,这条相对于上述几款虚拟化工具来说是绝对的加分项。宿主开关机对于虚拟机而言是快照内存且不影响运行状态的==》开机恢复。总和以上几点考量的话,linux 变成了 windows 系统下的一项服务,你可以获得完整的服务级管理体验,一是不用担心他自己崩溃,二是日常使用中如果不需要用到它,那就不必为它费心,三是接近原生级的性能体验,四是内存管理优秀,可以想象一下如果你对于 windows 的网络收发能力意见颇大,此时有人告诉你只需要多花 200M 内存就可以获得原生级的 linux IO ;或者说对于开发人员而言,日常很多时候不需要用到 linux,那他就占用你 200M 内存躺在那里,而你有需要的时候可以一秒钟呼出一个类原生系统,不管怎么说还是相当有吸引力的。

===================================================

hyperV 目前也存在一些问题,虽然本意只是介绍,但既然有安利性质,我还是不得不给不了解的朋友们做一个预警

1 、关于性能下降问题: 一种说法是 windows 的 hv 默认关闭,而一旦开启之后,你的 windows 系统自身就变成一个虚拟机了(意为会引起宿主机性能下降)。我在网上可以同时看到支持和反对这种说法的两方面言论。楼主本人不是底层专精,无法分辨对错。如果 v 友里有懂哥的话欢迎给大家介绍一下。

楼主本人的使用体验是,楼主的 hv 不是最近开的,而是很长时间以前有一次装 docker 的时候 docker 帮我开的,后面一直没有彻底关闭。在这么长时间内,楼主长期运行过包括但不限于 3A 游戏、计算密集型任务、IO 密集型任务(虽说 windows 也没什么可 IO 密集的)等等工作,完全没有感受到任何性能下降,亦无稳定性问题。

2 、关于操作界面的痛点: 楼主本人这次跑的是无 GUI 系统,一种说法是 hv 的 shell 对于图形界面是非常弱的,另一种说法是最近已经改善了,我没有精力去验证。但是有一点确实,宿主机和虚拟机无法共通剪切板(起码楼主大概搜了一下,没有配置成功),这确实是一个痛点,楼主认为可能是开发环境下阻止你使用 hv 的第一痛点。

3 、关于无法共存的问题: hv 开启后无法与传统的 vmware 、以及其他基于虚拟化技术的工具比如 amd master 之类的共存。楼主目前使用的 windows10 LTSC 版本上确实是这样的。但是还有一个新闻是上个月( 4 月)更新的 windows 中已经可以让 hv 与所有这些共存运行了。楼主本人大多数时候是关闭自动更新的,这方面还是有请懂哥做补充。

1508 次点击
所在节点    Windows
17 条回复
Stevenv
2020-06-03 08:15:52 +08:00
我最近正在尝试从 virtualbox 迁徙到 hyper,这就看到你的帖子。不过我用了 vagrant
2473
2020-06-03 08:22:42 +08:00
和 wsl2 相比有什么优缺点吗?
nutting
2020-06-03 08:25:13 +08:00
反正 virtualbox 是很不爽啊,好好的 docker 跑着跑着就报错了,重启又好了。wsl2 还不错,就是看起来很吃内存
CheekiBreeki
2020-06-03 08:33:50 +08:00
VMware 路過,比 hyperV 好用多了
Vegetables
2020-06-03 08:36:32 +08:00
hyper-v 嵌套虚拟化不支持 AMD,ryzen 都出三代了,支持还是遥遥无期
xieshaohu
2020-06-03 08:46:28 +08:00
对于第 1 点说的性能下降的问题 ,确实是会改变宿主操作系统的运行模式,这点很让人诧异。

一下摘自微软官网,https://docs.microsoft.com/zh-cn/virtualization/hyper-v-on-windows/about/
此外,如果已启用了 Hyper-V,这些易受延迟影响的高精度应用程序在主机中运行时可能也会出问题。 这是因为在启用了虚拟化后,主机操作系统也会在 Hyper-V 虚拟化层的顶部运行,就如来宾操作系统那样。 但是,与来宾操作系统不同,主机操作系统在这点上很特殊,它是直接访问所有硬件,这意味着具有特殊硬件要求的应用程序仍然可以在主机操作系统中运行,而不会出问题。
cheng6563
2020-06-03 08:53:31 +08:00
hyper-v 香个鬼。
看上去性能很好很强大。
然后你会发现每次重启虚拟机 IP 都变,桥接 IP 也变。
然后偶尔虚拟机还能分到与主机一样的 IP 。
偶尔虚拟机关机关不掉,点了关机后强制关机不让点。
偶尔虚拟机关机把宿主机关蓝屏。
还原快照时居然还要保持当前状态,真是神逻辑。
时常动态内存只加不减软用没有。


以上就是我使用 1 年 hyper-v 的经验。现已换 vmware 稳得一笔
koast
2020-06-03 09:11:21 +08:00
@cheng6563 #7 除了这些,最让人受不了的还有剪贴板不互通问题,没法配置硬件直通问题。原来虚拟机把宿主机整蓝屏的不止我一个啊,我当时还以为我内存有问题,每次崩溃都是内存页面错误,终于破案了。
black11black
2020-06-03 13:30:00 +08:00
@cheng6563 这个不是问题,mac 地址不变,你可以用固定 IP 代替 dhcp 。
black11black
2020-06-03 13:37:13 +08:00
@koast 剪切板不互通实际使用过程中可以用 ssh,其他 shell 客户端完美解决,但是如果用 gui 的话不知道怎么搞。
Jirajine
2020-06-03 14:01:58 +08:00
https://www.nakivo.com/blog/hyper-v-virtualbox-one-choose-infrastructure/
https://www.nakivo.com/blog/vmware-vs-virtual-box-comprehensive-comparison/

这两篇文章把三个虚拟化方案说的很清楚了,简单来说:
1. hyper-V /esxi 是 type 1 hypervisor,vm worstation/ virtual box 是 type 2 hypervisor,前者直接运行在硬件上,更稳定可靠,适合生产环境,后者运行在 host OS 上,更灵活,适合桌面、开发时使用。
2. vm workstation 是图形性能支持最好的,所以如果有测试软件、游戏等需求优先选这个。hyper-V 图形性能最差,GUI 用的是 RDP 。
3. hyper-V 和 windows 深度契合,所以如果需要 windows container 、wsl2 、docker for windows 等功能,只能选这个。
4. virtual box (不包含扩展组件)开源免费,不想花钱就选这个。
5. 剪贴板共享、Drap & Drop 、映射 USB 等基本功能三者都是有的,没有说明你没配好。
6. 虚拟化方案尽量不要同时装多个,即使可以共存也容易遇到性能下降、驱动冲突导致蓝屏等问题。
weiweiwitch
2020-06-03 16:34:00 +08:00
@Jirajine 所以,个人感觉个人用用的话,vmware workstation 基本上就是个万金油的存在。不说最强,但几乎面面俱到。
coolair
2020-06-03 16:40:44 +08:00
全文都是废话,没看出哪点香了。
zvcs
2020-06-03 18:26:46 +08:00
@Vegetables 是的 amd cpuhyperv 跑软路由网卡丢包。
black11black
2020-06-03 19:11:54 +08:00
@coolair 看来最近就业是真不景气,负能量的人都跑到 v2 来发泄了
whywhywhy
2020-06-04 00:00:51 +08:00
@cheng6563 蓝盘这个没遇到,hyper-v 在服务器跑几年了。ip 也没问题
ps1aniuge
2020-06-05 13:42:11 +08:00
vagrant--------禁止中国人用了。告别了 virtualbox 。
hyper-v 嵌套虚拟化不支持 AMD---对
然后你会发现每次重启虚拟机 IP 都变------------建立外部虚拟网卡即可。
点了关机后强制关机不让点。 -------很久后,虚拟机的普通级别关机会报错。这时候就可以强制关机。这不是 hv 的问题,而是你的问题。要么你内存慢,要么你 io 慢,要么你的 guest 系统 hang 了。
偶尔虚拟机关机把宿主机关蓝屏。----------这是不可能的。
时常动态内存只加不减软用没有。------没这事。
还原快照时居然还要保持当前状态--???我没看懂。

hv 商业免费,应该装用最新版的 2019 。我猜用了很老的版本。所以有蓝屏问题。

剪贴板不能互通。----------没这事。
1 要在 guestos 中装包。centos7 高版本都默认装了。win 要开来宾服务。
2 宿主机无图。只要用 powershell 命令 Get-Clipboard 即可。

我分享的 hv 的 powershell 脚本,下载地址:
https://pan.baidu.com/s/16deKKe3ZnCg809lffiVZWg

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/678067

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX