一、hang_detect介绍:
MTK平台存在一个hang_detect的机制,用于检查应用层和驱动是否有卡住,应用层的system_server进程会
30s喂狗,也就是对kernel driver中的watchdog节点进行kick的操作,当kernel 里面的watchdog线程卡住时,或者
应用层发生SWT时不能及时喂狗,都会出现hang_detect的问题,出现问题时会有一定的等待时间重启,不同的
等待时间具有不同的意义:
- 正常情况下,watchdog thread tick 300s, 对应count=10.
- watchdog 检测到hang 30s, 在dump backtrace 前,tick 360s, 对应count=12.
- 在SWT 发生的情况下,tick 420s, 对应count=14.
- 在SWT 发生, 抓取完AEE DB 后, tick 330s, 对应count=11.
- 在 Surfaceflinger/SystemServer 发生Native Exception, tick 600s, 对应count=20.
- 在 Surfaceflinger/SystemServer 发生Native Exception后, 并且我司AEE开始抓取coredump, tick 1200s, 对应count=40.
- 在 Surfaceflinger/SystemServer 发生Native Exception, 并且我司AEE抓取完coredump后, tick 570, 对应count=19.
二、具体问题分析:
下面来看实际项目中遇到的一个问题,通过如下log可以看出发生了hang_detect重启,并且重启的count=10,
说明问题可能发生在重启前的300S:
[ 451.448876]