皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

Linux 补丁提升 Intel 嵌套虚拟机内存性能,合成测试中提升高达~2353 倍

AWS 工程师一直在努力改进 Linux 内核中 KVM 的 VMX 代码,以增强处理嵌套虚拟机时的非管理 来宾 内存。改进后的代码解决了某些正确性问题,同时在合成基准测试中提供了显著的性能提升。

周五,Amazon/AWS 工程师 Fred Griffoul 发布了最新的 KVM nVMX 代码补丁,以提升非管理 来宾 内存性能。Fred 解释了当前代码的问题以及所做的改进:

这个补丁系列解决了嵌套 VMX 在处理客户内存时存在的性能和正确性问题。

在嵌套 VMX 操作期间,L0(KVM)访问特定的 L1 客户页面以管理 L2 执行。这些页面分为两类:仅由 L0 访问的页面(如 L1 MSR 位图页面或 eVMCS 页面),以及通过 vmcs02 传递给 L2 客户的页面(如 APIC 访问、虚拟 APIC 和发布中断描述符页面)。

当前实现使用 kvm_vcpu_map/unmap,这导致了两个问题。

首先,当前方法在关键场景中缺少正确的无效化处理。当 memslots 被修改时,启发式 VMCS(eVMCS)页面可能会变得过时,因为没有机制来无效化缓存的映射。类似地,APIC 访问和虚拟 APIC 页面可能会被主机迁移,但如果没有通过 mmu_notifier 回调进行适当的通知,映射会变得无效,并可能导致不正确的行为。

其次,对于非管理态客户内存(如未直接由内核映射的内存,例如通过 mem=参数传递的内存或非 CoCo VM 的 guest_memfd),此工作流程在每次 L2 VM 进入/退出周期中都会调用昂贵的 memremap/memunmap 操作。这会产生显著的额外开销,影响嵌套虚拟化性能。

这一系列将 kvm_host_map 替换为 nested VMX 中的 gfn_to_pfn_cache。pfncache 基础设施在页面全局地址(GPA)不发生变化时保持持久映射,从而消除了每次 VM 进入/退出周期中的 memremap/memunmap 额外开销。此外,pfncache 通过 mmu_notifier 回调和 memslots 生成检查提供正确的失效处理,确保在 memslot 更新和页面迁移事件期间映射能够正确更新。

最终结果相当惊人,通过合成微基准测试展示了非管理态客户内存的 nested VMX 操作性能提升。使用 AWS EC2 Nitro 实例,其合成微基准测试显示内存映射性能约为 17 倍更快,解映射分块性能约为 2014 倍更快,解映射操作性能提升约2353倍”!

Linux 补丁提升 Intel 嵌套虚拟机内存性能,合成测试中提升高达~2353 倍

对这方面感兴趣的人可以在 Linux 内核邮件列表上找到这个待处理的补丁系列

转自  Linux Patches Improve Intel Nested VM Memory Performance Up To ~2353x In Synthetic Test – Phoronix