一. 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- 2048 kB/ nr_hugepages
echo 4096 > / sys/ devices/ system/ node/ node1/ hugepages/ hugepages- 2048 kB/ 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:
1. sudo yum install openssl- devel bzip2- devel expat- devel gdbm- devel readline- devel sqlite- devel libffi- devel
2. 下载Python3. 8 源码包:
wget https:
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:
centos:
pip3 install meson - i http:
源码安装:
meson源码下载网站: https:
这里已 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:
源码下载网站:https:
3.ninja 安装
命令安装:
ubuntu :
pip3 install ninja - i http:
centos:
pip3 install ninja - i http:
源码安装:
ninja源码下载网站: https:
前提:re2c已安装, 源码下载网站: https:
安装re2c:
1. yum install autoconf
2. cd re2c- master
3. . / autogen. sh
4. . / configure
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