Networking in Virtualized Worlds

In addition to the CPU itself, other devices and peripherals -- such as USB ports and network interfaces -- need to be virtualized.

Donning my blogger's hat makes me switch worlds from active code development on Linux to document editing on Windows. Things have come a long way from partitioning your disk and dual booting. Today, you can run a Windows application within Linux or run one operating system within another.

Until recently, I was relatively unfamiliar with the concept of running one OS inside another. Then a colleague who works on SR-IO virtualization educated me about the different variants and told me that this type is called Type 2 virtualization. To explain this in little more detail, a thin layer of system software -- which goes by the cool name of "hypervisor" -- performs this magic.

The hypervisor software is at the heart of virtualization. It virtualizes a processor such that multiple operating systems can run on it concurrently. To achieve this, the CPUs' internal resources and their states need to be saved and restored. Such save-restore schemes, when performed repeatedly, can result in significant performance drain, which is awkward when virtualization is opening up new markets for SoC vendors. To address this, CPUs are being equipped with hardware support for virtualization, including extra-privilege levels and virtual memory management.

Traditionally, hypervisors have been classified as Type 1 and Type 2. As illustrated in Figure 1, a Type 1 hypervisor is a bare-metal implementation that sits right-on-top of the hardware.

Figure 1

Type 1 virtualization.

By comparison, a Type 2 hypervisor runs as a program under the host operating system, as illustrated in Figure 2.

Figure 2

Type 2 virtualization.

These days, however, the distinction is becoming rather blurred. In some instances, it becomes a little difficult to identify which hypervisor is of which type.

In addition to the CPU itself, other devices and peripherals on the SoC -- such as USB ports and network interfaces -- need to be virtualized. There are two main approaches to device virtualization: full virtualization and para-virtualization.

Full virtualization is implemented in the case of Type 1 hypervisors with guest operating systems being unaware of the fact that they are running on a hypervisor. This means that all the devices have to be completely emulated, with the drivers in the guest operating system executing as if they were running on actual hardware.

By comparison, in the case of para-virtualization, guest operating systems are aware that they are running on a hypervisor, and their device drivers will have been modified to interact with their hypervisor counterparts.

If you have many different files to look at and are also into the development then multiple OS works very well. I like Ubuntu, its the stable OS, my laptop never crashed. When I had Windows it used to get blue screen so often.