Fred Griffoul, az Amazon munkatársa által benyújtott patch sorozat jelentős előrelépést hoz a Linux kernel KVM moduljának nested VMX részében, különösen a nem menedzselt vendégmemória kezelése terén. A 2025. november 21-én beküldött patch sorozat, mind teljesítménybeli, mind helyességi problémákat orvosol a beágyazott virtualizáció során. A jelenlegi KVM-rendszer a kvm_vcpu_map/unmap függvényeket használja, ami két fő gondot okoz. Egyrészt nincs megfelelő invalidáció fontos esetekben, pl. az eVMCS oldalak elavulnak memslot-változáskor, vagy az APIC oldalak költöznek a hoszton, ami hibás működéshez vezethet. Másrészt nem kezelt memóriánál – pl. mem= paraméteres memória vagy guest_memfd a nem-CoCo alapú VM-eknél (Confidential Computing) – minden L2 VM be- és kilépésnél drága memremap/memunmap műveletek futnak, ami erőteljesen lassítja a beágyazott virtualizációt.
Tartalomjegyzék

A megoldás: gfn_to_pfn_cache integráció és invalidation Kezelés
A kernel patch sorozat a kvm_host_map helyett a gfn_to_pfn_cache infrastruktúrát vezeti be a nested VMX-be, ami tartós mappingeket tart fenn mindaddig, amíg az oldal GPA címe (Guest Physical Address) nem változik, így kiküszöbölve a memremap/memunmap overheadet minden VM ciklusban. Ez a pfncache mechanizmus megfelelő invalidációs kezelést biztosít az mmu_notifier callback-eken és memslot generációs ellenőrzéseken keresztül, garantálva, hogy a mappingek frissüljenek memslot frissítések és oldal migrációk során egyaránt. Egy mikrobenchmark példa, amely 8192 memslot-tal futott az AWS EC2 Nitro instance-eken, drámai javulást mutatott: a mapping művelet 26,12 másodpercről 1,54 másodpercre csökkent, ami körülbelül 17-szer gyorsabb, az unmap 40 másodpercről 0,017 másodpercre csökkent, ami 2353-szoros gyorsulás, míg a chunked unmap 10,07 másodpercről 0,005 másodpercre, azaz 2014-szer gyorsabb.

Fontos megjegyezni, hogy ez egy szintetikus teszt, és nem tükrözi a tipikus beágyazott virtualizációs munkaterheléseket, de jól illusztrálja a potenciális előnyöket. A sorozat 10 patchből áll, amelyek lépésről lépésre implementálják a változásokat: az első öt az L1 MSR bitmap és rendszeroldalak (APIC hozzáférés, virtuális APIC, posted interrupt descriptor) kezelését konvertálja pfncache-re, beleértve a vendég-pfn használat visszaállítását és nested állapot validációt, valamint egy önellenőrző tesztet a cache invalidációhoz és a memslot frissítésekhez.
További funkciók és tesztek a kernel modulban
A hatodik és hetedik patch az enlightened VMCS (eVMCS) támogatást bővíti, ahol elkerülik az eVMCS mezők hozzáférését a cached vmcs12 struktúrába másolás után, és az eVMCS oldal mappinget pfncache-re cserélik. A nyolcadik-kilencedik patch bevezeti a persistent nested context menedzsmentet, ami kezeli az L2 vCPU multiplexálást és migrációt az L1 vCPU-k között, integrálva a pfncache-t a persistence érdekében. Végül a tizedik patch egy önellenőrző tesztet ad hozzá az L2 vCPU kontextus váltáshoz. A v3 verzió javítja a kernel teszt robot által jelentett figyelmeztetéseket, míg a v2 kibővítette az eVMCS támogatással és persistent kontextussal, valamint további tesztekkel.
