GitHub - knuto/qemu: See the Wiki page below for details about the SR/IOV patch set
qemu模拟PCIe SRIOV设备 - 知乎
**注:SR/IOV补丁集现在是v.7.1.0中QEMU的一个组成部分**
See git://git.qemu.org/qemu.git for the official master project.
SR/IOV仿真修补程序(现在是上游)
作者已经实现了一组补丁程序来模拟虚拟机中的SR/IOV。这个补丁集应该是完全功能的,但在QEMU中缺少一个完全实现的示例设备。很明显,作者已经在他的设备模型上测试并广泛使用了它,该模型的格式不适合QEMU(目前),其他人也知道已经使用了补丁集并使用了它。
sriov_patches_v14分支中提供了此修补程序集的最新版本。
使用示例
感谢Łukasz Gieryk的工作lukasz.gieryk@linux.intel.com现在有一个使用上游QEMU中的SR/IOV补丁的NVME Express设备的工作示例。你可以得到一个简单的,最多3个VFS在你的虚拟机中使用,使用以下参数:
qemu-kvm -M q35 \...-device nvme-subsys,id=subsys0 \-device nvme,id=nvme0,bus=pcie.0,addr=4.0,serial=deadbead,subsys=subsys0,sriov_max_vfs=3,sriov_vq_flexible=6,sriov_vi_flexible=3
除了实际的SR/IOV仿真支持补丁之外,作者早期还编写了一些非常不完整的示例代码,以说明如何使用这些补丁。这个示例代码“模拟”了一个基于QEMU中e1000e实现的igb以太网设备。此代码是sriov_patches_v14中的最终提交
在v6中,这些修补程序在一定程度上可以演示修补程序集,但这还不算是一个有效的设备。
使用igb设备尝试SR/IOV代码
在任何带有igb驱动程序的Linux内核上,igb驱动将检测仿真设备并尽可能启用中断,因为实现只是部分的,所以这是不起作用的。
作者一直在使用通用的Qemu根端口来测试设备,例如,从以下内容开始
qemu-kvm -M q35 \...-device pcie-root-port,slot=2,id=pcie_port.2 \-device igb,bus=pcie_port.2
后面还有一些igb的例子;
1.lspci可以看到pf设备
2.使能sriov
rmmod igb modprobe igb max_vfs=2
3.lspci可以看到多了两个vf设备
03:10.0 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)03:10.2 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
4.echo 7 > /sys/bus/pci/devices/0000:03:00.0/sriov_numvfs
通过这个命令,也可生成7个vf设备
5.关闭vf
echo 0 > /sys/bus/pci/devices/0000\:03\:00.0/sriov_numvfs