When we were in the early stages of developing NxTop Engine, our bare metal client hypervisor, one of the more challenging exercises we faced was determining how to best address the various input/output (I/O) paradigms on a PC. On one hand, we wanted to fully abstract the hardware from the operating system, so we could have a common virtual hardware platform and eliminate driver management headaches as part of our broader mission to make PCs easier to manage, maintain, and secure. On the other hand, there are a number of I/O touch points with a PC end-user, most notably in areas such as graphics, USB, disk, and networking, where the performance expectations are extremely high.
When it comes to dealing with I/O on a client hypervisor platform, a number of options exist. The first I will mention is full hardware device emulation. Complete emulation of physical devices is the “bread and butter” of virtualization technology. It does come with a performance price when compared to an operating system running on native hardware. This makes emulation a suitable option for less intensive I/O activities for which a slight performance hit is indiscernible to a PC end-user.
Another I/O virtualization technique is paravirtualization (also known as “enlightenment” in Microsoft Hyper-V parlance). With paravirtualization, optimizations (in a form of specialized class drivers) are made within the guest operating system that enables it to more effectively share physical hardware resources with other guest operating systems, achieving near-native I/O performance. This makes it an ideal approach for I/O activities with higher performance requirements, as it provides the end-user with the look and feel of native PC performance without “breaking” the virtual hardware platform abstraction model that makes life so much easier for the IT team to manage desktops. To build great paravirtualized I/O subsystem is a huge undertaking, but our awesome engineering team made it look easy.
When all else fails in attempting to achieve true virtualization on a client hypervisor, a final I/O approach that can be utilized is a technique called “pass-through.” As the name suggests, pass-through allows a guest operating system, such as Windows, to achieve native I/O performance by bypassing the hypervisor and using the same collection of Windows drivers that IT folks love to hate to access the physical PC hardware. For a virtualization vendor, a pass-through approach is a tempting way to avoid the whole issue of building a high performance paravirtualization I/O subsystem. Perhaps the engineering skill set to do that is just not there, so why not just use some hardware PCI mapping tables and off you go. However, if you think that native Windows drivers, bypassing the hypervisor and talking directly to physical PC hardware is a “visionary” virtualization technique (as another virtualization company likes to call this approach), then I have a famous bridge to sell to you. We view pass-through as an I/O technique of last resort to use in a client hypervisor, because that model of I/O virtualization makes desktop management more complicated and more expensive. And after all, isn’t desktop virtualization is all about simplifying and reducing management costs? If a client hypervisor doesn’t make PC management easier, what’s the point?
As we were designing NxTop, we painstakingly analyzed each I/O requirement of the client PC and selected the most appropriate approach for each. In doing so, we struck what we feel is the most optimal balance between PC manageability and security for the IT team and a better overall user experience for end-users. Early feedback is that we have hit the mark.
VN:F [1.6.9_936]
Rating: 3.3/5 (3 votes cast)