文章归档

linux多核调度负载均衡机制

多核调度要解决的两个基本问题是:

  1. 充分利用多核性能
  2. 节能

一个经典的多核体系架构如下:

  1. NUMA 架构,系统中有N个Node,每个Node访问系统中不同区域的内存有不同的速度
  2. 同时它又是一个 SMP 系统,一个Node由多个物理封装 (Physical Package) 构成,物理封装通常拥有独立的L3 cache
  3. 一个物理封装又由多个核心 (Core) 构成,即 Multi-core 技术或者叫 Chip-level Multi
    processor(CMP) ,每个核心独占L1 cache,共享L2 cache
  4. 一个核中又通过 SMT 之类的技术实现多个硬件线程,这就是top中看到的逻辑cpu,同一个核心中的cpu共享所有的 cache

多核架构下的负载均衡算法需要注意哪些问题?一个是能耗,一个是cache命中率

关于能耗,能耗是以物理封装为单位的,一个物理封装中的两个cpu各执行一个进程,显然比两个物理封装中的cpu各执行一个进程要省电。

两个进程在同一个物理封装上的两个cpu上运行和分别在两个不同物理封装上的单个cpu上运行能耗是不一样的,后者几乎是前者的两倍

关于cache命中率,这个是显而易见的,无需多说,所以调度就要遵循就近原则,因此就产生了调度域 Scheduling Domain 的概念。调度域是什么呢?每个 Scheduling Domain 其实就是具有相同属性的一组 cpu 的集合,这里的属性其实就是 Hyper-threading, Multi-core, SMP, NUMA architectures,不同的域之间呈树状关系:

Scheduling Domains 原理

负载均衡算法就是在这些调度域之间进行,自下而上,在每个调度域里,只有一个cpu负责做负载均衡,这个cpu要么是调度域内第一个空闲的cpu,或者是调度域的第一个cpu。每个调度域内通常会有N个调度组

负载均衡的基本原理就是:选择调度域内最忙的调度组,和当前组的平均负载做比较,If the busiest group’s load is lower than the local group’s load, the load is considered balanced at this level. Otherwise, the load is balanced between the local CPU and the busiest CPU of the the group, with a tweak to ensure that load-balancing works even in the presence of tasksets.

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>