1.首先,下载以及编译
官网下载DPDK源码, DPDK官网 : dpdk.org
以dpdk-20.08为例,下载完成后,
cd 到源码所在路径
1. 指定DPDK安装路径, 设置所需的环境变量并转到源目录
export RTE_SDK=/dpdk-20.08
2. ls ./config
3. make config T=x86_64-native-linux-gcc
4. 设置编译目标
export RTE_TARGET=build
5. make
2.编译之后,运行前的设置(大页面内存,导入igb_uio.ko驱动,绑定网卡)
1.设置大页内存
echo 4096 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
echo 4096 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
2.导入igb_uio驱动
modprobe uio
insmod ./build/kmod/igb_uio.ko
3.绑定网卡
./usertools/dpdk-devbind.py --bind=igb_uio pci_1
./usertools/dpdk-devbind.py --bind=igb_uio pci_2
3.运行testpmd
1.设置动态库查找路径
export LD_LIBRARY_PATH=/dpdk-20.08/build/lib
2.使用testpmd
./testpmd -l 0-3 -n 4 -- -i --portmask=0x1 --nb-cores=2(实际上要比这些多)
4.testpmd启动参数
-w 绑定网卡
-c 使用哪些核 ff 代表1111 1111 八个核
-n 内存通道数
-q 每个cpu管理的收发队列
-p 使用的端口
--nb-cores=N 设置转发核心数
--rxq=N 将每个端口的 RX 队列数设置为 N
--rxd=N 将RX环中的描述符数量设置为N
--txq=N 将每个端口的 TX 队列数设置为 N
--txd=N 将TX环中的描述符数量设置为N
--burst=N 将每个突发的数据包数设置为 N。默认值为 32。
5.testpmd启动后,函数
> set fwd io/txonly/rxonly/txrx 设置模式
> show port stats all 显示所有端口信息
> set txpkts N 设置包的长度为N
> set pktc N 设置报的数量为N,0XFFFF代表一直发
> read reg <port_id> <reg_off> 读寄存器的值 读某个特定的bar空间,要修改 app/test-pmd/testpmd.h
6.整个过程中,遇到的问题以及解决
1.运行dpdk: open pci error
解决方法: echo"">/etc/xnic/driver_cfg
2.网卡绑定有误
1.查看绑没绑上 ./usertools/dpdk-devbind.py -s
2.ifconfig
3.ifconfig p2p1 down 先down掉
4.重新绑定 ./usertools/dpdk-devbind.py --bind=igb_uio pci_1
./usertools/dpdk-devbind.py --bind=igb_uio pci_2