![[Android稳定性] 第051篇 [原理篇] 从timer角度学习高通平台的watchdog](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_4rxbkph.png?x-oss-process=image/resize,w_800,m_lfit)
[Android稳定性] 第051篇 [原理篇] 从timer角度学习高通平台的watchdog
本文主要介绍了Linux内核中的定时器机制,包括低精度定时器timer_list和高精度定时器hrtimer,以及它们在watchdog timer中的应用。文章首先介绍了timer_list的实现机制、核心数据结构和API,并通过一个简单的示例展示了其使用方法。接着,文章深入剖析了hrtimer的实现机制、核心数据结构和API,并给出了一个hrtimer定时器的示例驱动。随后,文章着重介绍了watchdog timer的使用,包括其初始化、喂狗线程函数和suspend/wakeup处理。此外,文章还介绍了基于软件的软看门狗机制,包括其基本原理、核心组件、检测流程和内核中的主要实现。最后,文章总结了watchdog timer的debug方法和技巧,并提供了一些常用的内核参数用于调试。
![[Android稳定性] 第049篇 [问题篇] 软中断霸占CPU导致watchdog无法及时喂狗](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_tstlhyw.png?x-oss-process=image/resize,w_800,m_lfit)
[Android稳定性] 第049篇 [问题篇] 软中断霸占CPU导致watchdog无法及时喂狗
**问题现象**: 系统出现死机现象。 **问题分析**: 通过分析dmesg日志和内核定时器数据,发现是由于watchdog定时器未在规定时间内被“喂狗”导致。进一步分析发现,CPU 3上的定时器时钟落后,导致pet_timer无法在规定时间触发。 **问题根因**: 网络驱动中的软中断处理路径占用了较长时间的软中断上下文,并多次禁用底半部,导致定时器软中断无法及时执行。 **解决方案**: 建议优化网络驱动中的软中断处理路径,减少底半部的禁用时间,以确保定时器软中断能够及时执行。
![[Android稳定性] 第048篇 [原理篇] Android SWT机制介绍](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_ahgrdvk.png?x-oss-process=image/resize,w_800,m_lfit)
[Android稳定性] 第048篇 [原理篇] Android SWT机制介绍
SWT-Android Software Watchdog Timeout 是 Android 系统中的一种监控机制,用于检测 System Server 进程中的核心服务和线程是否卡住,并在必要时自动重启系统。本文介绍了 SWT 的原理、实现方式、常见原因、检查流程以及相关工具的使用。 **SWT 的重要性**: System Server 是 Android 系统的核心进程,为应用程序提供各种服务。如果 System Server 中的核心服务和线程卡住,会导致系统出现各种异常,例如手机卡顿、应用程序无法启动等。SWT 机制可以及时发现并解决这些问题,提高系统稳定性。 **SWT 的实现**: SWT 通过添加 MonitorChecker 和 HandlerChecker 两种 Checker 来监控核心服务和线程。MonitorChecker 检查系统核心服务是否被锁时间过长,HandlerChecker 检查系统核心线程创建的 Looper 管理的消息队列是否阻塞。如果检测到卡顿,SWT 会杀死 System Server 进程并重启系统。 **常见 SWT 原因**: 等锁、SurfaceFlinger 卡住、Native 方法执行时间过长、Binder Server 卡住、Zygote fork 进程时卡住、Dump 时间过长等。 **SWT 检查流程**: 检查 SWT DB 中的 trace 文件,分析线程状态、call stack 和相关 log,找出卡顿的原因。 **相关工具**: hang_SWT_analysis-v6.1 工具可以自动分析 SWT DB,并生成分析报告。 **性能问题导致的 SWT**: 检查 CPU Loading、Low Memory 和 IO 状况,找出性能瓶颈并进行优化。
![[Android稳定性] 第033篇 [问题篇] suspend时shedule io操作导致线程阻塞引发死机](https://hexoimg.oss-cn-shanghai.aliyuncs.com/blog/25/4/cover_android_stability_033.png)
[Android稳定性] 第033篇 [问题篇] suspend时shedule io操作导致线程阻塞引发死机
## 一、问题背景 工厂BLMMI工站的一台机器出现死机,进入dump状态。 ## 二、问题分析 ### 2.1 初步定位 通过分析dmesg日志,确定死机原因为watchdog bite,CPU0发生。 ### 2.2 定位卡死线程 分析日志发现系统在挂起后未能正确resume,导致watchdog未在20秒内被喂狗。 ### 2.3 查找阻塞的进程 通过查看tasks.txt,发现irq/141-pmic_pw线程卡在不可中断睡眠状态,推测为卡住的线程。 ## 三、根本原因分析 分析栈回溯,发现irq/141-pmic_pw线程在挂起阶段执行mtdoops dump操作时,底层block device已挂起,导致线程卡死,无法完成resume。 ## 四、解决方案 1. 在pwrkey_long_press_irq_event中仅设置标志,延迟执行dump操作。 2. 在系统resume后通过workqueue异步触发dump。 ## 五、效果 避免挂起阶段执行阻塞的dump操作,解决suspend卡死问题。 ## 六、测试建议 1. 检查按电源键时是否出现defer dump日志。 2. 检查挂起后唤醒是否出现Executing deferred mtdoops dump after resume日志。 3. 观察是否还会触发watchdog bite。
![[Android稳定性] 第035篇 [问题篇] 中断风暴触发watchdog bite](https://hexoimg.oss-cn-shanghai.aliyuncs.com/blog/25/4/cover_android_stability_035.png)
[Android稳定性] 第035篇 [问题篇] 中断风暴触发watchdog bite
**问题背景**:系统出现死机现象,且插上屏幕后问题消失。 **问题分析**: 1. **dmesg分析**:发现watchdog被触发,导致系统死机。 2. **堆栈分析**:`dsi_ctrl_hw_cmn_ctrl_reset()`函数卡住,没有正常返回。 3. **中断分析**:系统处于中断风暴状态,`msm_drm`和`dsi_ctrl`模块中断触发频率异常高。 4. **中断号分析**:通过T32工具查找中断号,进一步确定问题根源。 **根本原因**: 某个设备中断(如QtiBus/IPC/CAN)在IRQ handler中未及时退出,导致CPU被中断处理任务占满,无法进行正常调度,最终触发watchdog并导致死机。
![[Android稳定性] 第023篇 [问题篇] printk非空的非法指针参数导致的spinlock死锁引起Non Secure WDT](https://hexoimg.oss-cn-shanghai.aliyuncs.com/blog/25/2/cover_android_stability_023.png)
[Android稳定性] 第023篇 [问题篇] printk非空的非法指针参数导致的spinlock死锁引起Non Secure WDT
**摘要**: 本文分析了Linux内核中因`Non secure wdt`导致的死机问题。通过分析ramdump,发现所有CPU都在等待一个spin lock,且锁的持有者是`kworker/u17:12`。进一步分析发现,该进程在获取锁后出现了data abort,并在异常处理流程中再次尝试获取锁,导致死锁。根本原因是`nvt_update_firmware`函数中使用了未初始化的指针作为`printk`的参数,导致打印异常。解决方案是将`kmalloc`改为`kzalloc`,以确保内存被清零。实验验证了当`printk`的参数为非法指针时,会导致死锁。
![[Android稳定性] 第018篇 [问题篇] 串口日志未关闭导致的watchdog](https://hexoimg.oss-cn-shanghai.aliyuncs.com/blog/25/1/cover_android_stability_018.png)
[Android稳定性] 第018篇 [问题篇] 串口日志未关闭导致的watchdog
系统出现死机,日志显示QCOM Apps Watchdog超时触发。分析发现,所有CPU核心均暂停等待`rcu_momentary_dyntick_idle`,CPU0正在执行打印操作,导致无法及时pet watchdog,引发异常。解决方案建议关闭kernel的串口日志以避免类似问题。
![[Android稳定性] 第017篇 [方法篇] 高通watchdog分析流程](https://hexoimg.oss-cn-shanghai.aliyuncs.com/blog/25/1/cover_android_stability_017.png)
[Android稳定性] 第017篇 [方法篇] 高通watchdog分析流程
高通watchdog分析七步法:首先检查执行状态,确认进程位置和状态;若未就绪,探究timer问题;若就绪未调度,分析中断及调度状况;最后检查进程是否禁止抢占,确保系统稳定运行。
![[Android稳定性] 第016篇 [原理篇] 高通平台watchdog机制原理解析](https://hexoimg.oss-cn-shanghai.aliyuncs.com/blog/25/1/cover_android_stability_016.png)
[Android稳定性] 第016篇 [原理篇] 高通平台watchdog机制原理解析
Watchdog是一种用于嵌入式系统的机制,当系统出现严重故障时,可以在无人为介入的情况下自动重新启动系统。它分为硬件和软件两种类型,硬件watchdog比软件watchdog有更好的可靠性。在高通平台Android系统中,watchdog的实现有所不同,本文主要介绍了高通平台Android系统中watchdog的种类、实现、初始化入口、通知链和主线程。