文章目录
A、pci/pci设备透传
A1、qemu与其他商业软件的pci/pci-e设备透传介绍
功能区别
1、qemu目前仅支持透传
2、某些商业软件除支持透传外 还支持pci/pci-e设备重定向(需要bios的cpu设置中打开 Intel VT-d或者 AMD的AND Vi)
可透传的设备:显卡GPU、声卡、HBA卡、网卡、USB控制器等
注意:其中某些设备需要额外设置(IOMMU)才能透传(注意:Intel IOMMU 和IOMMU的区别哦)
透传前需要知道总线地址信息
提醒:qemu实现中有为设备直接分配准备的设备模型,包括pci-assgn、vfio-pci、vfio-vga等
A2、以网卡为例介绍pci/pci-e设备的透传
1、查看网卡的pci详细信息
lspci
......
02:05.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper)(rev 01)
#可见网卡型号 Intel 82545EM ,BDF号为 02:05.0
......
2、写一个域定义文件,类型pci,总线号0x02,物理设备号0x05,逻辑设备号0x0
cat >> pci-e1000.xml << EOF
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address domain='0x0000' bus='0x02' slot='0x05' function='0x0'/>
</source>
</hostdev>
3、使用virsh工具的 attach-device 参数将这个设备添加到虚拟机
virsh attach-device kvm7786 pci-e1000.xml
4、注意:并不是所有主机,虚拟机系统和pci、pcie设备都支持热插拔,不支持时热插拔可能导致虚拟机死机或者主机死机哦
B、usb设备透传
B1、usb设备介绍
1、设备上的usb一般包含:
控制器:控制器在主机上,主机可以同时有一个或多个usb控制器,控制器通过root hub提供接口供其他usb设备连接
外 设:可分为hub、存储、智能卡、加密狗、打印机等
2、常见的usb协议有:1.1、2.0、3.0、3.1(Type-C)等
3、可以对那些进行透传操作
usb控制器:可以进行透传
usb 外设:可以进行透传或者重定向
B2、对usb控制器进行透传
1、找到usb控制器对应的pci总线地址(usb控制器也位于pci总线上)
lspci -nn | grep -i usb
00:1a.0 USB controller [0c03]: Intel Corporation C610/X99 series chipset USB Enhanced Host Controller #2 [8086:8d2d](rev 05)
00:1d.0 USB controller [0c03]: Intel Corporation C610/X99 series chipset USB Enhanced Host Controller #1 [8086:8d26](rev 05)
2、查看外设简图确定要透传的usb接口(防止将主机的usb键鼠设备的控制器透传给虚拟机)
lsusb
3、参考上一节的驱动绑定,使用vfio-pci对usb控制器进行透传,假设要透传的控制器为2号控制器,
其 总线地址为: 00::1a.0
其 设备ID 为: 8086:8d26
echo 0000:00:1a.0 > /sys/bus/pci/devices/0000\:04\:10.0/driver/unbind
echo 8086 8d26 > /sys/bus/pci/drivers/vfio-pci/new_id
4.4、最后在qemu中添加如下参数
-device vfio-pci, host=00:1a.0, id=hostdev0, bus=pci.0 multifunction=on, addr=0x9
B3、对usb外设进行透传(该场景碰到的几率较高)
qemu下对usb外设的透传相对容易,只需要在域定义中添加对应的usb外设厂商和设备ID即可,以透传usb-key为例
1、查看设备总线地址和设备ID
lsusb
Bus 001 Device 001:ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003:ID 04b9:8001 Rainbow Technologies,Inc.
2、在域定义中添加设备ID,也可制定设备的总线地址
#<hostdev mode='subsystem' type='usb' managed='no' >
<hostdev mode='subsystem' type='usb' managed='yes' >
<source>
<vendor id='0x04b9'/>
<product id='0x8001'/>
</source>
</hostdev>
3、对应到qemu的参数是
"-device usb-host, vendorid=0x04b9, productid=0x8001"
或者 "-device usb-host, hostbus=1, hostaddr=3, id=hostdev0"
也可以是 "-usbdevice host:0529:0001"等形式
C、sr-iov(不太好写)
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论