请教个kworker的问题
我的板子是单核的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快读定位到是代码哪里启动的队列呢?
多谢! create_workqueue是在每个cpu上创建一个workqueue,create_singlethread_workqueue只创建一个内核线程。
kworker是3.x内核引入的,你是如何确定你的任务是在kworker/0:1上执行的呢? 回复 2# 镇水铁牛
create_workqueue是在每个cpu上创建一个workqueue,create_singlethread_workqueue只创建一个内核线程。
这么说create_workqueue也应该创建了workqueue啊,怎么看不到呢。
我在work的处理函数里面加了个mdelay,看cpu占用率大概就看出是哪个kworker了。
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了。
页:
[1]