昨天,Linux 6.13 合并了 KVM 更改,以进一步增强开源虚拟化堆栈。
Red Hat 的基于内核的虚拟机维护者 Paolo Bonzini 解释了 Linux 6.13 中 KVM 特性代码的最大变化:
“这里最大的变化是消除了 KVM 的可怕想法,即基本上猜测哪些 pfn 是引用计数页面。这样做的原因是 KVM 需要映射非引用计数页面(例如 VFIO 设备的 BAR)和包含引用计数页面的 VM_PFNMAP/VM_MIXMEDMAP VMA。然而,结果是过去的安全问题,最近无法映射 VM_IO 并VM_PFNMAP _is_ 由 struct page 支持但未被引用计数的内存。特别是,这破坏了 amdgpu 驱动程序的 virtio-gpu blob 资源(直接将主机图形缓冲区作为 virtio-gpu 设备的“vram”映射到客户机),因为 amdgpu 分配非复合高阶页面,而尾页无法映射到 KVM。
这需要调整每个架构代码中 struct page 的所有使用,以尽可能始终在 pfn 上工作。来自 David Stevens 和 Sean Christopherson 的大型系列也大幅清理了为主机虚拟地址提供 pfn 的 arch 代码的函数集。之前迷宫般的曲折小段落,都是不同的,被五个函数(__gfn_to_page、__kvm_faultin_pfn、这两个的非 __ 版本和 kvm_prefetch_pages)所取代,节省了近 200 行代码。
同时,带有 Linux 6.13 的 ARM 上的 KVM 增加了 PSCIv1.3 SYSTEM_OFF2对请求休眠的支持,类似于 ACPI 的 S4 状态,嵌套虚拟化下的 PMU 支持,以及对第 1 阶段权限间接和权限覆盖的支持。
带有 RISC-V 硬件的 KVM 现在允许在作为 Guest 运行时加速 KVM RISC-V。
PowerPC 端的 KVM 已经完成了对 PowerPC 970 支持的过时引用的删除,该支持已于 2014 年从内核中删除。
KVM x86 (x86_64) 的更改仍然相当繁重。目前正在努力减少 vCPU 抖动,在关闭脏页日志记录时批处理 TLB 刷新,以便更快地禁用脏日志记录(相差 3 倍),放弃在内存不足的情况下回收影子页表方面表现不佳的收缩器,公布即将推出的 Intel Clearwater Forest 服务器处理器的新 CPU 指令,向用户空间公布 AMD_IBPB_RET 位, 和各种修复。
有关所有这些 KVM 更改的更多详细信息现在通过此拉取请求合并到 Linux 6.13 内核中。
转自 Linux 6.13 KVM Eliminates An “Awful Idea”, Many x86_64 Improvements – Phoronix
用处不大吧,还要上传到远端服务器计算然后返回结果。浪费时间。