跳转至

MI VDISP DEBUG SOP


REVISION HISTORY

Revision No.
Description
Date
1.00
  • Initial release
  • 01/18/2024

    前言

    本文档主要是指导在使用VDISP功能时的一些常见的问题排查方法.

    1. 问题

    1.1 输出画面异常

    STEP1 确认vdisp输入通道是否有对齐

    1. vdisp模块对输入通道的起始位置有对齐的限制,具体的对齐值取决于前级,若某个输入通道没有满足该限制条件,通道不会被创建,因而确认log中是否存在没有对齐的打印。

    STEP2 确认bdma驱动是否正常

    1. vdisp模块基本是用软件来实现的,但也会用到bdma硬件,若出现花屏,可以先确认bdma是否是有异常,比如是否有一些异常的log等等。

    STEP3 确认前级输出是否正常

    1. 使用以下命令dump输入图像查看是否有异常,若存在,则联系前级的owner。

      echo dumpin [devid, chnid, path, cnt] > /proc/mi_modules/mi_vdisp/mi_vdispxxx

    2. 若vdisp输入正常,则输入以下命令抓取kmsg信息交予vdisp owner分析。

      echo 4 > /proc/mi_modules/mi_vdisp/debug_level

      cat /proc/kmsg > /mnt/xxx.txt

    1.2 画面卡死

    画面卡死时,一般会在串口中刷如下的大量log:

    ## input:
    [MI WRN ]: _MI_SYS_Pass_Try_DequeueInputTaskNoLock[3394]:  [thread:vdisp0_P0_MAIN] mod[14] dev[0] pass[0] chn[16] inputtask CheckInputTaskStatus failed more than 14290ms,total pending task-1073432073
    ## output:
    [MI WRN ]: _MI_SYS_Pass_TryDequeueOutputTaskNoLock[6154]:  [thread:vdisp0_P0_MAIN] mod[14] dev[0] pass[0] chn[16] output not finished more than 5000ms
    

    STEP1 确认pipeline的性能是否满足

    1. 确认整个pipeline的cpu loading以及带宽等性能参数是否有异常

    STEP2 确认vdisp output port的输出帧率设定值

    1. 如果输出帧率的设定值为0,则需要确认前级是否有卡死。

    2. 如果输出帧率的设定值不为0,则输入以下命令抓取proc信息(至少抓三次)交予vdisp owner分析

      cat /proc/mi_modules/mi_vdisp/mi_vdispxxx

    1.3 输出帧率不足

    STEP1 确认前级是否做慢,导致丢帧

    1. vdisp的输出帧率设定值为0(浮动帧率模式),或者使能了vdisp chn0-chn15的任意通道,才考虑前级的影响

    2. 连续多cat几次前级的proc信息,确认输出帧率下降,查看output port端的PipeBuf_cnt字段,如长时间为非0,此时需要联系前级owner去排查是否做慢。

    STEP2 确认后级是否大量持有vdisp buffer,导致丢帧

    1. 连续多cat几次后级的proc信息,查看input port端的BindInQ_cnt字段,若长时间为非0,此时需要联系后级owner去排查是否消耗不及时。

    STEP3 确认vdisp的性能参数

    1. 目前默认设置vdisp的output buffer BufCntQuota为4(通过cat vdisp proc信息查看BufCntQuota字段),排除前后级的影响,可以满足绝大多数的帧率要求。

    2. 若vdisp的BufCntQuota为4,帧率还是不足,可以查看vdisp proc信息Output port端的usrDepth字段,确认是否需要提供给user,若不需要可以配置为0或者减少该深度,该深度会影响vdisp buffer的释放。

    3. 若要节省内存改小vdisp的BufCntQuota,排除前后级影响以及usrDepth的影响后,还是达不到帧率要求,则参考以下第4点和第5点操作,提供给vdisp owner分析

    4. 下命令,抓取帧率不足时的proc信息交予vdisp owner分析

      cat /proc/mi_modules/mi_vdisp/mi_vdispxxx

    5. 在帧率不足的情况,下指令1“echo Y”让输出的log带上时间戳,指令2“echo 0”关闭串口log输出,否则帧率会受log的影响,指令3“echo 4”打开vdisp的debug log信息,指令4“cat”需要在telnet终端执行,抓取vdisp debug log信息交予vdisp owner分析

      echo Y> /sys/module/printk/parameters/time

      echo 0 > /proc/sys/kernel/printk

      echo 4 >/proc/mi_modules/mi_vdisp/debug_level

      cat /proc/kmsg

    1.4 踩内存

    当出现vdisp踩内存时,一般会在串口输出如下类似的log:

    [MI WRN] MI_SYS_Mma_MmuCallback [mi_sys][365]: [MI_SYS_Mma_MmuCallback] Status=0x4, PhyAddr=0x41220000, ClientId=0x72, IsWrite=1
    

    STEP1 输入以下命令抓取信息

    1. 修改/config/modparam.json中debugMmu字段, 开启debug mmu功能。

    2. 输入以下命令, 抓取kmsg信息交予vdisp owner分析。

      echo 4 > /proc/mi_modules/mi_vdisp/debug_level

      echo debug_mmu debug_log 1 1 1 14 > /proc/mi_modules/mi_sys/mi_sys0

      cat /proc/kmsg > /mnt/xxx.txt

    1.5 其它问题

    STEP1 输入以下命令抓取信息

    echo 4 > /proc/mi_modules/mi_vdisp/debug_level
    cat /proc/mi_modules/mi_vdisp/mi_vdispxxx
    
    1. 输入上述命令后抓取proc以及kmsg信息交予vdisp owner分析。