免费注册 查看新帖 |

Chinaunix

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

[进程管理] 请教个kworker的问题 [复制链接]

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:52:30
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-03-05 17:30 |只看该作者 |倒序浏览
我的板子是单核的A5,自己写了个模块,如果用create_singlethread_workqueue新建的队列,发work到这个队列中,再通过top命令式看到在kworker/u:0上的。
但如果用create_workqueue建立队列,再发work到这个队列中,通过top命令看占用率时,发现是在kworker/0:1上的。这么说,create_workqueue不就是相当于没有新建队列了吗?

还有,大家在debug时,如何能从kworker/u:0或者kworker/0:1快读定位到是代码哪里启动的队列呢?

多谢!

论坛徽章:
2
寅虎
日期:2014-11-25 21:47:342015小元宵徽章
日期:2015-03-06 15:58:18
2 [报告]
发表于 2015-03-05 19:53 |只看该作者
create_workqueue是在每个cpu上创建一个workqueue,create_singlethread_workqueue只创建一个内核线程。
kworker是3.x内核引入的,你是如何确定你的任务是在kworker/0:1上执行的呢?

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:52:30
3 [报告]
发表于 2015-03-06 10:35 |只看该作者
回复 2# 镇水铁牛

create_workqueue是在每个cpu上创建一个workqueue,create_singlethread_workqueue只创建一个内核线程。
这么说create_workqueue也应该创建了workqueue啊,怎么看不到呢。

我在work的处理函数里面加了个mdelay,看cpu占用率大概就看出是哪个kworker了。
   

论坛徽章:
2
寅虎
日期:2014-11-25 21:47:342015小元宵徽章
日期:2015-03-06 15:58:18
4 [报告]
发表于 2015-03-08 21:51 |只看该作者
    if (pool->cpu >= 0)
        snprintf(id_buf, sizeof(id_buf), "%d:%d%s", pool->cpu, id,
             pool->attrs->nice < 0 ? "H" : "");
    else
        snprintf(id_buf, sizeof(id_buf), "u%d:%d", pool->id, id);

    worker->task = kthread_create_on_node(worker_thread, worker, pool->node,
                     "kworker/%s", id_buf);

    其中kworker/0:1中的0:1就来自这里,0表示cpu0,1表示pool worker的ID,单核环境中这个ID不清楚,有可能复用系统默认的worker了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP