linux内核CPU负载均衡

所谓CPU负载均衡就是将进程从繁忙的CPU迁移到比较空闲的CPU上,目的是为了提高系统的整体效率。

进程在不同CPU之间迁移通常会影响cache的命中率,例如:

1.支持超线程技术(SMT)的CPU内部的虚CPU之间完全共享cache,在它们之间迁移进程对cache几乎没有影响,所以尽量保证它们之间的进程数均衡。

2.单个CPU的多个核有各自的L1缓存,但共享L2和L3缓存,在这些核之间迁移进程会导致L1缓存的失效,但是L2和L3缓存不受影响。

3.多CPU,每个CPU有各自独享的缓存,在这些CPU之间迁移进程会导致缓存失效。

4.多CPU,多内存节点(NUMA),不同CPU对于不同内存结点访问的效率不同,在这些CPU之间迁移进程不仅会影响缓存,而且会出现内存访问效率的问题。

5.多CPU+NUMA组成的阵列。

内核根据迁移进程所造成的影响情况设置了不同的调度域(sched_domain),最小一级的调度域是SMT的情况,SMT中的多个虚拟CPU位于同一调度域内;次小一级是单个CPU的多个核的情况,这些核位于同一调度域内;往上是多个CPU的情况以及多CPU+NUMA的情况,最上面就是阵列情况,自下而上所有的sched_domain形成一棵树形结构,越往上迁移进程导致的影响越大,所以越往上内核会增大迁移的阻力。


你可能感兴趣的:(linux,cpu)