virtio 是对半虚拟化 hypervisor 中的一组通用模拟设备的抽象。该设置还允许 hypervisor 导出一组通用的模拟设备,并通过一个通用的应用编程接口(API)让它们变得可用。下图展示了为什么这很重要。有了半虚拟化 hypervisor 之后,来宾操作系统能够实现一组通用的接口,在一组后端驱动程序之后采用特定的设备模拟。后端驱动程序不需要是通用的,因为它们只实现前端所需的行为。
virtio 提供了一套有效,易维护、易开发、易扩展的中间层 API。virtio 使用 Feature Bits 来进行功能扩展,使用 vring buffer 传输数据。使用 virtio 的设备在配置上于其他 PCI 设备没有太多不同,只不过它只应用于虚拟化环境。
Virtio 设备具备以下特点:
1. 简单易开发
virtio PCI 设备使用通用的 PCI 的中断和 DMA 机制,对于设备驱动开发者来说不会带来困难。
2. 高效
virtio PCI 设备使用针对输入和输出使用不同的 vring,规避了可能的由高速缓存带来的影响。
3. 标准
virtio PCI 不假定其所处的环境一定需要对 PCI 的支持,实际上当前很多 virtio 设备已经在非 PCI 总线上实现了,这些设备根本不需要 PCI。
4. 可扩展
virtio PCI 设备包含一组 Feature Bits,在设备安装过程中,可以告知 guest OS。设备和驱动之间相互协调,驱动可以根据设备提供的特性以及驱动自身能够支持的特性来最终确定在 guest OS 里面能够使用的设备特性。这样可以顾及到设备的前后兼容性。
因此,对与 guest OS 来说,只需要添加一个 PCI 设备驱动,然后 Hypervisor 添加设备的 vring 支持即可以添加一个 virtio 设备。