DPDK — 安装部署
1、基础环境
1.1、硬件配置
1.2、操作系统要求
2、测试环境编译测试过程
2.1、升级GCC版本至GCC-7.3.0
步骤1 升级GCC依赖包设置
编译安装gmp:
cd /hometar -xvf /home/gmp-6.1.2.tar.bz2cd /home/gmp-6.1.2./configure --prefix=/usr/local/gmp-6.1.2makemake install
编译安装mpfr:
cd /hometar -zxvf mpfr-3.1.5.tar.gzcd /home/mpfr-3.1.5./configure --prefix=/usr/local/mpfr-3.1.5 --with-gmp=/usr/local/gmp-6.1.2makemake install
编译安装mpc:
cd /hometar -zxvf mpc-1.0.3.tar.gzcd /home/mpc-1.0.3./configure -prefix=/usr/local/mpc-1.0.3 -with-gmp=/usr/local/gmp-6.1.2 -with-mpfr=/usr/local/mpfr-3.1.5makemake install
安装isl:
cd /hometar -xvf /home/isl-0.18.tar.bz2cd /home/isl-0.18yum -y install gmp-devel./configure --prefix=/usr/local/isl-0.18 --with-gmp=/usr/local/gmp-6.1.2makemake install
步骤2 安装gcc 7.3.0
cd /hometar -zxvf gcc-7.3.0.tar.gzcd /home/gcc-7.3.0./configure --prefix=/usr/local/gcc-7.3.0 --enable-languages=c,c++,fortran --enable-shared --enable-linker-build-id --without-included-gettext --enable-threads=posix --disable-multilib --disable-nls --disable-libsanitizer --disable-browser-plugin --enable-checking=release --build=aarch64-linux --with-gmp=/usr/local/gmp-6.1.2 --with-mpfr=/usr/local/mpfr-3.1.5 --with-mpc=/usr/local/mpc-1.0.3 --with-isl=/usr/local/isl-0.18export LD_LIBRARY_PATH=/usr/local/mpc-1.0.3/lib:/usr/local/gmp-6.1.2/lib:/usr/local/mpfr-3.1.5/lib:/usr/local/gcc-7.3.0/lib64:/usr/local/isl-0.18/lib:/usr/local/lib:/usr/lib:$LD_LIBRARY_PATHexport PATH=/usr/local/gcc-7.3.0/bin:$PATH./configure --prefix=/usr/local/gcc-9.3.0 --enable-languages=c,c++,fortran --enable-shared --enable-linker-build-id --without-included-gettext --enable-threads=posix --disable-multilib --disable-nls --disable-libsanitizer --disable-browser-plugin --enable-checking=release --build=aarch64-linux --with-gmp=/usr/local/gmp-6.1.2 --with-mpfr=/usr/local/mpfr-3.1.5 --with-mpc=/usr/local/mpc-1.0.3 --with-isl=/usr/local/isl-0.18export LD_LIBRARY_PATH=/usr/local/mpc-1.0.3/lib:/usr/local/gmp-6.1.2/lib:/usr/local/mpfr-3.1.5/lib:/usr/local/gcc-9.3.0/lib64:/usr/local/isl-0.18/lib:/usr/local/lib:/usr/lib:$LD_LIBRARY_PATHexport PATH=/usr/local/gcc-9.3.0/bin:$PATHmake -j 40make -j 40 installgcc -v
步骤3 设置环境变量
在etc/profile文件添加:
vi /etc/profile
export LD_LIBRARY_PATH=/usr/local/mpc-1.0.3/lib:/usr/local/gmp-6.1.2/lib:/usr/local/mpfr-3.1.5/lib:/usr/local/gcc-7.3.0/lib64:/usr/local/isl-0.18/lib:/usr/local/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH=/usr/local/gcc-7.3.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/mpc-1.0.3/lib:/usr/local/gmp-6.1.2/lib:/usr/local/mpfr-3.1.5/lib:/usr/local/gcc-9.3.0/lib64:/usr/local/isl-0.18/lib:/usr/local/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH=/usr/local/gcc-9.3.0/bin:$PATH
步骤4 加载环境变量
生效
source /etc/profile
2.2、配置内存大页和系统启动设置
步骤1 修改sysctl.conf增加内存大页设置
vim /etc/sysctl.conf
vm.nr_hugepages = 120
步骤2 修改系统启动项增加iommu设置
vim /boot/efi/EFI/openEuler/grub.cfg
增加iommu.passthrough=1
设置完成后重启系统,执行cat /proc/cmdline确认设置是否生效
cat /proc/cmdline
2.3、编译安装DPDK版本19.08.2
步骤1 安装DPDK所需依赖包
安装numa库
yum install numactl-devel
安装libcap第三方软件,提供pcap.h
yum install libpcap-devel
步骤2 解压编译dpdk软件包
unzip dpdk-19.08.2.zipcd dpdk-19.08.2/
打开config/common_base文件中的 Mellanox网卡PMD驱动开关:
vi common_base
设置 CONFIG_RTE_LIBRTE_MLX5_PMD=y
设置 CONFIG_RTE_LIBRTE_MLX5_DEBUG=y
export RTE_TARGET=arm64-armv8a-linuxapp-gcc # 以当前环境CPU架构为准export RTE_SDK=/root/dpdk-19.08.2make install T=$RTE_TARGET
如果这里报错,在执行一次步骤1
步骤3 Mellanox网卡驱动安装
(1)Mellanox官网下载对应OS的Mellanox驱动
https://www.mellanox.com/page/products_dyn?product_family=27
(2)配置环境变量,现在rpm包编译使用的cpu核最大个数,否则编译报错
echo %_smp_ncpus_max 16 > ~/.rpmmacros
(3)安装驱动:
./mlnx_add_kernel_support.sh -m ./ --without-mlx5_fpga_tools --kmp -v./mlnxofedinstall --dpdk --upstream-libs --add-kernel-support/etc/init.d/opnibd restart
步骤4 添加dpdk环境变量
vi ~/.bashrc
export RTE_TARGET=arm64-armv8a-linuxapp-gcc # 以当前环境CPU架构为准
export RTE_SDK=/root/dpdk-19.08.2
将dpdk环境变量加入.bashrc文件中
source ~/.bashrc
2.4 、网卡绑定设置
DPDK会利用自己的igb_uio/vfio驱动来接管传统内核驱动,这样往往会导致一些问题,就是我们一些传统的类unix工具,诸如ifconfig、ip、ethtool等工具无法再查看被DPDK驱动接管的网卡状态。
在传统linux场景下,我向看一下网卡丢包原因、网卡寄存器状态、网卡的feature,通过一个ethtool就可以搞定,但是到了DPDK这里就行不通了,因为上述传统工具实际上都是去内核拿数据,ethtool底层就是用ioctl去读的内核数据,但是现在网卡驱动已经被DPDK驱动接管了,用ethtool再也拿不到信息了。
注意:
Mellanox网卡不需要绑定,Intel && Broadcom需要绑定,Intel && Broadcom需要使用DPDK驱动,绑定成功后在“ip a”下不可见
步骤1加载igb_uio模组
cd usertools/./dpdk-setup.sh
./dpdk-devbind.py --status
查看当前网卡状态
如果绑定的网卡状态是Active,需要执行:
ifconfig ethx down 或者 ifdown ethx
步骤2 绑定被测网口到用户态
./dpdk-devbind.py --bind=igb_uio 0000:bd:00.0 0000:bd:00.1./dpdk-devbind.py --status
绑定成功
2.5 、使用testpmd进行压力测试
该工具所在位置
cd /home/dpdk-stable-19.08.2/arm64-armv8a-linuxapp-gcc/build/app/test-pmd
备注:列出部分命令行参数意义,详细意义可以在DPDK官网获取。
参数 | 说明 |
---|---|
-c | 指定参与转发的CPU核掩码 |
-n | 指定系统内存通道个数 |
-w | 指定参与DPDK转发的网口的PCIE地址 |
–rxd/txd | 指定转发使用的网口队列深度 |
–txq/rxq | 指定参与转发的网卡队列数 |
–nb-cores | 指定实际参与转发的cpu核数 |
-i | 交互模式启动程序 |
开始测试 |
./testpmd -l 2-11 -n 4 -- -i --rxq=1 --txq=1 --rxd=4096 --txd=4096 --nb-cores=2 --burst=64 --mbuf-size=2048 --total-num-mbufs=20480 --mbcache=512
出现报错信息:testpmd: No probed ethernet devices
(1)如果你使用的是 Intel 的网卡,那么上述的步骤当然没有问题。但笔者使用了华为的网卡,所以还需要做一些适配的工作,需要安装华为方提供的网卡驱动。
(2)还有一种可能是内存不足造成的,绑定网卡后,导致大页内存分配不足,扩大内存就好了。
解决后:
testpmd> show port stats alltestpmd> set fwd txonlytestpmd> start
2.6 、网卡解绑
查看网卡状态:
./dpdk-devbind.py --status
进行解绑:
./dpdk-devbind.py -u 0000:01:00.1./dpdk-devbind.py -u 0000:01:00.0
再次查看网卡状态:
./dpdk-devbind.py --status
发现该网卡在Other里,无法正常使用
解绑后,需要再重新绑会原来的驱动,该卡原来的驱动是mlx5_core,执行:
./dpdk-devbind.py -b mlx5_core 0000:01:00.0
./dpdk-devbind.py -b mlx5_core 0000:01:00.1
查看网卡状态,恢复正常:
./dpdk-devbind.py --status
2.7 、运行例子
执行example/下的例子要先绑定网卡。
Helloworld,testpmd,skeleton的测试例子就不说了,l3fwd还不懂怎么构建拓扑,这里
详细说一下l2fwd二层转发的例子:
模型
这里用二张网卡测试,以上面的模型收发包。
运行:./build/l2fwd -c 0x50 -n 4 – -p 0x0c -q 1
参数分为两部分,以 – 分隔,前面部分是配置EAL环境的,后面是程序的参数
-c 0x50 是指用4,6两个核,-n 4指的是用4个内存通道。0x50是core的16进制掩码。
-p 0x0c 是指网卡的16进制掩码,即2,3两个口。
-q 1 是用一个无锁队列。
由于网卡是由DPDK接管的,是没有IP地址的,所以是以MAC地址通信。确定好各自的源MAC和目的MAC,类似于二层交换机的功能。
DPDK — 安装部署相关推荐
- DPDK — 安装部署(CentOS 7)
目录 文章目录 目录 官方手册 环境参数 环境准备 RT Kernel 基础软件依赖 设置大页内存 安装 DPDK 获取 DPDK 代码 设置环境变量 编译安装 目标环境目录 加载内核模块 绑定网卡到 ...
- DPDK — 安装部署(Ubuntu 18.04)
目录 文章目录 目录 环境参数 环境依赖准备 安装 DPDK 测试 附 1:Enable pcap 环境参数 Intel x86 Ubuntu 18.04 LTS Python 3.6 DPDK 18 ...
- 驱动 | 在linux下DPDK的部署及使用
本文列出可用于在linux系统上安装.编译.初步使用DPDK的不完全参考. Last Modified: 2022/1/22 驱动 | 在linux下DPDK的部署及使用 安装 参考链接 安装 概念 ...
- 使用 KubeKey 安装部署 Kubernetes 与 Kube-OVN
作者简介:林瑞超,锐捷网络开发工程师, KubeSphere 社区 contributor, 关注Kube-OVN, Cilium 等容器网络相关技术 背景 KubeKey 是 KubeSphere ...
- 2021年大数据Flink(三):Flink安装部署 Local本地模式
目录 Flink安装部署 Local本地模式 原理 操作 测试 Flink安装部署 Flink支持多种安装模式 - Local-本地单机模式,学习测试时使用 - Standalone-独立集群模式,F ...
- Mycat 读写分离 数据库分库分表 中间件 安装部署,及简单使用
MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服 ...
- 【SVN】1. SVN 安装部署
一. SVN概述 1. SVN 简介 Subversion 版本控制系统 简称 SVN. SVN 是一个跨平台开放源代码的集中式版本控制系统,可以实现文件及目录的保存及版本回溯. SVN ...
- Docker概述和安装部署
概述 Docker产生的背景 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后 ...
- DSVS7050签名服务器的网站,吉大正元数字签名服务器-安装部署手册(COM版 VCTK_S接口)2.1.1.doc...
吉大正元数字签名服务器-安装部署手册(COM版 VCTK_S接口)2.1.1 数字签名服务器v2.1.1 安装部署手册 (VSTK接口 COM版) V2.1.1 长 春 吉 大 正 元 信 息 技 术 ...
最新文章
- TextureView+MediaPlayer实现在线短视频播放
- Linux的inode的理解
- 继苏宁京东后 拼多多也宣布下调新款iPhone售价
- solr之搭建企业搜索平台,配置文件详细solrconfig.xml
- php mui.picker,www MUI框架里边有很多例子教你如何使用 开发手机界面 WEB(ASP,PHP,...) 251万源代码下载- www.pudn.com...
- springboot 对象 空指针_C++ this指针的理解和作用
- QT学习笔记之MySql如何计算两个时间段相隔的天数
- Confluence 6 目录中的数据库
- Unix网络编程 chart
- 算法 Tricks(五)—— 二进制逻辑运算
- 苹果Mac经典办公套件:Microsoft 365 支持辅助功能,高效工作
- 性能优化:要2个月才跑完的程序我是如何优化到到4小时的?
- javascript弹窗和基本数据类型
- python3中单引号,双引号,三个单引号 ,三个双引号的差别,以及反斜杠的用法
- OSChina 周三乱弹 ——发福利的日子到了!来领妹子!
- Duilib的界面设计工具DuiDesigner的使用说明
- <read papers>学术论文的基金项目和研究成果格式怎么标注?
- 眼球追踪如何预测头部追踪
- tensorflow 做多元线性回归时怎样对非数据型数据(分类型数据)进行处理(编码)
- Tornado框架简介
热门文章
- 【威胁通告】攻击者利用漏洞攻击Edimax WiFi桥接器
- JVM调优简单梳理,一分钟了解JVM调优
- kibana启动报错Error: Could not close browser client handle!
- geoip2配置及使用
- geoip php 获取城市,Laravel 中利用 GeoIP 获取用户地理位置信息
- 【细节呈现】用Python编写2048游戏(命令行版)
- python智能写作_闲人AI写作智能文章生成-文章伪原创-关键词生成文章工具
- 热门移动端H5开源前端开发框架搜集整理
- 认知的高度 = 人生的高度
- win10照片查看器_19个Win10使用小技巧,看看你知道哪些?