DragonOS
DragonOS copied to clipboard
【任务发布】实现lockdep
什么是lockdep?
Lockdep是一种用于检测和防止Linux内核中锁竞争和死锁的技术。Lockdep通过跟踪锁的使用情况和锁之间的依赖关系,帮助开发者在内核代码中实现正确的锁操作。
Lockdep的主要功能包括:
- 跟踪锁类(Lock-class):Lockdep将相关的锁组成一个"锁类",并跟踪每个锁类的使用状态和依赖关系。锁类是一个逻辑上相同的锁组,可能包括多个实例,如每个inode结构的锁实例都属于同一个锁类。
- 使用状态和历史:Lockdep记录锁在不同的中断上下文(如硬中断、软中断)中的使用情况,以及是否允许中断。这些状态和历史用于检查锁的正确使用。
- 多锁依赖规则:Lockdep检查锁类之间的依赖关系,以防止死锁。它不会允许同一锁类被获取两次,或者在逆序获取(可能导致死锁)。
- 单锁状态规则:Lockdep确保锁的类型是安全的(如不允许在硬中断上下文中获取的锁被在允许中断时获取)。
- 容错处理:Lockdep可以处理多核和多任务下的复杂锁情况,它可以检测任何可能发生的简单锁依赖。
- 性能考虑:Lockdep通过只检查不重复的锁序列来减少性能开销。
- 压测和故障排除:Lockdep有助于在压测中发现潜在的锁问题,还可以辅助开发者解决特定的锁问题。
需求
由于DragonOS目前具有很多使用不正确的锁,总是造成一些奇奇怪怪的问题。而随着代码结构的复杂化,手动排查锁的正确性变得比较困难。因此需要参考linux,实现lockdep,检测锁实现的正确性。
参考
- https://docs.kernel.org/locking/lockdep-design.html
目前正由@TTaq 开发