Linux系统下DPDK源码编译,testpmd的使用以及编译过程中遇到的问题,以及高版本DPDK meson+ninja编译步骤

一. dpdk-20.08

1.首先,下载以及编译

依赖库安装:
ubuntu:
apt-get install libnuma-dev
centos:
yum install libnuma-devel 以及 yum install numactl-devel

官网下载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
或者
modprobe uio_pci_generic


3.绑定网卡
./usertools/dpdk-devbind.py --bind=igb_uio pci_1
./usertools/dpdk-devbind.py --bind=igb_uio pci_2

./usertools/dpdk-devbind.py --bind=uio_pci_generic pci_1
./usertools/dpdk-devbind.py --bind=uio_pci_generic pci_2
eg: ./usertools/dpdk-devbind.py --bind=igb_uio 01:00.0

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		设置模式 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

一个包要包含多个mbuf(需要驱动支持)
> port stop all
> port config 0 tx_offload multi_segs on  开启0口multi_segs功能
> port start all
> set fwd txonly
> set txsplit on
> set txpkts 64,128,256		        包含3个mbuf,长度各为 64,128,256
> start 

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
	

7.DPDK抓包工具dpdk-pdump使用

1.修改编译宏
vim config/common_base
修改内容:
CONFIG_RTE_LIBRTE_PMD_PCAP=y
CONFIG_RTE_PORT_PCAP=y
保存
2.重新编译
3.启动testpmd,如果是动态库:
./build/app/testpmd -d ./build/lib/librte_pmd_xxx.so -d ./build/lib/librte_mempool_ring.so -d ./build/lib/librte_pmd_pcap.so -cff -n4 -w 0000:01:00.0 -- -i --nb-cores=6 --rxq=1 --txq=1 --rxd=2048 --txd=2048 --burst=64 --mbuf-size=4224 --total-num-mbufs=262144
4.启动dpdk-pdump
./build/app/dpdk-pdump.so -d ./build/lib/librte_pmd_xxx.so -d ./build/lib/librte_mempool_ring.so -d ./build/lib/librte_pmd_pcap.so --proc-type=secondary -- --pdump 'port=0,queue=9,rx-dev=/stdio/dpdk-stable-19.11.3/1.pcap'
注意:
使用该工具会对性能有影响,建议仅在DEBUG时使用。

二. dpdk-21.11.4

1. 首先,下载以及编译

Centos7需要python3.7的版本机或者更高,参考 https://blog.csdn.net/laoliushequ/article/details/130030115
1. sudo yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel libffi-devel
2. 下载Python3.8源码包:
wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz
3. 
tar -zxvf Python-3.8.0.tgz
cd Python-3.8.0
4.
./configure --enable-optimizations
make altinstall
5.
python3.8 --version
6.
sudo ln -sf /usr/local/bin/python3.8 /usr/bin/python3
7.
python3 --version
官网下载DPDK源码, DPDK官网 : dpdk.org
以dpdk-21.11.4为例,下载完成后,
cd 到源码所在路径
6. tar -xvf dpdk-stabel-21.11.4.tar.rz
7. cd  dpdk-stabel-21.11.4
8. meson build
9. ninja -C build
10. cd build
11. ninja install

2.meson 安装

命令安装:
ubuntu :
 pip3 install meson -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
centos:
 pip3 install meson -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
源码安装:
meson源码下载网站: https://github.com/mesonbuild/meson/tree/master
这里已 meson-0.60.0为例,  安装时候可能要注意python版本,python版本过低的话需要升级。
1. tar -xvf meson-0.60.0.tar.gz 
2. cd meson-0.60.0
3. python3 setup.py build
4. python3 setup.py install (默认安装到/usr/local)
这里要注意如果原先有低版本的meson,需要修改
1. vim ~/.bashrc
2. # 最后添加一行
export PATH=~/.local/bin:$PATH
3. source ~/.bashrc
1. meson build
报错:  ERROR: Problem encountered: missing python module: elftools
安装: 
pip3 install pyelftools -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
源码下载网站:https://github.com/eliben/pyelftools

3.ninja 安装

命令安装:
ubuntu :
 pip3 install ninja -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
centos:
 pip3 install ninja -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
源码安装:
ninja源码下载网站:              https://github.com/ninja-build/ninja
前提:re2c已安装, 源码下载网站: https://github.com/skvadrik/re2c

安装re2c:
1. yum install autoconf
2. cd re2c-master
3. ./autogen.sh
4. ./configure //这里有可能因python版本过低失败,需升级python
               // python升级参考 
5. make
6. make install
安装 ninja
7. unzip ninja-master.zip
8. cd ninja-master
9. ./configure.py --bootstrap
10. cp ninja /usr/bin/ 
如果有旧版本ninja先删除,
rm -Rf /usr/local/bin/ninja
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值