先介绍一下上下文:
我在VM0上安装并配置了OVS-DPDK [ubuntu + qemu/kvm + OVS-DPDK]。作为一个运行在VM0之上的客户,我有VM1 [ubuntu + dpdk]。
经过一番搜索,我能够在OVS中创建vhost-user-client端口,并在VM1中使用它。
现在我可以通过运行命令看到vhost-user-client端口的结果:
$ sudo dpdk-devbind.py --status
Network devices using kernel driver
===================================
0000:01:00.0 'Virtio network device 1041' if=enp1s0 drv=virtio-pci unused=vfio-pci *Active*
0000:07:00.0 'Virtio network device 1041' if=enp7s0 drv=virtio-pci unused=vfio-pci *Active* <--- this is it
但是,在使用命令
绑定它之后:sudo dpdk-devbind.py --bind=virtio-pci 0000:07:00.0
当运行dpdk-testpmd时,我得到nb转发端口=0
$ sudo dpdk-testpmd
EAL: Detected 3 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: No available hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
EAL: VFIO support initialized
EAL: Probe PCI driver: net_virtio (1af4:1041) device: 0000:01:00.0 (socket 0)
testpmd: No probed ethernet devices
testpmd: create a new mbuf pool <mb_pool_0>: n=163456, size=2176, socket=0
testpmd: preferred mempool ops selected: ring_mp_mc
Done
No commandline core given, start packet forwarding
io packet forwarding - ports=0 - cores=0 - streams=0 - NUMA support enabled, MP allocation mode: native
io packet forwarding packets/burst=32
nb forwarding cores=1 - nb forwarding ports=0
Press enter to exit
我在dmesg中没有看到任何线索,不知道还能去哪里看。
如何调试这个问题
正如评论中所暗示的那样,DPDK端口将使用uio_pci_generic | vfio-pci | igb_uio。因此,为了使virtio network device
与DPDK一起使用,它需要与vfio-pci
结合。
请按照如下步骤操作
- ifconfig enp7so down
- sudo modprobe vfio-pci(对于较新的内核可以跳过)
- sudo echo 1>/sys/模块/vfio/参数/enable_unsafe_noiommu_mode
- sudo dpdk-devbind.py——bind=vfio-pci0000:07:00.0
一个成功的dpdk应用程序可以使用virtio net
。
注意:正如评论中提到的,不清楚why virtio net device 0000:07:00.0 is bind with virtio-pci