Linux系统下DPDK源码编译,testpmd的使用以及编译过程中遇到的问题,以及高版本DPDK meson+ninja编译步骤
ninja
a small build system with a focus on speed
项目地址:https://gitcode.com/gh_mirrors/ni/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
GitHub 加速计划 / ni / ninja
4
0
下载
a small build system with a focus on speed
最近提交(Master分支:3 个月前 )
dcefb838
Fix typo: Explaantions -> Explanations 6 个月前
2f19d3a0 - 6 个月前
更多推荐
已为社区贡献1条内容
所有评论(0)