《KVM实战:原理、进阶与性能调优》 —2.1.3 I/O虚拟化
2.1.3 I/O虚拟化
在虚拟化的架构下,虚拟机监控器必须支持来自客户机的I/O请求。通常情况下有以下4种I/O虚拟化方式。
1)设备模拟:在虚拟机监控器中模拟一个传统的I/O设备的特性,比如在QEMU中模拟一个Intel的千兆网卡或者一个IDE硬盘驱动器,在客户机中就暴露为对应的硬件设备。客户机中的I/O请求都由虚拟机监控器捕获并模拟执行后返回给客户机。
2)前后端驱动接口:在虚拟机监控器与客户机之间定义一种全新的适合于虚拟化环境的交互接口,比如常见的virtio协议就是在客户机中暴露为virtio-net、virtio-blk等网络和磁盘设备,在QEMU中实现相应的virtio后端驱动。
3)设备直接分配:将一个物理设备,如一个网卡或硬盘驱动器直接分配给客户机使用,这种情况下I/O请求的链路中很少需要或基本不需要虚拟机监控器的参与,所以性能很好。
4)设备共享分配:其实是设备直接分配方式的一个扩展。在这种模式下,一个(具有特定特性的)物理设备可以支持多个虚拟机功能接口,可以将虚拟功能接口独立地分配给不同的客户机使用。如SR-IOV就是这种方式的一个标准协议。
表2-1展示了这4种I/O虚拟化方式的优缺点,给读者一个概括性的认识。在这4种方式中,前两种都是纯软件的实现,后两种都需要特定硬件特性的支持。
表2-1 常见I/O虚拟化方式的优缺点
设备直接分配在Intel平台上就是VT-d(Virtualization Technology For Directed I/O)特性,一般在系统BIOS中可以看到相关的参数设置。Intel VT-d为虚拟机监控器提供了几个重要的能力:I/O设备分配、DMA重定向、中断重定向、中断投递等。图2-5描述了在VT-d硬件特性的帮助下实现的设备直接分配的架构,并与最传统的、通过软件模拟设备的I/O设备虚拟化进行了对比。
图2-5 使用VT-d与传统设备完全模拟的虚拟化架构对比
尽管VT-d特性支持的设备直接分配方式性能可以接近物理设备在非虚拟化环境中的性能极限,但是它有一个缺点:单个设备只能分配给一个客户机,而在虚拟化环境下一个宿主机上往往运行着多个客户机,很难保证每个客户机都能得到一个直接分配的设备。为了克服这个缺点,设备共享分配硬件技术就应运而生,其中SR-IOV(Single Root I/O Virtualization and Sharing)就是这样的一个标准。实现了SR-IOV规范的设备,有一个功能完整的PCI-e设备成为物理功能(Physical Function,PF)。在使能了SR-IOV之后,PF就会派生出若干个虚拟功能(Virtual Function,VF)。VF看起来依然是一个PCI-e设备,它拥有最小化的资源配置,有用独立的资源,可以作为独立的设备直接分配给客户机使用。Intel的很多高级网卡如82599系列网卡就支持SR-IOV特性,一个85299网卡PF就即可配置出多达63个VF,基本可满足单个宿主机上的客户机分配使用。当然,SR-IOV这种特性可以看作VT-d的一个特殊例子,所以SR-IOV除了设备本身要支持该特性,同时也需要硬件平台打开VT-d特性支持。图2-6展示了一个Intel以太网卡支持SR-IOV的硬件基础架构。
图2-6 支持SR-IOV的Intel网卡架构图
- 点赞
- 收藏
- 关注作者
评论(0)