From 97fc5c2898782d78121df5df8b1a226fe6ae0c7b Mon Sep 17 00:00:00 2001 From: lion187 Date: Thu, 6 Dec 2018 16:18:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=96=87=E4=BB=B6=20Virtio.m?= =?UTF-8?q?d?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SoftVirtualization/Virtio.md | 81 ++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) diff --git a/Software/OperatingSystem/Virtualization/SoftVirtualization/Virtio.md b/Software/OperatingSystem/Virtualization/SoftVirtualization/Virtio.md index f0f0ee9..ea1eaf0 100644 --- a/Software/OperatingSystem/Virtualization/SoftVirtualization/Virtio.md +++ b/Software/OperatingSystem/Virtualization/SoftVirtualization/Virtio.md @@ -2,6 +2,22 @@ ## 1、基本概念 +Virtio 是一种标准虚拟化技术,virtio 设备能够像普通设备那样被 Guest 系统枚举和使用。Virtio 设备具备以下特点: + +* 简单易开发:virtio 设备使用通用的中断和 DMA 机制,对于设备驱动开发者来说不会带来困难。 +* 高效:virtio 设备使用针对输入和输出使用不同的 vring,规避了可能的由高速缓存带来的影响。 +* 标准:virtio 不假定其所处的环境。 +* 可扩展:virtio 设备包含一组 Feature Bits,在设备安装过程中,可以告知 guest OS。设备和驱动之间相互协调,驱动可以根据设备提供的特性以及驱动自身能够支持的特性来最终确定在 guest OS 里面能够使用的设备特性。这样可以顾及到设备的前后兼容性。 + +每个 virtio 设备由以下 4 部分构成: + +* 设备状态域(Device status field) +* 特征位(Feature bits) +* 设备配置空间(Device Configuration space) +* 一个或多个 Virtqueues + +### 1.1 设备状态域 + @@ -10,7 +26,7 @@ ## 3、Virtio 设备 -## 3.1、Virtio 设备类型 +### 3.1、Virtio 设备类型 主要分为 PCI 设备和非 PCI 的 mmio 设备。mmio 设备属于 Platform 设备,通过向 kernel 提供 @@ -35,6 +51,69 @@ Legacy 设备使用 CONFIGURATION ADDRESS(0xCF8) 和 CONFIGURATION DATA PORT 其他还有 virtio vop 设备和 virtio ccw 设备,vop 设备指 Intel Virtio Over PCIe (VOP) driver;ccw 指 Concurrent I/O (CIO) 设备。virtio vop 和 virtio ccw 是分别属于这两种类型的 virtio 设备。 +### 3.2、Virtio 设备 ID + +virtio 设备的 Vendor ID 为 0x1AF4,Subsystem device ID 如下: + +| Subsystem Device ID | Virtio Device | +|---------------------|-------------------| +| 1 | Network card | +| 2 | Block device | +| 3 | Console | +| 4 | Entropy source | +| 5 | Memory ballooning | +| 6 | IoMemory | +| 7 | Rpmsg | +| 8 | SCSI host | +| 9 | 9P transport | +| 10 | Mac80211 wlan | + +### 3.3、Virtio 设备的配置空间 + +需要使用 PCI 设备的第一块 I/O region 来对 PCI 设备进行配置。针对 virtio 设备来说,在 device 特定的配置区域后会有一块区域存放 virtio header(下表)。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Virtio MMIO Config Space
Offset Byte 0 Byte 1 Byte 2 Byte 3
0x000 Magic Value
0x004 Version
0x008 Device ID
0x00c Vendor ID
0x010 设备特征位 (R)
0x020 Guest 特征位 (RW)
0x030 Queue Address (RW)
0x034 Queue Size (R) Queue Select (RW)
0x050 Queue Notify (RW) 设备 Status (RW) ISR Status (R)
Offset+X+5 (如果使能了MSI-X) Configuration Vector (RW) Queue Vector (RW)
Offset+X+5/Offset+X+6(如果使能了MSI-X) 设备专属的 headers
+ ## 4、Virtqueue ## 5、Network Device