A kernel bug froze my machine: Debugging an async-profiler deadlock
5 months ago
- #Performance Profiling
- #Debugging
- #Linux Kernel
- 一位Linux用户在使用async-profiler与QuestDB时遭遇系统冻结,追踪发现是6.17版本内核的一个漏洞。
- 该漏洞是perf_events子系统中的死锁问题,具体发生在hrtimer_cancel函数内,导致系统冻结。
- 通过使用-e ctimer选项启动分析器,可以规避有问题的内核功能,从而找到临时解决方案。
- 用户搭建了QEMU环境进行内核调试,重现冻结现象并使用GDB实时检查死锁状态。
- 调试发现当hrtimer_cancel在其自身回调函数中被调用时,会引发无限循环导致死锁。
- 尝试通过GDB修改返回值手动修复死锁取得部分成功,但无法保证生产环境稳定性。
- 最终结论是采用临时解决方案或等待内核修复,并从中获得了内核调试和perf_events子系统的重要经验。