Linux内核源码分析 (5)多处理器调度

Linux内核源码分析 (5)多处理器调度

文章目录

  • Linux内核源码分析 (5)多处理器调度
  • 注:本章节使用的内核版本为Linux 5.6.18
  • 一、 SMT和NUMA
    • 1、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 进行实现,并且定义四种状态:possibleonlineactivepresent。具体如下:
    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一共分成三个层次:SMTMCNUMA,每层都包含所有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、公平调度类的处理器负载均衡

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/93728.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为了更好和大家交流,欢迎大家加我的微信账户

因为一些懂的都懂的原因&#xff0c;如果我的账户显示为 此时我无法通过站内信、留言或者任何方式和大家联系。 如果看到这样的内容&#xff0c;可以在此评论区留下你的微信账户&#xff0c;我看到后会添加你。为防止其他人冒充我&#xff0c;我的微信号以2206结尾。

Docker harbor 私有仓库的部署和管理

目录 一、什么是Harbor 二、Harbor的特性 三、Harbor的构成 四、部署配置Docker Harbor 1. 首先需要安装 Docker-Compose 服务 2.部署 Harbor 服务 3.使用harbor仓库 &#xff08;1&#xff09;项目管理 &#xff08;2&#xff09;用户管理 一、什么是Harbor Harbor …

【IOTE】物联网射频模组和芯片级方案提供商——深圳信驰达科技将精彩亮相IOTE物联网展

►►►强势来袭 Strong Attack 主物联场&#xff0c;相约深圳&#xff1b;2023&#xff0c;共论商机&#xff01;IOTE2023第二十届国际物联网展深圳站将于2023年9月20-22日在深圳国际会展中心(宝安新馆)开展&#xff01;汇聚全球超800家参展企业&#xff0c;呈现更多数字化纷呈…

从零开发JavaWeb入门项目--十天掌握

原文网址&#xff1a;从零开发JavaWeb入门项目--十天掌握_IT利刃出鞘的博客-CSDN博客 简介 这是一个靠谱的JavaWeb入门项目实战&#xff0c;名字叫蚂蚁爱购。从零开发项目&#xff0c;视频加文档&#xff0c;十天就能学会开发JavaWeb项目&#xff0c;教程路线是&#xff1a;搭…

uni-app中使用iconfont彩色图标

uni-app中使用iconfont彩色图标 大家好&#xff0c;今天我们来学习一下uni-app中使用iconfont彩色图标&#xff0c;好好看&#xff0c;好好学&#xff0c;超详细的 第一步 首先&#xff0c;从iconfont官网&#xff08;iconfont-阿里巴巴矢量图标库&#xff09;选择自己需要的图…

Leetcode110. 平衡二叉树

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 题解&#xff…

Linux测开常用命令总结

文章目录 Linux系统中文件目录树 基本指令的使用&#xff1a; Linux命令的帮助信息查看 --help command --help 说明&#xff1a; 显示command 命令的帮助信息通过man命令查看帮助信息 man command( 命令的名称) man 命令查看的帮助信息更加详细ls&#xff0c;pwd&#xff0c…

原生js实现轮播图及无缝滚动

我这里主要说轮播图和无缝滚动的实现思路&#xff0c;就采用最简单的轮播图了&#xff0c;当然实现的思路有很多种&#xff0c;我这也只是其中一种。 简单轮播图的大概结构是这样的&#xff0c;中间是图片&#xff0c;二边是箭头可以用来切换图片&#xff0c;下面的小圆点也可以…

代码随想录笔记--栈与队列篇

目录 1--用栈实现队列 2--用队列实现栈 3--有效的括号 4--删除字符串中的所有相邻重复项 5--逆波兰表达式求值 6--滑动窗口的最大值 7--前k个高频元素 1--用栈实现队列 利用两个栈&#xff0c;一个是输入栈&#xff0c;另一个是输出栈&#xff1b; #include <iostrea…

如何把本地项目上传github

一、在gitHub上创建新项目 【1】点击添加&#xff08;&#xff09;-->New repository 【2】填写新项目的配置项 Repository name&#xff1a;项目名称 Description &#xff1a;项目的描述 Choose a license&#xff1a;license 【3】点击确定&#xff0c;项目已在githu…

前几天写的博客被选中进入【CSDN月度精选】榜单

小收获&#xff0c;记录一下&#xff0c;哈哈 这个貌似是CSDN给的排名和得分&#xff1a;

政府科技项目验收全流程分享

科技验收测试 &#xff08;验收申请→主管部门初审→科技厅审核→组织验收→归档备案→信用管理&#xff09;&#xff1a; &#xff08;一&#xff09;验收申请 项目承担单位通过省科技业务管理系统提交验收申请。 按期完成的项目&#xff0c;项目承担单位应当在项目合同书…