免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4656 | 回复: 20
打印 上一主题 下一主题

请教大家如何验证jiffy的错误是否会导致系统处理poll的timeout错误 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-26 15:17 |只看该作者 |倒序浏览
一个嵌入式系统,内核是linux2。6的,自己裁减的,
我们公司的程序在上面跑了一年多了,突然有一天cpu100%了,
通过gdb看core,发现是下面这样一段代码deadloop了,
while(1)

   ....
      eventcount=poll(PllFd_t,ConnectionMax,100);
      ....

理论上,如果没有数据的话,poll的处理相当与sleep(100)吧,
不可能导致死循环的,我怀疑是系统的poll的timeout处理有问题,
问了厂家,说他这个系统如果连续运行500天不掉电,jiffy会发生overflow,我想验证一下会不会是这个问题导致的cpu100%,
请教大家如何验证jiffy的错误是否会导致系统处理poll的timeout错误
谢谢!

论坛徽章:
5
2 [报告]
发表于 2009-05-26 15:21 |只看该作者
修改内核代码, 自己设置jiffy初始化, 使它接近0xffffffff.

我记得以前REDHAT有一个版本, 在运行了几分钟后, jiffy就反转了. 我们的代码没有正确判断jiffy反转的情况, 在那个OS下就死机了.

论坛徽章:
5
3 [报告]
发表于 2009-05-26 15:22 |只看该作者
请教大家如何验证jiffy的错误


这里"jiffy的错误", 是啥意思? jiffy只有溢出并反转,没有错误.

论坛徽章:
0
4 [报告]
发表于 2009-05-26 15:32 |只看该作者
就是想验证如果jiffy溢出,
有没有可能导致poll的timeout处理错误,
比如不wait而直接返回了,
因为是别人的系统,不可能修改内核代码啊,
有没有其他方式
谢谢!

论坛徽章:
5
5 [报告]
发表于 2009-05-26 15:48 |只看该作者

回复 #4 abcf987 的帖子

抱歉. 如果不改系统, 我就想不出办法了.

论坛徽章:
5
6 [报告]
发表于 2009-05-26 15:50 |只看该作者
你这个poll函数, 能否贴出来?

论坛徽章:
0
7 [报告]
发表于 2009-05-26 15:56 |只看该作者
代码如下:
while( m_bActFlag ){


                if( m_EventCount <= 0 ){


                        memcpy( m_lpPllfd_t, m_lpWaitPllfd_t, sizeof(pollfd)*m_connectionMax);
                        m_pollConnCount = m_connCount;
                        m_EventCount = poll( m_lpPllfd_t, m_connectionMax, 100/*ms*/ );
                        if( m_EventCount == -1 ){
                                error_count++;
                                if( error_count >= 100 ){
                                        CONNECTION_DATA Data = {0};
                                        while( GetConnectData( INVALID_SOCKET, &Data ) != -1 ){
                                                ReqDisconnect( Data.socket );
                                        }
                                }
                        }else{
                                error_count = 0;
                        }
                }
                if( m_EventCount > 0 ){
                        AnalisysReceiveData();
                }
        }

论坛徽章:
5
8 [报告]
发表于 2009-05-26 16:00 |只看该作者

回复 #7 abcf987 的帖子

没看到哪里代码跟jiffy有关系阿. 为什么怀疑jiffy呢

论坛徽章:
0
9 [报告]
发表于 2009-05-26 16:02 |只看该作者
根据代码的处理逻辑,
如果没有数据的话,poll将block这个thread 100ms,
然后接着等待数据,
现在的情况是poll没有block住,而是立刻return了,
导致cpu100%了,
因为程序是跑了一年多出的问题,所以怀疑是不是jiffy溢出导致
poll的timeout处理异常了?

论坛徽章:
5
10 [报告]
发表于 2009-05-26 16:08 |只看该作者
poll()函数是你们写的吗? 是否有它的代码?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP