内核稳定性
前言
创建该专栏目的:系统地整理遇到的内核稳定性问题及知识点,便于回顾和查缺补漏。
内核稳定性问题指的是系统发生了死机或异常重启(oops/panic等软硬件问题),影响用户体验,甚至造成生命财产的损失。
稳定性开发的目的是通过提前干预的方法,让更多的bug在开发阶段就暴露出来,提高产品固件的稳定性,减轻后续维护的压力。
稳定性开发的内容主要包含:
- 代码静态分析
- 动态故障检测
- 故障现场记录
- 故障分析工具
比如hungtask问题,当内核检测到有hungtask异常(故障检测),会触发panic通过kdump保存vmcore(故障现场),最后通过crash工具解析vmcore分析异常(故障分析)。当然有些稳定性问题,可能在检测到故障的同时已经记录足够的信息问题用于分析。
首先概括下常见的内核异常、故障检测方法、现场记录和分析工具,不够全面,后续补充。
1 常见的内核异常:
1.1 调度相关
- rcu stall
- watchdog
- hungtask
- softlockup
- hardlockup
- workqueue lockup
- schedule while atomic
- rcu 主动schedule
- rt throttle
1.2 内存相关
- 踩内存
- 内存泄漏
- 访问内存失败(空指针、异常地址)
- oom、lowmem killer
- bad page
- spinlock error
1.3 总线相关
- noc error
- bus error(serror、同步)
- tzasc error
1.4 其他异常
- 中断风暴
- BUG_ON
- WARN_ON
- 用户进程crash
- DDR bit翻转
2 动态故障检测
2.1 内存故障检测
- kasan
- asan
- kfence
- slub_debug
- kmemleak
- malloc debug
2.2 系统资源监测
- 轻量化采集工具(进程loading、内存占用、io等)
- emmc trace
- irq mornitor
- lockdep
- kprobe
- ftrace
- ebpf
2.3 其他检测工具
- tzasc
- coresight
3 故障现场记录
- pstore
- kdump
- minidump
- coredump
- printk、logbuf
- die step
- boot reason
4 故障分析工具
- gdb
- crash
- DS5
- trace32
- coresight
后面会按照这个框架介绍常见内核异常的检测原理和案例分析,有问题的话欢迎大家一起探讨。