(ongoing) Linux死锁检测-Lockdep分析
lock class
lockdep 跟踪基本单元并不是每个锁的实例,而是锁类(lock class),在 Runtime locking correctness validator 这篇文章中 lockdep 作者 Ingo Molnar 解释了什么是锁类:
A class of locks is a group of locks that are logically the same with respect to locking rules, even if the locks may have multiple (possibly tens of thousands of) instantiations. For example a lock in the inode struct is one class, while each inode has its own instantiation of that lock class.
毫无疑问这种说法是准确的(毕竟是 Ingo 大佬),但是对于我这种小白来说未免过于抽象 :)。查阅代码后才理解了锁类的准确含义,以 spinlock 为例,在锁的初始化时定义了一个静态变量 __key,因此如果多个锁实例使用的 __key是同一个,那么它们就是同一个锁类,并采用哈希表来存储。
1 |
|
以如下代码片段为例,如果打开lockdep功能后:
- xxx_function1()执行时 lockdep 会打印警告:[ INFO: possible recursive locking detected ] ,当然,这显然是一个误报,并不是真的会死锁。由于__key是静态定义的,因此只要锁初始化时的代码位置相同(正如 xxx_function1 中的st1.lock 和 st2.lock),它们就是一个锁类。
- xxx_function2() 则不会打印任何警告,因为 st1.lock 和 st2.lock 对应不同的 __key。
1 |
|
lock usage state
待完善
lockdep 检查规则
待完善
lockdep 代码分析
待完善
(ongoing) Linux死锁检测-Lockdep分析
https://yuliao0214.github.io/2022/09/07/lockdep-design/