lockdep
- 커널이 사용하는 lock(spinlock, mutex, semaphore)을 디버깅하기 위해 사용
- Lock Problem(Dead-Lock)발생 시 경고 출력을 한다. (dmesg로 볼 수 있다.)
- ww-mutex를 사용하면 deadlock도 회피할 수 있다.
- 현재 커널은 userspace에서 사용하는 lock도 디버깅할 수 있다.
- 커널 빌드 시 락 디버깅 옵션을 enable하여 사용한다.
커널 메뉴 설정 방법
Kernel hacking --->
Lock Debugging (spinlocks, mutexes, etc...) --->
[*] RT Mutex debugging, deadlock detection
-*- Spinlock and rw-lock debugging: basic checks
-*- Mutex debugging: basic checks
[*] Wait/wound mutex debugging: Slowpath testing
-*- Lock debugging: detect incorrect freeing of live locks
[*] Lock debugging: prove locking correctness
[*] Lock usage statistics
[*] Lock dependency engine debugging
[*] Sleep inside atomic section checking
[*] Locking API boot-time self-tests
<M> torture tests for locking
/proc 디렉토리에 생성되는 항목들
/proc/lockdep
/proc/lockdep_chains
/proc/lockdep_stat
/proc/locks
/proc/lock_stats
/proc/lockdep
all lock classes:
80a1c55c OPS: 19 FD: 50 BD: 2 +.+...: cgroup_mutex
-> [80a1c6b0] cgroup_idr_lock
-> [80a1c5b0] css_set_rwsem
-> [80a30a74] devcgroup_mutex
-> [80a1cf3c] freezer_mutex
-> [80a274ac] kernfs_mutex
(...)
/proc/lockdep_chains
all lock chains:
irq_context: 0
[80a1c55c] cgroup_mutex
irq_context: 0
[80a16a3c] resource_lock
(...)
/proc/lockdep_stat
lock-classes: 1212 [max: 8191]
direct dependencies: 4230 [max: 32768]
indirect dependencies: 13035
all direct dependencies: 63105
dependency chains: 6166 [max: 65536]
dependency chain hlocks: 18187 [max: 327680]
in-hardirq chains: 29
in-softirq chains: 261
in-process chains: 4580
stack-trace entries: 60133 [max: 524288]
combined max dependencies: 36006660
hardirq-safe locks: 28
hardirq-unsafe locks: 471
softirq-safe locks: 91
softirq-unsafe locks: 415
irq-safe locks: 97
irq-unsafe locks: 471
hardirq-read-safe locks: 3
hardirq-read-unsafe locks: 80
softirq-read-safe locks: 9
softirq-read-unsafe locks: 77
irq-read-safe locks: 10
irq-read-unsafe locks: 80
uncategorized locks: 130
unused locks: 1
max locking depth: 15
max bfs queue depth: 159
chain lookup misses: 6175
chain lookup hits: 10136672
cyclic checks: 4705
find-mask forwards checks: 1593
find-mask backwards checks: 31551
hardirq on events: 8784803
hardirq off events: 8784808
redundant hardirq ons: 356471
redundant hardirq offs: 6574108
softirq on events: 116537
softirq off events: 116565
redundant softirq ons: 0
redundant softirq offs: 0
debug_locks: 1
/proc/locks
1: FLOCK ADVISORY WRITE 2057 00:0e:7200 0 EOF
2: FLOCK ADVISORY WRITE 2246 00:0e:7097 0 EOF
/proc/lock_stat
lock_stat version 0.4
-----------------------------------------------------------------------------------------------------
class name con-bounces contentions waittime-min waittime-max waittime-total
-----------------------------------------------------------------------------------------------------
&mapping->i_mmap_rwsem-W: 1630 2186 0.99 64477.45 988876.13
&mapping->i_mmap_rwsem-R: 0 0 0.00 0.00 0.00
------------------------
&mapping->i_mmap_rwsem 1017 [<801343b0>] unlink_file_vma+0x34/0x50
&mapping->i_mmap_rwsem 319 [<8013448c>] vma_link+0x44/0xbc
&mapping->i_mmap_rwsem 327 [<80024244>] copy_process.part.44+0x1440/0x17e4
&mapping->i_mmap_rwsem 523 [<801347cc>] vma_adjust+0x2c8/0x604
------------------------
&mapping->i_mmap_rwsem 274 [<8013448c>] vma_link+0x44/0xbc
&mapping->i_mmap_rwsem 320 [<80024244>] copy_process.part.44+0x1440/0x17e4
&mapping->i_mmap_rwsem 603 [<801347cc>] vma_adjust+0x2c8/0x604
&mapping->i_mmap_rwsem 989 [<801343b0>] unlink_file_vma+0x34/0x50
......................................................................................................
---------------------------------------------------------------------------------------------------------
waittime-avg acq-bounces acquisitions holdtime-min holdtime-max holdtime-total holdtime-avg
---------------------------------------------------------------------------------------------------------
452.37 37732 174127 2.19 66922.50 2247589.89 12.91
0.00 12 727 10.57 3269.64 36358.60 50.01
.........................................................................................................
참고자료: