MI VDISP DEBUG SOP¶
REVISION HISTORY¶
| Revision No. | Description |
Date |
|---|---|---|
| 1.00 | 01/18/2024 |
前言¶
本文档主要是指导在使用VDISP功能时的一些常见的问题排查方法.
1. 问题¶
1.1 输出画面异常¶
STEP1 确认vdisp输入通道是否有对齐
- vdisp模块对输入通道的起始位置有对齐的限制,具体的对齐值取决于前级,若某个输入通道没有满足该限制条件,通道不会被创建,因而确认log中是否存在没有对齐的打印。
STEP2 确认bdma驱动是否正常
- vdisp模块基本是用软件来实现的,但也会用到bdma硬件,若出现花屏,可以先确认bdma是否是有异常,比如是否有一些异常的log等等。
STEP3 确认前级输出是否正常
-
使用以下命令dump输入图像查看是否有异常,若存在,则联系前级的owner。
echo dumpin [devid, chnid, path, cnt] > /proc/mi_modules/mi_vdisp/mi_vdispxxx -
若vdisp输入正常,则输入以下命令抓取kmsg信息交予vdisp owner分析。
echo 4 > /proc/mi_modules/mi_vdisp/debug_levelcat /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的性能是否满足
- 确认整个pipeline的cpu loading以及带宽等性能参数是否有异常
STEP2 确认vdisp output port的输出帧率设定值
-
如果输出帧率的设定值为0,则需要确认前级是否有卡死。
-
如果输出帧率的设定值不为0,则输入以下命令抓取proc信息(至少抓三次)交予vdisp owner分析
cat /proc/mi_modules/mi_vdisp/mi_vdispxxx
1.3 输出帧率不足¶
STEP1 确认前级是否做慢,导致丢帧
-
vdisp的输出帧率设定值为0(浮动帧率模式),或者使能了vdisp chn0-chn15的任意通道,才考虑前级的影响
-
连续多cat几次前级的proc信息,确认输出帧率下降,查看output port端的PipeBuf_cnt字段,如长时间为非0,此时需要联系前级owner去排查是否做慢。
STEP2 确认后级是否大量持有vdisp buffer,导致丢帧
- 连续多cat几次后级的proc信息,查看input port端的BindInQ_cnt字段,若长时间为非0,此时需要联系后级owner去排查是否消耗不及时。
STEP3 确认vdisp的性能参数
-
目前默认设置vdisp的output buffer BufCntQuota为4(通过cat vdisp proc信息查看BufCntQuota字段),排除前后级的影响,可以满足绝大多数的帧率要求。
-
若vdisp的BufCntQuota为4,帧率还是不足,可以查看vdisp proc信息Output port端的usrDepth字段,确认是否需要提供给user,若不需要可以配置为0或者减少该深度,该深度会影响vdisp buffer的释放。
-
若要节省内存改小vdisp的BufCntQuota,排除前后级影响以及usrDepth的影响后,还是达不到帧率要求,则参考以下第4点和第5点操作,提供给vdisp owner分析
-
下命令,抓取帧率不足时的proc信息交予vdisp owner分析
cat /proc/mi_modules/mi_vdisp/mi_vdispxxx -
在帧率不足的情况,下指令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/timeecho 0 > /proc/sys/kernel/printkecho 4 >/proc/mi_modules/mi_vdisp/debug_levelcat /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 输入以下命令抓取信息
-
修改/config/modparam.json中debugMmu字段, 开启debug mmu功能。
-
输入以下命令, 抓取kmsg信息交予vdisp owner分析。
echo 4 > /proc/mi_modules/mi_vdisp/debug_levelecho debug_mmu debug_log 1 1 1 14 > /proc/mi_modules/mi_sys/mi_sys0cat /proc/kmsg > /mnt/xxx.txt
1.5 其它问题¶
STEP1 输入以下命令抓取信息
- 输入上述命令后抓取proc以及kmsg信息交予vdisp owner分析。