查看: 9918|回复: 11

[已解决] 线程调度异常(已解决)

[复制链接]

该用户从未签到

2

主题

7

帖子

0

新手上路

Rank: 1

积分
23
最后登录
1970-1-1
发表于 2014-7-3 13:02:47 | 显示全部楼层 |阅读模式
 我现在使用的是imx6q 4核cpu在我们自己的Q7板子上跑稳定性测试。使用的BSP是LTIB4.1.0,并且打入了“http://community.freescale.com/docs/DOC-99456”所述的补丁。
我们的测试程序由多个服务进程组成,每个服务进程中存在一定数量的工作线程,为了增加问题出现概率,程序部署在13台设备上进行测试。测试发现,系统长时间运行(4-5天)偶现线程调度方面的错误,其结果是使我们测试程序中的工作线程(异常退出的线程并不固定:不是固定服务进程中的固定工作线程)异常退出,而且线程异常退出并不会导致整个应用服务的崩溃退出。出现错误时,内核oops如下:
设备1 oop信息:
Jan 26 05:09:23 iMX6Q user.alert kernel: [161876.053270] Unable to handle kernel NULL pointer dereference at virtual address 00000000
Jan 26 05:09:23 iMX6Q user.alert kernel: [161876.062920] pgd = a005c000
Jan 26 05:09:24 iMX6Q user.alert kernel: [161876.065818] [00000000] *pgd=304bd831, *pte=00000000, *ppte=00000000
Jan 26 05:09:24 iMX6Q user.emerg kernel: [161876.073453] Internal error: Oops: 80000007 [#1] PREEMPT SMP
Jan 26 05:09:24 iMX6Q user.warn kernel: [161876.079117] Modules linked in: MultiViewer
Jan 26 05:09:24 iMX6Q user.warn kernel: [161876.083332] CPU: 0    Not tainted  (3.0.35-2508-g54750ff-svn21363 #1)
Jan 26 05:09:24 iMX6Q user.warn kernel: [161876.089867] PC is at 0x0
Jan 26 05:09:24 iMX6Q user.warn kernel: [161876.092496] LR is at __schedule+0x27c/0x6c0
Jan 26 05:09:24 iMX6Q user.warn kernel: [161876.096774] pc : []    lr : []    psr: 60000013
Jan 26 05:09:24 iMX6Q user.warn kernel: [161876.096779] sp : 9fa09f00  ip : 80034da0  fp : 00001000
Jan 26 05:09:24 iMX6Q user.warn kernel: [161876.108444] r10: 00000000  r9 : 00000185  r8 : 00000000
Jan 26 05:09:24 iMX6Q user.warn kernel: [161876.113759] r7 : 00000000  r6 : 00000000  r5 : 00000000  r4 : 0000c350
Jan 26 05:09:24 iMX6Q user.warn kernel: [161876.120379] r3 : 00000000  r2 : 00000000  r1 : b7f8e0a0  r0 : 80985cc0
Jan 26 05:09:24 iMX6Q user.warn kernel: [161876.127000] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
Jan 26 05:09:24 iMX6Q user.warn kernel: [161876.134227] Control: 10c53c7d  Table: 3005c04a  DAC: 00000015
Jan 26 05:09:24 iMX6Q user.emerg kernel: [161876.140065] Process CMVTaskThread (pid: 4033, stack limit = 0x9fa082f0)
Jan 26 05:09:24 iMX6Q user.emerg kernel: [161876.146770] Stack: (0x9fa09f00 to 0x9fa0a000)
Jan 26 05:09:24 iMX6Q user.emerg kernel: [161876.151223] 9f00: 0000c350 00000001 00989680 00000000 9fa09f98 0000c350 9fa08000 00000000
Jan 26 05:09:24 iMX6Q user.emerg kernel: [161876.159496] 9f20: 00000001 8008c828 0000c350 00000000 009959d0 00000000 9fa09f39 a04b3f38
Jan 26 05:09:24 iMX6Q user.emerg kernel: [161876.167768] 9f40: 00000000 00000000 a7014a8a 00009339 a700873a 00009339 8008b800 8bf104b8
Jan 26 05:09:24 iMX6Q user.emerg kernel: [161876.176041] 9f60: 00000000 00000000 00000000 00000000 00000185 00000000 36d00bf0 0011afc0
Jan 26 05:09:24 iMX6Q user.emerg kernel: [161876.184314] 9f80: 000000a2 8003c104 9fa08000 00000000 37ef5f9c 8008c918 00000000 00989680
Jan 26 05:09:24 iMX6Q user.emerg kernel: [161876.192586] 9fa0: 00108250 8003bf80 00108250 36d00bf0 37ef5d80 00000000 37ef64e4 00000002
Jan 26 05:09:24 iMX6Q user.emerg kernel: [161876.200859] 9fc0: 00108250 36d00bf0 0011afc0 000000a2 ffffffff 37ef5fa0 00000000 37ef5f9c
Jan 26 05:09:24 iMX6Q user.emerg kernel: [161876.209132] 9fe0: 00000000 37ef5d78 2c400374 2c400384 80000010 37ef5d80 00000000 00000000
Jan 26 05:09:24 iMX6Q user.emerg kernel: [161876.217410] Code: bad PC value
Jan 26 05:09:24 iMX6Q user.warn kernel: [161876.231089] ---[ end trace c0a92bf97846de49 ]---
 
设备2 oop信息
[277355.400286] Unable to handle kernel NULL pointer dereference at virtual address 00000000
[277355.409406] pgd = b3d34000
[277355.412262] [00000000] *pgd=43ce1831, *pte=00000000, *ppte=00000000
[277355.418999] Internal error: Oops: 80000007 [#1] PREEMPT SMP
[277355.424669] Modules linked in: MultiViewer
[277355.428889] CPU: 1    Not tainted  (3.0.35-2508-g54750ff-svn21363 #1)
[277355.435423] PC is at 0x0
[277355.438053] LR is at __schedule+0x27c/0x6c0
[277355.442329] pc : []    lr : []    psr: 60000013
[277355.442334] sp : a601df00  ip : 80034da0  fp : 00001000
[277355.454007] r10: 00000000  r9 : 00000185  r8 : 00000000
[277355.459326] r7 : 00000000  r6 : 00000000  r5 : 00000000  r4 : 0000c350
[277355.465945] r3 : 00000000  r2 : 00000000  r1 : b7f8e0a0  r0 : 80985cc0
[277355.472567] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
[277355.479794] Control: 10c53c7d  Table: 43d3404a  DAC: 00000015
[277355.485633] Process CMVTaskThread (pid: 2999, stack limit = 0xa601c2f0)
[277355.492339] Stack: (0xa601df00 to 0xa601e000)
[277355.496793] df00: 0000c350 00000001 00989680 00000000 a601df98 0000c350 a601c000 00000000
[277355.505066] df20: 00000001 8008c828 0000c350 00000000 009959d0 00000000 a601df39 00000000
[277355.513339] df40: 00000000 00000000 c876a872 0000fc40 c875e522 0000fc40 8008b800 8bf104b8
[277355.521612] df60: 00000000 00000000 00000000 00000000 00000185 00000000 30800bf0 00120618
[277355.529885] df80: 000000a2 8003c104 a601c000 00000000 2ece6f9c 8008c918 00000000 00989680
[277355.538158] dfa0: 0011f710 8003bf80 0011f710 30800bf0 2ece6d80 00000000 2ece74e4 00000002
[277355.546431] dfc0: 0011f710 30800bf0 00120618 000000a2 ffffffff 2ece6fa0 00000000 2ece6f9c
[277355.554703] dfe0: 00000000 2ece6d78 2c3d6374 2c3d6384 80000010 2ece6d80 47ffc811 47ffcc11
[277355.562984] Code: bad PC value
[277355.568221] ---[ end trace 130b308cab9c6c55 ]---
从这些oop信息来看,怀疑是在线程唤醒时,内核调度程序发生了栈有溢出(或其他什么异常导致内核栈损毁)。
不知是否有这方面的补丁或者任何有效的解决方法?非常期待高人回复!
我知道答案 目前已有11人回答
回复

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2014-7-3 13:45:52 | 显示全部楼层

RE:线程调度异常

你好,楼主!
我会将你的问题转送给i.MX工程师,他稍后会回复你的。
回复 支持 反对

使用道具 举报

该用户从未签到

45

主题

2369

帖子

0

金牌会员

Rank: 6Rank: 6

积分
3276
最后登录
1970-1-1
发表于 2014-7-3 15:57:40 | 显示全部楼层

RE:线程调度异常

楼主你好,请问你帖中测试是如何实现的?还有你的板子是参考飞思卡尔哪块开发板design的?
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

7

帖子

0

新手上路

Rank: 1

积分
23
最后登录
1970-1-1
 楼主| 发表于 2014-7-5 12:35:08 | 显示全部楼层

回复:线程调度异常

回复第 3 楼 于2014-07-03 15:57:40发表:
楼主你好,请问你帖中测试是如何实现的?还有你的板子是参考飞思卡尔哪块开发板design的?
您好,我们的硬件设计是参考的sabre sdb开发板。我们的测试程序是这样的:
1、测试框架由9个进程组成主要验证一些我们需要使用的关键机制和压力测试,其中1个守护进程,8个服务进程。主要涉及以下技术环节的验证:
          a)子进程创建、及其运行状态监护(基于QT的QProcess类对象,该类是基于fork调用和相关的信号操作实现的)
          b)IPC通讯:共享内存、DBus通讯、系统信号量
2、系统内存一共1G,为了提升未来产品的性能,我们专门预留了高128MB的物理连续内存,用作他用(在实际测试中并为使用这块内存,仅仅是预留。系统启动后,刨除内核开销后系统内存还剩600多MB。另外,我们没有配置swap分区,通过free命令查看可以看到swap始终为0)。
3、8个服务进程中各有不同数量的工作线程(整个框架共涉及30多个线程),通过轮询方式进行一系列检测,轮询周期最低10ms,最高1s。其中涉及以下技术环节:
            a)休眠机制:使用的是系统的usleep和sleep调用
            b)线程间的同步机制:使用的是pthread库的mutex和semaphore,并且少量mutex使用了PTHREAD_MUTEX_RECURSIVE属性
             c)线程的创建使用了QT库的QThread类
4、测试中有一个服务进程使用了QT的图形库进行一些绘图操作,绘图工作完全由CPU完成,未使用GPU、IPU等硬件加速模块,该服务进程特点如下
               a)内存开销比较大,其虚拟内存地址空间的开销大约600MB。此时,整个系统的物理内存开销大约400MB,剩余200多MB的物理内存尚未使用
                b)CPU运算开销比较大,通过top命令查看,cpu开销大约60%左右
5、前期的测试中加载过我们自己的驱动模块,为了使测试更具针对性,在后期的测试中未加载任何驱动模块,但依然会出现类似问题
 整个测试环境基本就是上述情况,不知是否有问题,还望指点。谢谢!
 
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

802

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1763
最后登录
1970-1-1
发表于 2014-7-9 16:26:54 | 显示全部楼层

RE:线程调度异常

线程调用使用到的内存过大引起紧张吧
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

7

帖子

0

新手上路

Rank: 1

积分
23
最后登录
1970-1-1
 楼主| 发表于 2014-7-9 21:37:08 | 显示全部楼层

回复:线程调度异常

回复第 5 楼 于2014-07-09 16:26:54发表:
线程调用使用到的内存过大引起紧张吧 

您说的是什么意思,能再具体点吗?我觉得应该还有内存,用free查看系统还剩了好几百兆物理内存呢。
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

7

帖子

0

新手上路

Rank: 1

积分
23
最后登录
1970-1-1
 楼主| 发表于 2014-7-9 21:39:29 | 显示全部楼层

回复:线程调度异常

回复第 5 楼 于2014-07-09 16:26:54发表:
线程调用使用到的内存过大引起紧张吧 

您是指oom killer吗?如果是oom killer应该会有oops日志,但从实际情况来看,没有这些信息,所以应该不是oom killer的事。
回复 支持 反对

使用道具 举报

该用户从未签到

45

主题

2369

帖子

0

金牌会员

Rank: 6Rank: 6

积分
3276
最后登录
1970-1-1
发表于 2014-7-14 16:44:02 | 显示全部楼层

RE:线程调度异常

楼主你好,你这里应该是软件的问题吧。关于你这个问题,我们这边也没有办法帮你复现和调试的,很是抱歉~~
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

7

帖子

0

新手上路

Rank: 1

积分
23
最后登录
1970-1-1
 楼主| 发表于 2014-10-28 18:26:02 | 显示全部楼层
感觉这个问题是内核中的futex机制有bug导致的,打补丁后,问题有了明显改善。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

10

帖子

0

注册会员

Rank: 2

积分
55
最后登录
2016-1-20
发表于 2015-12-24 18:51:04 | 显示全部楼层
hgkx 发表于 2014-10-28 18:26
感觉这个问题是内核中的futex机制有bug导致的,打补丁后,问题有了明显改善。 ...

你好,能把这个patch发出来吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-24 02:51 , Processed in 0.100749 second(s), 30 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表