跳转至

MI IVE DEBUG SOP


REVISION HISTORY

Revision No.
Description
Date
1.00
  • Initial release
  • 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,则表示算子实际没有使用到硬件加速。
    • 方法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。

    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