配置万兆网卡需要首先检查所需的目标ip地址,ddaq pl程序里面写有DST_IP,目标地址需要和万兆网卡的ip地址对应。
万兆网卡ip地址查询,在Ubuntu界面打开终端,在万兆网卡与外部设备连接的情况下,输入ifconfig,即可看到万兆网卡ip地址。
如果万兆网卡ip地址和程序发送UDP包的目标ip地址不一致,则需要修改其一为另一ip地址。程序ip地址修改后,重新生成比特流文件;万兆网卡ip地址修改,则需要修改网络配置文件。
另外,后续发送UDP包,同样需要网络配置文件里面配置巨型帧,此时也需要检查网络配置文件。
首先输入sudo -i,进入root模式。
之后输入cd /etc/netplan跳转到网络配置文件的对应路径。
再输入ls查看该目录下所有文件,找到配置文件。
之后以编辑模式打开配置文件,输入vim [网络配置文件名],打开后按insert键可进行编辑。
之后将万兆网卡ip地址修改为所需ip,同时配置巨型帧。
例如,如果要修改万兆网卡静态ip地址为192.168.1.100,并设置巨型帧MTU为9000,网络配置文件可以如下修改:
network:
version: 2
ethernets:
enp3s0: # 万兆网卡接口名称
addresses:
- 192.168.1.100/24 # 静态IP地址和子网掩码(/24对应255.255.255.0)
mtu: 9000 # 设置巨型帧 MTU 为 9000
之后按esc退出编辑模式,并输入:wq保存修改内容,然后输入network apply应用网络配置文件的相关配置。
之后进行udpdk的相关配置。
同样先输入sudo -i进入root模式。
之后输入cd /home/[中间路径名]/udpdk/deps/dpdk/usertools跳转到对应路径。
先运行脚本./dd.sh,脚本内集成很多需要输入的指令。
然后执行udpdk下的/deps/dpdk/usertools/dpdk-setup.sh,该脚本用于进行udpdk的相关配置。
首先分配大页内存。阅读脚本选项,其中48项用于配置大页内存:
[48] Setup hugepage mappings for non-NUMA systems
输入48进入配置界面,可以查看其中每个大页内存大小。我们需要配置总计至少2G的大页内存,因此根据每个大页内存大小进行分配。例如,如果脚本提示大页内存大小为2Mb,则需要1024个大页内存,因此需要输入1024。
之后需要绑定网络设备。输入52跳转:
[52] Bind Ethernet device to VFIO module
可以查看到相关网络设备:
Network devices using kernel driver
===================================
0000:03:00.0 'Ethernet Controller E810-C for QSFP 1592' if=enp3s0f0 drv=ice unused=vfio-pci
0000:03:00.1 'Ethernet Controller E810-C for QSFP 1592' if=enp3s0f1 drv=ice unused=vfio-pci
以上内容显示,每个设备有一行信息:PCI地址、设备型号、网络接口名、当前驱动或者未使用驱动。现在都用ice驱动,VFIO未使用,说明网卡由内核控制,可正常配置IP。但DPDK需要直接访问网卡,必须切换到VFIO驱动。
假设我们需要使用的是enp3s0f0网络接口,那么我们输入0000:03:00.0。输入后完成后续跳转,如果绑定成功,则可以再次在脚本功能选择界面输入52,此时会显示:
Network devices using kernel driver
===================================
0000:03:00.1 ‘Ethernet Controller E810-C for QSFP 1592’ if=enp3s0f1 drv=ice unused=vfio-pci
Network devices using DPDK-compatible driver
============================================
0000:03:00.0 ‘Ethernet Controller E810-C for QSFP 1592’ drv=vfio-pci unused=ice
此时表明我们已经将该网络接口和dpdk绑定。
之后输入62退出。
还是进入root模式,然后输入cd /home/[中间路径名]/udpdk/apps/dd跳转到对应路径。
输入ls查询该路径下有哪些程序,可以找到dpdk_enhance,该程序接收UDP包内容并将数据写入创建共享内存中。
运行该程序之前需要先确定共享内存未提前存在,root模式下输入cd /dev/shm,然后ls命令查询文件夹下内容,无任何显示表明共享内存没有提前存在。
确认后即可输入./dpdk_enhance -c config.yml运行程序,板卡发送udp包后,按ctrl C退出,此时可以在终端看到数据接收相关的信息。
如果要多次运行程序抓包,需要每次运行前都使用rm删除共享内存。另外,/udpdk/apps/dd路径下还有其他相关的测试程序,可以阅读程序内容了解程序功能。
本文章使用limfx的vscode插件快速发布