super皮波 发表于 2015-01-14 14:21

有没有介绍自旋锁调试的相关文档?

标红的成员的作用一直没理解有什么作用,去哪找这块的资料呢?多谢
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;

super皮波 发表于 2015-01-14 21:20

@Tinnal
帮我看看我这个问题,多谢

Tinnal 发表于 2015-01-14 21:21

回复 2# super皮波


    那是内核死锁检测功能的代码。特性名就是lockdep.

Tinnal 发表于 2015-01-14 21:27

这里有很多参考链接。你可以看看:
http://www.lenky.info/archives/2013/04/2253

super皮波 发表于 2015-01-14 21:32

回复 4# Tinnal
多谢版主,我学习学习

   

super皮波 发表于 2015-02-05 18:02

回复 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)

   

Tinnal 发表于 2015-02-05 19:23

回复 6# super皮波


   我们没有使用lockdep,使用lockdep太耗性能性了。使用softlockup和hungtast可以实现相应的检查。

super皮波 发表于 2015-02-05 22:47

回复 7# Tinnal
抛开lockdep不谈,单纯这句话如何理解

   

Tinnal 发表于 2015-02-06 21:26

回复 8# super皮波


lockdep能检测死锁并进行提前干预。如果不上,就会发生死锁。在内核,发生发锁要不就整个CPU锁死,不调度了,要不就把进程锁死,不再调度它了。这两种情况正好是softlockup和hungtask能检测到的,只要自己去扩展一个加锁和解锁的代码,加一点信息进来,就可以在发现问题时把出问题的锁和相关信息打印出来。这是一个事后处理方案,因此开销会比实实检测小很多。
页: [1]
查看完整版本: 有没有介绍自旋锁调试的相关文档?