免费注册 查看新帖 |

Chinaunix

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

[进程管理] 请教如何让内核线程调用wake_up时不引起调度而让它自己主动调用schedule时才调度 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-30 20:14 |只看该作者 |倒序浏览
我现在是线程A调用schedule_work让一段任务晚点执行,但又不想加延时,我有尝试过wake_up_process,把事情挪到线程B去做。但都是线程A唤醒B线程后就立刻调度了,我希望晚一点时线程A wait_for_completion时才轮到B来执行,让AB并行处理。
我这里是双核,但不能绑定CPU运行,preempt low delay
lk 3.0.8

论坛徽章:
0
2 [报告]
发表于 2012-07-30 23:29 |只看该作者
回复 1# fei1700


    晕了,没看明白,不过个人感觉linux下应该没有搞不定的同步关系。

论坛徽章:
0
3 [报告]
发表于 2012-07-31 10:09 |只看该作者
奥,我再描述一下。
原来是A线程循环处理 1,2,3
我想改成
A 循环处理1,2,在应该调用3的地方让它再下一次2的时候再运行,有那么一点点像流水线?
A 第一轮(1,2,触发3),第2轮(1,2,触发3),第3轮(1,2,触发3)
B                     在A执行第2轮的2时,B执行第1轮的3         在A执行第3轮的2时,B执行第2轮的3

目前是一旦触发3后,A就让出CPU给B来执行了,要等B处理完3后才能让A回来再执行。

论坛徽章:
0
4 [报告]
发表于 2012-07-31 10:49 |只看该作者
一个比较ugly的方法,呵呵:都设成FIFO实时,A的优先级更高。

论坛徽章:
0
5 [报告]
发表于 2012-08-02 21:50 |只看该作者
....这样不好吧,多核多线程不要假定线程的调度顺序

你这种case木有意义啊....

如果A,B都在一个core上,A执行1,2,3和A执行1,2 B执行3没有区别啊,反而因为有A->B->A的上下文切换反而会慢一点

如果A,B不在一个core上,通过同步机制,让A执行完1,2以后检测B是否有执行完3,有的话发的数据给B让B继续执行3.

但是因为A,B本身的调度就不确定,基本上这种“加速”是没有意义的。

一般你描述的这种处理方式是在和外设通讯的时候会用到,处理器执行完1、2以后,让外设处理3,
同时处理器继续执行1、2,处理完2以后检测外设是否已经处理完上次的request,已经处理完毕的话就再次设置外设让其处理3.

实在看不出来在处理器上做这种类似的动作有任何好处....

论坛徽章:
0
6 [报告]
发表于 2012-08-03 17:08 |只看该作者
回复 5# onlyxuyang

实际上是A处理1,2,A是控制器,2的其中一部分就包含了等待设备响应,3是系统代码,跟控制器和设备无关。3耗时占1,2,3的20%。嗯,3就是end_request,块设备

论坛徽章:
0
7 [报告]
发表于 2012-08-06 14:34 |只看该作者
                            get_online_cpus();
                        curcpu = raw_smp_processor_id();
                        for_each_online_cpu(cpu) {
                                if (cpu == curcpu)
                                        continue;
                                 schedule_work_on(cpu, &cq->end_work);
                        }
                         put_online_cpus();

把第3步end_request放到schedule_work_on, 执行运行在另一个CPU,事实也确实是1,2在CPU0,3在CPU1,但是速度没快起来,调用schedule_work_on后本身也调度了。

没有调整任务优先级。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP