随想录(关于smp的均衡负载)


【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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也一样。真正效果如何,其实需要开发者自己做实验验证一下才好。


    欢迎大家提出自己的均衡负载方案来。^_^



你可能感兴趣的:(随想录(关于smp的均衡负载))