[Android稳定性] 第039篇 [问题篇] 记几次判断为DDR不稳定导致的死机问题 3月前查看 评论
[Android稳定性] 第039篇 [问题篇] 记几次判断为DDR不稳定导致的死机问题

本文记录了工厂老化测试中多台机器死机的情况,作者评估为DDR问题。文章详细描述了8个案例,并分析了判定为DDR问题的依据,包括内核执行异常、空指针解引用、地址大小错误等。作者总结了DDR不稳定可能是原因,包括内存访问错误、多核系统的并发性、内存映射与虚拟内存、缓存一致性问题等。最后,作者建议对出问题的机器进行DDR压力测试,以验证DDR是否为问题根源。

[Android稳定性] 第036篇 [原理篇] 理解中断上下文、进程上下文以及进程调度之间的关系 3月前查看 评论
[Android稳定性] 第036篇 [原理篇] 理解中断上下文、进程上下文以及进程调度之间的关系

本文深入探讨了进程上下文、中断上下文以及 Linux 进程调度器(如 CFS)的概念和关联性。进程上下文是内核代码为特定进程执行任务的环境,能被调度、休眠和参与 CFS 调度。中断上下文是内核响应中断时运行的代码环境,不能睡眠,且不直接参与调度。SoftIRQ 和 Tasklet 作为中间层,处理中断后的任务。三者之间的关联性体现在中断上下文可以触发调度事件,而进程上下文可以主动调用调度器。文中还列举了在中断上下文中不能调用的函数或行为,并强调了中断上下文中禁止使用可能引起睡眠或阻塞的函数,以避免系统问题。

【深入内核】Linux 内核栈详解:你所需要知道的一切 3月前查看 评论
【深入内核】Linux 内核栈详解:你所需要知道的一切

本文深入解析了 Linux 内核栈的概念与重要性,详细介绍了内核栈的组成、大小、使用场景及其与用户栈的差异。文章强调了内核栈溢出等问题的严重性,并提供了避免常见错误的建议,如避免在内核栈上分配大数组,使用 kmalloc 分配缓冲区,以及开启 DEBUG_STACK_USAGE 选项进行栈使用检测。此外,文章还介绍了调试内核栈的方法和内核栈溢出的日志示例,为开发者和调试者提供了实用的指导。

[Android稳定性] 第035篇 [问题篇] 中断风暴触发watchdog bite 3月前查看 评论
[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稳定性] 第031篇 [原理篇] Linux内核内存检测工具KASAN 3月前查看 评论
[Android稳定性] 第031篇 [原理篇] Linux内核内存检测工具KASAN

本文介绍了Kernel Address Sanitizer (KASAN) 的功能、原理和配置方法。KASAN 是一个动态检测内存错误的工具,主要用于检测内存越界访问和使用已释放的内存等问题。它通过使用“额外”的内存来标记内存的状态,并在每次内存访问时检查对应影子内存的值是否有效,从而实现内存错误的检测。KASAN 集成在 Linux 内核中,可以在编译内核时通过添加相应的配置项来启用。