VMM 通过I/O虚拟化来复用有限的外设资源,其通过截获 Guest OS对I/O设备的访问请求,然后通过软件模拟真实的硬件,目前I/O设备的虚拟化方式主要有三种:设备接口完全模拟、前端/后端模拟、直接划分。 1、设备接口完全模拟: 即软件精确模拟与物理设备完全一样的接口,Guest OS驱动无须修改就能驱动这个虚拟设备,Vmware即使用此方法。 优点:没有额外的硬件开销,可重用现有驱动程序; 缺点:为完成一次操作要涉及到多个寄存器的操作,使得 VMM 要截获每个寄存器访问并进行相应的模拟,这就导致多次上下文切换;由于是软件模拟,性能较低。 2、前端/后端模拟: VMM 提供一个简化的驱动程序(后端, Back-End),Guest OS中的驱动程序为前端 (Front-End, FE),前端驱动将来自其他模块的请求通过与Guest OS间的特殊通信机制直接发送给Guest OS的后端驱动,后端驱动在处理完请求后再发回通知给前端,KVM即采用该方法。 优点:基于事务的通信机制,能在很大程度上减少上下文切换开销,没有额外的硬件开销; 缺点:需要VMM实现前端驱动,后端驱动可能成为瓶颈。 3、直接划分: 即直接将物理设备分配给某个 Guest OS,由Guest OS直接访问I/O设备(不经 VMM),目前与此相关的技术有IOMMU(Intel VT-d, PCI-SIG 之 SR-IOV 等),旨在建立高效的I/O虚拟化直通道。 优点:可重用已有驱动,直接访问减少了虚拟化开销; 缺点:需要购买较多额外的硬件。 (责任编辑:IT) |