nxp测试报告


难度 中等

1. 测试目标

测试验证fastup在nxp2160 10G网口上的收发包能力。

2. 测试环境

nxp测试组网如下:

  • 主测端为x86服务器,使用10g网卡打流发包;
  • 被测端为nxp2160,使用10g网卡分收发包

3. 测试方法

通过pktgen作为流量生成器,以不同速率往nxp2160 10g网卡发包,验证fastup网口收发包能力。

  • 主侧端x86服务器,使用pktgen作为流量生成器,设置不同速率打流发包

fastup基于vpp开发,而vpp底层收发包又基于dpdk,因而在验证fastup时需要依次验证:

  • dpdk收发包能力
  • vpp收发包能力
  • fastup收发包能力

因为fastup基于GTPU协议,因而dpdk收发包能力主要测试三层转发能力、vpp主要测试三层转发能力、vpp gtpu插件测试、fastup测试,因而需依次进行如下四种测试:

  1. dpdk l3fwd测试,测试dpdk收发包能力
  2. vpp三层转发测试,测试vpp收发包能力
  3. vpp fastgtpu插件测试,测试vpp fastgtpu收发包能力
  4. fastup测试,测试fastup收发包能力

按照自底向上的关系,越往上层的处理逻辑越多,性能越低。因而需优先测试底层性能,再基于底层性能对上层进行测试。

备注:dpdk和vpp使用版本如下:

  • dpdk:DPDK 18.11.1-rc2
  • vpp: v19.06-LSDK

4. 测试过程

4.1 dpdk l3fwd测试

  • 主测端使用pktgen 满线速10g发包

    # -c cpu core mask
    # -m [18:19].1 18core用来做rx,19core用来作tx,使用dpdk的port1
    # -s 1:5gc.pcap 使用port1来回放5gc.pcap
    ./app/x86_64-native-linuxapp-gcc/pktgen -c 0xe0000 --socket-mem 2048 -n 2 -- -P -m [18:19].0 -s 0:5gc.pcap -T --crc-strip

    运行时,需注意避免pktgen所绑定的核上有其他程序再跑。

  • 被测端使用dpdk l3fwd收发包

    nxp dpdk配置如下:

    export ROOT_DPRC=dprc.1
    export PARENT_DPRC=dprc.2
    
    export DPCON_COUNT=3
    export DPBP_COUNT=4
    export DPMCP_COUNT=1
    export DPSECI_COUNT=8
    export DPIO_COUNT=4
    export DPCI_COUNT=2
    export DPDMAI_COUNT=2
    echo 6 > /proc/sys/vm/nr_hugepages
    echo 0 > /proc/sys/vm/swappiness
    export DPRC=dprc.2

    运行方式如下:

    # 根据实际情况来确定使用哪张网卡
    ./dpaa2/dynamic_dpl.sh dpmac.4
    export DPRC="dprc.2"
    #dpdk 使用单核单队列
    ./l3fwd -c 0x3 -n 4 -- -P -p 0x3 --config="(0,0,1)"
    # -c cpu coremask,需转换为二进制,每一位代表一个核,bit位为1表示使用该核
    # -n 开启的通道数
    # -P 全部转发
    # -p port mask,可以使用的port,需转换为二进制,每一位代表一个核,bit位为1表示使用该port
    # --config="(0,0,1)"Map queue 0 from port 0 to lcore 1

在主测端统计收发包个数是否一致。pktgen收发包结果统计如下:

10分钟无丢包,结果如下:

17min无丢包,结果如下:

24分钟无丢包,结果如下:

rate tx rx duration(min) drop
10gbps 521486784 521486784 10 0
10gbps 867320448 867320448 17 0
10gbps 1224121670 1224121670 24 0

经测试验证,nxp2160 10g网口dpdk跑满10g线速无丢包。

4.2 vpp测试

  • 主测端使用pktgen 满线速10g发包

  • 被测端使用vpp收发包

    dpdk配置与l3fwd一致,配置如下:

    export ROOT_DPRC=dprc.1
    export PARENT_DPRC=dprc.2
    
    export DPCON_COUNT=3
    export DPBP_COUNT=4
    export DPMCP_COUNT=1
    export DPSECI_COUNT=8
    export DPIO_COUNT=4
    export DPCI_COUNT=2
    export DPDMAI_COUNT=2
    echo 6 > /proc/sys/vm/nr_hugepages
    echo 0 > /proc/sys/vm/swappiness
    export DPRC=dprc.2

    vpp使用main线程占1核,worker线程占1核的模式,其startup.conf配置如下:

    heapsize 256M
    plugin_path /root/vpp/lib/vpp_plugins
    
    unix {
      interactive
      #nodaemon
      gid vpp
      log /tmp/vpp.log
      full-coredump
      cli-listen /run/vpp/cli.sock
      #startup-config /etc/vpp/interface.txt
    }
    
    api-trace {
      on
    }
    
    api-segment {
      gid vpp
    }
    
    session {
      evt_qs_memfd_seg
    }
    
    socksvr {
      socket-name /tmp/vpp-api.sock
    }
    
    cpu {
      main-core 1
      workers 3
    }
    
    dpdk {
            ## Change default settings for all intefaces
            huge-dir /mnt/hugepages
            no-pci
            num-mem-channels 1
             dev default {
                    ## Number of receive queues, enables RSS
                    ## Default is 1
                    num-rx-queues 1
            num-rx-desc 8912
                    # rss { ipv4 }
    
                    ## Number of transmit queues, Default is equal
                    ## to number of worker threads or 1 if no workers treads
                    num-tx-queues 1
      }
      proc-type primary
            #log-level  8
    }
    
    plugins {
            ## Adjusting the plugin path depending on where the VPP plugins are
            path /root/vpp/lib/vpp_plugins
            vat-path /root/vpp/lib/vpp_api_test_plugins
    
            plugin default { enable }
            plugin gtpu_plugin.so { disable }
            #plugin fastgtpu_plugin.so { disable }
    
    }

    实际测试过程中需留意dpdk配置num-rx-desc,该值过小会导致vpp丢包,在测试过程中需设当修改该值。当前测试中,建议该值设为8192。

    vpp运行后还需要设置ip、mac等参数,可在命令行配置,也可在interface.txt中添加如下内容:

    set int state TenGigabitEthernet0 up
    set int ip address TenGigabitEthernet0 192.168.8.24/24
    set int ip address TenGigabitEthernet0 192.168.9.24/24
    set interface mac address TenGigabitEthernet0 42:4b:54:ae:6e:05
    set int mtu 1500 TenGigabitEthernet0
    set ip arp static TenGigabitEthernet0 192.168.8.25 90:e2:ba:8d:02:f0

    然后使用如下方式启动vpp:

    vpp -c /etc/vpp/startup.conf

在主测端统计收发包个数是否一致。pktgen收发包结果统计如下:

main线程1核、worker线程1核,收发满线速10g,15min无丢包。

rate tx rx duration drop
10gbps 807188608 807188608 15 0

经测试验证,nxp2160 10g网口vpp空转跑满10g线速无丢包。

4.3 vpp fastgtpu测试

  • 主测端使用pktgen 满线速10g发包

  • 被测端使用vpp收发包

    仅将包收到fastgtpu插件,不往上走到libup逻辑处理,因而需在代码中将libup回调注释掉。将fastgtpu_rx_node.c的72行注释掉,代码片段如下:

    // pstFastGtpuMain->pfnUpRcvCb(pcCurData, pstBuf->current_length);

    dpdk和vpp配置不变,需将interface.txt改为如下内容:

    set int state TenGigabitEthernet0 up
    set int ip address TenGigabitEthernet0 192.168.8.25/16
    set interface mac address TenGigabitEthernet0 42:4b:54:ae:6e:05
    set int mtu 1500 TenGigabitEthernet0

    使用fastup时(加载fastgtpu插件),需要注意ip应在同一网络中以保证联通。

统计主测端的tx和被测端的rx个数,统计结果如下::

main线程1核、worker线程1核,收包满线速10g,15min无丢包。

rate pktgen_tx vpp_rx duration drop
10gbps 800715200 800715200 15 0

经测试验证,nxp2160 10g网口vpp fastgtpu空转跑满10g线速无丢包。

4.4 fastup测试

  • 主测端使用pktgen 满线速10g发包

  • 被测端使用fasup收发包

    dpdk配置与vpp配置均与vpp fastgtpu一致,均需在libup中将相关业务逻辑注释即可。

统计主测端的tx和被测端的rx个数,统计结果如下:

main线程1核、worker线程1核,收包满线速6g,15min无丢包

main线程1核、worker线程1核,超过7g出现rx-miss,运用层收包能力不足,且无法通过调整rx ring来增加收发能力

rate pktgen_tx vpp_rx duration drop
6gbps 393915840 393915840 15 0
7gbps 25935616 25681458 1 254158

5. 测试结论

  • dpdk 10g满线速无丢包
  • vpp空转10g满线速无丢包
  • vpp fastgtpu空转10g满线速无丢包
  • fastgtpu无业务6g线速无丢包,超过6g丢包严重,丢包率为9.78e-3
  • 测试过程中需注意dpdk的rx ring,当流量较大该参数较小时会发送丢包,应适当将其增大(建议8192)
测试方式 速率 tx rx 时间 丢包
dpdk 10gbps 521486784 521486784 10 0
dpdk 10gbps 867320448 867320448 17 0
dpdk 10gbps 1224121670 1224121670 24 0
vpp 10gbps 807188608 807188608 15 0
vpp fastgtpu 10gbps 800715200 800715200 15 0
fastup 6gbps 393915840 393915840 15 0
fastup 7gbps 25935616 25681458 1 254158

6. 测试结果对比

非自研板测试结果如下:

配置\流量\丢包率 2G 3.5G 5G 10G 备注
没有PHY配置 (dpdk) 0 0 6.572e-7 1.024e-4 只给VPP配置资源
注册fastgtpu插件 (vpp fastgtpu) 1.877e-4 2.014e-4 2.184e-4 2.399e-4 插件不做任何动作
注册GTPU端口 (fastup) 1.697e-4 2.006-4 2.232e-4 2.337e-4 RX Node收到数据即刻释放

与自研板nxp对比结果如下:

测试方式 非自研板最大不丢包速率 nxp最大不丢包速率
dpdk 10gbps 10gbps
vpp 5gbps 10gbps
vpp fastgtpu 2gbps 10gbps
fastup 2gbps 6gbps

按当前测试结果来看:

1. nxp为上层libup留下6gbps余量;

2. nxp板性能比非自研板要高;


文章作者: growdu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 growdu !
  目录
分类导航
随笔2 AI27 算法1 计算机基础13 博客搭建7 ChatGPT2 集群63 计算机通信1 数据库34 数据库深入80 DPDK26 Docker11 Elasticsearch4 编辑工具4 FAQ1 Go Web1 hometown2 编程语言16 网络9 OPC1 Linux38 openGauss4 页面12 PostgreSQL54 程序员自我修养1 协议11 成长之路1 stock1 存储5 工具20 VPP18 视频作品1 Vue13 Web1 代码示例11 数据库15 BenchmarkSQL1 PostgreSQL 源码修炼之路14
最热文章
1
13 逻辑复制深入
数据库深入🔥 1570
2
0 Postgresql存储、索引及系统优化、主备切换
PostgreSQL🔥 1495
3
一文读懂openguass dcf网络模块
集群🔥 1420
4
逻辑复制源码分析
数据库深入🔥 1327
5
PostgreSQL 分区表:从一行 `PARTITION BY` 到路由热路径的全链路拆解
数据库🔥 1094
6
applyparallelworker.c 之 LA 端源码深度解析:Leader Apply Worker 的指挥中枢
数据库深入🔥 1082
7
PostgreSQL Background Worker 全解:从 `RegisterBackgroundWorker` 到逻辑复制 4 类 worker 的全生命周期
数据库🔥 1078
8
PostgreSQL的后台进程walsender分析 - 关系型数据库 - 亿速云
PostgreSQL🔥 1033
9
PostgreSQL 逻辑复制的监控:六张视图 + 一组可执行 SQL,把 publisher/subscriber 的速率与健康度彻底看透
数据库🔥 1032
10
PostgreSQL 逻辑复制支持 DDL 之后:DDL 与 DML 的时序难题(重点:分区表)
数据库🔥 999
11
reorderbuffer.c 源码深度解析:PostgreSQL 逻辑复制的"事务重组引擎
数据库深入🔥 953
12
PostgreSQL 内核开发:读取一张表的 9 步标准流程与缓存全景
数据库🔥 938
13
从 `postgres` 二进制到生产级守护 —— PostgreSQL 最外层模块与启动全流程拆解
数据库🔥 936
14
支持逻辑复制同步 DDL 适配 SQL Server 方案
数据库深入🔥 934
15
PostgreSQL 逻辑复制的 ReorderBuffer 与事务机制:从一行 WAL 到一致性变更流的全链路绑定
数据库🔥 913
16
DDL同步架构(美化版)
数据库深入🔥 908
17
PostgreSQL Latch 机制详解:从一行 SetLatch 到 epoll 的内核之旅
数据库🔥 871
18
pgbench 源码全解:一个 C 文件如何撑起 PostgreSQL 官方压测工具
数据库🔥 860
19
PostgreSQL libpq 机制与缓冲区详解
数据库🔥 850
20
PostgreSQL 逻辑复制 spill 文件深度剖析:从 `xid-*.spill` 到 TPC-C 的增长方程
数据库🔥 845