2024年3月29日发(作者:)

I/O虚拟化

1.I/O虚拟化三种方式:全虚拟化、半虚拟化和硬件辅助虚拟化

1.1全虚拟化:通过VMM模拟I/O设备(磁盘和网卡等)实现虚拟化。Guest OS所

能看到就是一组统一的I/O设备。VMM截获Guest OS对I/O设备的访问请求,然后通

过软件模拟真实的硬件。这种方式对Guest而言非常透明,无需考虑底层硬件的情况。

1.2半虚拟化:通过前端(Front-End)/后端(Back-End)模拟实现虚拟化。Guest OS

中的驱动程序为前端,VMM提供的与Guest通信的驱动程序为后端。前端驱动将

Guest OS的请求通过与VMM间的特殊通信机制发送给VMM的后端驱动,后端驱动在

处理完请求后再发送给物理驱动。

1.3硬件辅助虚拟化:主要有三种网卡:VT-d、VMDq直通和SR-IOV。

1)VT-d:由于基于软件的I/O虚拟化要求非常高的设备模拟开销,硬件辅助的I/O

虚拟化很关键。Intel的VT-d支持I/O DMA传输的重映射和设备产生的中断。VT-d结构

提供了支持多用途模型的灵活性,可以运行未修改的、特殊目的的、虚拟化感知的客户操

作系统。

2)VMDq:VMM在服务器的物理网卡中为每个虚机分配一个独立的队列,虚机出

来的流量可直接经过软件交换机发送到指定队列上,软件交换机无需进行排序和路由操作。

VMM和虚拟交换机仍然需要将网络流量在VMDq和虚机之间进行复制。

3)SR-IOV:通过创建不同虚拟功能(VF)的方式,给虚拟机的就是独立网卡,实

现虚拟机直接跟硬件网卡通信,不再经过软件交换机,减少了Hypervisor层的地址转换。

2.I/O虚拟化的实现:全设备模拟、半虚拟化和直接I/O

2.1全设备模拟:实现I/O虚拟化的第一种方式,该方法可以模拟一些知名的真实设

备。一个设备的所有功能或总线结构(如设备枚举、识别、中断和DMA)都可以在软件

中复制。该软件作为虚拟设备处于VMM中,客户操作系统的I/O访问请求会陷入到VMM

中,与I/O设备交互。体系结构如图:

1)客户设备驱动

2)虚拟设备:①实际设备建模②简单虚拟友好设备建模

3)虚拟设备和虚拟栈之间的通讯机制

4)虚拟化I/O栈:

①客户I/O地址翻译到主机地址

②处理虚拟机之间的通讯

③复用从或到物理设备的I/O请求

④提供企业级I/O特性

5)物理设备驱动