在linux内核中查找locking统计信息

我最近学习Linux锁机制,想看看锁的等待时间。

所以我通过make menuconfig打开.config文件中的CONFIG_LOCK_STAT标志,并在重新编译内核之后运行命令:

 # less /proc/lock_stat 

我收到以下消息:

 *WARNING* lock debugging disabled!! - possibly due to a lockdep warning. 

只是不知道为什么,因为我打开了内核hack->lock会话中的所有标志。

PS我使用的环境:内核3.12.6(由uname -a )。

更新:与__debug_locks_off()dump_stack()上的dmesg

 [ 0.000000] [<ffffffff817516a2>] _raw_write_lock+0x72/0x80 [ 0.000000] [<ffffffff81392718>] ? irqsafe4_soft_wlock_213+0x98/0xf0 [ 0.000000] [<ffffffff81392718>] irqsafe4_soft_wlock_213+0x98/0xf0 [ 0.000000] [<ffffffff817481f5>] dotest+0x43/0x5a7 [ 0.000000] [<ffffffff81399cd6>] locking_selftest+0x1286/0x2100 [ 0.000000] [<ffffffff81f1aca9>] start_kernel+0x2d2/0x427 [ 0.000000] [<ffffffff81f1a120>] ? early_idt_handlers+0x120/0x120 [ 0.000000] [<ffffffff81f1a4c7>] x86_64_start_reservations+0x2a/0x2c [ 0.000000] [<ffffffff81f1a5d6>] x86_64_start_kernel+0x10d/0x11c [ 0.000000] ok | ok | [ 0.000000] hard-safe-A + unsafe-B #2/231:### __debug_locks_off called! [ 0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.12.6 #13 [ 0.000000] Hardware name: Sony Corporation VGN-Z25TN_B/VAIO, BIOS R2140M3 08/26/2008 [ 0.000000] 0000000000000002 ffffffff81c01c38 ffffffff81747f7c ffffffff81c15c98 [ 0.000000] ffffffff81c01c48 ffffffff81383d27 ffffffff81c01d60 ffffffff810d9d1e [ 0.000000] ffffffff81c01ff8 ffffffff81c00000 ffffffff81c01fe8 ffffffff824d2d58 [ 0.000000] Call Trace: [ 0.000000] [<ffffffff81747f7c>] dump_stack+0x54/0x74 [ 0.000000] [<ffffffff81383d27>] debug_locks_off+0x17/0x50 [ 0.000000] [<ffffffff810d9d1e>] check_usage+0x10e/0x550 [ 0.000000] [<ffffffff810170f4>] ? dump_trace+0x194/0x2f0 [ 0.000000] [<ffffffff810d6a54>] ? __bfs+0x24/0x240 [ 0.000000] [<ffffffff810da1af>] check_irq_usage+0x4f/0xc0 [ 0.000000] [<ffffffff810dd1ae>] __lock_acquire+0x1bce/0x2190 [ 0.000000] [<ffffffff817511e7>] ? _raw_spin_unlock_irqrestore+0x67/0x70 [ 0.000000] [<ffffffff810c13b6>] ? vprintk_emit+0x1d6/0x630 [ 0.000000] [<ffffffff810de882>] lock_acquire+0xb2/0x160 [ 0.000000] [<ffffffff8138b936>] ? irqsafe4_hard_spin_231+0xc6/0x110 [ 0.000000] [<ffffffff8138b870>] ? irqsafe4_hard_rlock_231+0x110/0x110 [ 0.000000] [<ffffffff81750e96>] _raw_spin_lock+0x46/0x80 [ 0.000000] [<ffffffff8138b936>] ? irqsafe4_hard_spin_231+0xc6/0x110 [ 0.000000] [<ffffffff8138b936>] irqsafe4_hard_spin_231+0xc6/0x110 [ 0.000000] [<ffffffff817481f5>] dotest+0x43/0x5a7 [ 0.000000] [<ffffffff81399d22>] locking_selftest+0x12d2/0x2100 [ 0.000000] [<ffffffff81f1aca9>] start_kernel+0x2d2/0x427 [ 0.000000] [<ffffffff81f1a120>] ? early_idt_handlers+0x120/0x120 [ 0.000000] [<ffffffff81f1a4c7>] x86_64_start_reservations+0x2a/0x2c [ 0.000000] [<ffffffff81f1a5d6>] x86_64_start_kernel+0x10d/0x11c [ 0.000000] ### __debug_locks_off called! [ 0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.12.6 #13 [ 0.000000] Hardware name: Sony Corporation VGN-Z25TN_B/VAIO, BIOS R2140M3 08/26/2008 [ 0.000000] ffffffff81c15580 ffffffff81c01e78 ffffffff81747f7c ffffffff81cab258 [ 0.000000] ffffffff81c01e88 ffffffff81383d27 ffffffff81c01ed8 ffffffff810df539 [ 0.000000] 0000000000000082 ffffffff8138b936 0000000000000092 ffffffff81cab258 [ 0.000000] Call Trace: [ 0.000000] [<ffffffff81747f7c>] dump_stack+0x54/0x74 [ 0.000000] [<ffffffff81383d27>] debug_locks_off+0x17/0x50 [ 0.000000] [<ffffffff810df539>] lock_acquired+0x2f9/0x4d0 [ 0.000000] [<ffffffff8138b936>] ? irqsafe4_hard_spin_231+0xc6/0x110 [ 0.000000] [<ffffffff8138b870>] ? irqsafe4_hard_rlock_231+0x110/0x110 [ 0.000000] [<ffffffff81750ec2>] _raw_spin_lock+0x72/0x80 [ 0.000000] [<ffffffff8138b936>] ? irqsafe4_hard_spin_231+0xc6/0x110 [ 0.000000] [<ffffffff8138b936>] irqsafe4_hard_spin_231+0xc6/0x110 [ 0.000000] [<ffffffff817481f5>] dotest+0x43/0x5a7 [ 0.000000] [<ffffffff81399d22>] locking_selftest+0x12d2/0x2100 [ 0.000000] [<ffffffff81f1aca9>] start_kernel+0x2d2/0x427 [ 0.000000] [<ffffffff81f1a120>] ? early_idt_handlers+0x120/0x120 [ 0.000000] [<ffffffff81f1a4c7>] x86_64_start_reservations+0x2a/0x2c [ 0.000000] [<ffffffff81f1a5d6>] x86_64_start_kernel+0x10d/0x11c [ 0.000000] ok |### __debug_locks_off called! [ 0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.12.6 #13 [ 0.000000] Hardware name: Sony Corporation VGN-Z25TN_B/VAIO, BIOS R2140M3 08/26/2008 [ 0.000000] 0000000000000002 ffffffff81c01c38 ffffffff81747f7c ffffffff81c15c98 [ 0.000000] ffffffff81c01c48 ffffffff81383d27 ffffffff81c01d60 ffffffff810d9d1e [ 0.000000] ffffffff81c01ff8 ffffffff81c00000 ffffffff81c01fe8 ffffffff824d3138 [ 0.000000] Call Trace: [ 0.000000] [<ffffffff81747f7c>] dump_stack+0x54/0x74 [ 0.000000] [<ffffffff81383d27>] debug_locks_off+0x17/0x50 [ 0.000000] [<ffffffff810d9d1e>] check_usage+0x10e/0x550 [ 0.000000] [<ffffffff810170f4>] ? dump_trace+0x194/0x2f0 [ 0.000000] [<ffffffff810d6a54>] ? __bfs+0x24/0x240 [ 0.000000] [<ffffffff810da1af>] check_irq_usage+0x4f/0xc0 [ 0.000000] [<ffffffff810dd1ae>] __lock_acquire+0x1bce/0x2190 [ 0.000000] [<ffffffff810d80e8>] ? lockdep_init_map+0x68/0x6d0 [ 0.000000] [<ffffffff810de882>] lock_acquire+0xb2/0x160 [ 0.000000] [<ffffffff81392636>] ? irqsafe4_hard_wlock_231+0xc6/0x110 [ 0.000000] [<ffffffff81392570>] ? irqsafe4_soft_wlock_231+0xf0/0xf0 [ 0.000000] [<ffffffff81751676>] _raw_write_lock+0x46/0x80 [ 0.000000] [<ffffffff81392636>] ? irqsafe4_hard_wlock_231+0xc6/0x110 [ 0.000000] [<ffffffff81392636>] irqsafe4_hard_wlock_231+0xc6/0x110 [ 0.000000] [<ffffffff817481f5>] dotest+0x43/0x5a7 [ 0.000000] [<ffffffff81399d35>] locking_selftest+0x12e5/0x2100 [ 0.000000] [<ffffffff81f1aca9>] start_kernel+0x2d2/0x427 [ 0.000000] [<ffffffff81f1a120>] ? early_idt_handlers+0x120/0x120 [ 0.000000] [<ffffffff81f1a4c7>] x86_64_start_reservations+0x2a/0x2c [ 0.000000] [<ffffffff81f1a5d6>] x86_64_start_kernel+0x10d/0x11c [ 0.000000] ### __debug_locks_off called! [ 0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.12.6 #13 [ 0.000000] Hardware name: Sony Corporation VGN-Z25TN_B/VAIO, BIOS R2140M3 08/26/2008 [ 0.000000] ffffffff81c15580 ffffffff81c01e78 ffffffff81747f7c ffffffff81cab058 [ 0.000000] ffffffff81c01e88 ffffffff81383d27 ffffffff81c01ed8 ffffffff810df539 [ 0.000000] 0000000000000082 ffffffff81392636 0000000000000092 ffffffff81cab058 [ 0.000000] Call Trace: [ 0.000000] [<ffffffff81747f7c>] dump_stack+0x54/0x74 [ 0.000000] [<ffffffff81383d27>] debug_locks_off+0x17/0x50 [ 0.000000] [<ffffffff810df539>] lock_acquired+0x2f9/0x4d0 [ 0.000000] [<ffffffff81392636>] ? irqsafe4_hard_wlock_231+0xc6/0x110 [ 0.000000] [<ffffffff81392570>] ? irqsafe4_soft_wlock_231+0xf0/0xf0 [ 0.000000] [<ffffffff817516a2>] _raw_write_lock+0x72/0x80 [ 0.000000] [<ffffffff81392636>] ? irqsafe4_hard_wlock_231+0xc6/0x110 [ 0.000000] [<ffffffff81392636>] irqsafe4_hard_wlock_231+0xc6/0x110 [ 0.000000] [<ffffffff817481f5>] dotest+0x43/0x5a7 [ 0.000000] [<ffffffff81399d35>] locking_selftest+0x12e5/0x2100 [ 0.000000] [<ffffffff81f1aca9>] start_kernel+0x2d2/0x427 [ 0.000000] [<ffffffff81f1a120>] ? early_idt_handlers+0x120/0x120 [ 0.000000] [<ffffffff81f1a4c7>] x86_64_start_reservations+0x2a/0x2c [ 0.000000] [<ffffffff81f1a5d6>] x86_64_start_kernel+0x10d/0x11c [ 0.000000] ok | ok | [ 0.000000] soft-safe-A + unsafe-B #2/231:### __debug_locks_off called! [ 0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.12.6 #13 [ 0.000000] Hardware name: Sony Corporation VGN-Z25TN_B/VAIO, BIOS R2140M3 08/26/2008 [ 0.000000] 0000000000000006 ffffffff81c01c38 ffffffff81747f7c ffffffff81c15c98 [ 0.000000] ffffffff81c01c48 ffffffff81383d27 ffffffff81c01d60 ffffffff810d9d1e [ 0.000000] ffffffff81c01cd8 0000000081c00000 ffffffff81c01fe8 0000000000000001 [ 0.000000] Call Trace: [ 0.000000] [<ffffffff81747f7c>] dump_stack+0x54/0x74 [ 0.000000] [<ffffffff81383d27>] debug_locks_off+0x17/0x50 [ 0.000000] [<ffffffff810d9d1e>] check_usage+0x10e/0x550 [ 0.000000] [<ffffffff810d9ac2>] ? check_usage_backwards+0x72/0x1c0 [ 0.000000] [<ffffffff810d6a54>] ? __bfs+0x24/0x240 [ 0.000000] [<ffffffff810da1af>] check_irq_usage+0x4f/0xc0 [ 0.000000] [<ffffffff810dd1cd>] __lock_acquire+0x1bed/0x2190 [ 0.000000] [<ffffffff817511e7>] ? _raw_spin_unlock_irqrestore+0x67/0x70 [ 0.000000] [<ffffffff810c13b6>] ? vprintk_emit+0x1d6/0x630 [ 0.000000] [<ffffffff810de882>] lock_acquire+0xb2/0x160 [ 0.000000] [<ffffffff8138d6f8>] ? irqsafe4_soft_spin_231+0xa8/0xf0 [ 0.000000] [<ffffffff8138d650>] ? irqsafe4_soft_rlock_231+0xf0/0xf0 [ 0.000000] [<ffffffff81750e96>] _raw_spin_lock+0x46/0x80 [ 0.000000] [<ffffffff8138d6f8>] ? irqsafe4_soft_spin_231+0xa8/0xf0 [ 0.000000] [<ffffffff8138d6f8>] irqsafe4_soft_spin_231+0xa8/0xf0 [ 0.000000] [<ffffffff817481f5>] dotest+0x43/0x5a7 [ 0.000000] [<ffffffff81399d81>] locking_selftest+0x1331/0x2100 [ 0.000000] [<ffffffff81f1aca9>] start_kernel+0x2d2/0x427 [ 0.000000] [<ffffffff81f1a120>] ? early_idt_handlers+0x120/0x120 [ 0.000000] [<ffffffff81f1a4c7>] x86_64_start_reservations+0x2a/0x2c [ 0.000000] [<ffffffff81f1a5d6>] x86_64_start_kernel+0x10d/0x11c [ 0.000000] ### __debug_locks_off called! [ 0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.12.6 #13 [ 0.000000] Hardware name: Sony Corporation VGN-Z25TN_B/VAIO, BIOS R2140M3 08/26/2008 [ 0.000000] ffffffff81c15580 ffffffff81c01e78 ffffffff81747f7c ffffffff81cab258 [ 0.000000] ffffffff81c01e88 ffffffff81383d27 ffffffff81c01ed8 ffffffff810df539 [ 0.000000] 0000000000000282 ffffffff8138d6f8 0000000000000292 ffffffff81cab258 [ 0.000000] Call Trace: [ 0.000000] [<ffffffff81747f7c>] dump_stack+0x54/0x74 [ 0.000000] [<ffffffff81383d27>] debug_locks_off+0x17/0x50 [ 0.000000] [<ffffffff810df539>] lock_acquired+0x2f9/0x4d0 [ 0.000000] [<ffffffff8138d6f8>] ? irqsafe4_soft_spin_231+0xa8/0xf0 [ 0.000000] [<ffffffff8138d650>] ? irqsafe4_soft_rlock_231+0xf0/0xf0 [ 0.000000] [<ffffffff81750ec2>] _raw_spin_lock+0x72/0x80 [ 0.000000] [<ffffffff8138d6f8>] ? irqsafe4_soft_spin_231+0xa8/0xf0 [ 0.000000] [<ffffffff8138d6f8>] irqsafe4_soft_spin_231+0xa8/0xf0 [ 0.000000] [<ffffffff817481f5>] dotest+0x43/0x5a7 [ 0.000000] [<ffffffff81399d81>] locking_selftest+0x1331/0x2100 [ 0.000000] [<ffffffff81f1aca9>] start_kernel+0x2d2/0x427 [ 0.000000] [<ffffffff81f1a120>] ? early_idt_handlers+0x120/0x120 [ 0.000000] [<ffffffff81f1a4c7>] x86_64_start_reservations+0x2a/0x2c [ 0.000000] [<ffffffff81f1a5d6>] x86_64_start_kernel+0x10d/0x11c [ 0.000000] ok |### __debug_locks_off called! [ 0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.12.6 #13 [ 0.000000] Hardware name: Sony Corporation VGN-Z25TN_B/VAIO, BIOS R2140M3 08/26/2008 [ 0.000000] 0000000000000006 ffffffff81c01c38 ffffffff81747f7c ffffffff81c15c98 [ 0.000000] ffffffff81c01c48 ffffffff81383d27 ffffffff81c01d60 ffffffff810d9d1e [ 0.000000] ffffffff81c01cd8 0000000081c00000 ffffffff81c01fe8 0000000000000001 [ 0.000000] Call Trace: [ 0.000000] [<ffffffff81747f7c>] dump_stack+0x54/0x74 [ 0.000000] [<ffffffff81383d27>] debug_locks_off+0x17/0x50 [ 0.000000] [<ffffffff810d9d1e>] check_usage+0x10e/0x550 [ 0.000000] [<ffffffff810d9ac2>] ? check_usage_backwards+0x72/0x1c0 [ 0.000000] [<ffffffff810d6a54>] ? __bfs+0x24/0x240 [ 0.000000] [<ffffffff810da1af>] check_irq_usage+0x4f/0xc0 [ 0.000000] [<ffffffff810dd1cd>] __lock_acquire+0x1bed/0x2190 [ 0.000000] [<ffffffff810d80e8>] ? lockdep_init_map+0x68/0x6d0 [ 0.000000] [<ffffffff810de882>] lock_acquire+0xb2/0x160 [ 0.000000] [<ffffffff81392528>] ? irqsafe4_soft_wlock_231+0xa8/0xf0 [ 0.000000] [<ffffffff81392480>] ? irqsafe4_hard_wlock_312+0x110/0x110 [ 0.000000] [<ffffffff81751676>] _raw_write_lock+0x46/0x80 [ 0.000000] [<ffffffff81392528>] ? irqsafe4_soft_wlock_231+0xa8/0xf0 [ 0.000000] [<ffffffff81392528>] irqsafe4_soft_wlock_231+0xa8/0xf0 [ 0.000000] [<ffffffff817481f5>] dotest+0x43/0x5a7 [ 0.000000] [<ffffffff81399d94>] locking_selftest+0x1344/0x2100 [ 0.000000] [<ffffffff81f1aca9>] start_kernel+0x2d2/0x427 [ 0.000000] [<ffffffff81f1a120>] ? early_idt_handlers+0x120/0x120 [ 0.000000] [<ffffffff81f1a4c7>] x86_64_start_reservations+0x2a/0x2c [ 0.000000] [<ffffffff81f1a5d6>] x86_64_start_kernel+0x10d/0x11c [ 0.000000] ### __debug_locks_off called! [ 0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.12.6 #13 [ 0.000000] Hardware name: Sony Corporation VGN-Z25TN_B/VAIO, BIOS R2140M3 08/26/2008 [ 0.000000] ffffffff81c15580 ffffffff81c01e78 ffffffff81747f7c ffffffff81cab058 [ 0.000000] ffffffff81c01e88 ffffffff81383d27 ffffffff81c01ed8 ffffffff810df539 [ 0.000000] 0000000000000282 ffffffff81392528 0000000000000292 ffffffff81cab058 [ 0.000000] Call Trace: [ 0.000000] [<ffffffff81747f7c>] dump_stack+0x54/0x74 [ 0.000000] [<ffffffff81383d27>] debug_locks_off+0x17/0x50 [ 0.000000] [<ffffffff810df539>] lock_acquired+0x2f9/0x4d0 [ 0.000000] [<ffffffff81392528>] ? irqsafe4_soft_wlock_231+0xa8/0xf0 [ 0.000000] [<ffffffff81392480>] ? irqsafe4_hard_wlock_312+0x110/0x110 [ 0.000000] [<ffffffff817516a2>] _raw_write_lock+0x72/0x80 [ 0.000000] [<ffffffff81392528>] ? irqsafe4_soft_wlock_231+0xa8/0xf0 [ 0.000000] [<ffffffff81392528>] irqsafe4_soft_wlock_231+0xa8/0xf0 [ 0.000000] [<ffffffff817481f5>] dotest+0x43/0x5a7 [ 0.000000] [<ffffffff81399d94>] locking_selftest+0x1344/0x2100 [ 0.000000] [<ffffffff81f1aca9>] start_kernel+0x2d2/0x427 [ 0.000000] [<ffffffff81f1a120>] ? early_idt_handlers+0x120/0x120 [ 0.000000] [<ffffffff81f1a4c7>] x86_64_start_reservations+0x2a/0x2c [ 0.000000] [<ffffffff81f1a5d6>] x86_64_start_kernel+0x10d/0x11c [ 0.000000] ok | ok | [ 0.000000] hard-safe-A + unsafe-B #2/312:### __debug_locks_off called! [ 0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.12.6 #13 [ 0.000000] Hardware name: Sony Corporation VGN-Z25TN_B/VAIO, BIOS R2140M3 08/26/2008 [ 0.000000] 0000000000000000 ffffffff81c01cb0 ffffffff81747f7c ffffffff81c15c98 [ 0.000000] ffffffff81c01cc0 ffffffff81383d27 ffffffff81c01d50 ffffffff810d9adf [ 0.000000] 0000000000000000 ffffffff8288dec0 ffffffff824d43a8 0000000081c01d60 [ 0.000000] Call Trace: [ 0.000000] [<ffffffff81747f7c>] dump_stack+0x54/0x74 [ 0.000000] [<ffffffff81383d27>] debug_locks_off+0x17/0x50 [ 0.000000] [<ffffffff810d9adf>] check_usage_backwards+0x8f/0x1c0 [ 0.000000] [<ffffffff810da9c2>] mark_lock+0x412/0x820 [ 0.000000] [<ffffffff810d9a50>] ? check_usage_forwards+0x1c0/0x1c0 [ 0.000000] [<ffffffff810dbf68>] __lock_acquire+0x988/0x2190 [ 0.000000] [<ffffffff817511e7>] ? _raw_spin_unlock_irqrestore+0x67/0x70 [ 0.000000] [<ffffffff810c13b6>] ? vprintk_emit+0x1d6/0x630 [ 0.000000] [<ffffffff810de882>] lock_acquire+0xb2/0x160 [ 0.000000] [<ffffffff8138b72e>] ? irqsafe4_hard_spin_312+0xde/0x110 [ 0.000000] [<ffffffff8138b650>] ? irqsafe4_hard_rlock_312+0x110/0x110 [ 0.000000] [<ffffffff81750e96>] _raw_spin_lock+0x46/0x80 [ 0.000000] [<ffffffff8138b72e>] ? irqsafe4_hard_spin_312+0xde/0x110 [ 0.000000] [<ffffffff8138b72e>] irqsafe4_hard_spin_312+0xde/0x110 [ 0.000000] [<ffffffff817481f5>] dotest+0x43/0x5a7 [ 0.000000] [<ffffffff81399de0>] locking_selftest+0x1390/0x2100 [ 0.000000] [<ffffffff81f1aca9>] start_kernel+0x2d2/0x427 [ 0.000000] [<ffffffff81f1a120>] ? early_idt_handlers+0x120/0x120 [ 0.000000] [<ffffffff81f1a4c7>] x86_64_start_reservations+0x2a/0x2c [ 0.000000] [<ffffffff81f1a5d6>] x86_64_start_kernel+0x10d/0x11c [ 0.000000] ### __debug_locks_off called! [ 0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.12.6 #13 [ 0.000000] Hardware name: Sony Corporation VGN-Z25TN_B/VAIO, BIOS R2140M3 08/26/2008 [ 0.000000] ffffffff81c15580 ffffffff81c01e78 ffffffff81747f7c ffffffff81cab258 [ 0.000000] ffffffff81c01e88 ffffffff81383d27 ffffffff81c01ed8 ffffffff810df595 [ 0.000000] 0000000000000282 ffffffff8138b72e 0000000000000292 ffffffff81cab258 [ 0.000000] Call Trace: [ 0.000000] [<ffffffff81747f7c>] dump_stack+0x54/0x74 [ 0.000000] [<ffffffff81383d27>] debug_locks_off+0x17/0x50 [ 0.000000] [<ffffffff810df595>] lock_acquired+0x355/0x4d0 [ 0.000000] [<ffffffff8138b72e>] ? irqsafe4_hard_spin_312+0xde/0x110 [ 0.000000] [<ffffffff8138b650>] ? irqsafe4_hard_rlock_312+0x110/0x110 [ 0.000000] [<ffffffff81750ec2>] _raw_spin_lock+0x72/0x80 [ 0.000000] [<ffffffff8138b72e>] ? irqsafe4_hard_spin_312+0xde/0x110 [ 0.000000] [<ffffffff8138b72e>] irqsafe4_hard_spin_312+0xde/0x110 [ 0.000000] [<ffffffff817481f5>] dotest+0x43/0x5a7 [ 0.000000] [<ffffffff81399de0>] locking_selftest+0x1390/0x2100 [ 0.000000] [<ffffffff81f1aca9>] start_kernel+0x2d2/0x427 [ 0.000000] [<ffffffff81f1a120>] ? early_idt_handlers+0x120/0x120 [ 0.000000] [<ffffffff81f1a4c7>] [ 0.000000] [<ffffffff81f1a5d6>] x86_64_start_kernel+0x10d/0x11c [ 0.000000] ok | [ 0.000000] ------------------------------------------------------- [ 0.000000] Good, all 253 testcases passed! | [ 0.000000] --------------------------------- [ 0.000000] hpet clockevent registered 

启用锁定统计

首先一定要启用锁定统计信息收集。 从文档/锁定/ lockstat.txt :

  • 组态

锁定统计信息通过CONFIG_LOCK_STAT启用。

  • 用法

启用收集统计信息:

 # echo 1 >/proc/sys/kernel/lock_stat 

禁用统计信息的收集:

 # echo 0 >/proc/sys/kernel/lock_stat 

看看当前的锁定统计信息:

(行号不是实际输出的一部分,为了清晰起见,下面的解释)

 # less /proc/lock_stat 

所以,一定要先启用锁定统计信息的收集。

检查内核日志中的lockdep警告

现在,让我们来看看您的警告消息正在打印的代码:

内核/锁定/ lockdep_proc.c:seq_header() :

 if (unlikely(!debug_locks)) seq_printf(m, "*WARNING* lock debugging disabled!! - possibly due to a lockdep warning\n"); 

这个debug_locks变量被debug_locks_off()函数设置为0(禁用),而函数又可以从很多地方调用。 我们来看看这个变量的定义:

lib / debug_locks.c :

 /* * We want to turn all lock-debugging facilities on/off at once, * via a global flag. The reason is that once a single bug has been * detected and reported, there might be cascade of followup bugs * that would just muddy the log. So we report the first one and * shut up after that. */ int debug_locks = 1; EXPORT_SYMBOL_GPL(debug_locks); 

评论这个变量解释你为什么看到这个警告。

因此,通过lockdep机制来检查你的内核日志(通过dmesg命令)来查找实际发现的错误。 您可能会找到一个,这将解释为什么禁用锁定调试。

UPDATE

关于这个消息:

[0.084000] SMP替代品:lockdep:修复替代品

这似乎与你的实际问题没有任何关系。 此消息正在通过下一个代码打印:

arch / x86 / kernel / alternative.c:alternatives_enable_smp() :

 #ifdef CONFIG_LOCKDEP /* * Older binutils section handling bug prevented * alternatives-replacement from working reliably. * * If this still occurs then you should see a hang * or crash shortly after this line: */ pr_info("lockdep: fixing up alternatives\n"); #endif 

这个代码已经陈旧了,而且在新的内核版本中被这个提交丢弃了:

lockdep,x86 / alternatives:删除古老的lockdep fixup消息

所以我认为这是导致禁用收集锁统计的其他内容。 很难说明究竟是什么。 我能想到的唯一的事情就是修改内核,这样你就可以看到是什么导致了锁的调试失败,重新编译内核,查看内核日志,找出锁调试禁用的地方。

所以,如果你要做到这一点,修改__debug_locks_off()函数,如下所示:

 static inline int __debug_locks_off(void) { /* ---- Add this code ---- */ pr_err("### __debug_locks_off() called!\n"); dump_stack(); /* ----------------------- */ return xchg(&debug_locks, 0); } 

另外,在文件的顶部添加#include <linux/printk.h>行,以防万一。

然后重建你的内核,运行它并提供整个dmesg输出。 它应该足以说明它被禁用的位置。

更新2

从我提供的backtraces中可以看到,所有的dump_stack()调用(您添加到__debug_locks_off()函数中) – 它们是从locking_selftest()函数中调用的,而这又是一些单元测试例程。 我们来看看它: locking_selftest() 。 这里要注意的是这个代码:

 } else { printk("-------------------------------------------------------\n"); printk("Good, all %3d testcases passed! |\n", testcase_successes); printk("---------------------------------\n"); debug_locks = 1; } 

所以你可以看到,在你的情况下,你在debug_locks ()的末尾启用了debug_locks变量(“on” locking_selftest() 。 考虑到你提供的所有消息实际上是由locking_selftest()触发的,我可以说这些消息不会导致你的问题(这是禁用debug_locks变量)。

所以你仍然需要弄清楚,在哪里和为什么(在你的情况下)这个debug_locks变量被禁用。 让我们从这个开始:请与我们分享完整的dmesg输出(您可以使用一些pastebin服务,只需添加链接到您的问题或作为新的评论)。 您可能忽略了一些实际上相关的dmesg输出中的一些__debug_locks_off()调用(未从该自测程序中调用)。

你可以设置CONFIG_PROVE_RCU_REPEATEDLY=y这意味着“不要在第一个图示上禁用PROVE_RCU