ubuntu18.04下pass-through直通PCIe设备到qemu-kvm虚拟机实践

设备直通是一种虚拟化资源分配方式,通过将物理设备直通给虚拟机环境,达到使虚拟机可以直接访问物理设备的目的,直通功能对设备的要求不高,不需要设备支持SR-IOV PF/VF,目前市面上的显卡/网卡一般都支持直通。直通典型场景比如主机上有两块显卡,可以一块分配给主机用,另一块给虚拟机用,主板有集成显卡的可以采用将集成显卡给宿主机,PCIe的独立显卡给虚拟机用。

由于实验主机上没有两块GPU卡,但是有两块网卡,所以本篇的场景是将PCI以太网卡直通给QEMU虚拟机,HOST机上使用无线网卡,今天来探索一下PASS-THROUGH的玩法。

实践平台

环境安装

1.安装QEMU虚拟机环境以及虚拟机管理工具环境:

sudo apt-get install qemu-kvm qemu-system libvirt-bin  bridge-utils virt-manager ssh-askpass-gnome --no-install-recommends

2.默认BIOS中已经ENABLE了CPU虚拟化和设备虚拟化能力,所以这一步操作忽略。

3.Enable PCI IOMMU,参考如下文章:

Linux ion&dma-buf&iommu的原理_papaofdoudou的博客-CSDN博客

如果不启用IOMMU,则无法为PCI设备切换VFIO驱动:

4.确认需要穿透的pci设备和设备号,我们透传的设备如下图所示,Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller。

透传设备的地址BDF为:00000:02:00.0,设备ID为10ec:8168.

设置HOST机上的PCI设备

HOST端通过如下命令查看PCI设备信息

virsh nodedev-list --tree

首先在HOST端将PCI以太网卡设备解绑,将其驱动从默认的r8169切换为vfio-pci,这个过程中,主机的以太网络连接会中断,不过没有关系,主机上还有另外一个集成的无线网卡。

 执行如下命令查看当前设备信息:

$ virsh nodedev-dumpxml pci_0000_02_00_0

从设备信息中看到,设备驱动是r8169,设备的IOMMU分组是9。

查看IOMMU分组信息确实如此,分组为9

 下一步在HOST对设备解绑

$ virsh nodedev-detach pci_0000_02_00_0

解绑后,主机以太网卡功能已经失能,需要连接无线网卡。

此时我们需要加载内核的VFIO模块,由于默认UBUNTU18.04内核已经将vfio.ko,vfio-pci.ko两个模块builtin到内核中,所以这一步操作系统已经帮我们做了,不需要其它操作。

针对以太网卡设备使能VFIO驱动

执行如下命令,将系统的VENDOR和PRODUCT ID作为输入,写入vfio-pci/new_id节点,使能VFIO驱动,bind to vfio-pci Driver.(貌似执行前面的detach之后,这一步不是必须的)。

echo 10ec 8168 > /sys/bus/pci/drivers/vfio-pci/new_id

 执行后,再次查看设备信息,会发现其驱动已经从r8196切换为vfio-pci:

确认IOMMU分组,隶属于同一个IOMMU GROUP的设备必须整体透传给虚拟机,不允许存在部分透传的情况,在没有加载vfio-pci驱动时,/dev/vfio/9是不存在的,在加载vfio-pci后,GROUP设备节点产生,IOMMU GROUP中的所有设备均可以透传给虚拟机了。

前述操作总结起来,目的是将待透传设备的原驱动替换为vfio-pci驱动,除了前面用VIRT工具来操作,其

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

papaofdoudou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值