1. pci passthrough
1.1 概念
guest排他使用host上的某个PCI设备,就像将该设备物理连接到guest上一样
1.2 使用场景
- 提升性能(如直通网卡和显卡)
- 减少延迟(避免数据丢失或丢祯)
- 直接利用bare-metal上设备的驱动
1.3 配置方法
- 预先配置:
a. 打开bios中的VT-d设置
b. kernel引导配置iommu,参见文章 linux开启IOMMU方法 - pci直通配置方法
a. 识别设备
# virsh nodedev-list --tree |grep pci
b. 获取设备xml
# virsh nodedev-dumpxml pci_8086_3a6
c. detach设备
# virsh nodedev-dettach pci_8086_3a6c
d. 改动虚拟机xml文件(将dumpxml查询到的bus,slot,function填入)
<devices>
......
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
</source>
</hostdev>
......
</devices>
e. 启动虚拟机
2. pci passthrough (VFIO)
VFIO在kernel3.6/qemu1.4以后支持,眼下仅仅支持PCI设备。
VFIO是一套用户态驱动框架,提供两种基本服务:
- 向用户态提供设备訪问接口
- 向用户态提供配置IOMMU接口
VFIO能够用于实现高效的用户态驱动。
在虚拟化场景能够用于device passthrough。
通过用户态配置IOMMU接口,能够将DMA地址空间映射限制在进程虚拟空间中。
这对高性能驱动和虚拟化场景device passthrough尤其重要。
相对于传统方式,VFIO对UEFI支持更好。
VFIO技术实现了用户空间直接訪问设备。无须root特权,更安全。功能很多其它。
2.1 操作方法
- 安装kernel module
# sudo modprobe vfio
# sudo modprobe vfio-pci
- 虚拟机xml文件
操作类似与非VFIO方式,虚拟机xml配置有所区别
<devices>
......
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
</source>
<rom bar='off'/>
</hostdev>
......
</devices>