[1. 测试目标](#1. 测试目标)
验证 KSYS 采集到的 UB_URMA 指标是否准确,重点覆盖以下内容:
chip_id / die_id / port_id列表是否与设备实际 UP 端口一致。- URMA 打流后,KSYS 采集到的 UB_URMA 报文数是否与打流规模匹配。
ubctl单次抓取的 UB 数据是否与 KSYS 采集结果对应。- 验证 UB 数据单次取值后寄存器清零的行为是否符合预期。
[2. 测试整体流程](#2. 测试整体流程)
UB_URMA 指标测试流程分为端口准确性校验和报文数准确性校验两部分。首先通过 KSYS 启动 UB_URMA 指标采集,并使用 ubctl ls 获取设备 UP 状态端口,校验采集结果中的 chip_id / die_id / port_id 是否与实际设备端口一致。随后使用 urma_perftest 工具进行 CTP/TP 打流,通过 -s 控制单次交换消息大小、-n 控制测试迭代次数,并结合 write_bw 或 send_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 ls、urma_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_bw 或 read_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. 测试注意事项)
ubctl抓取 UB 数据是单次取值,寄存器取完会清零,因此不要在 KSYS 采集过程中频繁手工执行ubctl。- 服务端命令需要先执行,客户端再发起连接。
-d udma2需要与测试机器实际设备名称一致。--eid_idx在 TP 打流场景下必填,取值需要按设备 EID 配置确认。-s参数单位需要以urma_perftest工具说明为准,避免理论数据量计算错误。- 如果使用
write_bw,业务含义是 client 端写 server 端,方向判断时需要结合服务端/客户端角色理解 TX/RX。 - 如果 KSYS 采集的是 1 秒内报文数,不要拿累计总量直接对比,需要结合采样周期计算。
- 建议每组参数重复测试 3 次,避免偶发波动影响结论。