标签:
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
对于各design house的soc来说,smp都是一个必备的基本功能。这年头,如果谁说自己家的soc不是smp的,都好像拿不出手一样。好在arm为大家准备了很多的方案,从早期的双核,到现在的四核、八核等等,小小的一颗芯片性能是越来越高了。当然,既然是多核,那么如何做到均衡负载,让每一个core都不闲着,这就是软件工程师的工作了。之前翻了翻linux 2.6.16的内核代码,有了一些基本思路,这里与大家分享一下。
1)task初始化创建的时候需要寻找到最空闲的cpu来运行;
2)某一个task重新被唤醒的时候需要找到最空闲的cpu来处理;
3)当某一个core在schedule调度发现自己无任务可调用的时候需要进行负载均衡;
4)当一个core已经idle时,那么它需要定时申请一下从其他core那里看看是否可以找一些工作来做。
负载均衡表面的意思比较简单,但是真正操作起来还是有难度的。比如说,怎么设置定时器?时间太长,达不到均衡负载的效果;时间太短,cpu尽处理ipi中断了,没有足够的时候来处理task了。再比如,调度的时候,某些task如果有自己固定的core绑定了怎么办?或者是,某些task频繁地在不同的core之间运行,造成L1 cache不断被刷新,降低了cpu 运行速度怎么办?这些都是需要软件开发者精心设计才能解决的。
当然,没有一种方案是完美的,linux也一样。真正效果如何,其实需要开发者自己做实验验证一下才好。
欢迎大家提出自己的均衡负载方案来。^_^
标签:
原文地址:http://blog.csdn.net/feixiaoxing/article/details/50397086