|
VT-x and VT-i allow guest software to run at its intended privilege level. Guest software is constrained, not
by privilege level, but because for VT-x it runs in VMX non-root operation or for VT-i with PSR.vm = 1. These
facts allow VMMs to avoid the virtualization challenges identified earlier.
Address-space compression
VT-x and VT-i provide two different techniques for solving address-space compression problems.
With VT-x, every transition between guest software and the VMM can change the linear-address space, allowing
guest software full use of its own address space. The VMX transitions are managed by the VMCS, which resides
in the physical-address space, not the linear-address space.
With VT-i, the VMM has a virtual-address bit that guest software cannot use. A VMM can conceal hardware
support for this bit by intercepting guest calls to the PAL procedure that reports the number of implemented
virtual-address bits. As a result, the guest will not expect to use this uppermost bit, and hardware will not
allow it to do so, thus providing the VMM exclusive use of half of the virtual-address space.
Ring aliasing and ring compression
VT-x and VT-i allow a VMM to run guest software at its intended privilege level. This fact eliminates ring
aliasing problems because instructions such as PUSH (of CS) and br.call cannot reveal that software is
running in a VM. It also eliminates ring compression problems that arise when a guest OS executes at the same
privilege level as guest applications.
Non-faulting access to privileged state
VT-x and VT-i avoid the problem of providing nonfaulting access to privileged state in two ways: by adding
support that causes such accesses to transition to a VMM and by adding support that causes the state to
become unimportant to a VMM.
A VMM based on VT-x does not require control of the guest privilege level, and the VMCS controls the
disposition of interrupts and exceptions. Thus, it can allow its guest access to the GDT, IDT, LDT, and TSS.
VT-x allows guest software running at privilege level 0 to use the instructions LGDT, LIDT, LLDT, LTR, SGDT,
SIDT, SLDT, and STR.
With VT-i, the thash instruction causes virtualization faults, giving a VMM the opportunity to conceal any
modifications it may have made to the VHPT base address.
Guest system calls
Problems occur with the IA-32 instructions SYSENTER and SYSEXIT when a guest OS runs outside privilege level
0. With VT-x, a guest OS can run at privilege level 0, which eliminates problems associated with guest
transitions.
Interrupt virtualization
VT-x and VT-i both provide explicit support for interrupt virtualization.
VT-x includes an external-interrupt exiting VM-execution control. When this control is set to 1, a VMM
prevents guest control of interrupt masking without gaining control of every guest attempt to modify
EFLAGS.IF. Similarly, VT-i includes a virtualization-acceleration field that prevents guest software from
affecting interrupt masking and avoids making transitions to the VMM on every access to the PSR.i bit.
VT-x also includes an interrupt-window exiting VM-execution control. When this control is set to 1, a VM exit
occurs whenever guest software is ready to receive interrupts. A VMM can set this control when it has a
virtual interrupt to deliver to a guest. Similarly, VT-i includes a PAL service that a VMM can use to
register the vector of the pending virtual interrupt. When guest software executes instructions to unmask the
pending interrupt, control is transferred to the VMM via the new virtual external interrupt vector.
Access to hidden state
VT-x and VT-i use different techniques to allow a VMM to manipulate components of guest state that are not
represented in any software-accessible register.
VT-x includes, in the guest-state area of the VMCS, fields corresponding to CPU state not represented in any
software-accessible register. The processor loads values from these VMCS fields on every VM entry and saves
into them on every VM exit. This provides the support necessary for preserving this state while the VMM is
running or when changing VMs.
VT-i provides a way for the VMM to set the RSE CFLE bit to the desired value via an argument value in the PAL
service used to return to guest interruption handlers.
Frequent access to privileged resources
VT-x and VT-i allow a VMM to avoid the overhead of high-frequency guest accesses to the TPR register. A VMM
can configure the VMCS (for VT-x) or use an acceleration (for VT-i) so that the VMM is invoked only when
required: For VT-x this occurs when the value of the TPR shadow associated with the VMCS drops below that of
a TPR threshold in the VMCS. For VT-i this occurs only when the writing of the TPR unmasks a virtual pending
external interrupt for the guest.
With VT-i, a VMM can use the virtualization-acceleration field in the VPD to indicate that guest software can
read or write the interruption-control registers without invoking the VMM on each access. The VMM can
establish the values of these registers before any virtual interruption is delivered and can revise them
before the guest interruption handler returns.
|