博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决Linux系统死机重启稳定性方面的工作回忆(未完待续)
阅读量:2352 次
发布时间:2019-05-10

本文共 1469 字,大约阅读时间需要 4 分钟。

下面纯属个人工作笔记零散记录,主要为了保存一份美好亲切的技术回忆,没打算让别人阅读。写的比较凌乱,抱歉。

博泰做的工作事情:

1:解决中断风暴的事情。

出现中断风暴原因:
1)imx6会固定把很多外设的中断绑在core 1上,里面有uart中断,usb设备中断。
2)外设在中断控制器里面对应的自己设备的中断,有不同类型,有电平中断,上升沿下降沿中断等。
当时usb的中断类型规定是在自己的设备服务程序起来后,必须对imx6的中断控制器发个回执信号,具体是写下usb相关的寄存器。
如果不发回执信号的话,imx6的中断控制器就会误认为设备端那边没有接收到该中断,然后下来会不停的狂发中断到该该设备端的。
这样就会有中断风暴出现。

所以有了上面两点现实情况后,我的那个问题就是在某种特殊的场景下发送的,我记得会把usb代码里面的有个worker,把该worker推迟5秒再发送到任务队列里面。

然后就是这种推迟几秒的操作,导致了usb中断服务程序里面并没有发送回执信号到中断控制器(没有发送中断回执信号,是我们改代码改出的问题)。然后下来出现usb的中断风暴了。

然后串口控制台突然失灵了,下来就是cpu就重启了。

当时定位bug原因就是把uart设备中断绑定到core 2上,然后出现此bug时,串口控制台就没有失灵了,我就可以利用串口控制台进行调试,通过cat /proc/interrupt,

发现产生usb的设备中断数目在狂增,所以定位到usb中断有问题,所以看了usb中断服务程序相关代码,发现是没有发送中断回执信号导致的问题。

2:解决车载机无法显示倒车图像的问题。

就是当时的32位cpu机,虚拟地址空间内核态3G - 4G区域,往4G去的区域有块DMA专用的虚拟内存区域。
然后负责倒车功能的程序需要用dma分配出大块的连续虚拟内存空间后,才能顺利显示倒车图像。
恰巧当时就是这种分配内存出错,导致无法显示倒车图像。
分配内存为什么出错,是因为当时的内核态,为dma分配虚拟内存这块代码写的有问题,所以我调整了下内存分配代码,
然后下来分配虚拟内存成功了,然后下来就顺利显示倒车图像了。

3:解决车载机camera图形显示卡住不动的bug(待添加)

因为内核hrtimer的一些缺陷,而做的修复方案。

4:其他内核崩溃问题

当时出现的内核崩溃问题,还会用objdump工具,解析vmlinux,结合last kmesg中的崩溃pc地址,会看到崩溃时对应的代码在内核的哪一行。
然后当时发现崩溃原因是代码指针相关问题。

 

小米做的事情:

1:内核态内存越界问题

在测试碎片整理内核态代码时,发现测试一段时间后,系统就会崩溃重启。但是根据崩溃的log,无法定位到具体是哪个地方的问题。

所以问了项目组另外一个人crash工具的使用方式,然后用crash工具解析生成的崩溃core文件,结合内核last kmesg里面的崩溃log,发现自己写的内核代码附近有一块内存区域被踩。
然后下来看了下运行kernel当时被编译时,对应生成的system.map文件,在该文件中找这块被踩内存的附近区域,看看附近区域的内存分配读写有无异常行为。
然后突然发现附近区域有个大的数组,是我实现内核碎片整理功能时,定义会频繁读写使用的。
该数组我分析了下,确实会存在数组越界的情形,然后如果越界后,就会去踩他附近的内存区域。

2:fuse文件系统架构及相关passthrough优化缺陷解决(待描述)

该fuse架构缺陷问题会导致手机系统死锁重启。

转载地址:http://rkrvb.baihongyu.com/

你可能感兴趣的文章
【腾讯内部工具分享】内存泄漏分析工具tMemoryMonitor
查看>>
TScanCode助您打造健康代码!
查看>>
C++程序打开EXCEL2010失败,提示:远程过程调用失败
查看>>
晨魅--初学Linux系统
查看>>
晨魅--练习ssm框架整合,做增删改查操作
查看>>
晨魅--分页
查看>>
晨魅--时间处理方法
查看>>
晨魅--学Struts1做easyui树形
查看>>
晨魅--iReport2.0.4版入门使用教程
查看>>
IT的职场法则
查看>>
人生寓言
查看>>
程序员的未来出路
查看>>
架构师的职责和分类
查看>>
Socket用法
查看>>
尽力而为之
查看>>
SQL 精华
查看>>
30岁的老程序员向着哪里走?
查看>>
成功的15种能力
查看>>
企业管理软件的发展史
查看>>
警告自己的生活方式
查看>>