为什么 KVM VPS 比 OPENVZ 慢

为什么 KVM VPS 比 OPENVZ 慢

所以我刚刚购买了一个 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 配置(而不是不同的虚拟机管理程序)。

相关内容