1、设备直接分配技术
如何提高虚拟化设备的性能问题是虚拟化领域长期的研究重点。如前所述,设备模拟模型会导致虚拟化性能大大下降;泛虚拟化设备模型虽然在性能上拥有一定的优势,但由于需要修改操作系统,具有局限性.。并且当前的两种I/O设备虚拟化模型已无法满足高速的数据交换需求,应运而生的就是另外一种设备虚拟化模型——设备直接分配模型。
传统的实现I/O虚拟化的技术中,所有的虚拟机都共享物理平台上的硬件设备。如果物理条件好,有足够的硬件,就可以考虑让每个虚拟机独占一个物理设备,这样无疑会提高系统的性能。把某一个设备直接分配给一个虚拟机,让虚拟机可以直接访问该物理设备而不需要通过虚拟机监视器或被虚拟机监视器截获,这就是设备直接分配技术。如下图所示为设备直接分配的I/O模型。
在设备直接分配模型中,虚拟机操作系统可直接拥有某一物理设备的访问控制权限,虚拟机监视器不再干涉其访问操作。因此,该模型可以较大地改善虚拟化设备的性能,降低监视器程序的复杂性,易于实现,并且不需要修改操作系统,保证了高可用性。
2、设备直接分配模块设计与实现
设备直接分配设备模型的设计主要包括了四个部分,分别是:设备隐藏模块、建立抽象设备模块,客户机N启动模块以及设备分配模块。
2.1 设备隐藏子模块设计
在虚拟化系统中,有一个特权虚拟域domain 0,这个虚拟域会在其它所有虚拟域之前启动,并且所有的设备都会被分配给这个domain 0,再由domain 0去分配和管理。而domain 0除了接管这些设备外还可以使用这些设备。Linux操作系统在启动设备的时候会检测是否存在相关驱动,若存在,则使用这个驱动。设备直接分配技术的关键点在于,设备被一个虚拟机独占,其他虚拟机不能够使用这个设备。因此会存在一个问题:如果domain 0里有这个设备的驱动便会占领该设备,那么如何再将设备分配给本来想分配的虚拟机呢?
隐藏设备的意义便是在于让domain 0接管设备但是不使用设备,在xen中提供了一个pciback模块,这个模块用于对设备进行隐藏。由于Linux里面的设备驱动是有优先级的,当一个设备存在多个不同的驱动可以使用时,Linux只会为设备加载优先级最高的那个驱动,