我的应用程序从NFS客户端接收数据到NFS服务器(用户空间NFS服务器 - NFS Ganesha),一旦在服务器中收到数据包,应用程序就开始处理数据包并发送出去。
我是DPDK的新手,我正在分析其中的功能,以了解和适应我的应用程序,以便通过避免从内核/用户空间进行一些数据复制来加速性能。
我发现KNI很有用,在启动KNI示例应用程序后,我看到了以下输出。 我也能看到新的接口vEth0_0和vEth1_0。但在分配IP之后,我甚至无法对这些接口执行ping操作。
$$ ./examples/kni/build/kni -n 4 -c 0xf0 - -P -p 0x3 --config =“(0,4,6,8),(1,5,7,9) )“
*Checking link status
.done
Port 0 Link Up - speed 10000 Mbps - full-duplex
Port 1 Link Up - speed 10000 Mbps - full-duplex
APP: Lcore 5 is reading from port 1
APP: Lcore 6 is writing to port 0
APP: Lcore 7 is writing to port 1
APP: Lcore 4 is reading from port 0
APP: Configure network interface of 0 up
PMD: ixgbe_set_rx_function(): Vector rx enabled, please make sure RX burst size no less than 32.
APP: Configure network interface of 1 up
PMD: ixgbe_set_rx_function(): Vector rx enabled, please make sure RX burst size no less than 32.*
所以我的问题是在DPDK中KNI样本应用的预期输出是多少? 我如何使用我的应用程序? (我可以使用vEth0_0接口进行操作,这样我就可以避免多个内核/用户空间复制)
更新: 通过将正确的GRUB选项设置为 iommu = pt,intel_iommu = on
,在主机中解决了上述问题问题2: 如何在VM中使用KNI? VM内部的KNI启动存在问题。
KNI: /dev/kni opened
KNI: Creating kni...
KNI: tx_phys: 0x000000017a6af140, tx_q addr: 0xffff88017a6af140
KNI: rx_phys: 0x000000017a6b1180, rx_q addr: 0xffff88017a6b1180
KNI: alloc_phys: 0x000000017a6b31c0, alloc_q addr: 0xffff88017a6b31c0
KNI: free_phys: 0x000000017a6b5200, free_q addr: 0xffff88017a6b5200
KNI: req_phys: 0x000000017a6b7240, req_q addr: 0xffff88017a6b7240
KNI: resp_phys: 0x000000017a6b9280, resp_q addr: 0xffff88017a6b9280
KNI: mbuf_phys: 0x0000000187c00000, mbuf_kva: 0xffff880187c00000
KNI: mbuf_va: 0x00002aaa32800000
KNI: mbuf_size: 2048
KNI: pci_bus: 00:03:00
KNI: Error: Device not supported by ethtool
答案 0 :(得分:1)
KNI应用程序中的问题是,它不会直接显示错误,因为存在DMA映射问题。 " dmesg的"在主机系统中显示DMA映射与网络设备有问题。
后来我发现设置内核选项" iommu = pt,intel_iommu = on "是igb_uio驱动程序需要的。所以在 / etc / default / grub 文件中设置并执行" update-grub" 后,我可以使用igb_uio驱动程序调出KNI接口并且网络堆栈工作正常。
Guest VM中的KNI仍无效。检查一下。