virtio_read_caps() 由于DPDK需要,无法映射PCI设备 绑定网络端口 到以下内核模块之一:
virtio_read_caps()
uio_pci_generic
igb_uio
vfio-pci
从版本1.4开始,DPDK应用程序不再自动解除绑定 所有受支持的网络端口都来自正在使用的内核驱动代替, 必须绑定DPDK应用程序要使用的所有端口 该 uio_pci_generic , igb_uio 要么 vfio-pci 申请前的模块 运行。 Linux *控制下的任何网络端口都将被忽略 DPDK轮询模式驱动程序,不能被应用程序使用。
因此,在运行DPDK KNI应用程序之前,我们应该这样做
$RTE_SDK/$RTE_TARGET/kmod/rte_kni.ko
$RTE_SDK/tools/dpdk_nic_bind.py
例如:
$ sudo insmod $RTE_SDK/$RTE_TARGET/kmod/igb_uio.ko $ sudo insmod $RTE_SDK/$RTE_TARGET/kmod/rte_kni.ko # Obtain ID of the network port $ python2 $RTE_SDK/tools/dpdk_nic_bind.py --status Network devices using DPDK-compatible driver ============================================ 0000:00:03.0 'Virtio network device' drv=igb_uio unused=vfio-pci,uio_pci_generic $ sudo python2 $RTE_SDK/tools/dpdk_nic_bind.py --bind=igb_uio 0000:00:03.0
哪里
$RTE_SDK
$RTE_TARGET
我相当确定 -netdev user 与您想要的不兼容,因为它传递TCP数据而不是整个以太网帧。根据 http://wiki.qemu.org/Documentation/Networking
-netdev user
用户网络是使用“slirp”实现的,它在QEMU中提供完整的TCP / IP堆栈,并使用该堆栈实现虚拟NAT网络。
您希望您的选项更像是指定的选项 http://www.dpdk.org/doc/guides/nics/virtio.html
-netdev tap,id=vm1_p1,ifname=tap0,script=no,vhost=on -device virtio-net-pci,netdev=vm1_p1,bus=pci.0,addr=0x3,ioeventfd=on