fatsup cpu间转发测试报告


难度 中等

二层转发

cpub对外网口1接入数据包,经mac层转发到cpub对内网口2,经mac层转发到cpua对内网口1进行业务逻辑处理。在cpub上未进行业务处理,在cpub上报文仅到达mac层。

二层转发无需主动发送报文,不需要使用fastup发包测试模式。

二层转发主要是利用vpp l2 bridge功能来实现,通过配置l2 bridge来达到在mac层将网络包转发的目的。

需要特别注意网口1的mac地址需要和pktgen回放报文的目的mac地址相同。

cpub

cpub需要使用两张网口,一张对外接收x86使用pktgen回放过来的报文,另外一张用于转发报文到cpua。

  • 创建网口
/root/kni/dpaa2/dynamic_dpl.sh dpmac.3 dpmac.4
export DPRC=dprc.2
insmod /root/test/nxp_kni_example/rte_kni.ko carrier=on
  • 配置fastup

    fastup startup.conf的配置文件不变,但需要更改interface.txt文件内容为如下内容:

set int state TenGigabitEthernet0 up
set int state TenGigabitEthernet1 up
set interface l2 bridge TenGigabitEthernet1 100
set interface l2 bridge TenGigabitEthernet0 100
set interface mac address TenGigabitEthernet1 42:4b:54:ae:6e:05
set interface mac address TenGigabitEthernet0 92:51:e6:5c:01:d2
l2fib add 92:51:e6:5c:01:d2 100 TenGigabitEthernet1
  • 运行
fastup -c /etc/vpp/startup_b2afwd.conf

cpua

cpua只需要使用一张网口,且无需对外发送数据。需要特别注意cpua和cpub之间通过dpmac.3连通。

  • 创建网口

    /root/vpp/dpaa2/dynamic_dpl.sh dpmac.3
    export DPRC=dprc.2
    insmod /root/rte_kni.ko carrier=on
  • 配置fastup

    fastup startup.conf的配置文件不变,但需要更改interface.txt文件内容为如下内容:

    set int state TenGigabitEthernet0 up
    set int ip address TenGigabitEthernet0 192.168.8.25/16
    set interface mac address TenGigabitEthernet0 92:51:e6:5c:01:00
    set int mtu 1500 TenGigabitEthernet0
  • 运行

    fastup -c /etc/vpp/startup_b2afwd.conf

x86回放报文

./app/x86_64-native-linuxapp-gcc/pktgen -c 0xe0000 --socket-mem 512 -n 2 -- -P -m [18:19].0 -s 0:5gc.pcap -T --crc-strip

三层转发

cpub对外网口1接入,经ip层转发到cpub对内网口2,经ip层转发到cpua对内网口1进行业务逻辑处理。在cpub上未进行业务处理,在cpub上报文仅到达ip层。

三层转发无需主动发送报文,不需要使用fastup发包测试模式。

三层转发需要先配置ip,再配置ip和mac的对应关系,并配置静态arp。最终的ip转发是通过静态arp转发出去的。

cpub对外网口1的mac地址应设置为pktgen回放报文中的目的mac地址,同时需设置模拟报文的ip地址的arp为cpub对内网口2的mac地址;配置后包会到达对内网口2,还需要在cpub对内网口2上再配置模拟报文的目的ip的mac地址为cpua的对内网口1的mac地址,此时包才能从cpub对内网口2转发到cpua对内网口1。

cpub

cpub需要使用两张网口,一张对外接收x86使用pktgen回放过来的报文,另外一张用于转发报文到cpua。

  • 创建网口
/root/kni/dpaa2/dynamic_dpl.sh dpmac.3 dpmac.4
export DPRC=dprc.2
insmod /root/test/nxp_kni_example/rte_kni.ko carrier=on
  • 配置fastup

    fastup startup.conf的配置文件不变,但需要更改interface.txt文件内容为如下内容:

set int state TenGigabitEthernet0 up
set int state TenGigabitEthernet1 up
set interface mac address TenGigabitEthernet1 42:4b:54:ae:6e:05
set int ip address TenGigabitEthernet0 192.168.8.24/16
set int ip address TenGigabitEthernet1 172.168.1.12/24
set interface mac address TenGigabitEthernet0 92:51:e6:5c:01:d2
set ip arp static TenGigabitEthernet1 192.168.8.24 92:51:e6:5c:01:d2
set ip arp static TenGigabitEthernet0 192.168.8.25 92:51:e6:5c:01:00
  • 运行
fastup -c /etc/vpp/startup_b2afwd_withoutapp.conf

cpua

cpua只需要使用一张网口,且无需对外发送数据。需要特别注意cpua和cpub之间通过dpmac.3连通。

  • 创建网口

    /root/vpp/dpaa2/dynamic_dpl.sh dpmac.3
    export DPRC=dprc.2
    insmod /root/rte_kni.ko carrier=on
  • 配置fastup

    fastup startup.conf的配置文件不变,但需要更改interface.txt文件内容为如下内容:

    set int state TenGigabitEthernet0 up
    set int ip address TenGigabitEthernet0 192.168.8.25/16
    set interface mac address TenGigabitEthernet0 92:51:e6:5c:01:00
    set int mtu 1500 TenGigabitEthernet0
    set ip arp static TenGigabitEthernet0 192.168.9.243 90:e2:ba:8d:02:f0
  • 运行

    fastup -c /etc/vpp/startup_b2afwd_withoutapp.conf

x86回放报文

./app/x86_64-native-linuxapp-gcc/pktgen -c 0xe0000 --socket-mem 512 -n 2 -- -P -m [18:19].0 -s 0:5gc.pcap -T --crc-strip

应用层转发

cpub对外网口1接入,网口1先进行业务处理和分流,再将报文由cpub对内网口1发出,cpua对内网口1收包后进行业务处理(fastup收到包后不会进行任何处理,会重新构造一个新的包发出去,即中间的业务逻辑省略了,仅仅是模拟应用层收包发包的过程)。两个cpu都会进行业务处理,在cpub上报文到达应用层后再从应用层发出。

应用层转发需要模拟报文发送,在编译时需要定义FASTGTPU_TX_DEBUG宏。

  • cpub对外网口1的mac地址应设置为pktgen回放报文中的目的mac地址,此时报文会由cpub对外网口1将包收到业务层;
  • 同时需设置模拟报文的ip地址的arp为cpub对内网口2的mac地址,配置后对外网口1的包会到达对内网口2;
  • 还需要在cpub对内网口2上再配置模拟报文的目的ip的mac地址为cpua的对内网口1的mac地址,此时包才能从cpub对内网口2转发到cpua对内网口1。

cpub

cpub需要使用两张网口,一张对外接收x86使用pktgen回放过来的报文,另外一张用于转发报文到cpua。

  • 创建网口
/root/kni/dpaa2/dynamic_dpl.sh dpmac.3 dpmac.4
export DPRC=dprc.2
insmod /root/test/nxp_kni_example/rte_kni.ko carrier=on
  • 配置fastup

    fastup startup.conf的配置文件不变,但需要更改interface.txt文件内容为如下内容:

set int state TenGigabitEthernet0 up
set int state TenGigabitEthernet1 up
set interface mac address TenGigabitEthernet1 42:4b:54:ae:6e:05
set int ip address TenGigabitEthernet0 172.168.8.24/16
set int ip address TenGigabitEthernet1 192.168.8.25/16
set interface mac address TenGigabitEthernet0 92:51:e6:5c:01:d2
set ip arp static TenGigabitEthernet0 172.168.8.25 92:51:e6:5c:01:00
set fastgtpu test ip dst 172.168.8.25
set fastgtpu test ip src 172.168.8.24
set fastgtpu test mode 3
start fastgtpu test
  • 运行
fastup -c /etc/vpp/startup_b2afwd_withapp.conf

cpua

cpua只需要使用一张网口,且无需对外发送数据。需要特别注意cpua和cpub之间通过dpmac.3连通。

  • 创建网口

    /root/vpp/dpaa2/dynamic_dpl.sh dpmac.3
    export DPRC=dprc.2
    insmod /root/rte_kni.ko carrier=on
  • 配置fastup

    fastup startup.conf的配置文件不变,但需要更改interface.txt文件内容为如下内容:

    set int state TenGigabitEthernet0 up
    set int ip address TenGigabitEthernet0 172.168.8.25/16
    set interface mac address TenGigabitEthernet0 92:51:e6:5c:01:00
    set int mtu 1500 TenGigabitEthernet0
  • 运行

    fastup -c /etc/vpp/startup_b2afwd_withapp.conf

x86回放报文

./app/x86_64-native-linuxapp-gcc/pktgen -c 0xe0000 --socket-mem 512 -n 2 -- -P -m [18:19].0 -s 0:5gc.pcap -T --crc-strip

测试结果

二层转发

二层转发能达到cpu线速10Gbps不丢包,其结果如下图所示:

三层转发

二层转发能达到cpu线速10Gbps不丢包,其结果如下图所示:

应用层转发

与fastgtpu同线程

与fastgtpu同线程时最大流量能达到6Gbps(收到一个报文回复一个报文),其结果如下图所示:

超过6Gbps,fastup收包能力不足,会出现大量rx-missing,其结果如下图所示:

单独一个线程


文章作者: 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