- 论坛徽章:
- 0
|
如何使代码在多CPU环境下运行得更有效率
原帖由 "superdoctor" 发表:
即使不能直接操纵cache但是我们都知道cache里面会装些什么啦,所以程序设计还是可以间接的控制一下的
下半部是什么?"万不可用下半部"听着有点象下半身
真心请教
先举个例子,对于一个中断处理:
需要从I/O读取数据,然后进行处理.你可以:
1.在中断处理中读取数据并处理,这样会影响中断响应时间,肯定不好
2.中断处理中读取数据放到缓冲区,然后添加一个task到tasklet或者添加一个BH
BH bottom half顾名思义就是后处理的,相对应的中断处理中的动作就是上半部分了
区别 针对10个CPU的多处理系统)
软中断SOFTIRQ:
一个软中断可以并发执行在多个CPU上,此时软中断处理函数要是可重入的,而且对于用到的数据要用spin加以保护
tasklet:
建立在SOFTIRQ之上的
对于有10个task要处理的任务队列,内核会这么处理1task/1cpu,并行处理,但在一个CPU上运行了的task不可以转到另外一个CPU,必须要在该CPU上处理知道结束才可以.
BH
建立在SOFTIRQ之上
对于10个BH要处理的情况,必须是一个BH一个BH的顺序的在某个CPU上处理,也就是说只要有一个BH被处理了,其它的BH必须要等这个BH处理结束后才能处理.
哪个更为适合多CPU系统,一看就知道了吧
平常用的比较多的是tasklet.软中断没用过,一知半解,真心期待高手不吝赐教啊,先谢了 |
|