4.3.24. AXI-Monitor 调试指南
4.3.24.1. 概述
AXI-Monitor 是

NOC:(Network-on-Chip) 将
多个 处理单元(如 CPU、 GPU、 DDR 控制器 等)通过 一个 高速、低 延迟 的 网络 互连,实现 并行 通信。 DDR NOC:分别与 CPU NOC、BPU NOC、GPU NOC、VIN NOC、Codec NOC连接, 实现各个 模块 读写 DDR。 VIN NOC: 连接了 多个 模块,包括 Camera 子系统 和 Display 子系统。 GPU NOC: 连接了 多个 模块,包括 2DGPU 和 3DGPU。 Codec NOC: 连接了 多个 模块,包括 VPU 和 JPU。
DDR 中
包含 如下 模块: AXI-Monitor:监听各个 NOC 端口 的 DDR 读写 带宽, 针对 每个 端口 的 带宽 进行 独立 监控,不会 对 端口 访问 DDR 的 操作 产生 影响。 MPU:(Memory Protection Unit) 用于保护 系统 的 内存 区域,并 提供 不同 访问 权限 控制。 DDR Controller:是负责 与 DDR 内存 进行 通信 的 核心 模块。它 的 主要 功能 是 管理 内存 的 访问、读写操作、时序 控制 和 内存 的 初始化 等。 DDR PHY:是 DDR 控制器与 物理 内存 之间 的 接口,负责 将 数字信号(来自 DDR Controller)转换 为 适合 在 物理 传输层(例如 电气 信号)上 传输 的 信号。
典型应用
场景 1 :系统
带宽 优化 场景
描述:在 多 模块 并行 运行 时,某些 模块 的 帧 率 未 达 预期,需 确认 是否 因 DDR 带宽 瓶颈 所致。 解决办法: AXI-Monitor 通过
实时 监控 各 模块 以及 整个 系统对 DDR 的 带宽 占用 情况,从而 针对性 的 优化。
场景 2 :系统
模块 运行 检测 场景
描述:应用程序 完成 开发 后,需要 长时间 监控 程序 是否 运行 正常。 解决办法: 通过 AXI-Monitor 获取
各个 模块 对 DDR 带宽 的 占用,推测 某个 模块 是否 出现异常 带宽 暴增 或 读写 停止。
功能原理
AXI-Monitor 硬件
时间
计数器 ( Time Counter) 主要
功能:统计 测量 窗口 的 总时长,并 控制 事件 计数器 的 启停。 工作
机制: 通过
软件 启动 / 停止 时间 计数器 时,所有 已 使 能 的 事件 计数器 会 同步 开始 / 停止 工作。 时间
计数器 启动 后 会 持续 运行,直到 发生 溢出 或 被 软件 停止。
事件
计数器 ( Event Counter) 主要
功能:为 每个 AXI 端口 分别 统计 读写 传输 事件,记录 读 / 写 DDR 数据量。 统计
粒度: Read 事件
计数:统计 AXI 总线 的 读 数据传输 量。 Write 事件
计数:统计 AXI 总线 的 写 数据传输 量。
时间
4.3.24.2. 功能使用
参数说明
登录hrut_ddr -h:
root@buildroot:~# hrut_ddr -h
DDR MONITOR HELP INFORMATION
>>> -t/--type sample type: cpu,bpu,vin,codec,gpu,sum,all
>>> -p/--period sample period: [1-1000] ms
>>> -r/--raw print raw data
运行
-t 表示
指定 端口, 支持 cpu、 bpu、 vin、 codec、 gpu、 sum、 all。 -p 表示
采样 周期,不 设置 时,取 默认值 10ms,范围 为 [1,1000]ms。 -r 表示
输出 原始数据。
日志说明
运行
一个 可以 把 各个 模块 跑 起来 的 程序,比如 sunrise_camera,参考 sunrise_camera。执行
hrut_ddr查看各个 模块 的 带宽 占用 情况: root@buildroot:~# hrut_ddr -t all -p 1000 port_type:ALL DDR type is Set sample period:1000ms, 1 samples per seconds Time 6690.524s MB/S P0:CPU P1:BPU P2:VIN P3:CODEC P4:GPU SUM Read : 1724 1533 1482 956 165 5860 Write: 829 1553 1712 359 116 4569 Time 6691.524s MB/S P0:CPU P1:BPU P2:VIN P3:CODEC P4:GPU SUM Read : 1722 1536 1442 1005 174 5879 Write: 833 1560 1681 377 125 4576 Time 6692.524s MB/S P0:CPU P1:BPU P2:VIN P3:CODEC P4:GPU SUM Read : 1744 1548 1436 971 163 5862 Write: 845 1568 1673 364 113 4563
日志
解释 程序 间隔 1s 打印 一次 带宽 占用 数据,如下 描述: Time 6690.524s: 读取 DDR 带宽占用 数据 的 时间 点。 MB/S: 下面输出 的 带宽 数据 的 单位。 Read/Write: 分别展示 了 各个 模块 以及 所有 模块 的 读写 DDR 的 带宽 占用。 P0 到 P4 列:分别
展示 了 CPU、BPU、VIN、CODEC、GPU模块的 DDR 读写 带宽 占用。 SUM 列:展示
了 当前 所有 模块 的 DDR 读写 带宽 占用。
4.3.24.3. 常见问题
在
多个 模块 并行 运行 时,由于 某些 模块 帧 率 波动 导致 hrut_ddr工具检测 到 DDR 带宽 占用,忽高忽低 问题
分析: hrut_ddr工具的 原理 是 计算 -p 参数(采样 窗口)指定 的 时间段 内 的 平均 内存 带宽 占用 解决办法:可以
适当 调节 -p 参数(采样 窗口)得到 更 稳定 的 带宽 数据