5月前
22 条
[Android稳定性] 第053篇 [方法篇] 稳定性问题分析指导
本文摘要:文章通过一个嵌入的Xmind思维导图,展示了某个主题的结构化思考。思维导图涵盖关键点,以直观的方式呈现信息,便于读者快速理解和把握核心内容。
5月前
1 条
[Android稳定性] 第052篇 [方法篇] HMI项目中如何使用QCAP解析minidump?
本文主要介绍在HMI项目中处理minidump.gz文件的方法,包括解压minidump.gz和解密minidump。文中提到两种解压方式:本地解压和在线解压,推荐在线解压。解压后,使用脚本将minidump拆分成各个bin文件。接着,生成ap_minidump.elf文件,这是解析APPS关键步骤。文章还提供了相关的脚本和命令,并展示了预期解析结果。该方法也适用于其他高通平台项目。
5月前
1 条
[Android稳定性] 第051篇 [原理篇] 从timer角度学习高通平台的watchdog
本文主要介绍了Linux内核中的定时器机制,包括低精度定时器timer_list和高精度定时器hrtimer,以及它们在watchdog timer中的应用。文章首先介绍了timer_list的实现机制、核心数据结构和API,并通过一个简单的示例展示了其使用方法。接着,文章深入剖析了hrtimer的实现机制、核心数据结构和API,并给出了一个hrtimer定时器的示例驱动。随后,文章着重介绍了watchdog timer的使用,包括其初始化、喂狗线程函数和suspend/wakeup处理。此外,文章还介绍了基于软件的软看门狗机制,包括其基本原理、核心组件、检测流程和内核中的主要实现。最后,文章总结了watchdog timer的debug方法和技巧,并提供了一些常用的内核参数用于调试。
5月前
评论
[Android稳定性] 第050篇 [问题篇] slab内存泄露造成设备黑屏
本文描述了在测试手机经过长期智能充电后,出现卡顿和黑屏的问题现象。复现步骤包括设置手机时间和电池温度,并使用QC3.0充电器进行充电。预期结果是系统界面流畅,但实际结果是系统界面卡死和黑屏。通过分析内存信息和slab信息,发现内存不足和slab内存泄露问题。通过slabtrace分析,确定问题根源在于charger模块中的一些函数调用导致了内存泄露。解决方案是在申请内存前,先判断是否已经申请过,以避免重复申请。
5月前
1 条
[linux内存管理] 第027篇 Linux ARM64 虚拟地址布局
本文讨论了ARM64架构下Linux内核的虚拟地址布局。文章指出,尽管ARM64地址宽度为64位,但最大支持的物理地址为48位,即256T。虚拟地址宽度可以选择36位、39位、42位、47位、48位或52位,以39位为例,用户空间和内核空间大小均为512G。文章还详细介绍了内核虚拟地址空间分布,包括线性映射区域、模块区域、内核镜像区域、VMEMMAP区域、PCI I/O区域、固定映射区域等。最后,文章解释了线性空间下移的原因,并展示了虚拟地址空间总体分布图。
5月前
评论
[linux内存管理] 第026篇 从内核源码看 slab 内存池的创建初始化流程
本文详细介绍了Linux内核中slab内存池的创建过程,从源码层面解释了slab cache的架构设计和实现。文章首先介绍了slab cache的创建接口函数kmem_cache_create,并解释了其参数与slab cache结构体属性的对应关系。接着,文章深入分析了slab cache创建的详细流程,包括获取锁、参数校验、查找可复用的slab cache、计算slab对象的内存布局、初始化slab cache的重要属性、创建本地cpu缓存和NUMA节点缓存等步骤。此外,文章还介绍了slab allocator体系的初始化过程,解释了如何解决先有鸡还是先有蛋的问题,并详细说明了slab对象的内存布局和计算slab所需物理内存页个数的逻辑。最后,文章总结了slab cache的创建流程和架构,并展望了后续对slab内存池内存分配的深入探讨。
5月前
评论
[linux内存管理] 第025篇 细节拉满,80 张图带你一步一步推演 slab 内存池的设计与实现
本文介绍了 Linux 内核中的 slab 内存池,用于高效地分配和释放小内存块。作者首先回顾了 Linux 内存分配的宏观流程,然后引出 slab 内存池的产生背景和优势。slab 内存池将频繁使用的小内存块池化,避免了频繁的内存分配和释放带来的性能开销。文章详细介绍了 slab 对象池的内存布局,包括对齐、red zone、freepointer 和状态信息等。接着,文章分析了 slab 的总体架构设计,包括 kmem_cache、kmem_cache_cpu 和 kmem_cache_node 等数据结构。最后,文章详细介绍了 slab 内存分配和释放的原理,包括从本地 cpu 缓存、partial 列表、NUMA 节点缓存和伙伴系统中分配和释放内存的场景。
5月前
评论
[linux内存管理] 第024篇 slab内存分配器概述
Buddy系统以页为单位分配内存,导致浪费和效率低下。Solaris的Slab分配器通过对象类型专属仓库和缓存复用,极大提升命中率和访问速度。Linux随后演化出SLUB和SLOB,其中SLUB采用批量、无锁和本地CPU缓存等机制,大幅降低元数据开销与碎片化,优化了性能。
5月前
评论
任务调度器:从入门到放弃(一)
本文探讨了Linux调度器的运作机制,特别是完全公平调度器(CFS)和实时调度类(RT)的区别,以及控制组(cgroup)如何通过限制资源配额来影响调度结果。文章指出,CFS的优先级代表权重,而非传统意义上的优先级顺序,而cgroup则通过cpu.shares参数来控制资源占比。实验表明,当进程在同一个分组时,其资源占比受到priority权重的影响;当进程在不同分组时,其资源配额受到组的cpu.shares的控制。文章还讨论了cgroup可能带来的问题,如默认资源配额不合理和跨资源group组调用的问题。
5月前
2 条
[Android稳定性] 第049篇 [问题篇] 软中断霸占CPU导致watchdog无法及时喂狗
**问题现象**: 系统出现死机现象。 **问题分析**: 通过分析dmesg日志和内核定时器数据,发现是由于watchdog定时器未在规定时间内被“喂狗”导致。进一步分析发现,CPU 3上的定时器时钟落后,导致pet_timer无法在规定时间触发。 **问题根因**: 网络驱动中的软中断处理路径占用了较长时间的软中断上下文,并多次禁用底半部,导致定时器软中断无法及时执行。 **解决方案**: 建议优化网络驱动中的软中断处理路径,减少底半部的禁用时间,以确保定时器软中断能够及时执行。
5月前
评论
[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 状况,找出性能瓶颈并进行优化。
6月前
评论
「知不可忽骤得,托遗响于悲风」
《赤壁赋》是苏轼描绘秋夜泛舟赤壁之下所见的壮丽景象和内心感慨。文章以月夜泛舟、饮酒作乐为背景,引出对历史英雄曹操的回忆,及对人生无常、宇宙永恒的深刻思考。苏轼通过水与月的比喻,表达了对物我关系和人生价值的理解,最终以与客共饮、畅谈人生作结。