![虚拟机中的 CPU 核心是否受益于基于硬件的加密?](https://linux22.com/image/1628502/%E8%99%9A%E6%8B%9F%E6%9C%BA%E4%B8%AD%E7%9A%84%20CPU%20%E6%A0%B8%E5%BF%83%E6%98%AF%E5%90%A6%E5%8F%97%E7%9B%8A%E4%BA%8E%E5%9F%BA%E4%BA%8E%E7%A1%AC%E4%BB%B6%E7%9A%84%E5%8A%A0%E5%AF%86%EF%BC%9F.png)
我正在运行 Proxmox 和一些虚拟机。我想设置一个 nginx 代理来处理我所有服务的 SSL 卸载。我想知道在其中一个虚拟机上运行它是否意味着没有基于硬件的加密,这会严重影响性能,而不是直接在主机上运行它。当我在主机上
查看时,我看到以下条目:/proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 23
model : 113
model name : AMD Ryzen 5 3600 6-Core Processor
stepping : 0
microcode : 0x8701021
cpu MHz : 3352.873
cache size : 512 KB
physical id : 0
siblings : 12
core id : 6
cpu cores : 6
apicid : 13
initial apicid : 13
fpu : yes
fpu_exception : yes
cpuid level : 16
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate sme ssbd mba sev ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 cqm rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr wbnoinvd arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif umip rdpid overflow_recov succor smca
bugs : sysret_ss_attrs spectre_v1 spectre_v2 spec_store_bypass
bogomips : 7187.19
TLB size : 3072 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 43 bits physical, 48 bits virtual
power management: ts ttp tm hwpstate cpb eff_freq_ro [13] [14]
/proc/cpuinfo
在虚拟机中显示的标志少了很多,也就是说aes
标志也丢失了。
processor : 5
vendor_id : AuthenticAMD
cpu family : 15
model : 6
model name : Common KVM processor
stepping : 1
microcode : 0x1000065
cpu MHz : 3593.248
cache size : 512 KB
physical id : 0
siblings : 6
core id : 5
cpu cores : 6
apicid : 5
initial apicid : 5
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm rep_good nopl cpuid extd_apicid tsc_known_freq pni cx16 x2apic hypervisor cmp_legacy 3dnowprefetch vmmcall
bugs : fxsave_leak sysret_ss_attrs swapgs_fence spectre_v1 spectre_v2
bogomips : 7186.49
TLB size : 1024 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
答案1
进行一些测试后,回答我自己的问题。我的设置:proxmox 盒,带有一些虚拟机和 LXC 容器。最初,我在其中一个虚拟机中设置了我的代理。使用虚拟化处理器后,性能确实会受到很大影响。在我将代理放入 proxmox 上的 LXC 容器中,删除 KVM 虚拟化层后,我尝试在 proxmox 上上传 7GB iso。速度绝对快得惊人,而 nginx 工作进程利用了一个核心的 50%,而在虚拟机中,nginx 工作进程将占用整个核心,速度会慢几倍。
编辑:
只有在选择 proxmox 默认 CPU 类型时才会出现这种情况 - kvm64
。经过一些额外的挖掘,我发现这是默认完成的,以启用实时 VM 迁移到可能具有不同 CPU 类型的其他主机。KVM 模拟 CPU 的标志较少,但保证在任何地方都能工作。
可以更改为host
将所有 CPU 标志传递到 VM 的 CPU 类型,从而启用硬件加密等。
来源