Virtio

什么是Virtio

Virtio是一种半虚拟化 I/O 设备虚拟化技术,用于在虚拟机管理程序(hypervisor)中实现虚拟设备。 它提供了一种通用的、高性能的设备模型和应用编程接口 (API),可以减少虚拟化开销并提高虚拟机的性能。

半虚拟化是一种虚拟化技术,它介于完全虚拟化和裸机运行之间。与完全虚拟化不同,半虚拟化需要对操作系统内核进行修改,使其意识到自己正在运行在虚拟化环境中。

为什么使用Virtio

Virtio的出现是为了解决传统虚拟化设备模拟的性能问题。传统虚拟化设备模拟通常需要在虚拟机管理程序和虚拟机之间进行多层数据复制,这会导致性能下降。Virtio通过半虚拟化技术将设备驱动程序的一部分功能移到虚拟机中,从而减少了数据复制的次数,提高了性能。

传统虚拟化

  • 完全虚拟化 完全虚拟化是一种完全模拟物理硬件的虚拟化技术。在这种方式下,虚拟机管理程序(Hypervisor)会创建一个虚拟的硬件环境,包括虚拟 CPU、虚拟内存、虚拟磁盘、虚拟网络等。虚拟机操作系统认为自己正在运行在真实的物理硬件上。完全虚拟化的实现方式主要有两种:

    • 软件二进制翻译:虚拟机管理程序会将虚拟机操作系统的二进制指令翻译成真实 CPU 可以执行的指令。这种方式可以支持任何操作系统,但性能会受到一定的影響。
    • 动态二进制翻译:虚拟机管理程序会在虚拟机操作系统运行时动态地翻译指令。这种方式可以提高性能,但需要对操作系统内核进行一些修改。
  • 硬件辅助虚拟化

    硬件辅助虚拟化是一种利用 CPU 和其他硬件提供的虚拟化功能的虚拟化技术。在这种方式下,虚拟机管理程序可以利用 CPU 的虚拟化扩展指令(如 Intel VT 或 AMD SVM)来提高虚拟化的性能和效率。硬件辅助虚拟化的实现方式主要有两种:

    • 全虚拟化:虚拟机管理程序仍然会模拟一部分硬件,但会利用 CPU 的虚拟化扩展指令来提高性能。
    • 半虚拟化:虚拟机操作系统需要进行一些修改,以便直接使用 CPU 的虚拟化扩展指令。这种方式可以获得更高的性能,但对操作系统的兼容性要求更高。

Virtio的主要优点包括:

  • 提高性能:Virtio通过减少数据复制的次数来提高虚拟机的性能。
  • 提高可靠性:Virtio使用共享内存机制进行通信,这可以提高虚拟机的可靠性。
  • 提高可移植性:Virtio提供了一种通用的设备模型,可以移植到不同的虚拟机管理程序和虚拟机操作系统中。

Virtio应用在哪里

Virtio主要用于虚拟机环境中,包括服务器虚拟化、桌面虚拟化和云计算等。

Virtio工作原理

Virtio采用前端-后端架构

  • 前端驱动程序(FE), FE驱动程序只需要提供配置接口、传递消息、生成请求和启动后端virtio驱动程序的服务。因此,FE驱动程序易于实现,并且消除了模拟设备的性能开销
  • 后端驱动程序(BE), BE驱动程序在主机操作系统的用户区或内核区运行,使用来自FE驱动程序的请求并将其发送到主机本地设备驱动程序。一旦主机本地设备驱动程序完成请求,BE驱动程序通知FE驱动程序请求完成
  • 前端驱动程序和后端驱动程序通过虚拟队列(Virtqueue)进行通信。虚拟队列是一种共享内存机制,用于在虚拟机管理程序和虚拟机之间传递数据。
  • virtio支持PCI/PCIe总线和MMIO总线

参考文章:https://projectacrn.github.io/latest/developer-guides/hld/hld-virtio-devices.html#virtio-apis