企业网站模板推荐,旅游网站的设计的前提,网络公关案例,免费网站主机空间Linux内核源码分析 (5)多处理器调度 文章目录 Linux内核源码分析 (5)多处理器调度注#xff1a;本章节使用的内核版本为Linux 5.6.18一、 SMT和NUMA1、SMP (对称多处理器结构)2、NUMA #xff08;非一致内存访问结构#xff09; 二、多核调度三、调度域和调度组四、SMP调度详…Linux内核源码分析 (5)多处理器调度 文章目录 Linux内核源码分析 (5)多处理器调度注本章节使用的内核版本为Linux 5.6.18一、 SMT和NUMA1、SMP (对称多处理器结构)2、NUMA 非一致内存访问结构 二、多核调度三、调度域和调度组四、SMP调度详解1、进程的处理器亲和性2、限期调度类的处理器负载均衡3、实时调度类的处理器负载均衡4、公平调度类的处理器负载均衡 注本章节使用的内核版本为Linux 5.6.18
一、 SMT和NUMA
1、SMP (对称多处理器结构)
对称多处理器结构(symmetrical mulit-processingSMP)在对称多处理器系统中所有处理器的地位都是平等的所有的CPU共享全部资源比如内存、总线、中断及I/O系统等等都具有相同的可访问性消除结构上的障碍最大特点就是共享所有资源。 在多处理器系统当中内核必须考虑几个问题以确保良好的调度。 CPU负荷必须尽可能公平地在所有的处理器上共享。进程与系统中某些处理器的亲合性affinity必须是可设置的。内核必须能够将进程从CPU迁移到另一个。 Linux SMP调度就是将进程安排/迁移到合适的CPU中去保持各CPU负载均衡的过程。
2、NUMA 非一致内存访问结构
NUMA为是多处理器计算机系统各个CPU都有本地内存可以支持超快的访问能力各个处理器之间通过总线连接起来支持对其他CPU的本地内存访问。.在NUMA体系结构中当CPU访问与它同在一个节点中的“本地” RAM芯片时几乎没有竞争因此访问通常是非常快的。另一方面访问其所属节点外的“远程” RAM芯片就非常慢。
二、多核调度 SMP 是多核处理器最常见的主要是将一个计算机上集中一组处理器各处理器是对等及其系统总线和内存子系统。SMP 架构如下图所示。 根据处理器实际物理属性CPU 域可分为超线程、多核。 超线程(SMT)Linux 内核分类 CONFIG_SCHED_SMT超线程芯片是一个立刻执行几个执行线程的微处理器它包括几个内部寄存器的拷贝并快速在它们之间切换。这种由Intel发明的技术使得当前线程在访问内存的间隙处理器可以使用它的机器周期去执行另外一个线程。一个超线程的物理CPU可以被Linux看作几个不同的逻辑CPU。多核(MC)Linux 内核分类 CONFIG_SCHED_MC。 Linux 内核对 CPU 管理主要是通过 bitmap 进行实现并且定义四种状态possible、online、active 及 present。具体如下 include/linux/cpumask.h extern struct cpumask __cpu_possible_mask;
extern struct cpumask __cpu_online_mask;
extern struct cpumask __cpu_present_mask;
extern struct cpumask __cpu_active_mask;/*表示系统当中有多少个可以执行的CPU核心*/
#define cpu_possible_mask ((const struct cpumask *)__cpu_possible_mask)/*表示系统当中有多少个处于运行状态的CPU核心*/
#define cpu_online_mask ((const struct cpumask *)__cpu_online_mask)/*表示系统当中有多少个具备online条件它们不一定都处于online有的CPU核心可能被热插拔*/
#define cpu_present_mask ((const struct cpumask *)__cpu_present_mask)/*表示系统当中有多少个活跃的核心*/
#define cpu_active_mask ((const struct cpumask *)__cpu_active_mask)三、调度域和调度组
Linux 内核将同一个级别的 CPU 归纳为一个调度组然后把同一个级别的所有调度组归纳为一个调度域。处理器有一个基本的调度域它是硬件线程调度域向上依次是核调度域、处理器调度域和 NUMA 节点调度域。具体案例分析如下 再举一个例子2路4核8核心CPU它们的CPU调度域逻辑分析 所有CPU一共分成三个层次SMT、MC、NUMA,每层都包含所有CPU,但是划分粒度不同。根据Cache和内存的相关性划分调度域调度域内的CPU又划分一次调度组。越往下层调度域越小越上层调度域越大。进程负载均衡会尽可以在底层调度域内部解决这样Cache利用率最优。
四、SMP调度详解
周期性负载均衡CPU对应的运行队列数据结构中记录下一次周期性负载均衡的时间当超过这个时间点后将触发SCHED_SOFFIRQ软中断来进行负载均衡。scheduler_tick() — triggerJoad_balance()。用到SMP负载均衡模型的时机 内核运行中还有部分情况中需要用SMP负载均衡模型来确定最佳运行CPU: 进程A唤醒进程B时try_to_wake_up()中会考虑进程B将在那个CPU上运行;进程调用execve()系统调用时fork出子进程子进程第一次被调度运行。
1、进程的处理器亲和性
2、限期调度类的处理器负载均衡
3、实时调度类的处理器负载均衡
4、公平调度类的处理器负载均衡