MI IVE DEBUG SOP¶
REVISION HISTORY¶
| Revision No. | Description |
Date |
|---|---|---|
| 1.00 | 02/22/2024 |
1. 前言¶
本文档旨在介绍遇到MI IVE相关问题时,如何进行初步排查,快速定位问题,以及确定是Sigmastar SDK问题后,需提供哪些信息给IVE owner分析。
-
支持
cat /proc/mi_modules/mi_ive/mi_ive0获取 proc 信息,示意图如下:
2. IVE 常见问题¶
2.1 性能不足¶
Debug 流程参考图:
Debug 流程:
| 流程 | 确认方法 | 出口条件 | 下一步 | 需提供信息 | 相关可参考FAQ |
|---|---|---|---|---|---|
| A | 参照 IVE API 文档章节 4.1 智能加速硬件API实作 进行确认 | 出口条件1:无硬件加速支持 出口条件2:有硬件加速支持 | 出口条件1:B 出口条件2:C | ||
| B | 使用 top 等方法查看 cpu loading 使用情况 | 出口条件1:过高 -> 调整 App 线程优先级 出口条件2:正常 -> 与 IVE owner 确认算子是否有优化空间 | 流程结束 | 出口条件2: 算子参数配置:输入/输出图像/内存的分辨率、内存配置信息、控制参数信息 | |
| C | 参照 IVE API 文档章节 4.3 智能加速引擎使用限制说明 进行确认 | 出口条件1:不符合硬件加速要求 -> 根据文档说明调整参数 出口条件2:符合硬件加速支持 | 出口条件1:流程结束 出口条件2:D | ||
| D | 使用下面 方法1 进行确认 | 出口条件1:未使用到硬件加速 -> 与 IVE owner 确认 出口条件2:使用到硬件加速 | 出口条件1:流程结束 出口条件2:E | 出口条件1: 算子参数配置:输入/输出图像/内存的分辨率、内存配置信息、控制参数信息 | |
| E | 使用下面 方法2 进行确认 | 出口条件1:不符合使用预期 -> 调整 clk 后重新测试 出口条件2:符合预期 -> 与 IVE owner 确认 | 流程结束 | 出口条件2: 算子参数配置:输入/输出图像/内存的分辨率、内存配置信息、控制参数信息 |
-
方法1. 使用以下命令进行确认,若 app 运行前后,
/customer/riu_r读取的寄存器值均无变化,则表示算子实际没有使用到硬件加速。/customer/riu_w 0x151e 0x10 0x1f /customer/riu_w 0x1520 0x02 0x3 /customer/riu_r 0x151e 0x10 /customer/riu_r 0x1520 0x02 /customer/riu_r 0x151f 0x4 /customer/riu_r 0x1520 0x69 // 运行 app 用于测试 /customer/riu_r 0x151e 0x10 /customer/riu_r 0x1520 0x02 /customer/riu_r 0x151f 0x4 /customer/riu_r 0x1520 0x69- 还可通过 proc 信息进行确认,在调用
MI_IVE_Destroy前,获取 proc 信息,若HwCallTimes计数为 0,则表示算子实际没有使用到硬件加速。
- 还可通过 proc 信息进行确认,在调用
-
方法2. 使用以下命令进行确认实际使用 clk rate:
/customer/riu_r 0x1038 0x6a // bit[11:10]=0x0:288M // bit[11:10]=0x1:216M // bit[11:10]=0x2:384M // bit[11:10]=0x3:432M - OD- 还可通过 proc 信息进行确认,获取 proc 信息后,根据
ClkRate直接确认实际使用 clk rate。
- 还可通过 proc 信息进行确认,获取 proc 信息后,根据
2.2 效果异常¶
Debug 流程:
| 流程 | 确认方法 | 出口条件 | 下一步 | 需提供信息 | 相关可参考FAQ |
|---|---|---|---|---|---|
| A | 根据算子参照 IVE API 文档对应章节,确认参数设定是否符合预期效果设定 | 出口条件1:参数异常 -> 修改参数后重新测试 出口条件2:参数正常 | 流程结束 | 出口条件2: 算子参数配置:输入/输出图像/内存的分辨率、内存配置信息、控制参数信息 | 确认算子参数设定参考IVE API 文档 |
-
例1如下图:如 Filter 算子在相同的 mask 参数设定下,不同的 shift 参数会导致输出效果差异大。
2.3 踩内存问题¶
IVE 踩内存示例:log 带有 Name=IVE 表示 IVE 发生踩内存;其中,IsWrite=0 表示读踩内存,IsWrite=1 表示写踩内存。
[MI WRN] MI_SYS_Mma_MmuCallback [mi_sys][369]: [MI_SYS_Mma_MmuCallback] Status=0x2, PhyAddr=0x40260000, ClientId=0x1c,Name=IVE IsWrite=0
[MI WRN] MI_SYS_Mma_MmuCallback [mi_sys][369]: [MI_SYS_Mma_MmuCallback] Status=0x6, PhyAddr=0x406e0000, ClientId=0x1c,Name=IVE IsWrite=1
Debug 流程:
| 流程 | 确认方法 | 出口条件 | 下一步 | 需提供信息 | 相关可参考FAQ |
|---|---|---|---|---|---|
| A | 确认内存大小配置是否与分辨率匹配 如 1280x720 输入分辨率 ->U8C1 格式图像所需内存大小为 1280x720x1 ->YUV422_YUYV 格式图像所需内存大小为 1280x720x2 | 出口条件1:不匹配 -> 修改内存配置后重新测试 出口条件2:匹配 | 流程结束 | 出口条件2: 1.算子参数配置:输入/输出图像/内存的分辨率、内存配置信息、控制参数信息 2.步骤1 debug 信息 |
- 步骤1. 按以下步骤配置并抓取信息:
vi /config/modparam.json # 在 E_MI_MODULE_ID_SYS 节点中增加或更新设定 "debugMmu":1 reboot echo debug_mmu debug_log 1 1 1 0 > /proc/mi_modules/mi_sys/mi_sys0 # 输出 IVE 内部申请/释放内存信息 log & 踩内存时的内存使用情况 // echo debug_mmu debug_log 0 0 0 0 > /proc/mi_modules/mi_sys/mi_sys0 # 关闭 cat /proc/kmsg // 在其他控制台上运行 app 进行测试,提供带有踩内存 log 的 kmsg
2.4 其他异常问题¶
其他问题,在 IVE 使用过程中,按以下步骤多次抓取信息后,与 IVE owner 确认。
cat /proc/mi_modules/mi_ive/debug_hal/ive_axi
cat /proc/mi_modules/mi_ive/mi_ive0
/customer/riu_r 0x151e
/customer/riu_r 0x151f
/customer/riu_r 0x1520
/customer/riu_r 0x1038 0x6a