Appearance
虚拟化平台的对比
不知道为什么,从 typora 中迁移时图不见了
词典
红帽
RedHat,Linux 领域的龙头,目前被 IBM 收购,企业和超算选用 Linux 基本优先选择 RedHat Enterprise Linux(RHEL)。具体实力有多强呢?很多企业为了稳定性而选择的 CentOS 就是 RedHat 社区化编译后的免费版本KVM
基于内核的虚拟机(KVM)是一种内建于 Linux® 的开源虚拟化技术。Linux 的虚拟机基本基于此组件,由红帽维护和开源OpenStack
开源的企业级虚拟化方案之一,诸多国产厂商搭建虚拟化平台也是基于 OpenStack。Rackspace Hosting 和 NASA 最初开源了此项目Debian
同样是老牌的 Linux 发行版,稳定性也是数一数二的。他的下游延伸版本就是大名鼎鼎的 Ubuntu
简单的性能测试
由于对各个虚拟化平台的性能有一定疑问,因此制定了本项测试
测试环境
还有一台网卡测试机是 5900x+flr544+(3.0x4)
- 硬件
- cpu: 13900ks@6.2Ghz
- mem: 2 x 16G ddr5@7200Mhz (58-58-58-114 gear2)
- disk: PM9A3 3.84T U2
- net: HPE FLR 544+ 40G
- 虚拟化软件
- windows(裸机): winserver 2022
- HyperV: winserver 2022
- vmware workstation: winserver2022 + vmware workstation pro 17
- ESXi: vmware ESXi 8.0
- PVE: Proxmox VE 7.3.1(kernel 5.15)
- 虚拟机系统
- windows: winserver 2022
- linux: ubuntu 22.04 LTS
- 测试软件
- cpuz:测试单/全核分数
- cinebench r23:测试单/全核分数
- AIDA64:测试 CPU 和内存性能
- CDM:测试硬盘跑分
- iperf:测试网卡速度
PVE 使用的是 linux+qemu,硬盘驱动为 virtio scsi,网卡驱动为 virtio
vmware 系的硬盘驱动为 nvme,可选网卡驱动为 vmxnet3
测试结果
CPU
详细条目来自 AIDA64 的 GPGPU 测试部分。由于这部分奇葩问题很多,大小核调度也是老大难问题,所以需要细讲
- 调度正常
- 按照裸机顺序一路用下去(先大后小): Winserver2022, Workstation 17
- 先大核,后小核,最后大核超线程: PVE(linux 的默认调度,我觉得就性能提升而言是最优解)
- 调度异常
- 先用小核:winserver2022(应该等效 win10 21h2),非常弱智,还无法绑核。win10、win11 22h2 后的应该没有这个问题
- 调度随机乱跳:ESXi,可惜的是,8.0u1 都没有解决这个问题。估计 vmware 是不会管消费级了
很明显 PVE 兼容性和性能损耗才是神中神。而且值得注意的是,像是软路由性能强相关的 AES 加解密速度,虚拟机还是有损耗的
- 由于 6.2ghz 很明显超冒烟了,所以后面改了电压设置,esxi 和 pve 的分数好像会略低
- Hyper-V 存在 CPU 优先使用小核的问题(据说 win11 没有这个问题)
- ESXi 无法识别大核超线程,而且线程实际可能随机调度到大小核,本次 CPUZ 只取大核分数,但是 R23 单核分因为每个核基本都跑了一边,所以是大小核平均分
- 使用大小核时,PVE 与 AIDA64 八字不合。不应当计入分数
测试条目 | windows | Hyper-V | Workstation | ESXi | PVE |
---|---|---|---|---|---|
cpuz-Single | 1007.5 | 944.9 | 938.1 | 914.3 | 988.9 |
cpuz-Multi | 17665.1 | 17177.3 | 17460.8 | 15486.1 | 16767.5 |
R23-Single | 2442 | 2073 | 2320 | 1468 | 2347 |
R23-Multi | 42262 | 40802 | 40624 | 35300 | 38718 |
Singel Float | 2552 | 2530 | 2527 | 2573 | 134.1 |
Double Float | 1276 | 1264 | 1254 | 1282 | 92.64 |
24bit Int | 937.8 | 939.9 | 933.8 | 917.5 | 69.23 |
32bit Int | 936.3 | 938.7 | 940.9 | 917.3 | 69.83 |
64bit Int | 311.6 | 293.3 | 290.1 | 295.0 | 21.48 |
AES-256 | 308957 | 60233 | 170786 | 142080 | 7875 |
SHA-1 | 79797 | 54958 | 63531 | 56031 | 3923 |
Julia | 951.8 | 937.9 | 878.4 | 856.2 | 65.7 |
Mandel | 485.4 | 0 | 480.4 | 465.9 | 36.04 |
补一个 以前在类似环境下用 5900x 做的测试
测试条目 | windows | ESXi | PVE |
---|---|---|---|
cpuz-Single | 631.5 | 637.4 | 635.1 |
cpuz-Multi | 8995.9 | 9210.3 | 9203.7 |
MEM-Read | 46346 | 43237 | 45939 |
MEM-Write | 46351 | 40004 | 45275 |
MEM-Copy | 45266 | 42283 | 44383 |
MEM-Latency | 79.1 | 80.7 | 60.9 |
Singel Float | 1315 | 1606 | 1631 |
Double Float | 825.6 | 798 | 810.9 |
24bit Int | 1315 | 1286 | 1303 |
32bit Int | 1307 | 1280 | 1298 |
64bit Int | 105.7 | 104.8 | 106 |
AES-256 | 201179 | 136510 | 92500 |
SHA-1 | 47263 | 42123 | 36948 |
Julia | 707.1 | 533.3 | 543.5 |
Mandel | 386.9 | 289.5 | 299.3 |
MEM
分数来自 AIDA64,时序我放了海。第一项的单位是 GiB/S,第二项的单位是 MiB/S,其实都差不多
- 使用大小核时,PVE 与 AIDA64 八字不合。不应当计入分数
测试条目 | windows | Hyper-V | Workstation | ESXi | PVE |
---|---|---|---|---|---|
MEM-Read | 105.40 | 102.91 | 103.44 | 100.47 | 8124 |
MEM-Write | 90843 | 91450 | 91111 | 89628 | 6798 |
MEM-Copy | 93650 | 89807 | 91215 | 96925 | 7062 |
MEM-Latency | 70.3 | 86.9 | 75.1 | 76.9 | 781.5 |
DISK
使用 Crystal Disk Mark 8.0.4 进行测试,测试项目为默认。参数为 64GiB,5
只有 vmware workstation 这种全虚拟化虚拟机没法发挥出来性能。注:不要使用古老且弱智的 sata 和 scsi 控制器了,性能垃圾
- vmware workstation 的那个逆天 4k 读应该是开了内存加速
测试条目 | windows | Hyper-V | Workstation | ESXi | PVE |
---|---|---|---|---|---|
SEQ1M-Q8T1-Read | 6309.68 | 6316.14 | 4681.29 | 6800.49 | 6641.09 |
SEQ1M-Q8T1-Write | 4057.99 | 4060.33 | 2557.69 | 4147.90 | 4141.40 |
SEQ1M-Q1T1-Read | 3354.80 | 3113.56 | 2751.92 | 3244.73 | 3245.54 |
SEQ1M-Q1T1-Write | 3663.85 | 3380.36 | 2478.29 | 3351.48 | 3393.28 |
RND4k-Q32T1-Read | 1521.80 | 725.47 | 422.60 | 501.97 | 819.89 |
RND4k-Q32T1-Write | 1292.43 | 741.58 | 291.87 | 902.25 | 605.58 |
RND4k-Q1T1-Read | 57.29 | 43.18 | 74.42 | 39.69 | 45.17 |
RND4k-Q1T1-Write | 312.17 | 99.16 | 66.70 | 85.72 | 116.78 |
NET
测试项目为虚拟机之间通过内存网桥互相读取,裸机直接测试的本地环回的速度
这个测试感觉结果会有较大波动,所以仅供参考吧。反正 workstation 挨打就完事了
测试条目 | windows | Hyper-V | Workstation | ESXi | PVE |
---|---|---|---|---|---|
Iperf3-T1 w2w | 68.8 | 22.0 | 6.53 | 13.1 | 23.8 |
Iperf3-T32 w2w | 125 | 35.9 | 6.58 | 50.6 | 42.9 |
Iperf3-T32 l2w | 31.3 | 6.27 | 50.9 | 43.7 |
概述
该怎么选择虚拟机系统?
- ESXi:拥有兼容硬件、不想要折腾或希望稳定性第一
- PVE:非企业级硬件或喜欢 linux 或有特殊需求
- 不知道这是什么?装个 winserver+vmware workstation 就完事了。简单直观易用,除了缺失了部分直通功能外,也不比常见的虚拟机系统差多少
参考
size | VMware | Hyper-V | Citrix | KVM-Base |
---|---|---|---|---|
small | 69 | 83 | 8 | 22 |
mid-size | 85 | 71 | 9 | 17 |
enterprise | 94 | 83 | 19 | 30 |
根据由 Oracle 赞助的市场调查报告,ESXi 属于绝对的龙头老大地位,但是 KVM 的占有量也不算低。尤其是各大云厂商基本都是使用的 KVM,因此在绝对数量上并未处于劣势
注: 有没有注意到,Hyper-V的占有量也是非常巨大的
类比运货
PVE 就像是载重卡车群,车能开能跑就行,路径也可以自己随意规划。但是如何编组发车、车死火、抛锚了都需要自己研究如何解决,需要一人身兼数职
ESXI 则像是高铁,设备需要采购原厂兼容、路径也被铁路限制住,但是使用有完善的厂商指引,遇到了问题也有相应的解决预案,只需要按图索骥就行
OpenStack 则像是万吨载重火车,会使用的基本都是有强需求和研发能力的。有一定的操作指引,但是需要自己研发的更多。在运载量上堪称碾压级别
PVE 官方不支持的可以使用 Linux 支持的其他方案实现,组件出了问题也可以找 Linux 的解决方案,就像是卡车的路线可以自定义,坏了也可以找个修车店就能修。但是 ESXi 就被铁轨定死了,有问题了也只能找代价高昂的原厂来维修
虚拟机比较
经历了多年的发展,KVM 虚拟机的性能已和 ESXi 相差无几,甚至是在 IO 方面要远强于 ESXi。正如下图的测试一样
图挂了,可以看同目录下的虚拟机性能分析。更加全面
稳定性
相比于 ESXi 完全把控并移除无关组件的 VMKernel,PVE 选择的精简版 Debian 的 Linux 内核在稳定性上略有差距,也缺少了一些高级特性。但总体恶言,稳定性差别不大
- ESXi 内核来源于精简后的 Linux 内核,后期逐渐修改后号称自研,虚拟化组件自研。但是操作还是有比较明显的 Linux 遗留,稳定性不错
- PVE 内核来源于修改后的 Ubuntu 内核,虚拟化组件来源于直接调用 KVM 和 QUME。如果不折腾,稳定性并没有问题(云厂商也在大规模使用这些组件)。但是就怕进行了一些灵车操作
对了,ESXi 重装可以保留数据分区,PVE 似乎没那么方便
用户实测
找了认识的几个玩虚拟机的大佬,反馈 PVE 的稳定性也没有问题。但是我实测是遇上了些 BUG,比如 Debian11 配合 UEFI 时会出现宿主机重启的 BUG(更新:玩 APU 玩的!)
- PVE 和 ESXi 均无问题
- PVE 相对正常,ESXi 反而 BUG 多
- ESXi 部分硬件兼容性存在问题,无法直通
虚拟机配置
宿主机设置
- ESXi 默认设置非常的全面和复杂,几乎所有用到的配置都能在 webui 中进行图形化的设置,因此操作也非常的繁琐。光是简单的更换个 SSL 证书就要折腾半天
- PVE 由于只是简单的封装了 KVM 和 QUME,所以设置相对简单的多,但是 99%用到的功能都能简方便的配置。继承了 CEPH 和 ACME 等功能。不能图形化配置的就需要使用命令行了
对于常见的虚拟化操作而言,ESXi 和 PVE 都差不多,ESXi 相对会方便一些,毕竟图形化还是更加的直观。但是如果需要一些魔改操作(vgou_unlock),那就只能选择 PVE 了
虚拟机配置
- ESXi 配置与 windows 兼容的相当不错,winserver 自带了很多的虚拟机驱动,ESXi 集成的 VMTools 也可以自动更新和管理安装。但是如果你想要高度定制的配置,对不起,那是不可能的
- PVE 硬件选项和 ESXi 相比没有过大的区别,但是 virtio 驱动和 spice 视频驱动都需要自己寻找和手动管理。硬件可以高度定制化
ESXi 的 VWware Tools 的安装不知道比 PVE 方便了几条街。PVE 需要自行下载 virtio 驱动并手动安装和管理 qemu-guest-agent,ESXi 只直接点一下安装 VMware Tools 选项即可,然后更新和升级都可以由 ESXi 集中管理
但是 ESXi 的硬件定制能力就非常无语了,比如说必须要有一个虚拟显卡,SMBIOS 信息不能完全自定义。因此显卡直通+远程连接和绕过虚拟化检测方面 ESXi 体验非常的差
易用性
硬件兼容性
- ESXi 需要通过兼容性校验的硬件(官方有兼容性很好用的列表),只要能兼容就问题不大
- PVE Linux 能兼容,PVE 就能兼容。至于使用上有什么问题就不一定的(比如经典的闭源驱动的兼容性问题,AX210 为例)
在硬件兼容性上,PVE 相比 ESXi 更有优势。但是 ESXi 的要求也不难满足,即使是 ESXi8.0,也只需要 Intel 的指定网卡(I219 I225 X520 X540|其他社区兼容网卡也行)和企业级硬盘厂家的硬盘(三星、西数、镁光的消费级应该也是支持的)。搭建 homelab 的用户基本都会购入
ESXi 想要用的舒服门槛还是比较高的
- 网卡:这是重头戏,非常难搞
- ESXi6.7: 兼容性没问题,可以打第三方驱动
- ESXi7.0 及以上:只能靠 VMware 社区维护的 Flint 驱动,英特尔全系基本没有问题、螃蟹的 2.5g 板载网卡就寄了。没找到任何方法打常用的螃蟹网卡的 2.5g 驱动
- ESXi8.0 及以上:进一步删减了旧版驱动、CX3 和 X79 系列的芯片组已无法使用
- 硬盘:
如果硬盘厂家不是老牌的企业级厂商(三星、西数、镁光、英特尔),那么硬盘也识别不了。点名海康、致钛、小海豚这点存疑,都是标准nvme设备 - 传感器:必须通过 IPMI 读取,没有 IPMI 的基本上什么都看不了
- 显卡:反正基本都是直通,ESXi 不支持消费级显卡的问题也不大(部分消费级显卡需要指定兼容性版本为 ESXi6.7,否则会出现直通重启后显卡无法驱动的 BUG)
神奇的是,明明非常老的 intel x540 10g 网卡还被支持,但是更新一点的 Mellanox CX3 pro 40g 网卡却不被支持了。只能说 Intel 不愧是 Intel,钢铁后庭。不过好像也是因为intel太能挤牙膏了,这玩意现在还生产
本地化和图形化
- ESXi 本地化和图形化程度高,与各类组件配合的好,基本可以全图形化配置。选项基本都有正确的中文说明,每个选项在官网也有明确的说明和操作指引,只有少数几个翻译存在问题(比如 CPU 内核 0 就被翻译为了软件包 0)
- PVE 对 KVM 的简单封装,有基础的说明文档,图形界面比较简单,但是能用。翻译有很明显的机翻,包括但不限于非常机翻的将 of 翻译为“的”(CPU “1%的 100%”/"1% of 100%"),指标监控服务器被翻译为了公制服务器,图形界面的列数被翻译为了类型等
总体而言,本地化都还算是及格。对于真重度使用用户,其实选择英文版也没有问题
监控
- PVE 自带一个简易的监控,能显示基础数据,有正常的历史记录功能。但是没有更多的详细的记录了,即使是配合上 Prometheus 等监控软件,详细程度也是无法相提并论的。好在基础监控功能是完全能满足的
- ESXi 自带的监控则是详细的多,包括了性能记录的方方面面,但默认只记录一个小时的数据,完整功能需要和 vCenter 相配合。可以定制监控数据保留时间和详细程度,内容包括内核软件调度和 CPU 调度时间、内存交换信息等内容。但使用起来也比 PVE 的监控更复杂
总体而言,ESXi 的监控能力和虚拟机信息展示能力是完胜 PVE 的。不过好在 pve-exporter+Prometheus+Proxmox via Prometheus 面板也能显示大部分的内核级和虚拟机的监控数据
Addition
与相对开箱即用(配置选项的复杂度另计)的 ESXi 相比,PVE 想要达到相同的功能需要配置更多的东西。
- PVE 支持开机时保存配置变更信息,关机后应用。但是 ESXi 只支持关机后再配置
PVE 配置 vgpu 等需要相对频繁的使用命令行修改配置文件,ESXi 基本只需要在 WEBUI 中修改配置。现在都很方便了- ESXi 的 WEB 控制台非常方便,可以同时使用多个终端,随意调整显示大小。还能和 Vmware WorkStation 配合,当远程控制台和监控器,提供近乎本机的体验。PVE 的就简陋太多了,只能简单的显示图形
- ESXi 的直通必须使用 vCenter