灵渠测试工具-urma_perftest

[1. 测试目标](#1. 测试目标)

验证 KSYS 采集到的 UB_URMA 指标是否准确,重点覆盖以下内容:

  1. chip_id / die_id / port_id 列表是否与设备实际 UP 端口一致。
  2. URMA 打流后,KSYS 采集到的 UB_URMA 报文数是否与打流规模匹配。
  3. ubctl 单次抓取的 UB 数据是否与 KSYS 采集结果对应。
  4. 验证 UB 数据单次取值后寄存器清零的行为是否符合预期。

[2. 测试整体流程](#2. 测试整体流程)

UB_URMA 指标测试流程分为端口准确性校验和报文数准确性校验两部分。首先通过 KSYS 启动 UB_URMA 指标采集,并使用 ubctl ls 获取设备 UP 状态端口,校验采集结果中的 chip_id / die_id / port_id 是否与实际设备端口一致。随后使用 urma_perftest 工具进行 CTP/TP 打流,通过 -s 控制单次交换消息大小、-n 控制测试迭代次数,并结合 write_bwsend_bw 模式控制打流规模。测试过程中使用 KSYS 采集 UB_URMA 指标,并在必要时使用 ubctl -m nl -p ${port_id} -f pkt_stats -d ${ub_ctl_id} -c ${chip_id} | grep "ub" 获取 UB 原始数据。由于 ubctl 每次读取寄存器后会清零,测试时需避免手工 ubctl 与 KSYS 采集同时读取同一计数器。最终通过对比 ubctl lsurma_perftest 打流规模、KSYS 采集结果和 ubctl 原始数据,判断 UB_URMA 指标采集是否准确。

复制代码

复制代码
1. 使用 KSYS 启动参数/指标采集
        ↓
2. 使用 ubctl ls 查询 UB 设备和端口信息
        ↓
3. 校验 chip_id / die_id / port_id 列表准确性
        ↓
4. 使用 urma_perftest 执行 CTP / TP 打流
        ↓
5. 使用 ubctl 抓取 UB 原始数据
        ↓
6. 对比 KSYS 采集结果、ubctl 结果和打流理论值
        ↓
7. 输出测试结论

[3. 前置条件](#3. 前置条件)

检查项 检查命令/方式 预期结果
KSYS 采集功能正常 启动 KSYS 采集任务 可正常采集 UB_URMA 指标
UB 设备可查询 ubctl ls 可查询到 chip、die、port 及端口状态
目标端口状态正常 ubctl ls 参与测试的端口为 UP 状态
urma_perftest 已安装 which urma_perftest 可返回 urma_perftest 路径
URMA 驱动已安装 安装驱动时通常自带 urma_perftest 工具可正常执行
测试两端网络可达 ping <server_ip> 客户端可访问服务端

如果执行:

复制代码

复制代码
which urma_perftest

没有返回路径,说明 urma_perftest 未安装或未配置到 PATH,需要重新安装 URMA 相关驱动/工具包。


[4. 查询 UB 端口信息](#4. 查询 UB 端口信息)

执行:

复制代码

复制代码
ubctl ls

根据输出结果获取当前机器上的:

复制代码

复制代码
chip_id
die_id
port_id
端口状态 UP/DOWN

测试时只选取 UP 状态端口参与采集和打流验证。

校验点

校验项 说明
chip_id KSYS 采集结果中的 chip_id 应与 ubctl ls 一致
die_id KSYS 采集结果中的 die_id 应与 ubctl ls 一致
port_id KSYS 采集结果中的 port_id 应与 ubctl ls 中 UP 端口一致
端口状态 DOWN 端口不应参与有效数据采集

[5. CTP 打流测试](#5. CTP 打流测试)

[5.1 CTP 打流:读场景](#5.1 CTP 打流:读场景)

[服务端,208 机器](#服务端,208 机器)

复制代码

复制代码
urma_perftest write_bw -d udma2 -s 2 -n 10 --tp_aware --ctp
[客户端,206 机器](#客户端,206 机器)

复制代码

复制代码
urma_perftest write_bw -d udma2 -s 2 -n 10 --tp_aware --ctp -S 141.61.17.208

参数说明

参数 含义 当前示例
write_bw 带宽测试,client 端写 server 端 write_bw 或者 read_bw 模式
-d udma2 指定 UB/URMA 设备名称 udma2
-s 2 单次交换消息大小 2 字节
-n 10 测试迭代次数/交换次数 10 次
--tp_aware 启用 TP 感知连接 默认要求开启
--ctp 启用 CTP 打流模式 CTP 场景必选
-S 141.61.17.208 指定服务端 IP 客户端侧填写

你这里写的"总数据大小为 2 × 10 = 20",需要注意:-s 2 的单位需要以 urma_perftest 实际工具说明为准。如果工具中 -s 2 表示 2B,则总数据量为 20B;


[5.2 CTP 打流:写场景](#5.2 CTP 打流:写场景)

[服务端,208 机器](#服务端,208 机器)

复制代码

复制代码
urma_perftest write_bw -d udma2 -s 2 -n 10 --tp_aware --eid_idx 1
[客户端,206 机器](#客户端,206 机器)

复制代码

复制代码
urma_perftest write_bw -d udma2 -s 2 -n 10 --tp_aware --eid_idx 1 -S 141.61.17.208

参数说明

参数 含义 当前示例
write_bw 带宽测试,client 端写 server 端 write_bw 或者 read_bw
-d udma2 指定 UB/URMA 设备名称 udma2
-s 2 单次交换消息大小 自定义
-n 10 测试迭代次数/交换次数 自定义
--tp_aware 启用 TP 感知连接 默认开启
--eid_idx 1 指定设备 EID 索引 TP 打流时必填
-S 141.61.17.208 指定服务端 IP 客户端侧填写

[6. URMA 打流参数说明](#6. URMA 打流参数说明)

选项 说明 取值方式
write_bw 带宽测试,client 端写 server 端 带宽打流固定使用 write_bwread_bw
-d UB/URMA 设备名称 通过设备环境确认,如 udma2
-s 单次交换的消息大小,单位按工具说明确认 自定义
-n 测试迭代次数/交换次数 自定义
--tp_aware 启用 TP 感知连接 默认要求开启
--ctp 指定 CTP 模式 CTP 打流时使用
--eid_idx 指定设备 EID 索引 TP 打流时必填
-S 指定服务端 IP 客户端侧填写服务端 IP

[7. 打流理论值计算](#7. 打流理论值计算)

打流理论值可按以下方式估算:

复制代码

复制代码
理论总数据量 = 单次交换消息大小 × 测试迭代次数

例如:

复制代码

复制代码
单次交换消息大小 = 2B
测试迭代次数 = 10

理论总数据量 = 2B × 10 = 20

如果使用带宽型指标,也可以按工具输出的带宽和采集时间估算:

复制代码

复制代码
理论总数据量 = 带宽 × 持续时间

如果 KSYS 采集的是 1 秒内报文数,则应重点对比:

复制代码

复制代码
KSYS 每秒报文数
ubctl 单次抓取报文数
urma_perftest 打流期间的报文规模

[8. 使用 ubctl 抓取 UB 原始数据](#8. 使用 ubctl 抓取 UB 原始数据)

UB 数据可通过 ubctl 单次抓取:

复制代码

复制代码
ubctl -m nl -p 1 -f pkt_stats -d 1 -c 0 | grep "ub"

命令说明

参数 含义 示例
-m nl 查询 NL 模块 nl
-p 1 指定端口号 1
-f pkt_stats 查询报文统计 pkt_stats
-d 1 指定 ub_ctl_id 1
-c 0 指定 chip_id 0
grep "ub" 过滤 UB 相关指标 输出 UB 指标行

注意事项

UB 数据为单次取值,并且:

复制代码

复制代码
每次寄存器读取完成后会清零

因此测试时要注意采集顺序,避免 KSYS 和手工 ubctl 互相影响。


[9. 推荐采集顺序](#9. 推荐采集顺序)

由于 ubctl 读取寄存器后会清零,建议测试时按以下方式执行。

[方案一:验证 KSYS 采集准确性](#方案一:验证 KSYS 采集准确性)

复制代码

复制代码
1. 启动 KSYS 采集
2. 启动 urma_perftest 打流
3. 等待 KSYS 完成采样
4. 查看 KSYS 采集结果
5. 停止打流

此方案中,不建议在 KSYS 采集周期内手工执行 ubctl,否则可能提前清零寄存器,导致 KSYS 采集值偏小。


[方案二:验证 ubctl 原始值](#方案二:验证 ubctl 原始值)

复制代码

复制代码
1. 不启动 KSYS 采集
2. 启动 urma_perftest 打流
3. 执行 ubctl 抓取 UB 数据
4. 记录 ubctl 输出
5. 再次执行 ubctl,确认寄存器已清零或数值明显变化

[方案三:对比 KSYS 与 ubctl](#方案三:对比 KSYS 与 ubctl)

如果必须对比 KSYS 和 ubctl,建议分两轮测试:

复制代码

复制代码
第一轮:只启用 KSYS 采集,记录 KSYS 结果
第二轮:只使用 ubctl 手工采集,记录 ubctl 结果

两轮使用相同的打流参数:

复制代码

复制代码
-d 设备一致
-s 消息大小一致
-n 迭代次数一致
--tp_aware 参数一致
--ctp 或 --eid_idx 模式一致
服务端/客户端一致

然后比较两轮结果是否在合理误差范围内。


[10. 数据准确性校验方法](#10. 数据准确性校验方法)

[10.1 端口列表准确性](#10.1 端口列表准确性)

数据来源 校验内容
ubctl ls 获取 UP 状态的 chip_id / die_id / port_id
KSYS 采集结果 获取 UB_URMA 指标中的 chip_id / die_id / port_id

校验规则:

复制代码

复制代码
KSYS 采集端口列表应与 ubctl ls 中 UP 状态端口一致

或至少满足:

复制代码

复制代码
KSYS 采集端口列表 ⊆ ubctl ls UP 端口列表

[10.2 UB_URMA 报文数准确性](#10.2 UB_URMA 报文数准确性)

重点校验以下指标:

复制代码

复制代码
ub_umoc_ctph_cnt(TX)
ub_umoc_ctph_cnt(RX)
ub_umoc_ntph_cnt(TX)
ub_umoc_ntph_cnt(RX)

校验规则:

场景 预期
未打流 指标为 0 或稳定低值
CTP 打流 CTP 相关 TX/RX 指标有明显数据
TP 打流 TP 相关 TX/RX 指标有明显数据
停止打流 指标回落到 0 或稳定低值
非目标端口 无明显数据变化

[11. 测试结果判断](#11. 测试结果判断)

测试项 通过标准
chip_id / die_id / port_id 准确性 KSYS 输出端口与 ubctl ls UP 端口一致
CTP 打流指标 ub_umoc_ctph_cnt(TX/RX) 有符合预期的数据
TP 打流指标 ub_umoc_ntph_cnt(TX/RX) 有符合预期的数据
数据规模 KSYS 采集值与打流理论值或 ubctl 输出在合理误差范围内
清零机制 ubctl 单次读取后,再次读取数据应清零或明显下降
异常影响 采集过程不影响其他非 UB 指标采集

[12. 测试注意事项](#12. 测试注意事项)

  1. ubctl 抓取 UB 数据是单次取值,寄存器取完会清零,因此不要在 KSYS 采集过程中频繁手工执行 ubctl
  2. 服务端命令需要先执行,客户端再发起连接。
  3. -d udma2 需要与测试机器实际设备名称一致。
  4. --eid_idx 在 TP 打流场景下必填,取值需要按设备 EID 配置确认。
  5. -s 参数单位需要以 urma_perftest 工具说明为准,避免理论数据量计算错误。
  6. 如果使用 write_bw,业务含义是 client 端写 server 端,方向判断时需要结合服务端/客户端角色理解 TX/RX。
  7. 如果 KSYS 采集的是 1 秒内报文数,不要拿累计总量直接对比,需要结合采样周期计算。
  8. 建议每组参数重复测试 3 次,避免偶发波动影响结论。
相关推荐
当战神遇到编程14 分钟前
Java 集合框架详解:Collection 与 List 核心用法
java
高彬29 分钟前
SAP ECC6.0 对接 C# web Services服务
开发语言·前端·c#·sap
张小姐的猫34 分钟前
【C++开发脚手架】 —— Jsoncpp上手
java·linux·开发语言·网络·c++·tcp/ip·udp
一晌小贪欢34 分钟前
python-第20天:关键字参数与不定长参数
java·开发语言·前端·python·数据可视化·函数参数·python办公
小灰灰搞电子36 分钟前
Rust+Slint 实现蜂巢菜单源码分享
开发语言·rust·蜂巢菜单.
我命由我1234536 分钟前
JS Mock(Mock 拦截请求的前提、Mock 使用、关闭 Mock)
开发语言·前端·javascript·前端框架·html·html5·js
OPEN-F44 分钟前
C++并发编程:异步任务与线程池实战
开发语言·c++·算法
南大白1 小时前
IDEA Maven+JDK 全局配置 日志记录
java·maven·intellij-idea