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 !
  目录
分类导航
随笔3 AI29 计算机基础13 算法1 博客搭建7 ChatGPT2 集群63 计算机通信1 数据库59 数据库深入93 数据库93 Docker11 DPDK26 编辑工具4 Elasticsearch4 FAQ1 Go Web1 hometown2 编程语言16 人生11 网络9 Linux38 OPC1 openGauss4 页面12 PostgreSQL54 程序员自我修养1 协议11 stock1 存储5 成长之路1 工具20 视频作品1 VPP18 Vue13 Web1 代码示例11 BenchmarkSQL1 PostgreSQL 源码修炼之路14
最热文章
1
PostgreSQL 逻辑复制全链路:以一个真实事务为例,从 `INSERT` 到 `apply` 的源码级旅程
数据库🔥 2162
2
PostgreSQL 逻辑复制 Stream 执行逻辑源码级拆解:从 reorderbuffer 触发到订阅端落盘回放
数据库🔥 1765
3
PostgreSQL 行锁机制源码级深度拆解:4 种锁模式 + xmax + MultiXact 的完整链路
数据库🔥 1656
4
PostgreSQL reorderbuffer.c 函数级源码全集:5615 行 / 95 个函数的逐函数解析
数据库深入🔥 1650
5
PostgreSQL 目录快照源码级深度拆解:系统表读取的 MVCC 真相与失效机制
数据库🔥 1604
6
13 逻辑复制深入
数据库深入🔥 1570
7
0 Postgresql存储、索引及系统优化、主备切换
PostgreSQL🔥 1495
8
PostgreSQL 读一行数据源码级深度拆解:MVCC 在每个环节的落点
数据库🔥 1464
9
PostgreSQL WAL 记录类型完全指南:21 个 RMGR × 80+ 种记录的源码级拆解
数据库🔥 1431
10
一文读懂openguass dcf网络模块
集群🔥 1420
11
PostgreSQL 元数据存储机制:从磁盘文件到内存缓存,`pg_class` 撑起的整个系统表体系
数据库🔥 1411
12
openGauss 并行解码设计原理深度拆解:reader + 多 worker + CSN 三层架构的源码级剖析
数据库深入🔥 1344
13
逻辑复制源码分析
数据库深入🔥 1327
14
PostgreSQL 逻辑复制:catalog 改动、可见性判定与 xmin/xmax 推进全景
数据库深入🔥 1317
15
自托管服务全家桶:从原文方案到可复制实操手册
人生🔥 1278
16
PostgreSQL CREATE_REPLICATION_SLOT 端到端源码分析:从 SQL 到 snapbuild 状态机的完整链路(每个函数每个参数)
数据库深入🔥 1277
17
PostgreSQL syscache 模块源码深度拆解:CatCache 数据结构、LRU 哈希表、cache invalidation 全链路
数据库深入🔥 1216
18
PostgreSQL 18 内核数据结构全景:RangeVar 与 20+ 个核心数据结构源码级拆解
数据库🔥 1158
19
PostgreSQL 逻辑复制里 `RUNNING_XACTS` 写入机制与快照 `xmin / xmax / xip` 的演化:源码级深度拆解
数据库🔥 1119
20
PostgreSQL 分区表:从一行 `PARTITION BY` 到路由热路径的全链路拆解
数据库🔥 1094