跳转至

MI IVE DEBUG SOP


REVISION HISTORY

Revision No.
Description
Date
1.00
  • Initial release
  • 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 0x4
      

      iFado:

      /customer/riu_w 0x1520 0x10 0x1f
      // 运行 app 用于测试
      /customer/riu_r 0x1520 0x10
      /customer/riu_r 0x1521 0x4
      

      iFliegen/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,则表示算子实际没有使用到硬件加速。
    • 方法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_clk
      

      iFord/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。

    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