![为什么 KVM VPS 比 OPENVZ 慢](https://linux22.com/image/742174/%E4%B8%BA%E4%BB%80%E4%B9%88%20KVM%20VPS%20%E6%AF%94%20OPENVZ%20%E6%85%A2.png)
所以我刚刚购买了一个 KVM vps,当我对它进行基准测试并将其与我现有的 openvz vps 进行比较时,我发现它比 openvz vps 慢,当我检查处理器信息时,它的信息有点错误,所以我想知道公司是否可以控制在不同的 KVM 容器之间共享 CPU 缓存?
在 kvm 上: cat /proc/cpuinfo
vendor_id : GenuineIntel
cpu family : 6
model : 79
model name : Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz
stepping : 1
microcode : 0x1
cpu MHz : 2199.996
cache size : 4096 KB
bogomips : 4399.99
我在英特尔网站上检查过这个 E5 处理器有大约 30 MB 的缓存。
在 openvz vps 上:cat /proc/cpuinfo
vendor_id : GenuineIntel
cpu family : 6
model : 63
model name : Intel(R) Xeon(R) CPU E5-1660 v3 @ 3.00GHz
stepping : 2
microcode : 46
cpu MHz : 2999.918
cache size : 20480 KB
bogomips : 5999.83
缓存大小为 20 MB,这是真实的。
之后我做了 CPU 基准测试
在 kvm 上: sysbench --test=cpu --cpu-max-prime=20000 运行
Maximum prime number checked in CPU test: 20000
Test execution summary:
total time: 30.1875s
total number of events: 10000
total time taken by event execution: 30.1860
per-request statistics:
min: 2.57ms
avg: 3.02ms
max: 4.13ms
approx. 95 percentile: 3.22ms
Threads fairness:
events (avg/stddev): 10000.0000/0.00
execution time (avg/stddev): 30.1860/0.00
在 openvz 上:sysbench --test=cpu --cpu-max-prime=20000 运行
Maximum prime number checked in CPU test: 20000
Test execution summary:
total time: 26.5902s
total number of events: 10000
total time taken by event execution: 26.5889
per-request statistics:
min: 2.64ms
avg: 2.66ms
max: 3.17ms
approx. 95 percentile: 2.70ms
Threads fairness:
events (avg/stddev): 10000.0000/0.00
execution time (avg/stddev): 26.5889/0.00
所以正如你所看到的,有4秒的差异,这是很大的差异。
答案1
简短回答:OpenVZ CPU 在单线程工作负载下比 KVM 使用的 CPU 更快。除此之外,OpenVZ 是一种更轻量的虚拟化方法,因此,在其他条件相同的情况下,它比 KVM 稍快。
长答案:KVM CPU 是 Broadwell Xeon,基本/加速时钟频率为 2.2-2.9 GHz。OpenVZ 使用 Haswell Xeon,基本/加速时钟频率为 3.0-3.5 GHz。考虑到 Haswell 和 Broadwell IPC 基本相同,最快的 CPU 赢得单线程基准测试也就不足为奇了。
关于虚拟化平台:
KVM 是一个完整的硬件虚拟化平台(完整 HVM),而 OpenVZ 使用容器化,其他使用半虚拟化。
第一种方法基本上模拟了整个虚拟机/平台,其优点是兼容性非常高(即使最初编写时并未考虑虚拟化的操作系统 - 即 Windows)。成本是增加的开销,这在某些工作负载下可能相当可观。可以将特定的半虚拟化驱动程序添加到完整的 HVM 设置中,从而避免一些开销。
另一方面,半虚拟化需要客户操作系统的协作(例如,以超级调用)。换句话说,客户操作系统必须适应在特定的监控程序/半虚拟化器下运行,因此半虚拟化主机不能运行任意的客户操作系统。优点是开销更低,因此性能更快。
容器化比半虚拟化的开销更低,因为只有一个操作系统实例;其他每个 VPS 都是 jail/chroot-on-steroid,它复制用户空间部分,使用与“主”操作系统完全相同的内核。这同时也是它的主要优势和劣势:由于它只复制用户空间工具,因此开销非常低。另一方面,单个内核用于全部VPS 图像。
无论如何,完整 HVM、半虚拟化和容器化之间的差异主要体现在延迟和 I/O 绑定工作负载方面。由于您的基准测试是纯 CPU 压力测试,因此差异主要归因于不同的 CPU 配置(而不是不同的虚拟机管理程序)。