多核调度预备知识

问题

内核对进程调度时发生了什么?

进程调度的本质

任务 / 进程 切换

  • 即:上下文切换,内核对处理器上的执行的进程进行切换
  • "上下文" 指:寄存器的值
  • "上下文切换" 指:
    • 将寄存器的值保存在内存中 (进程被剥夺处理器,停止执行)
    • 将另一组寄存器的值从内存中加载到寄存器 (调度下一个进程执行)

多核调度预备知识_第1张图片

进程调度的本质

当时间片耗完,不管进程正在执行什么代码,都一定会发生上下文切换!

多核调度预备知识_第2张图片

上下文切换必然导致进程状态的转换

上下文切换由中断触发 (时钟中断,IO中断,等)

多核调度预备知识_第3张图片

多核调度预备知识_第4张图片

详解 Linux 进程状态 (ps au)

多核调度预备知识_第5张图片

多核调度预备知识_第6张图片

细说空闲状态

处理器上电后,开始一直不停的向下执行指令

当系统中没有进程时,会执行一个 "不执行任何操作的" 的空闲进程

空闲进程的职责:执行特殊指令使处理器进入休眠状态 (低功耗状态)

空闲状态是一种暂态,但凡出现就绪进程,空闲状态立即结束

Linux 性能工具简介

ps -- 查看进程运行时数据 (ps au)

top -- Linux 整体性能监测工具 (类似任务管理器)

sar -- Linux 活动情况报告 (系统性能分析工具)

Linux 系统平均负载

即:Linux 系统负载平均值 (Linux System Load Averages)

该值表示的是一段时间内任务对系统资源需求的平均值 (1、5 和 15 分钟)

  • 如果平均值接近 0,意味着系统处于空闲状态
  • 如果平均值大于 1,意味着系统繁忙,任务需要等待,无法及时执行
    • 如果 1min 平均值高于 5min 或 15min 平均值,则负载正在增加
    • 如果 1min 平均值低于 5min 或 15min 平均值,则负载正在减少

详解 sar -q

runq-sz:执行队列的长度

plist-sz:运行中的任务 (进程 & 线程) 总数

ldavg-1:最近 1min 系统平均负载

ldavg-5:最近 5min 系统平均负载

ldavg-15:最近 15min 系统平均负载

多核调度预备知识_第7张图片

系统调度观察实验

通过 Linux 性能工具观察进程调度

  • 单处理器运行过程
  • 多处理器运行过程

多核调度预备知识_第8张图片

系统调度核心性能指标

吞吐量:单位时间内的工作总量 (越大越好)

  • 处理器资源消耗越多 (空闲状态占比越低),吞吐量越大
  • 对于进程调度而言,吞吐量指单位时间处理的进程数量

延迟:从开始处理任务到结束处理任务所耗费的时间 (越短越好)

  • 对于进程而言,延迟即生命期,指进程从运行到结束所经历的时间
  • 注意:运行 和 结束 不同,运行时间可能很长,但执行时间可能很短

吞吐量计算一

多核调度预备知识_第9张图片

吞吐量计算二

多核调度预备知识_第10张图片

吞吐量计算三

多核调度预备知识_第11张图片

假设:每个进程固定执行 60ms

则:进程运行结束时

多核调度预备知识_第12张图片

结论:

处理器的能力由硬件设计决定,吞吐量决定一个上限

当吞吐量未达上限,进程的延迟取决于进程自身

当吞吐量达到上限,随着进程数量增加,总延迟增加,但平均延迟不变

思考

多核调度预备知识_第13张图片

多核吞吐量计算

多核调度预备知识_第14张图片

现实中的系统

理想状态:进程正在执行,并且没有就绪状态的进程

空闲状态:处理器占用率低,吞吐量低

繁忙状态:

多个进程同时运行,但存在多个就绪状态的进程

此时,吞吐量很高(可能达到峰值),但总延迟会变长

你可能感兴趣的:(Linux系统编程,linux)