mmap_sem信号量死锁故障分析

本文详细描述了一个系统出现mmap_sem信号量死锁的故障现象及定位过程。通过魔键信息、任务状态和调度分析,确定故障原因是高优先级任务抢占并持有信号量,导致低优先级任务死循环无法释放信号量,最终形成死锁。通过调整低优先级任务的优先级,系统恢复正常。
摘要由CSDN通过智能技术生成

1 故障现象

     该故障出现时,系统提供的调试shell,命令行都不能执行,只有busybox shell (bshell)和魔键(sysrq)可以用。在串口下启动进程就被挂住,进程都处于D状态。

2 故障定位分析

        该故障出现时,只有bshell跟魔键信息可以用,自然而然的就敲了魔键,把内核的调用链打印出来,可是,魔键打印的内核调用链信息很多,很难从调用链的信息中找到出问题的任务。面对收集到的信息,却没有定位的思路,那只能从魔键的函数调用链开始分析,业务进程(app)中的子线程,很多都有类似的函数调用关系,调用关系如下所示:

schedule

__down_read

do_page_fault 

       根据 内核调用链提示的信息,走查代码,发现缺页异常时,获取mmap_sem信号量的时候,没有获取成功,然后主动调用schedule放弃cpu。也就是说app中的多数任务在缺页异常时,获取mmap_sem信号量失败,导致大多数任务都被阻塞在mmap_sem信号量上。从代码上看是请求mmap_sem信号量失败,但是什么情景下会出现这种现象,为什么会出现这种现象暂时不清楚。跟同事讨论,觉得应该是个信号量死锁问题。

      如果是信号量死锁问题,那么当前系统必须满足三个条件:

        1)高优先级任务抢占中优先级任务,并申请mmap_semp信号量

         2)存在中优先级的死循环任务

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值