linux内核死锁调试

使用内核的kernel hacking功能
打开以下配置:

CONFIG_PROVE_LOCKING=y
CONFIG_LOCK_STAT=y
CONFIG_DEBUG_LOCKDEP=y

重新编译内核后,proc目录下会有lockdep lockdep_stats lockdep_chains说明lockdep模块已经生效

测试code:

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/slab.h>


static DEFINE_SPINLOCK(hack_spinA);
static DEFINE_SPINLOCK(hack_spinB);
#ifdef MEMORY_TEST
static char* buf;
static void create_slue_err(void){
    buf = kmalloc(32,GFP_KERNEL);
    if(buf)  {
        /*memset(buf,0x00,33);*/
    /*  kfree(buf);
        printk("%s\n","free buf" );*/
        /*kfree(buf);*/
        memset(buf,0x00,33);
    }

    return;
}
#endif
void hack_spinBA(void) {
    printk("%s\n","hack_spin:B=>A\n" );
    spin_lock(&hack_spinA);
    spin_lock(&hack_spinB);
}

void hack_spinAB(void) {
    printk("%s\n","hack_spin:A=>B\n" );
    spin_lock(&hack_spinB);
}

static int __init my_test_init(void) {
    printk("init %s\n", "my_test_init 1");
#ifdef MEMORY_TEST 
    create_slue_err();
#endif
    hack_spinBA();
    hack_spinAB();
    printk("init %s\n", "my_test_init 2");
    return 0;
}

static void __exit my_test_exit(void) {
    printk("%s\n","my_test_exit" );
    return ;
}
MODULE_LICENSE("GPL");
module_init(my_test_init);
module_exit(my_test_exit);

测试打印

[  188.596504@1] init my_test_init 1
[  188.596548@1] hack_spin:B=>A
[  188.596548@1] 
[  188.598679@1] hack_spin:A=>B
[  188.598679@1] 
[  189.920389@1] BUG: spinlock lockup suspected on CPU#1, insmod/6999
[  189.920943@1]  lock: hack_spinB+0x0/0xfffffffffffffef4 [slub_test], .magic: dead4ead, .owner: insmod/6999, .owner_cpu: 1
[  189.931758@1] CPU: 1 PID: 6999 Comm: insmod Tainted: G           O 3.14.29 #6
[  189.938784@1] Call trace:
[  189.941406@1] [<ffffffc0010893f8>] dump_backtrace+0x0/0x144
[  189.946896@1] [<ffffffc001089558>] show_stack+0x1c/0x28
[  189.952120@1] [<ffffffc001b5b480>] dump_stack+0x74/0xb8
[  189.957247@1] [<ffffffc0010fb6d4>] spin_dump+0x78/0x98
[  189.962369@1] [<ffffffc0010fb904>] do_raw_spin_lock+0x170/0x1a8
[  189.968199@1] [<ffffffc001b670a8>] _raw_spin_lock+0x68/0x88
[  189.973764@1] [<ffffffbffc00507c>] hack_spinAB+0x30/0x3c [slub_test]
[  189.980015@1] [<ffffffbffc00d028>] $x+0x28/0x4c [slub_test]
[  189.985566@1] [<ffffffc0010816d4>] do_one_initcall+0xd4/0x13c
[  189.991257@1] [<ffffffc00112c2f8>] load_module+0x16d8/0x1e08
[  189.996834@1] [<ffffffc00112cba0>] SyS_finit_module+0x80/0x90



[  211.641019@1] INFO: rcu_sched detected stalls on CPUs/tasks: { 1} (detected by 2, t=2104 jiffies, g=18446744073709551337, c=18446744073709551336, q=4)
[  211.648804@2] Task dump for CPU 1:
[  211.652167@2] insmod          R  running task        0  6999   5821 0x0000000a
[  211.659325@2] Call trace:
[  211.661920@2] [<ffffffc001085f10>] __switch_to+0x74/0x8c

很明显可以看出死锁的发生路径与调用栈
hack_spinAB在申请spin_lock(&hack_spinB)时死锁了

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《linux内核情景分析pdf》是一本介绍Linux内核的教材,作者是罗柏特(Robert Love),他是一位资深的Linux内核开发者。这本书主要分为三个部分,分别是进程管理、内存管理和文件系统,涵盖了Linux内核中三个最核心的子系统。 在进程管理方面,这本书详细地介绍了进程的创建、调度、信号处理以及线程和多核处理等内容,涉及的知识点非常广泛和深入。在内存管理方面,罗柏特介绍了Linux内核的内存管理机制、虚拟内存和页表等概念,还介绍了内存分配、缓存和交换等操作。在文件系统方面,这本书介绍了文件系统的实现、文件的编写、缓存和磁盘的相关操作等内容。 《linux内核情景分析pdf》这本书的特点是非常系统和细致,作者不仅深入解析了Linux内核的工作原理,还提供了大量的代码实例,让读者可以更深入地理解内核的实现过程。此外,这本书也很适合那些希望深入学习Linux内核的程序员和系统管理员来阅读,因为它涉及了很多实用的知识点和调优技巧。 总的来说,《linux内核情景分析pdf》是一本非常优秀的Linux内核学习资料,它拥有非常严谨的逻辑和非常详细的介绍方式,所以非常适合在Linux内核开发、系统调优和性能优化方面进行借鉴和参考。 ### 回答2: 《Linux内核情景分析》是一本深入浅出地介绍Linux内核的经典之作,也是Linux内核开发者必读的一部书。该书的叙述深入浅出,条理清晰,配合大量的代码和图表,既便于初学者学习理解,又给有经验的开发者带来了不少启示。书中对于Linux系统架构和Linux内核源代码的分析,对于读者深入理解Linux内核工作原理和应用具有非常重要的参考价值。 本书主要围绕内核调试、进程管理、内存管理、文件系统和网络协议栈等方面进行详细的讲解。值得一提的是,书中对于内核调试章节非常详细,包括了内存泄露、死锁、oops等常见问题的分析与解决方法。另外,书中还有一些经典的案例分析,如进程调度、文件系统实现、网络协议栈实现等,让读者更加深入地了解Linux内核的实现细节以及内核开发者实现的思路。 总之,《Linux内核情景分析》是一本十分经典、权威的Linux内核书籍,对于任何想深入学习Linux内核的开发者以及系统管理员都是一本必读之作。它的内容结构严密、内容丰富、通俗易懂,可以帮助读者快速掌握Linux内核的工作原理和开发技术。 ### 回答3: 《Linux内核情景分析》是由赵炯、张锟著作的一本介绍Linux内核的技术书籍,该书分为三个部分,分别是系统调用、内存管理和进程管理等方面的内容,涵盖了Linux内核的基础知识和高级技术。 书中详细介绍了Linux内核的结构、架构和实现原理,而且通过一系列的案例分析和代码实现,让读者深入了解Linux内核的不同模块,包括进程调度、文件系统、网络等等。通过这些案例,读者能够更好地了解内核的设计和实现方式,同时也能够学会如何利用Linux内核提供的特性进行应用开发和系统优化。 此外,该书还包括了一些高级主题,如虚拟化、调试、性能优化等等。这些主题可以让读者更全面地了解Linux内核的实现细节,并深入研究Linux内核的高级特性。 总之,《Linux内核情景分析》是一本全面介绍Linux内核的技术书籍。它不仅适合Linux内核开发人员、系统管理员和运维人员阅读,也适合对Linux内核有兴趣的读者阅读。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值