使用pktgen发包程序测试程序的收包

ifconfig eth2 up

执行下面的脚本

cat /proc/net/pktgen/eth2可以查看发包的速率等

参考

Lenky个人站点 » 利用pktgen发包工具做性能测试

pktgen脚本如下

#! /bin/sh# FileName: pktgen-119-120.conf# modprobe pktgenfunction pgset() {local resultecho $1 > $PGDEVresult=`cat $PGDEV | fgrep "Result: OK:"`if [ "$result" = "" ]; thencat $PGDEV | fgrep Result:fi}function pg() {echo inject > $PGDEVcat $PGDEV}# Config Start Here -----------------------------------------------------------# thread config# Each CPU has own thread. Two CPU exammple. We add eth1, eth2 respectivly.PGDEV=/proc/net/pktgen/kpktgend_2echo "Removing all devices"pgset "rem_device_all"echo "Adding eth2"pgset "add_device eth2"#PGDEV=/proc/net/pktgen/kpktgend_3# echo "Removing all devices"#pgset "rem_device_all"#echo "Adding eth6"#pgset "add_device eth6"# device config# delay 0 means maximum speed.CLONE_SKB="clone_skb 1000000"# NIC adds 4 bytes CRCPKT_SIZE="pkt_size 60"# COUNT 0 means forever#COUNT="count 0"COUNT="count 0"DELAY="delay 0"PGDEV=/proc/net/pktgen/eth2echo "Configuring $PGDEV"pgset "$COUNT"pgset "$CLONE_SKB"pgset "$PKT_SIZE"pgset "$DELAY"pgset "dst 192.168.1.96"pgset "dst_mac 6C:92:BF:29:46:2A"#PGDEV=/proc/net/pktgen/eth6#  echo "Configuring $PGDEV"# pgset "$COUNT"#pgset "$CLONE_SKB"#pgset "$PKT_SIZE"#pgset "$DELAY"#pgset "dst 192.168.1.95"#pgset "dst_mac 00:0C:29:97:9B:B4"# Time to runPGDEV=/proc/net/pktgen/pgctrlecho "Running... ctrl^C to stop"pgset "start"echo "Done"

踩坑过程

修改内核的启动hugepage配置

default_hugepagesz=1G hugepagesz=1G hugepages=64

程序启动后,一直无法找到网卡,查了后,发现是驱动没能初始化造成

解决方法:修改了Makefile,使新的驱动初始化方法能够执行

git clone git://dpdk.org/apps/pktgen-dpdk

sudo yum install libpcap-devel.x86_64

将RTE_ASSERT 修改为RTE_MBUF_ASSERT

make

sudo ./setup.sh

执行./pktgen -c 0x1f -n 3 -- -P -m "[1:3].0, [2:4].1"

start 0 发包开始

测试环境测试方案

两个口直连,可以小包打到20Gbps —— 测试硬件网卡以及发包程序;

两个口互连,就只剩调试l2fwd、cfe程序来打到线速转发了。

替代方案:

两个口互连,都跑pktgen,互相发包,看能否收发到线速(测试网卡及发包程序)

./pktgen -c 0x1f000 -n 3 -- -P -m "[13:15].0,[14:16].1" -f test/set_seq.pkt

两个dpdk-pktgen互连测线速

./pktgen -c 0x1ff1ff -n 3 --proc-type primary  --file-prefix pg -- -T -P -m "[13-16:17-20].0,[1-4:5-8].1" -f test/set_seq.pkt

启动多个队列应该是有用处的,执行这个多队列的命令前,先修改内核的启动引导脚本,

将大内存调大配置为:default_hugepagesz=1G hugepagesz=1G hugepages=64

多队列,发包可以达到线速,但是两个口同时收发,还是不行。

多实例-多队列

./pktgen -c 1f000 -n 3 --proc-type auto --socket-mem 512,512 --file-prefix pg1 -b 0000:83:00.1 -- -T -P -m "[13-14:15-16].0" -f test/set_seq.pkt

./pktgen -c 3e0000 -n 3 --proc-type auto --socket-mem 512,512 --file-prefix pg2 -b 0000:83:00.0 -- -T -P -m "[18-19:20-21].0" -f test/set_seq.pkt

仍然不能解决问题。

先暂停调试pktgen dpdk的性能最高值。开始l2fwd和cfe的性能测试。

查看设备的插槽信息

dmidecode | grep -1 PCI

或者用lspci -vvv来查看

dmidecode | grep -1 PCI

Characteristics:

PCI is supported

BIOS is upgradeable

--

Port Connector Information

Internal Reference Designator: J9C1 - PCIE DOCKING CONN

Internal Connector Type: Other

--

System Slot Information

Designation: PCIE_0_CPU0

Type: x16 PCI Express 3 x16

Current Usage: Available

--

System Slot Information

Designation: PCIE_1_CPU0

Type: x8 PCI Express 3 x8

Current Usage: In Use

--

System Slot Information

Designation: PCIE_2_CPU1

Type: x16 PCI Express 3 x16

Current Usage: Available

--

System Slot Information

Designation: PCIE_3_CPU1_X16

Type: x16 PCI Express 3 x16

Current Usage: In Use

确认了两个万兆口应该是在cpu1上的,更换跑l2fwd使用的物理cpu id为12、13

查看设备的core分布

cat /proc/cpuinfo | grep "physical id\|core id\|processor"

修改了pktgen-dpdk的绑核后,有所提升(两口从15-16Gbps)

./pktgen -c 0x1f000 -n 3 -- -P -m "[13:15].0,[14:16].1" -f test/set_seq.pkt

pci-E带宽

PCI-E X16 1.0接口带宽 单向4GB/s 双向8GB/s

PCI-E X16 2.0接口带宽 单向8GB/s 双向16GB/s

从这个速度可以看出,pci-e的速率应该不是瓶颈

119、120都用pktgen互相打包

同时发包的话,不能达到线速20g,只能是16g左右的收包率;但是只打一个口

的双向的话,是可以达到10g双向收发的~

使用pktgen dpdk互连进行收发包测试,发现,单口分别收发的话,可以达到64字节小包20Gb/s的线速。但是两口同时收发不行。调大报文大小也不行。

lspci -s 0000:07:00.0 -vv | grep LnkSta

LnkSta: Speed 5GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-

LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete-, EqualizationPhase1-

这段话网上查询应该是该端口使用gen2 x8,最大峰值带宽32Gb/s,如果算法没错,也就是说理论上这个pcie带宽是瓶颈。

不过根据网上找到的资料显示,上述带宽是指单向带宽,双向的话则理论可以达到64Gb/s。那这里应该不是瓶颈才对。

pcie的带宽总结

http://pjack1981.blogspot.com/2012/05/how-to-know-pci-express-speed-on-server.html

dpdk-pktgen快速发包工具踩坑日记相关推荐

  1. 全志哪吒D1-H Tina Linux Ubuntu 22.04入门踩坑日记

    哪吒D1-H Tina Linux入门踩坑日记 系统环境 源码编译 mklibs-readelf的C++标准问题 m4的SIGSTKSZ问题 libfakeroot的_STAT_VER问题 read_ ...

  2. Win11 + Ubuntu18.04 双系统踩坑日记

    Win11 + Ubuntu18.04 双系统踩坑日记 前言 准备工作 硬件配置 镜像下载 Win11镜像下载 Ubuntu镜像下载 启动盘准备 Win11启动盘 Ubuntu启动盘 Win11安装 ...

  3. 【Flutter混合开发踩坑日记之‘applicationVariants‘ for extension ‘android‘】

    Flutter混合开发踩坑日记之'applicationVariants' for extension 'android' 正文 坑一:Could not get unknown property ' ...

  4. Swarm-BZZ踩坑日记之 如何让METMASK小狐狸显示gbzz

    刚入门bzz的新手还不知道小狐狸是什么的请移步上一章节:Swarm-BZZ踩坑日记之 如何在METMASK小狐狸导入节点地址 在浏览器安装好小狐狸,并添加自己的钱包地址后 会发现只显示ETH,并不显示 ...

  5. ReactNative 在丁香医生项目中引入的踩坑日记

    ReactNative 在丁香医生项目中引入的踩坑日记 this没绑定到函数导致空指针 参考 React-Native 踩坑第二弹-undefined is not a function(evalua ...

  6. springboot踩坑日记—nacos: Error watching Nacos Service change

    springboot踩坑日记-nacos: Error watching Nacos Service change Spring Boot :: (v2.1.5.RELEASE) 错误代码: 07-3 ...

  7. 微信小程序踩坑日记-微信小程序首次加载样式错乱问题

    微信小程序踩坑日记-微信小程序首次加载样式错乱问题 在实际开发项目中,遇到了个棘手的问题,就是在某些因素下,进入小程序发现有些样式发生偏移.错乱等问题 问题原因:-未知(估计是组件的问题) ↓ 解决办 ...

  8. c++字符串操作之std::ostringstream踩坑日记

    c++字符串操作之std::ostringstream踩坑日记 在开发过程中经常会遇到字符串操作,而std::string又没有format操作,这就很难受了. 于是我找到了std::ostrings ...

  9. Antd Pro V4 protable详解(ps:踩坑日记)

    Antd Pro V4 protable详解(ps:踩坑日记) 写在前面: 在这篇文章中,你会了解到: protable 中的cloumns属性详解 protable数据加载和处理(两种方法,直接使用 ...

  10. midjourney指令笔记+踩坑日记+gpt论文润色指令

    跟人拼团入手了midjourney,长期记录更新. midjourney指令笔记+踩坑日记 指令笔记 踩坑日记 GPT论文润色指令 指令一 指令二 指令三 指令四 指令五 指令笔记 关键词参考网址:p ...

最新文章

  1. vim 居中光标所在行(转载)
  2. Java 求1000以内的同构数_求1-10000之间的同构数
  3. C++的error C2668: 'pow' : ambiguous call to overloaded function错误原因及解决方法
  4. 【网址收藏】windows安装Docker Desktop常见问题整理
  5. 很简单很简单的DBHelper类
  6. python之Map函数 reduce 函数
  7. Flex 学习站点汇总,(FLEX学习站点、博客、论坛)
  8. matlab 求向量的交集_从零开始的matlab学习笔记——(16)函数绘图
  9. 一个经典的多线程同步问题
  10. c语言酒店管理系统,C语言酒店管理系统.pdf
  11. BOW和LSH的一点理解
  12. 【Matlab】除法取整函数用法
  13. vue上线后图片不显示_vue页面中图片不显示解决
  14. 用C语言编写PC与三菱PLC串口通讯,PC与三菱FX系列PLC通信的实现
  15. 全网首发!Java高级程序员面试集合
  16. 【乱七八糟的笔记】——前缀树
  17. lammps胶体输出的日志文件
  18. POV-RAY基础教程 - POV-Ray坐标系(7)
  19. 红黑树及其插入、删除操作
  20. 问道手游安卓服务器维护公告,问道手游安卓3月16日停服维护公告

热门文章

  1. 数据库毕业设计参考文献最新合集
  2. 利用MATLAB进行符号运算。
  3. C++11常见编译与链接错误解决总结
  4. 2011-2017年中国各地政府BIM相关标准政策汇总
  5. ps css圆形路径文字,ps圆形路径文字怎么做
  6. java实现获取阿里云短信验证码
  7. ArcGIS基本使用介绍
  8. 大话无线通讯基础之:WIFI和5G信道划分
  9. win xp系统安装在虚拟机里面无法连接网络,无本地连接问题解决
  10. linux开启远程ssh服务器配置,配置Linux服务器SSH远程密钥登录