I/O虚拟化技术
当虚拟化后,服务器的以太网端口被分割为多个后,网络、存储以及服务器之间的流量可能就不够用了。当遇到I/O瓶颈时,CPU会空闲下来等待数据,计算效率会大大降低。所以虚拟化也必须扩展至I/O系统,在工作负载、存储以及服务器之间动态共享带宽,能够最大化地利用网络接口。
I/O虚拟化的目标是不仅让虚拟机访问到它们所需要的I/O资源,而且要做好它们之间的隔离工作,更重要的是,减轻由于虚拟化所带来的开销。
全虚拟化: 通过模拟I/O设备(磁盘和网卡等)来实现虚拟化。对Guest OS而言,它所能看到就是一组统一的I/O设备,VMM截获Guest OS对I/O设备的访问请求,然后通过软件模拟真实的硬件。这种方式对Guest而言非常透明,无需考虑底层硬件的情况。比如Guest操作的是磁盘类型、物理接口等等。
半虚拟化: 通过前端、后端架构,将Guest的I/O请求通过一个环状队列传递到特权域(也被称为Domain0)。因为这种方式的相关细节较多,所以会在后文进行深入分析。
硬件辅助虚拟化: 最具代表性莫过于Intel的VT-d/VT-c,AMD的IOMMU和PCI-SIG的IOV等。这种技术也需要相应网卡配合实现,目前常见的网卡分为普通网卡、VMDq直通和SR-IOV。
普通网卡采用Domin0网桥队列。
VMDq通过VMM在服务器的物理网卡中为每个虚机分配一个独立的队列,虚机出来的流量可直接经过软件交换机发送到指定队列上,软件交换机无需进行排序和路由操作,Hyper-V就是采用这种模式。
SR-IOV通过创建不同虚拟功能(VF)的方式,给虚拟机使用物理独立网卡,实现虚拟机直接跟硬件网卡通信,不再经过软件交换机,减少了虚拟化管理程序层的地址转换。
Intel硬件对虚拟化支持
VT-x技术 为IA 32 处理器增加了VMX root operation 和 VMX non-root operation两种操作模式。VMM自己运行在 VMX root operation 模式,GuestOS运行在VMXnon-root operation 模式。两种操作模式都支持 Ring0-Ring 3特权运行级别,因此 VMM和 Guest OS 都可以自由选择它们所期望的运行级别。允许虚拟机直接执行某些指令,减少VMM负担。VT-x指至强处理器的VT技术,VT-i指安腾处理器的VT技术。
VT-d(VT for Direct I/O)主要在芯片组中实现,允许虚拟机直接访问I/O设备,以减少VMM和CPU的负担。其核心思想就是让虚拟机能直接使用物理设备,但是这会牵涉到I/O地址访问和DMA的问题,而VT-d通过采用DMA重映射和I/O页表来解决这两个问题,从而让虚拟机能直接访问物理设备。
VT-c(VTfor Connectivity)主要在网卡上实现,包括两个核心技术VMDq和VMDc。VMDq通过网卡上的特定硬件将不同虚拟机的数据包预先分类,然后通过VMM分发给各虚拟机,以此减少由VMM进行数据包分类的CPU开销。VMDc允许虚拟机直接访问网卡设备,Single Root I/O Virtualization(SR-IOV)是PCI-SIG规范,可以将一个PCIe设备分配给多个虚拟机来直接访问。
可信执行技术(TXT)通过使用高级的模块芯片,可以有效确保用户计算机免受各种安全威胁。主要是通过硬件内核和子系统来控制被访问的计算机资源。使得计算机病毒、恶意代码、间谍软件和其他安全威胁将不复存在。
GPU及GPU虚拟化技术
GPU直通将GPU设备直通给虚拟机;GPU共享则将GPU设备直通给GPU server虚拟机,GPU server可与GPU client共享其 GPU设备;GPU虚拟化是指将GPU设备可虚拟化为n个vGPU,对应的n个虚拟机可同时直接使用该GPU设备,支持虚拟化的GPU设备可配置为直通或虚拟化类型。
GPU虚拟化通过VGX GPU硬件虚拟化功能,把一个物理GPU设备虚拟为多个虚拟GPU设备供虚拟机使用,每个虚拟机通过绑定的vGPU可以直接访问物理GPU的部分硬件资源,所有vGPU都能够分时共享访问物理GPU的3D图形引擎和视频编解码引擎,并拥有独立的显存。
GPU虚拟化功能支持将一个物理GPU设备可同时供多个虚拟机使用,而GPU直通中一个GPU设备只能给一个虚拟机使用。GPU虚拟化使同时使用同一GPU物理设备的虚拟机间互不影响,系统自动分配物理GPU设备的处理能力给多个虚拟机,而GPU共享是通过GPU server挂载GPU设备,在主机上建立GPU Server与GPU client的高速通讯机制,使得GPU client可以共享GPU server的GPU设备,GPU client是否享有GPU功能完全依赖于GPU server。