use*_*030 4 openvz kvm-virtualization
所以我刚买了一个 KVM vps,当我将它与我现有的 openvz vps 进行比较时,我发现它比 openvz vps 慢,当我检查处理器信息时,它的信息有点错误,所以我想知道公司是否可以控制共享 cpu不同 KVM 容器之间是否缓存?
在 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
Run Code Online (Sandbox Code Playgroud)
我在英特尔网站上查过这个 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
Run Code Online (Sandbox Code Playgroud)
缓存大小为 20 MB,这是真实的。
之后我做了cpu bench
在 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
Run Code Online (Sandbox Code Playgroud)
在 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
Run Code Online (Sandbox Code Playgroud)
所以你可以看到有 4 秒的差异,这是一件大事。
简短回答:对于单线程工作负载,您的 OpenVZ CPU 比 KVM 使用的 CPU 更快。最重要的是,OpenVZ 是一种更轻量级的虚拟化方法,因此,在所有其他条件相同的情况下,它比 KVM 快一些。
长答案: KVM CPU 是具有 2.2-2.9 GHz 基本/涡轮时钟的 Broadwell Xeon。OpenVZ 使用具有 3.0-3.5 GHz 基本/涡轮时钟的 Haswell Xeon。考虑到 Haswell 和 Broadwell IPC 基本相同,最快的 CPU 赢得单线程基准测试也就不足为奇了。
关于虚拟化平台:
KVM 是一个全硬件虚拟化平台(full HVM),而 OpenVZ 使用容器化,其他人使用半虚拟化。
第一种方法基本上模拟整个虚拟机/平台,具有非常高的兼容性优势(即使操作系统最初没有考虑虚拟化 - 即:Windows)。成本是额外的开销,这在某些工作负载中可能非常重要。可以将特定的半虚拟化驱动程序添加到完整的 HVM 设置中,从而避免一些开销。
另一方面,半虚拟化需要来宾操作系统协作(例如,以超级调用的形式)。换句话说,来宾操作系统必须适合在特定的主管/半虚拟化器下运行,因此半虚拟化主机不能运行任意来宾操作系统。优点是开销低得多,因此性能更快。
容器化比半虚拟化的开销更低,因为只有一个操作系统实例;其他每个 VPS 都是一个 jail/chroot-on-steroid,它使用与“主”操作系统完全相同的内核来复制用户空间部分。这同时也是它的主要优势和劣势:因为它只复制用户空间工具,所以开销非常低。另一方面,单个内核用于所有VPS 图像。
无论如何,完整 HVM、半虚拟化和容器化之间的区别主要体现在延迟和 I/O 绑定工作负载上。由于您的基准测试是纯 CPU 压力测试,因此差异主要归因于不同的 CPU 配置(而不是不同的管理程序)。