MI IVE DEBUG SOP¶
REVISION HISTORY¶
| Revision No. | Description |
Date |
|---|---|---|
| 1.00 | 11/06/2025 |
前言¶
本文档旨在介绍遇到MI IVE相关问题时,如何进行初步排查,快速定位问题,以及确定是Sgs SDK问题后,需提供哪些信息给IVE owner分析。
-
支持
cat /proc/mi_modules/mi_ive/mi_ive0获取 proc 信息,示意图如下:
1. IVE 常见问题¶
1.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: 算子参数配置:输入/输出图像/内存的分辨率、内存配置信息、控制参数信息 |
-
IVE API文档路径
alkaid\project\release\docs\platform\MI\ive_zh.md
-
查看cpu loading
echo H | top -d 1 -n 100 | grep -v "grep"
-
方法1. 使用以下命令进行确认,若 app 运行前后,
/customer/riu_r读取的寄存器值均无变化,则表示算子实际没有使用到硬件加速。Souffle/iFord/pCupid/iFackel/jaguar1/mHera:
/customer/riu_w 0x151e 0x10 0x1f // 运行 app 用于测试 /customer/riu_r 0x151e 0x10 /customer/riu_r 0x151f 0x4iFado:
/customer/riu_w 0x1520 0x10 0x1f // 运行 app 用于测试 /customer/riu_r 0x1520 0x10 /customer/riu_r 0x1521 0x4iFliegen/iHalo:
/customer/riu_w 0x1190 0x10 0x1f // 运行 app 用于测试 /customer/riu_r 0x1190 0x10 /customer/riu_r 0x1191 0x4- 还可通过 proc 信息进行确认,在调用
MI_IVE_Destroy前,获取 proc 信息,若HwCallTimes计数为 0,则表示算子实际没有使用到硬件加速。
- 还可通过 proc 信息进行确认,在调用
-
方法2. 使用以下命令进行确认实际使用 clk rate:

Souffle/iFado:
/customer/riu_r 0x1038 0x6a // bit8 = 0x1:disable clk // bit9 = 0x1:invert clk // bit[12:10]:0~3对应不同ive clk,每颗chip具体支持哪些可参考/proc/mi_modules/mi_ive/debug_hal/ive_clkiFord/pCupid/iFackel/jaguar1/iFliegen/iHalo/mHera:
/customer/riu_r 0x1038 0x6a // bit8 = 0x1:disable clk // bit9 = 0x1:invert clk // bit[11:10]:0~3对应不同ive clk,每颗chip具体支持哪些可参考/proc/mi_modules/mi_ive/debug_hal/ive_clk- 还可通过 proc 信息进行确认,获取 proc 信息后,根据
ClkRate直接确认实际使用 clk rate。
- 还可通过 proc 信息进行确认,获取 proc 信息后,根据
1.2 效果异常¶
Debug 流程:
| 流程 | 确认方法 | 出口条件 | 下一步 | 需提供信息 | 相关可参考FAQ |
|---|---|---|---|---|---|
| A | 根据算子参照 IVE API 文档对应章节,确认参数设定是否符合预期效果设定 | 出口条件1:参数异常 -> 修改参数后重新测试 出口条件2:参数正常 | 流程结束 | 出口条件2: 算子参数配置:输入/输出图像/内存的分辨率、内存配置信息、控制参数信息 |
-
例1如下图:如 Filter 算子在相同的 mask 参数设定下,不同的 shift 参数会导致输出效果差异大。
1.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
1.4. 其他异常问题¶
其他问题,在 IVE 使用过程中,按以下步骤多次抓取信息后,与 IVE owner 确认。
cat /proc/mi_modules/mi_ive/ive_axi
cat /proc/mi_modules/mi_ive/mi_ive0
Souffle/iFord/pCupid/iFackel/jaguar1/mHera:
/customer/riu_r 0x151e
/customer/riu_r 0x151f
/customer/riu_r 0x1520
/customer/riu_r 0x1038 0x6a
iFado:
/customer/riu_r 0x1520
/customer/riu_r 0x1521
/customer/riu_r 0x1038 0x6a
iFliegen/iHalo:
/customer/riu_r 0x1190
/customer/riu_r 0x1191
/customer/riu_r 0x1038 0x6a