共计 2149 个字符,预计需要花费 6 分钟才能阅读完成。
这篇文章主要介绍“什么是 IO 设备虚拟化”,在日常操作中,相信很多人在什么是 IO 设备虚拟化问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是 IO 设备虚拟化”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!
IO 虚拟化是计算机虚拟化最复杂的部分,因为涉及到 CPU、操作系统、Hypervisor 以及 IO 设备的相互配合。IO 虚拟化也经历了从软件模拟虚拟化、类虚拟化向完全硬件虚拟化的转变。
1.IO 软件模拟虚拟化和类虚拟化
IO 设备虚拟化场景,既要关注 IO 设备模拟,也要关注 vCPU 和虚拟 IO 设备的交互,许多条件交织在一起,使得整个问题变的非常复杂。IO 虚拟化性能代价主要体现在三个方面:驱动访问设备寄存器的代价;设备通过中断和 DMA 访问驱动的代价;设备模拟本身的代价。因此,IO 虚拟化性能优化主要是通过五个角度:
减少 IO 访问寄存器的代价:一方面是把部分 IO 的访问变成 MMIO 访问,这样就不需要陷入 Hypervisor;另一方面是优化 VM-exit/VM-entry 切换的代价。
减少 IO 访问的次数:比如简化通知机制,简化虚拟化设备功能等。
优化中断:主要有如 APIC 的中断硬件虚拟化或者不需要中断的轮询驱动。
减少 DMA 访问的代价:通过 IOMMU 等实现 Pass Through 模式。
减少设备模拟的代价:则主要是通过硬件 SR-IOV 机制实现硬件设备。
如图 3.30(a),虚拟机中看到的设备,一般是由 Hypervisor 模拟出来的。虚拟设备的功能,可以少于也可以多于物理的设备,甚至可以模拟出一些不存在的特性,模拟出不存在的硬件设备。通过 IO 软件模拟的方式,我们称之为 IO 设备软件模拟虚拟化。在 IO 软件模拟虚拟化的解决方案中,客户机 VM 要使用底层的硬件资源,需要 Hypervisor 来截获每一条请求指令,然后模拟出这些指令的行为。我们都知道 Hypervisor 截获指令的动作就是从 VM-exit,处理完模拟然后再 VM-entry 的过程,这个过程的代价很高,每条指令都要如此,带来的性能开销必然是非常庞大的。
如图 3.30(b) 所示,Virtio 提供的类虚拟化方式,客户机完成设备的前端驱动程序,Hypervisor 配合客户机完成相应的后端驱动程序,这样两者之间通过交互机制就可以实现高效的虚拟化过程。
图 3.30 IO 设备虚拟化
Virtio 框架如图 3.31 所示,使用 Virtqueue 来实现其 IO 机制,每个 Virtqueue 就是一个承载大量数据的 Queue。VRing 是 Virtqueue 的具体实现方式,针对 VRing 会有相应的描述符表格进行描述。Virtio 是一个通用的驱动和设备接口框架,基于 Virtio 分别实现了 Virtio-net、Virtio-blk、Virtio-scsi 等很多不同类型的模拟设备及设备驱动。
图 3.31 Virtio 框架
Virtio 类虚拟化比传统的 IO 设备软件模拟的性能优势体现在:很多控制和状态信息不需要通过寄存器读写操作来交互的,而是通过写入 Virtqueue 的相关数据结构来让驱动(Driver)和设备(Device)双方交互。并且在数据交互的时候,只需要在一定批量数据变化需要对方处理的时候才会通知对方,驱动通知设备是通过写 Kick 寄存器,设备通知驱动是通过中断。
2.IO 完全硬件虚拟化
评价 IO 虚拟化技术的两个指标——性能和通用性。性能,当然是越接近无虚拟化环境下的 IO 性能最好;而通用性,则是 IO 虚拟化对客户操作系统越透明越好。要想要高性能,最直接的方法就是让客户机直接使用真实的硬件设备;要想要通用性,则是要用想办法让客户机操作系统自带的驱动程序能够发现设备并操作设备。
客户机直接操作设备面临两个问题:第一,如何让客户机直接访问到设备真实的 IO 地址空间(包括 IO 和 MMIO);第二,如何让设备的 DMA 直接访问客户机的内存空间。内存硬件虚拟化的 EPT 技术可以解决第一个问题。而 VT- d 技术则用来解决第二个问题。VT- d 技术主要是引入地址重映射(IOMMU+IOTLB),负责提供重映射和设备直接分配。从设备端的 DMA 访问,都会进入地址重映射进行地址转换,使得设备可以访问到对应客户机特定的内存区域。
VT- d 技术虽然可以将物理的 IO 设备直接透传给虚拟机,但是一台计算机系统受限于接口,可以连的物理设备毕竟有限。因此,PCIe SR-IOV 技术应运而生。通过 PCIe SR-IOV 技术,一个物理 IO 设备可以虚拟出多个虚拟设备,分配给虚拟机使用。
如图 3.30(c) 所示,SR-IOV 引入了两个 PCIe 的功能类型:
PFs(Physical Functions):包括管理 SR-IOV 功能在内的所有 PCIe 设备。
VFs(Virtual Functions):轻量级的 PCIe 设备,只能进行必要的配置和数据传输。
Hypervisor 把 VF 分配给虚拟机,通过 IOMMU 等硬件辅助技术提供的 DMA 数据映射,直接在虚拟机和硬件设备之间传输数据。
到此,关于“什么是 IO 设备虚拟化”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!