Zarle 2024-08-28 17:42 采纳率: 0%
浏览 122
已结题

中断和线程导致内核崩溃问题

遇到了一个内核崩溃的问题,困恼了我很久,实力有限,一点办法也没有;
设备:mt7621,250 Hz频率
内核版本:linux-2.6.36.x
场景:
1,应用程序使用pthread_create开了400个线程,线程什么都不处理,使用usleep函数延时10ms运行;
2,内核使用一个定时器,周期为8ms,回调函数为for循环8次,每次调用ei_start_xmit发送一个自己定义的二层包,我这边测试8次都是发生一样的包;

现象:
运行10分钟或者半个小时内核就直接挂死;
每次都挂死再hrtime_run_queues函数的rb_erase函数中,提示说锁已经被释放;
还出现过一种现象是,我设备是两核两线程,用top看有四个cpu,其实有一个cpu直接跑死,表现出来的现象是在这个cpu上运行的所有程序都卡死在sleep函数,程序不会往下执行,其他核正常,cpu占用率不高,内存未泄露

说明:
为什么要开那么多线程呢是因为我本来有180个线程,里面有运行程序内容,内核使用中断10ms发是8个包,但是这样内核一至三天就会随机跑死,找不到原因,所以我就极限测试找问题

测试结果:
1,减少线程会拉长挂死时间,有时候需要一天才能出现,为了调试方便才做极限测试;
2,去掉线程保留中断处理也会挂死;去掉中断保留线程则不会挂死;
3,中断只调用一次ei_start_xmit也会挂死,挂死在函数dma_cache_sync,出错信息和图片一致,但是去掉dma_cache_sync这个函数就不挂死;

img

img

  • 写回答

33条回答 默认 最新

  • CSDN专家-sinJack 2024-09-02 13:14
    关注
    获得2.00元问题酬金

    多线程中尽量不要去使用sleep函数。
    因为容易造成线程死锁,导致资源耗尽,最终系统崩溃。
    可以用其他的方式代替sleep,比如定时任务等。

    评论

报告相同问题?

问题事件

  • 系统已结题 9月5日
  • 修改了问题 8月28日
  • 修改了问题 8月28日
  • 修改了问题 8月28日
  • 展开全部

悬赏问题

  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?
  • ¥50 复现论文;matlab代码编写
  • ¥30 echarts 3d地图怎么实现一进来页面散点数据和卡片一起轮播
  • ¥15 数字图像的降噪滤波增强
  • ¥15 心碎了,为啥我的神经网络训练的时候第二个批次反向传播会报错呀,第一个批次都没有问题
  • ¥15 MSR2680-XS路由器频繁卡顿问题
  • ¥15 VB6可以成功读取的文件,用C#读不了
  • ¥15 如何使用micpyhon解析Modbus RTU返回指定站号的湿度值,并确保正确?
  • ¥15 C++ 句柄后台鼠标拖动如何实现