|
We have described the basic architecture for VT-x and VT-i, and in the next section, we provide some usage
examples of the architecture by a VMM. This is intended to highlight some usage models, but it is not a
comprehensive set of all usage models.
VMM Usage of VT-x Architecture Features
Exception Handling
VT-x allows a VMM to configure any IA-32 exception to cause a VM exit based on its vector (for page faults,
further selectivity is supported based on a fault's error code). When handling such VM exits, a VMM has
access to complete information about the exception, including its error code and any other fault-specific
information (e.g., the faulting linear address for a page fault).
The VMM may determine that the exception causing the VM exit should be handled by the guest OS. In these
cases, the VMM can perform a VM entry to guest using event injection to deliver the exception.
Alternatively, a VMM may respond to such a VM exit by eliminating the cause of the exception (e.g., by
modifying the page tables to mark present a page that had not been present). In these cases, the VMM can then
perform a VM entry to the guest, which will resume execution at the point at which the exception occurred. If
the VM exit was due to a nested fault, the VMM can use event injection to deliver to the guest that event
whose delivery encountered that nested fault.
Interrupt Virtualization
When a VMM has an interrupt to deliver to a guest OS, it can do so using event injection with the next VM
entry. If guest software is not ready for an interrupt (e.g., because EFLAGS.IF = 0), the VMM can instead re-enter
the guest having set the interrupt-window exiting VM-execution control. A VM exit will occur the next
time the guest is ready for an interrupt. A VMM can then use event injection as part of the next VM entry.
Lazy Floating-Point State Processing
The IA-32 architecture includes features by which an OS can avoid the time-consuming restoring the floating-
point state when activating a user process that does not use the floating-point unit. It does this by setting
the TS bit in control register CR0. If a user process then tries to use the floating-point unit, a device-
not-available fault (exception 7 = #NM) occurs. The OS can respond to this by restoring the floating-point
state and by clearing CR0.TS, which prevents the fault from recurring.
VT-x includes features by which a VMM can process floating-point state lazily, even when supporting a guest
OS that does so also. We outline how this may be done.
Before entering a guest whose floating-point state has not been restored, a VMM can do the following:
-
Set the TS bit in the CR0 field in the guest-state area; this ensures that any guest floating-point
access causes a #NM.
-
Set bit 7 (corresponding to #NM) in the exception bitmap; this ensures that any #NM causes a VM exit.
-
Set the TS bit in the CR0 guest/host mask; this ensures that any guest attempt to modify CR0.TS
causes a VM exit.
-
Set the TS bit in the CR0 read shadow to the value expected by guest software (determined on VM exits
caused by guest attempts to modify CR0.TS).
In response to a VM exit caused by a #NM, a VMM can check the value of the TS bit in the CR0 read shadow. If
it is set, the guest would have incurred its own #NM; the VMM can use event injection to deliver it to the
guest. Otherwise, the VMM can do the following:
-
Restore the guest's floating-point state.
-
Set the TS bit in the CR0 field in the guest-state area to the value expected by guest software.
-
Clear bit 7 in the exception bitmap; this ensures that the guest OS will handle any subsequent #NM.
-
Clear the TS bit in the CR0 guest/host mask; this allows the guest to modify CR0.TS freely.
VMM Usage of VT-i Architecture Features
Instruction Emulation
The VMM virtualization intercept handler is responsible for emulating certain instructions for a guest OS
including side effects of successful emulation. One example of instruction emulation is the MOV-from-PTA
instruction. The VMM emulates this instruction by placing the guest PTA value in the target register of the
instruction. Since the VMM has successfully implemented the MOV-from-PTA instruction, it needs to implement
the side effects of the instruction execution required by the Itanium architecture. In this example the VMM
must also update the value in the cr.iipa register, which records the last successfully executed instruction
with PSR.ic equal to 1.
Virtualization Configuration
VT-i is capable of providing a virtualization intercept on every access to privileged resources that may be
required or desired for certain VMM implementations. VT-i also provides a way for a VMM to specify
virtualization policies on certain resources in advance such that interceptions to the VMM can be reduced for
high frequency operations. This functionality is provided through virtualization-accelerations,
virtualization-disables, and new synchronization services. One example is the interruption control register
reads. Guest OS interruption handlers read interruption control registers frequently and cause a lot of
interceptions into the VMM. The interruption control register read acceleration allows VMM software to
provide preset values for all interruption control registers in the VPD and invoke the PAL write
synchronization service before returning to a guest handler. When this acceleration is enabled, guest reads
of the interruption control registers are not intercepted to the VMM; instead the value preset by the VMM is
returned to the guest. Similarly, the interruption control register write acceleration allows the guest to
write to interruption control registers without VMM interceptions. VMM can invoke the PAL read
synchronization service to obtain the latest values written by the guest and perform any virtualization
functions required before emulating the return from interrupt (rfi) instruction of the guest handler. All
other accelerations and disables in VT-i have the same goalto allow the VMM to specify the virtualization
policies of the privileged resources ahead of time such that guest instructions can execute without
interceptions to the VMM.
External and PAL-Based Interruption Handling
In addition to implementing policies to virtualize accesses to privileged resources on the processor, VMM
software also needs to virtualize external interruptions as well as accesses to platform resources that are
considered privileged. For example, VMM software will continue to handle external interruptions or PAL-based
interruptions even if the guest OS had masked these interruptions.
VMM software delivers guest external interrupts only when they are unmasked. When unmasked, the VMM delivers
the interruption to the guest handler required by the architecture. For example, the VMM needs to set up the
values of the guest interruption control registers, PSR fields, and register stack engine (RSE) state. Since
some of the RSE state is not accessible by VMM software, VT-i provides PAL service to allow VMMs to invoke
guest handlers correctly.
VMM software registers the corresponding handlers for PAL-based interruptions (e.g., initialization and
machine check events) and provides the virtualization policies for these events. VT-i makes no changes to the
handling of PAL-based interruptions. The handling and propagation of these events from the VMM to the guest
OS is VMM design specific.
|