免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2637 | 回复: 6

求助:如何调试驱动引起的内核阻塞 [复制链接]

论坛徽章:
0
发表于 2010-06-08 14:35 |显示全部楼层
大家好,最近开发一个驱动,在处理数据提交到内核的过程中,时间长了之后就会产生内核阻塞,但是不知道阻塞在什么地方了。以前都是用printk来调,但是这个用printk太麻烦了,有没有什么办法可以在其他的主机上监控这个内核的运行状况,内核阻塞后可以知道之前的执行路径?

论坛徽章:
0
发表于 2010-06-08 22:54 |显示全部楼层
内核阻塞具体症状是什么样的?死机?没反映了?

论坛徽章:
0
发表于 2010-06-09 09:13 |显示全部楼层
回二楼
        具体现象是,在我的驱动中有些输出,正常运行的话应该是不停的输出这些信息,但是跑了几十分钟后,停止输出信息了。没有死机,也没有报错,按回车后屏幕会有换行的刷新,但是无法回到shell了,说明在内核某个地方阻塞了。

论坛徽章:
0
发表于 2010-06-09 23:27 |显示全部楼层
好像不好调啊。还是自己看代码,用脑子调试吧。或者如果QEMU支持你的硬件的话,在QEMU里面跑。QEMU可以调试内核,可以随时停下来。

新版本的内核可以用KGDB调试,不过我没用过。

论坛徽章:
0
发表于 2010-06-10 11:21 |显示全部楼层
内核打kgdb补丁。不过还是用printk方便点,可以先分析一下肯能在哪里发生的休眠,然后在修改

论坛徽章:
0
发表于 2010-06-10 16:50 |显示全部楼层
谢谢楼上两位,问题我已经找到了。确实是用脑子看代码分析出来的。

通过分析,可能引起阻塞的地方有可能是分配内存时使用了GFP_KERNEL,使用了该标志,当内存页不够时,会导致阻塞的。
后来我就改用 GFP_ATOMIC, 这玩意的意义是内存页不够时,启用保留的页框池来救火。
再运行,果然没有阻塞了。

后来通过查看/proc/buddyinfo,发现我的驱动运行时内存页数量果然急剧下降,卸载驱动后数量又恢复了,说明内存释放没有问题。
最终分析结论是,上层提交数据速度大于底层处理速度,导致大量数据停留在内存中。

论坛徽章:
0
发表于 2010-06-10 23:44 |显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP