当前位置: 首页 > news >正文

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、公平调度类的处理器负载均衡

相关文章:

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

Linux内核源码分析 (5)多处理器调度 文章目录 Linux内核源码分析 (5)多处理器调度注&#xff1a;本章节使用的内核版本为Linux 5.6.18一、 SMT和NUMA1、SMP (对称多处理器结构)2、NUMA &#xff08;非一致内存访问结构&#xff09; 二、多核调度三、调度域和调度组四、SMP调度详…...

华为云云服务器评测|华为云云耀云服务器L实例使用教学

文章目录 教学小故事 教学 华为云云耀云服务器L实例是一款提供高效、可靠、安全的基础设施服务的云服务器。下面是使用教学&#xff1a; 登录华为云官网。 测评产品链接&#xff1a;https://www.huaweicloud.com/product/hecs-light.html 进入云耀云服务器管理控制台&#xf…...

这个在线网站让你三分钟制作出一份精美简历

今天&#xff0c;我要向大家推荐一个神奇的在线工具网站&#xff0c;它能够提供免费简历模板、简历范文&#xff0c;支持在线编辑&#xff0c;并且一键下载为PDF。这个工具让你的简历制作变得轻松便捷&#xff01; 首先&#xff0c;这个网站的简历模板非常丰富多样。无论你是刚…...

Sql 函数传递参数 字符串拼接

使用场景 一个计算价格的函数&#xff0c;多个存储过程调用&#xff0c;因业务需求经常要新增参数&#xff0c;避免修改函数时程序执行存储过程报错&#xff0c;将多个参数拼接为一个字符串传递 -- 调用函数CalcuPrice(UnitPrice,CONCAT(MFQZC,MFQZC,&ItemNum,ItemNum,&am…...

java八股文面试[多线程]——两个线程交替打印1-100之间的数字

一份代码&#xff0c;两个线程&#xff0c;使用synchronize实现&#xff1a; 重写run()方法&#xff0c;将输出1到100之间整数的代码写到同步方法里。线程1进入到同步方法&#xff0c;输出一个整数后&#xff0c;阻塞并释放锁。线程2进入到同步方法&#xff0c;唤醒线程1&…...

gRPC之gRPC认证

1、gRPC认证 前面篇章的gRPC都是明文传输的&#xff0c;容易被篡改数据&#xff0c;本章将介绍如何为gRPC添加安全机制。 gRPC默认内置了两种认证方式&#xff1a; SSL/TLS认证方式 基于Token的认证方式 同时&#xff0c;gRPC提供了接口用于扩展自定义认证方式。 1.1 TLS…...

简易虚拟培训系统-UI控件的应用3

目录 Button组件的组成 Button组件方法1-在Button组件中设置OnClick()回调 Button组件方法2-在脚本中添加Button类的监听 上一篇使用了文件流读取硬盘数据并显示在Text组件中&#xff0c;本篇增加使用按钮来控制显示哪一篇文字信息。 Button组件的组成 1. 新建Button&#…...

语言模型(language model)

文章目录 引言1. 什么是语言模型2. 语言模型的主要用途2.1 言模型-语音识别2.2 语言模型-手写识别2.3 语言模型-输入法 3. 语言模型的分类4. N-gram语言模型4.1 N-gram语言模型-平滑方法4.2 ngram代码4.3 语言模型的评价指标4.4 两类语言模型的对比 5. 神经网络语言模型6. 语言…...

【3.Vue子组件调用父组件方法】

1.概述 使用组件建抛出事件的方式来调用父组件的方法&#xff0c;不直接用this.$parent.function的方法&#xff0c;当然这种方式是可以的。 2.代码实现 2.1 父组件代码 父组件写一个方法给子组件调用 // 设备点击事件// equipId:设备id// leftValue:left值// topValue:top…...

算法系列-876-求链表的中间节点

求链表中间节点&#xff0c;如果有两个中间节点取后面那个 链表定义 // lc codestart /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(…...

h5 ws 客户端 监听ws服务器广播的信息

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>AI智能写作</title><!-- Bootstrap CSS --><meta charset"utf-8"><meta name"viewport" content"widt…...

网络基础之重中之重

目录 IP协议 ​编辑 基本概念&#xff1a; 协议头格式&#xff1a; ​编辑 网段划分 DHCP &#xff1a; CIDR&#xff1a; 特殊的IP地址&#xff1a; IP地址的数量限制&#xff1a; 私有IP和公网IP 路由 路由的过程&#xff1a; 数据链路层 认识以太网&#x…...

HarmonyOS应用开发者-----基础认证试题及答案

HarmonyOS应用开发者基础认证试题及答案 试题会不定时刷新,本试题仅供大家学习参考 【判断题】 2.5/2.5 所有使用@Component修饰的自定义组件都支持onPageShow,onBackPress和onPageHide生命周期函数。 正确(True)错误(False) 回答正确【判断题】 2.5/2.5 在Column和Row容器组…...

C++:string并非以0作为结束符,c_str和data的返回却包含结束符0

C语言中使用char数组保存字符串时,是以字符为0或者\0作为字符串的结束符标志的。 所以一个char str[10]的数组只能合法的保存9个字符(因为最后还要加一个结束符)。 #include <cstring> #include <iostream>using namespace std;int main() {char str[10] ="…...

ChatGPT插件的优缺点

虽然西弗吉尼亚大学的研究人员看到了最新的官方ChatGPT插件——名为“代码解释器”&#xff08; Code Interpreter&#xff09;的教育应用潜力&#xff0c;但他们也发现&#xff0c;对于使用计算方法处理针对癌症和遗传疾病的定向治疗的生物数据的科学家来说&#xff0c;这款插…...

北京985学校,交叉学科考英一数三408

北京师范大学(B) 考研难度&#xff08;☆☆☆&#xff09; 内容&#xff1a;23考情概况&#xff08;拟录取和复试分析&#xff09;、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文1096字&#xff0c;预计阅读&#xff1a;3分钟 2023考情概况 北…...

ChatGPT 总结前端HTML, JS, Echarts都包含哪些内容

AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle, Office, Python ,ETL Excel 2021 实操,函数,图表,大屏可视化 案例实战 http://t.csdn.cn/zBytu...

企业架构LNMP学习笔记1

项目开发流程&#xff1a; 公司老板或者产品经理&#xff0c;根据市场调查&#xff0c;决定开发一整套互联网产品。 互动社交电商用户论坛&#xff08;BBS&#xff09; 产品决策 &#xff08;老板产品UI设计&#xff09; 业务实施、代码开发 程序开发人员 前端开发&#x…...

【位运算】leetcode371:两整数之和

一.题目描述 两整数之和 二.思路分析 题目要求我们实现两整数相加&#xff0c;但是不能使用加号&#xff0c;应该立马想到是用位运算来解决问题。之前说过&#xff0c;异或就是“无进位相加”&#xff0c;故本题可以先将两数异或&#xff0c;然后想办法让得到的结果进位即可。…...

【爬虫小知识】如何利用爬虫爬网页——python爬虫

前言 网络时代的到来&#xff0c;给我们提供了海量的信息资源&#xff0c;但是&#xff0c;想要获取这些信息&#xff0c;手动一个一个网页进行查找&#xff0c;无疑是一项繁琐且效率低下的工作。这时&#xff0c;爬虫技术的出现&#xff0c;为我们提供了一种高效的方式去获取…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...