nested VM virtualization
Posted: Mon Mar 14, 2016 6:24 am
Hi,
I’m interested in better understanding nested VMM implementation. Let’s consider a 2 level nested scenario based on Intel VT-x (root VMM (L0), guest VMM (L1) and guest VM (L2)) – see for instance Nested virtualization staring from slide 18
As far as I understand it is in charge of root VMM (regardless of VMCS shadowing feature even if available) to create in memory a VMCS instance for guest VMM (VMCS 0-1), a VMCS instance for the guest VM on behalf of guest VMM (VMCS1-2) and a (merged) VMCS structure to support guest VM directly from root VMM (VMCS0-2).
all these VMCS structures are pointed by physical address (i.e. VMPTRLD take a pointer to a physical address as operand) but the first question is:
Is VMCS1-2 stored in guest VMM physical memory (in other words VMCS1-2 created by root VMM on behalf of guest VMM is actually mapped into guest VMM physical memory pointed by VMPTRLD operand ?)
By the way I’ve a basic doubt: when VMPTRLD is executed, AFAIU, the address referenced as operand is actually loaded internally into the processor but what about operand address ?: is it interpreted actually as a real "host" physical memory address (no memory translation involved) or it could be considered as a guest VMM physical address translated using EPT page table for instance ?
Thanks
I’m interested in better understanding nested VMM implementation. Let’s consider a 2 level nested scenario based on Intel VT-x (root VMM (L0), guest VMM (L1) and guest VM (L2)) – see for instance Nested virtualization staring from slide 18
As far as I understand it is in charge of root VMM (regardless of VMCS shadowing feature even if available) to create in memory a VMCS instance for guest VMM (VMCS 0-1), a VMCS instance for the guest VM on behalf of guest VMM (VMCS1-2) and a (merged) VMCS structure to support guest VM directly from root VMM (VMCS0-2).
all these VMCS structures are pointed by physical address (i.e. VMPTRLD take a pointer to a physical address as operand) but the first question is:
Is VMCS1-2 stored in guest VMM physical memory (in other words VMCS1-2 created by root VMM on behalf of guest VMM is actually mapped into guest VMM physical memory pointed by VMPTRLD operand ?)
By the way I’ve a basic doubt: when VMPTRLD is executed, AFAIU, the address referenced as operand is actually loaded internally into the processor but what about operand address ?: is it interpreted actually as a real "host" physical memory address (no memory translation involved) or it could be considered as a guest VMM physical address translated using EPT page table for instance ?
Thanks