免费注册 查看新帖 |

Chinaunix

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

[进程管理] 针对每个CPU运行队列的线程、等待队列线程信息输出 [复制链接]

论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-08-09 06:20:00每日论坛发贴之星
日期:2016-08-09 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-11-28 09:43 |只看该作者 |倒序浏览
各位好,

我需要在SysRq中增加自己的调试命令,当键入命令后输出每个CPU中运行队列的所有线程信息以及等待队列的线程信息。查找运行队列现在主要有两种思路:一种是直接遍历task_struct链表,另外一种是利用struc ra结构体。等待队列还没有思路。由于内核刚入门不久,具体的细节和概念还不是特别清楚,请各位大牛多多指点。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-08-09 06:20:00每日论坛发贴之星
日期:2016-08-09 06:20:00
2 [报告]
发表于 2014-11-28 09:44 |只看该作者
是struct rq结构体,不是ra结构体,不好意思。

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
3 [报告]
发表于 2014-11-28 16:04 |只看该作者
遍历运行队列中的任务,应该有现有的接口,忘了,建议看看代码~
等待队列可能也有,建议搜搜代码~

论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-08-09 06:20:00每日论坛发贴之星
日期:2016-08-09 06:20:00
4 [报告]
发表于 2014-12-01 18:12 |只看该作者
打印每个cpu的运行队列信息已经实现了。现在的问题就是等待队列了,看了一个礼拜的源代码,还是没有找到内核调度层的等待队列地址,内核好像只记录等待的数量,而对具体等待的任务不做保存。请教下如何打印CPU的等待队列中的进程?回复 3# humjb_1983


   

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
5 [报告]
发表于 2014-12-01 22:06 |只看该作者
回复 4# 仙帝将王

等待队列怎么没有链表,不然怎么把任务取出来去**!
  1. void fastcall add_wait_queue(wait_queue_head_t *q, wait_queue_t *wait)
  2. {
  3.         unsigned long flags;

  4.         wait->flags &= ~WQ_FLAG_EXCLUSIVE;
  5.         spin_lock_irqsave(&q->lock, flags);
  6.         __add_wait_queue(q, wait);
  7.         spin_unlock_irqrestore(&q->lock, flags);
  8. }
  9. EXPORT_SYMBOL(add_wait_queue);
复制代码
  1. static inline void __add_wait_queue(wait_queue_head_t *head, wait_queue_t *new)
  2. {
  3.         list_add(&new->task_list, &head->task_list);
  4. }
复制代码

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
6 [报告]
发表于 2014-12-01 22:10 |只看该作者
**的代码在这:
static void __wake_up_common(wait_queue_head_t *q, unsigned int mode,
                             int nr_exclusive, int sync, void *key)
{
        wait_queue_t *curr, *next;

        list_for_each_entry_safe(curr, next, &q->task_list, task_list) {
                unsigned flags = curr->flags;

                if (curr->func(curr, mode, sync, key) &&
                                (flags & WQ_FLAG_EXCLUSIVE) && !--nr_exclusive)
                        break;
        }
}

论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-08-09 06:20:00每日论坛发贴之星
日期:2016-08-09 06:20:00
7 [报告]
发表于 2014-12-02 14:43 |只看该作者
回复 6# Tinnal


    谢谢Tinnal,这个确实是等待队列的代码,但是具体的队列是由应用层自己定义的。我想请教的是,内核调度层会像运行队列一样的等待队列吗?也就是说每个CPU中是不是有一个唯一的等待队列?

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
8 [报告]
发表于 2014-12-03 08:33 |只看该作者
回复 7# 仙帝将王


没有作谓的每CPU等待队列吧,应该只有每CPU运行队列。除非在一些特性的子系统里或你自己定义。自己去搜索一下代码不就出来了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP