BiTester-基于DPDK的双向UDP流生成器

BiTester是一个利用DPDK构建的双向UDP流生成器,用于测试网络设备和网络性能,包括吞吐量、包速率和时延。它在单向和双向测试中与DPDK-Pktgen和Dperf进行了性能对比,并展示了在不同核心配置下的性能。此外,该工具通过自定义的CPU利用率计算和二分法调整发送速率以实现性能优化,并使用并发连接设计来支持多流发送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BiTester

介绍

基于DPDK的双向UDP流生成器,用于测试网卡、NF、网络的吞吐量以及时延,主要包括bps、pps、latency等性能指标。很多测试工具都提供了比较复杂的功能,所以难免会出现性能损耗,因此实现了这个比较简单的打流器来辅助科研测试(其实是本人比较菜写不出复杂的。。。),灵感来源于Dperf。项目连接:https://gitee.com/markchen7788

  • 带宽测试

    请添加图片描述

  • 包速率测试

    请添加图片描述

  • 时延测试

    请添加图片描述

  • 性能对比

    • 环境:

      • DPDK: 20.11
      • NIC: NVIDIA BF2/CX6 100GbE
      • CPU: Intel Core I7 16cores
      • RAM: 32G DDR4
      • PCIE: Gen4 x 16
    • PPS指标对比

      单向测试Client TXServer RXCores
      BiTester117.83Mpps69.68Mpps14
      DPDK-Pktgen109.96Mpps19.8Mpps14
      双向测试Client TXClient RXServer RXServer TXCores
      BiTester69.57Mpps63.19Mpps63.15Mpps63.14Mpps14
      Dperf24.99Mpps24.99Mpps24.99Mpps24.99Mpps14
软件架构
  1. CPU利用率计算

    • 为每个核配置两个变量,一个用于记录cpu运行总时间T_total,一个用于记录包处理消耗cpu时间T_task

      cpuUtil=T_task/T_total*100%

    • DPDK采用轮询进行包处理,系统的cpu利用率不再准确,因此需要app自行计算
  2. 发送速度收敛

    • 每隔一段时间(~1s)计算所有核心的CPU利用率并求和算出cpu总利用率cpuUtil;
    • 如果cpuUtil>queueNum*0.95,说明基本快要到达处理瓶颈,将此时的速度设为上界upper_bound;
    • 如果cpuUtil<queueNum*0.95,说明还未到达处理瓶颈,将此时的速度设为下界lower_bound;
    • 采用二分法计算下一次的发送速率,TX_Speed=(upper_bound+lower_bound)/2,主线程调节所有worker线程的发送速率;
    • 速率收敛后,如若此时cpuUtil>queueNum*0.95,lower_bound下调,重新收敛;
    • 速率收敛后,如若此时cpuUtil<queueNum*0.95,upper_bound上调,重新收敛;
  3. 并发连接设计

    • 在每一个woker核心设置定时器,按照cps增加连接数flow_num;

    • 根据当前的包序号psn以及flow_num计算当前sip和sport,达到多流发送的目的

      thisFlow.src_ip = (psn % thisFlow.flow_num) / 65536 + flows->src_ip;

      thisFlow.src_port = (psn % thisFlow.flow_num + flows->src_port) % 65536;

  4. 时延测试

    • 定义一段时间T内,接收的报文总和为count,总cpuCycle为Cycle3;
    • 发送时,在每个UDP包内嵌入当前cpuCycle Cycle1;
    • 接收时,获取当前cpuCycle Cycle2, Cycle3+=Cycle2-Cycle1;
    • 该时间段的平均时延:AvgLat=Cycle3/CPUHZ/T
    • 时延探测包速率为0.05Mpps,这个速率接近sockperf测时延的发送速率;
安装教程
  1. Server编译:
    • 安装DPDK 20.11、Meson、Ninja
    • meson build
    • ninja -C build
  2. Client编译:
    • 安装DPDK 20.11
    • make
使用说明
  1. Server运行指令:

    • 双向测试

      ./build/l2fwd -a 01:00.0 – -r 0 -t 0 -q 14 -reverse

    • 单向测试

      ./build/l2fwd -a 01:00.0 – -r 0 -t 0 -q 14 -rxonly

    • Option:
      • -a: PCIE号
      • -r: rx port
      • -t: tx port
      • -q:queue amount
      • -rxonly: recv only
      • -reverse: swap 6元组(smac,dmac,sip,dip,sport,dport)
  2. Client运行指令

    • cd client/scripts
    • 有bps、pps、lat的测试脚本
    • 运行命令

      …/build/BiTester -a 01:00.1 – -r 0 -t 0 -n 14 -f pps-test.conf

    • Option:
      • -a: PCIE号
      • -r: rx port
      • -t: tx port
      • -q:queue amount
      • -f: 配置文件,用于调节并发连接数、cps、6元组信息。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值