有没有介绍自旋锁调试的相关文档?
标红的成员的作用一直没理解有什么作用,去哪找这块的资料呢?多谢typedef struct raw_spinlock {
arch_spinlock_t raw_lock;
#ifdef CONFIG_GENERIC_LOCKBREAK
unsigned int break_lock;
#endif
#ifdef CONFIG_DEBUG_SPINLOCK
unsigned int magic, owner_cpu;
void *owner;
#endif
#ifdef CONFIG_DEBUG_LOCK_ALLOC
struct lockdep_map dep_map;
#endif
} raw_spinlock_t; @Tinnal
帮我看看我这个问题,多谢 回复 2# super皮波
那是内核死锁检测功能的代码。特性名就是lockdep. 这里有很多参考链接。你可以看看:
http://www.lenky.info/archives/2013/04/2253 回复 4# Tinnal
多谢版主,我学习学习
回复 4# Tinnal
这是你推荐的文章,有个地方没看懂,帮忙解释一下
二,lockdep跟踪每个锁类的自身状态,也跟踪各个锁类之间的依赖关系,通过一系列的验证规则,以确保锁类状态和锁类之间的依赖总是正确的。另外,锁类一旦在初次使用时被注册,那么后续就会一直存在,所有它的具体实例都会关联到它。
三,锁类有4n + 1种不同的历史状态:
其中的4是指:
– ‘ever held in STATE context’ –> 该锁曾在STATE上下文被持有过
– ‘ever head as readlock in STATE context’ –> 该锁曾在STATE上下文被以读锁形式持有过 何为以读锁形式持有过??
– ‘ever head with STATE enabled’ –> 该锁曾在启用STATE的情况下被持有过
– ‘ever head as readlock with STATE enabled’ –> 该锁曾在启用STATE的情况下被以读锁形式持有过
其中的n也就是STATE状态的个数,目前有三个,可以根据需要添加:
– hardirq –> 硬中断
– softirq –> 软中断
– reclaim_fs –> fs回收(没看lockdep的源代码,应该是在回收fs的相关资源,比如内存时,情况比较特殊,所以被单独出来作为一个STATE)
回复 6# super皮波
我们没有使用lockdep,使用lockdep太耗性能性了。使用softlockup和hungtast可以实现相应的检查。 回复 7# Tinnal
抛开lockdep不谈,单纯这句话如何理解
回复 8# super皮波
lockdep能检测死锁并进行提前干预。如果不上,就会发生死锁。在内核,发生发锁要不就整个CPU锁死,不调度了,要不就把进程锁死,不再调度它了。这两种情况正好是softlockup和hungtask能检测到的,只要自己去扩展一个加锁和解锁的代码,加一点信息进来,就可以在发现问题时把出问题的锁和相关信息打印出来。这是一个事后处理方案,因此开销会比实实检测小很多。
页:
[1]