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 !
  目录
分类导航
随笔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