一步步深入学习Linux Process Scheduling

Linux Process Scheduling 学习计划

🎯 学习目标

  • 理解 Linux 内核的进程调度机制
  • 掌握不同调度策略:CFS、实时调度、Deadline
  • 学会使用工具分析调度情况:top, htop, ps, perf, ftrace
  • 能够定位调度瓶颈和优化进程调度性能

  • [Linux Process Scheduling 学习计划](#Linux Process Scheduling 学习计划 "#linux-process-scheduling-%E5%AD%A6%E4%B9%A0%E8%AE%A1%E5%88%92")

    • [🎯 学习目标](#🎯 学习目标 "#dart-%E5%AD%A6%E4%B9%A0%E7%9B%AE%E6%A0%87")

    • [📅 学习计划(约 10 天)](#📅 学习计划(约 10 天) "#date-%E5%AD%A6%E4%B9%A0%E8%AE%A1%E5%88%92%E7%BA%A6-10-%E5%A4%A9")

      • [Day 1 -- Linux 进程模型概述](#Day 1 – Linux 进程模型概述 "#day-1-linux-%E8%BF%9B%E7%A8%8B%E6%A8%A1%E5%9E%8B%E6%A6%82%E8%BF%B0")
      • [Day 2 -- 调度器概念](#Day 2 – 调度器概念 "#day-2-%E8%B0%83%E5%BA%A6%E5%99%A8%E6%A6%82%E5%BF%B5")
      • [Day 3 -- CFS (Completely Fair Scheduler)](#Day 3 – CFS (Completely Fair Scheduler) "#day-3-cfs-completely-fair-scheduler")
      • [Day 4 -- 实时调度策略](#Day 4 – 实时调度策略 "#day-4-%E5%AE%9E%E6%97%B6%E8%B0%83%E5%BA%A6%E7%AD%96%E7%95%A5")
      • [Day 5 -- 时间片与优先级](#Day 5 – 时间片与优先级 "#day-5-%E6%97%B6%E9%97%B4%E7%89%87%E4%B8%8E%E4%BC%98%E5%85%88%E7%BA%A7")
      • [Day 6 -- 调度统计工具](#Day 6 – 调度统计工具 "#day-6-%E8%B0%83%E5%BA%A6%E7%BB%9F%E8%AE%A1%E5%B7%A5%E5%85%B7")
      • [Day 7 -- ftrace 调度追踪](#Day 7 – ftrace 调度追踪 "#day-7-ftrace-%E8%B0%83%E5%BA%A6%E8%BF%BD%E8%B8%AA")
      • [Day 8 -- 多核调度](#Day 8 – 多核调度 "#day-8-%E5%A4%9A%E6%A0%B8%E8%B0%83%E5%BA%A6")
      • [Day 9 -- 调度调优](#Day 9 – 调度调优 "#day-9-%E8%B0%83%E5%BA%A6%E8%B0%83%E4%BC%98")
      • [Day 10 -- 综合案例](#Day 10 – 综合案例 "#day-10-%E7%BB%BC%E5%90%88%E6%A1%88%E4%BE%8B")
    • [✅ 学习成果](#✅ 学习成果 "#white_check_mark-%E5%AD%A6%E4%B9%A0%E6%88%90%E6%9E%9C")

  • [Linux Process Scheduling 学习手册 - Day 1](#Linux Process Scheduling 学习手册 - Day 1 "#linux-process-scheduling-%E5%AD%A6%E4%B9%A0%E6%89%8B%E5%86%8C-day-1")

    • [主题:Linux 进程模型概述](#主题:Linux 进程模型概述 "#%E4%B8%BB%E9%A2%98linux-%E8%BF%9B%E7%A8%8B%E6%A8%A1%E5%9E%8B%E6%A6%82%E8%BF%B0")

    • [1. 学习目标](#1. 学习目标 "#1-%E5%AD%A6%E4%B9%A0%E7%9B%AE%E6%A0%87")

    • [2. 理论讲解](#2. 理论讲解 "#2-%E7%90%86%E8%AE%BA%E8%AE%B2%E8%A7%A3")

      • [2.1 进程 vs 线程](#2.1 进程 vs 线程 "#21-%E8%BF%9B%E7%A8%8B-vs-%E7%BA%BF%E7%A8%8B")
      • [2.2 task_struct](#2.2 task_struct "#22-task_struct")
      • [2.3 用户态 vs 内核态](#2.3 用户态 vs 内核态 "#23-%E7%94%A8%E6%88%B7%E6%80%81-vs-%E5%86%85%E6%A0%B8%E6%80%81")
    • [3. 图解:进程与线程](#3. 图解:进程与线程 "#3-%E5%9B%BE%E8%A7%A3%E8%BF%9B%E7%A8%8B%E4%B8%8E%E7%BA%BF%E7%A8%8B")

    • [4. 实验步骤](#4. 实验步骤 "#4-%E5%AE%9E%E9%AA%8C%E6%AD%A5%E9%AA%A4")

      • [4.1 查看进程信息](#4.1 查看进程信息 "#41-%E6%9F%A5%E7%9C%8B%E8%BF%9B%E7%A8%8B%E4%BF%A1%E6%81%AF")
      • [4.2 查看进程树](#4.2 查看进程树 "#42-%E6%9F%A5%E7%9C%8B%E8%BF%9B%E7%A8%8B%E6%A0%91")
      • [4.3 查看 task_struct 信息(可选)](#4.3 查看 task_struct 信息(可选) "#43-%E6%9F%A5%E7%9C%8B-task_struct-%E4%BF%A1%E6%81%AF%E5%8F%AF%E9%80%89")
    • [5. 输出解析](#5. 输出解析 "#5-%E8%BE%93%E5%87%BA%E8%A7%A3%E6%9E%90")

    • [6. 思考题](#6. 思考题 "#6-%E6%80%9D%E8%80%83%E9%A2%98")

    • [7. Day 1 总结](#7. Day 1 总结 "#7-day-1-%E6%80%BB%E7%BB%93")

  • [Linux Process Scheduling 学习手册 - Day 2](#Linux Process Scheduling 学习手册 - Day 2 "#linux-process-scheduling-%E5%AD%A6%E4%B9%A0%E6%89%8B%E5%86%8C-day-2")

    • 主题:调度器概念

    • [1. 学习目标](#1. 学习目标 "#1-%E5%AD%A6%E4%B9%A0%E7%9B%AE%E6%A0%87-2")

    • [2. 理论讲解](#2. 理论讲解 "#2-%E7%90%86%E8%AE%BA%E8%AE%B2%E8%A7%A3-2")

      • [2.1 调度器作用](#2.1 调度器作用 "#21-%E8%B0%83%E5%BA%A6%E5%99%A8%E4%BD%9C%E7%94%A8")
      • [2.2 调度决策](#2.2 调度决策 "#22-%E8%B0%83%E5%BA%A6%E5%86%B3%E7%AD%96")
      • [2.3 时间片(Timeslice)](#2.3 时间片(Timeslice) "#23-%E6%97%B6%E9%97%B4%E7%89%87timeslice")
      • [2.4 进程状态](#2.4 进程状态 "#24-%E8%BF%9B%E7%A8%8B%E7%8A%B6%E6%80%81")
    • [3. 图解:调度流程](#3. 图解:调度流程 "#3-%E5%9B%BE%E8%A7%A3%E8%B0%83%E5%BA%A6%E6%B5%81%E7%A8%8B")

    • [4. 实验步骤](#4. 实验步骤 "#4-%E5%AE%9E%E9%AA%8C%E6%AD%A5%E9%AA%A4-2")

      • [4.1 查看系统调度信息](#4.1 查看系统调度信息 "#41-%E6%9F%A5%E7%9C%8B%E7%B3%BB%E7%BB%9F%E8%B0%83%E5%BA%A6%E4%BF%A1%E6%81%AF")
      • [4.2 使用 top/htop 观察](#4.2 使用 top/htop 观察 "#42-%E4%BD%BF%E7%94%A8-tophtop-%E8%A7%82%E5%AF%9F")
      • [4.3 模拟 CPU 负载](#4.3 模拟 CPU 负载 "#43-%E6%A8%A1%E6%8B%9F-cpu-%E8%B4%9F%E8%BD%BD")
      • [4.4 清理实验](#4.4 清理实验 "#44-%E6%B8%85%E7%90%86%E5%AE%9E%E9%AA%8C")
    • [5. 输出解析](#5. 输出解析 "#5-%E8%BE%93%E5%87%BA%E8%A7%A3%E6%9E%90-2")

    • [6. 思考题](#6. 思考题 "#6-%E6%80%9D%E8%80%83%E9%A2%98-2")

    • [7. Day 2 总结](#7. Day 2 总结 "#7-day-2-%E6%80%BB%E7%BB%93")

  • [Linux Process Scheduling 学习手册 - Day 3](#Linux Process Scheduling 学习手册 - Day 3 "#linux-process-scheduling-%E5%AD%A6%E4%B9%A0%E6%89%8B%E5%86%8C-day-3")

    • [主题:CFS (Completely Fair Scheduler)](#主题:CFS (Completely Fair Scheduler) "#%E4%B8%BB%E9%A2%98cfs-completely-fair-scheduler")

    • [1. 学习目标](#1. 学习目标 "#1-%E5%AD%A6%E4%B9%A0%E7%9B%AE%E6%A0%87-3")

    • [2. 理论讲解](#2. 理论讲解 "#2-%E7%90%86%E8%AE%BA%E8%AE%B2%E8%A7%A3-3")

      • [2.1 CFS 调度器概述](#2.1 CFS 调度器概述 "#21-cfs-%E8%B0%83%E5%BA%A6%E5%99%A8%E6%A6%82%E8%BF%B0")
      • [2.2 vruntime](#2.2 vruntime "#22-vruntime")
      • [2.3 CFS 红黑树](#2.3 CFS 红黑树 "#23-cfs-%E7%BA%A2%E9%BB%91%E6%A0%91")
      • [2.4 调度周期](#2.4 调度周期 "#24-%E8%B0%83%E5%BA%A6%E5%91%A8%E6%9C%9F")
    • [3. 图解:CFS 调度流程](#3. 图解:CFS 调度流程 "#3-%E5%9B%BE%E8%A7%A3cfs-%E8%B0%83%E5%BA%A6%E6%B5%81%E7%A8%8B")

    • [4. 实验步骤](#4. 实验步骤 "#4-%E5%AE%9E%E9%AA%8C%E6%AD%A5%E9%AA%A4-3")

      • [4.1 查看调度策略](#4.1 查看调度策略 "#41-%E6%9F%A5%E7%9C%8B%E8%B0%83%E5%BA%A6%E7%AD%96%E7%95%A5")

      • [4.2 修改进程调度策略](#4.2 修改进程调度策略 "#42-%E4%BF%AE%E6%94%B9%E8%BF%9B%E7%A8%8B%E8%B0%83%E5%BA%A6%E7%AD%96%E7%95%A5")

        • [4.2.1 CFS 默认调度](#4.2.1 CFS 默认调度 "#421-cfs-%E9%BB%98%E8%AE%A4%E8%B0%83%E5%BA%A6")
        • [4.2.2 修改 nice 值](#4.2.2 修改 nice 值 "#422-%E4%BF%AE%E6%94%B9-nice-%E5%80%BC")
      • [4.3 创建 CPU 占用进程](#4.3 创建 CPU 占用进程 "#43-%E5%88%9B%E5%BB%BA-cpu-%E5%8D%A0%E7%94%A8%E8%BF%9B%E7%A8%8B")

      • [4.4 查看 vruntime(可选内核调试)](#4.4 查看 vruntime(可选内核调试) "#44-%E6%9F%A5%E7%9C%8B-vruntime%E5%8F%AF%E9%80%89%E5%86%85%E6%A0%B8%E8%B0%83%E8%AF%95")

    • [5. 输出解析](#5. 输出解析 "#5-%E8%BE%93%E5%87%BA%E8%A7%A3%E6%9E%90-3")

    • [6. 思考题](#6. 思考题 "#6-%E6%80%9D%E8%80%83%E9%A2%98-3")

    • [7. Day 3 总结](#7. Day 3 总结 "#7-day-3-%E6%80%BB%E7%BB%93")

  • [Linux Process Scheduling 学习手册 - Day 4](#Linux Process Scheduling 学习手册 - Day 4 "#linux-process-scheduling-%E5%AD%A6%E4%B9%A0%E6%89%8B%E5%86%8C-day-4")

    • 主题:实时调度策略

    • [1. 学习目标](#1. 学习目标 "#1-%E5%AD%A6%E4%B9%A0%E7%9B%AE%E6%A0%87-4")

    • [2. 理论讲解](#2. 理论讲解 "#2-%E7%90%86%E8%AE%BA%E8%AE%B2%E8%A7%A3-4")

      • [2.1 Linux 实时调度概览](#2.1 Linux 实时调度概览 "#21-linux-%E5%AE%9E%E6%97%B6%E8%B0%83%E5%BA%A6%E6%A6%82%E8%A7%88")
      • [2.2 SCHED_FIFO 特性](#2.2 SCHED_FIFO 特性 "#22-sched_fifo-%E7%89%B9%E6%80%A7")
      • [2.3 SCHED_RR 特性](#2.3 SCHED_RR 特性 "#23-sched_rr-%E7%89%B9%E6%80%A7")
      • [2.4 SCHED_DEADLINE 特性](#2.4 SCHED_DEADLINE 特性 "#24-sched_deadline-%E7%89%B9%E6%80%A7")
    • [3. 图解:实时调度示意](#3. 图解:实时调度示意 "#3-%E5%9B%BE%E8%A7%A3%E5%AE%9E%E6%97%B6%E8%B0%83%E5%BA%A6%E7%A4%BA%E6%84%8F")

    • [4. 实验步骤](#4. 实验步骤 "#4-%E5%AE%9E%E9%AA%8C%E6%AD%A5%E9%AA%A4-4")

      • [4.1 查看当前调度策略](#4.1 查看当前调度策略 "#41-%E6%9F%A5%E7%9C%8B%E5%BD%93%E5%89%8D%E8%B0%83%E5%BA%A6%E7%AD%96%E7%95%A5")

      • [4.2 设置实时任务](#4.2 设置实时任务 "#42-%E8%AE%BE%E7%BD%AE%E5%AE%9E%E6%97%B6%E4%BB%BB%E5%8A%A1")

        • [4.2.1 SCHED_FIFO](#4.2.1 SCHED_FIFO "#421-sched_fifo")
        • [4.2.2 SCHED_RR](#4.2.2 SCHED_RR "#422-sched_rr")
        • [4.2.3 查看修改结果](#4.2.3 查看修改结果 "#423-%E6%9F%A5%E7%9C%8B%E4%BF%AE%E6%94%B9%E7%BB%93%E6%9E%9C")
      • [4.3 创建 CPU 占用任务](#4.3 创建 CPU 占用任务 "#43-%E5%88%9B%E5%BB%BA-cpu-%E5%8D%A0%E7%94%A8%E4%BB%BB%E5%8A%A1")

      • [4.4 使用 SCHED_DEADLINE(可选,高版本内核)](#4.4 使用 SCHED_DEADLINE(可选,高版本内核) "#44-%E4%BD%BF%E7%94%A8-sched_deadline%E5%8F%AF%E9%80%89%E9%AB%98%E7%89%88%E6%9C%AC%E5%86%85%E6%A0%B8")

    • [5. 输出解析](#5. 输出解析 "#5-%E8%BE%93%E5%87%BA%E8%A7%A3%E6%9E%90-4")

    • [6. 思考题](#6. 思考题 "#6-%E6%80%9D%E8%80%83%E9%A2%98-4")

    • [7. Day 4 总结](#7. Day 4 总结 "#7-day-4-%E6%80%BB%E7%BB%93")

  • [Linux Process Scheduling 学习手册 - Day 5](#Linux Process Scheduling 学习手册 - Day 5 "#linux-process-scheduling-%E5%AD%A6%E4%B9%A0%E6%89%8B%E5%86%8C-day-5")

    • 主题:时间片与优先级

    • [1. 学习目标](#1. 学习目标 "#1-%E5%AD%A6%E4%B9%A0%E7%9B%AE%E6%A0%87-5")

    • [2. 理论讲解](#2. 理论讲解 "#2-%E7%90%86%E8%AE%BA%E8%AE%B2%E8%A7%A3-5")

      • [2.1 静态优先级与动态优先级](#2.1 静态优先级与动态优先级 "#21-%E9%9D%99%E6%80%81%E4%BC%98%E5%85%88%E7%BA%A7%E4%B8%8E%E5%8A%A8%E6%80%81%E4%BC%98%E5%85%88%E7%BA%A7")
      • [2.2 nice 值与权重](#2.2 nice 值与权重 "#22-nice-%E5%80%BC%E4%B8%8E%E6%9D%83%E9%87%8D")
      • [2.3 时间片计算(CFS)](#2.3 时间片计算(CFS) "#23-%E6%97%B6%E9%97%B4%E7%89%87%E8%AE%A1%E7%AE%97cfs")
    • [3. 图解:nice 值对 CPU 分配的影响](#3. 图解:nice 值对 CPU 分配的影响 "#3-%E5%9B%BE%E8%A7%A3nice-%E5%80%BC%E5%AF%B9-cpu-%E5%88%86%E9%85%8D%E7%9A%84%E5%BD%B1%E5%93%8D")

    • [4. 实验步骤](#4. 实验步骤 "#4-%E5%AE%9E%E9%AA%8C%E6%AD%A5%E9%AA%A4-5")

      • [4.1 查看进程优先级](#4.1 查看进程优先级 "#41-%E6%9F%A5%E7%9C%8B%E8%BF%9B%E7%A8%8B%E4%BC%98%E5%85%88%E7%BA%A7")
      • [4.2 调整 nice 值](#4.2 调整 nice 值 "#42-%E8%B0%83%E6%95%B4-nice-%E5%80%BC")
      • [4.3 创建多进程 CPU 占用实验](#4.3 创建多进程 CPU 占用实验 "#43-%E5%88%9B%E5%BB%BA%E5%A4%9A%E8%BF%9B%E7%A8%8B-cpu-%E5%8D%A0%E7%94%A8%E5%AE%9E%E9%AA%8C")
      • [4.4 分配不同 nice 值观察](#4.4 分配不同 nice 值观察 "#44-%E5%88%86%E9%85%8D%E4%B8%8D%E5%90%8C-nice-%E5%80%BC%E8%A7%82%E5%AF%9F")
      • [4.5 使用 top 观察调度情况](#4.5 使用 top 观察调度情况 "#45-%E4%BD%BF%E7%94%A8-top-%E8%A7%82%E5%AF%9F%E8%B0%83%E5%BA%A6%E6%83%85%E5%86%B5")
      • [4.6 清理实验](#4.6 清理实验 "#46-%E6%B8%85%E7%90%86%E5%AE%9E%E9%AA%8C")
    • [5. 输出解析](#5. 输出解析 "#5-%E8%BE%93%E5%87%BA%E8%A7%A3%E6%9E%90-5")

    • [6. 思考题](#6. 思考题 "#6-%E6%80%9D%E8%80%83%E9%A2%98-5")

    • [7. Day 5 总结](#7. Day 5 总结 "#7-day-5-%E6%80%BB%E7%BB%93")

  • [Linux Process Scheduling 学习手册 - Day 6](#Linux Process Scheduling 学习手册 - Day 6 "#linux-process-scheduling-%E5%AD%A6%E4%B9%A0%E6%89%8B%E5%86%8C-day-6")

    • 主题:调度统计工具

    • [1. 学习目标](#1. 学习目标 "#1-%E5%AD%A6%E4%B9%A0%E7%9B%AE%E6%A0%87-6")

    • [2. 理论讲解](#2. 理论讲解 "#2-%E7%90%86%E8%AE%BA%E8%AE%B2%E8%A7%A3-6")

      • [2.1 常用工具概览](#2.1 常用工具概览 "#21-%E5%B8%B8%E7%94%A8%E5%B7%A5%E5%85%B7%E6%A6%82%E8%A7%88")
      • [2.2 调度指标解释](#2.2 调度指标解释 "#22-%E8%B0%83%E5%BA%A6%E6%8C%87%E6%A0%87%E8%A7%A3%E9%87%8A")
    • [3. 图解:调度统计观察](#3. 图解:调度统计观察 "#3-%E5%9B%BE%E8%A7%A3%E8%B0%83%E5%BA%A6%E7%BB%9F%E8%AE%A1%E8%A7%82%E5%AF%9F")

    • [4. 实验步骤](#4. 实验步骤 "#4-%E5%AE%9E%E9%AA%8C%E6%AD%A5%E9%AA%A4-6")

      • [4.1 top / htop](#4.1 top / htop "#41-top-htop")
      • [4.2 ps 静态快照](#4.2 ps 静态快照 "#42-ps-%E9%9D%99%E6%80%81%E5%BF%AB%E7%85%A7")
      • [4.3 vmstat / sar](#4.3 vmstat / sar "#43-vmstat-sar")
      • [4.4 perf sched](#4.4 perf sched "#44-perf-sched")
      • [4.5 ftrace sched_switch](#4.5 ftrace sched_switch "#45-ftrace-sched_switch")
    • [5. 输出解析](#5. 输出解析 "#5-%E8%BE%93%E5%87%BA%E8%A7%A3%E6%9E%90-6")

    • [6. 思考题](#6. 思考题 "#6-%E6%80%9D%E8%80%83%E9%A2%98-6")

    • [7. Day 6 总结](#7. Day 6 总结 "#7-day-6-%E6%80%BB%E7%BB%93")

  • [Linux Process Scheduling 学习手册 - Day 7](#Linux Process Scheduling 学习手册 - Day 7 "#linux-process-scheduling-%E5%AD%A6%E4%B9%A0%E6%89%8B%E5%86%8C-day-7")

    • [主题:ftrace 调度追踪](#主题:ftrace 调度追踪 "#%E4%B8%BB%E9%A2%98ftrace-%E8%B0%83%E5%BA%A6%E8%BF%BD%E8%B8%AA")

    • [1. 学习目标](#1. 学习目标 "#1-%E5%AD%A6%E4%B9%A0%E7%9B%AE%E6%A0%87-7")

    • [2. 理论讲解](#2. 理论讲解 "#2-%E7%90%86%E8%AE%BA%E8%AE%B2%E8%A7%A3-7")

      • [2.1 ftrace 概述](#2.1 ftrace 概述 "#21-ftrace-%E6%A6%82%E8%BF%B0")
      • [2.2 调度相关事件](#2.2 调度相关事件 "#22-%E8%B0%83%E5%BA%A6%E7%9B%B8%E5%85%B3%E4%BA%8B%E4%BB%B6")
      • [2.3 调度分析意义](#2.3 调度分析意义 "#23-%E8%B0%83%E5%BA%A6%E5%88%86%E6%9E%90%E6%84%8F%E4%B9%89")
    • [3. 图解:ftrace 调度追踪](#3. 图解:ftrace 调度追踪 "#3-%E5%9B%BE%E8%A7%A3ftrace-%E8%B0%83%E5%BA%A6%E8%BF%BD%E8%B8%AA")

    • [4. 实验步骤](#4. 实验步骤 "#4-%E5%AE%9E%E9%AA%8C%E6%AD%A5%E9%AA%A4-7")

      • [4.1 打开 ftrace](#4.1 打开 ftrace "#41-%E6%89%93%E5%BC%80-ftrace")
      • [4.2 设置追踪事件](#4.2 设置追踪事件 "#42-%E8%AE%BE%E7%BD%AE%E8%BF%BD%E8%B8%AA%E4%BA%8B%E4%BB%B6")
      • [4.3 创建 CPU 占用任务](#4.3 创建 CPU 占用任务 "#43-%E5%88%9B%E5%BB%BA-cpu-%E5%8D%A0%E7%94%A8%E4%BB%BB%E5%8A%A1-2")
      • [4.4 查看 trace](#4.4 查看 trace "#44-%E6%9F%A5%E7%9C%8B-trace")
      • [4.5 关闭 trace](#4.5 关闭 trace "#45-%E5%85%B3%E9%97%AD-trace")
      • [4.6 分析 trace](#4.6 分析 trace "#46-%E5%88%86%E6%9E%90-trace")
    • [5. 输出解析](#5. 输出解析 "#5-%E8%BE%93%E5%87%BA%E8%A7%A3%E6%9E%90-7")

    • [6. 思考题](#6. 思考题 "#6-%E6%80%9D%E8%80%83%E9%A2%98-7")

    • [7. Day 7 总结](#7. Day 7 总结 "#7-day-7-%E6%80%BB%E7%BB%93")

  • [Linux Process Scheduling 学习手册 - Day 8](#Linux Process Scheduling 学习手册 - Day 8 "#linux-process-scheduling-%E5%AD%A6%E4%B9%A0%E6%89%8B%E5%86%8C-day-8")

    • 主题:多核调度与负载均衡

    • [1. 学习目标](#1. 学习目标 "#1-%E5%AD%A6%E4%B9%A0%E7%9B%AE%E6%A0%87-8")

    • [2. 理论讲解](#2. 理论讲解 "#2-%E7%90%86%E8%AE%BA%E8%AE%B2%E8%A7%A3-8")

      • [2.1 多核调度概览](#2.1 多核调度概览 "#21-%E5%A4%9A%E6%A0%B8%E8%B0%83%E5%BA%A6%E6%A6%82%E8%A7%88")
      • [2.2 CPU local vs global](#2.2 CPU local vs global "#22-cpu-local-vs-global")
      • [2.3 多核调度挑战](#2.3 多核调度挑战 "#23-%E5%A4%9A%E6%A0%B8%E8%B0%83%E5%BA%A6%E6%8C%91%E6%88%98")
    • [3. 图解:多核调度与负载均衡](#3. 图解:多核调度与负载均衡 "#3-%E5%9B%BE%E8%A7%A3%E5%A4%9A%E6%A0%B8%E8%B0%83%E5%BA%A6%E4%B8%8E%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1")

    • [4. 实验步骤](#4. 实验步骤 "#4-%E5%AE%9E%E9%AA%8C%E6%AD%A5%E9%AA%A4-8")

      • [4.1 查看每个 CPU runqueue](#4.1 查看每个 CPU runqueue "#41-%E6%9F%A5%E7%9C%8B%E6%AF%8F%E4%B8%AA-cpu-runqueue")
      • [4.2 创建多核 CPU 占用任务](#4.2 创建多核 CPU 占用任务 "#42-%E5%88%9B%E5%BB%BA%E5%A4%9A%E6%A0%B8-cpu-%E5%8D%A0%E7%94%A8%E4%BB%BB%E5%8A%A1")
      • [4.3 使用 top / htop 观察多核负载](#4.3 使用 top / htop 观察多核负载 "#43-%E4%BD%BF%E7%94%A8-top-htop-%E8%A7%82%E5%AF%9F%E5%A4%9A%E6%A0%B8%E8%B4%9F%E8%BD%BD")
      • [4.4 使用 perf sched 或 ftrace 观察任务迁移](#4.4 使用 perf sched 或 ftrace 观察任务迁移 "#44-%E4%BD%BF%E7%94%A8-perf-sched-%E6%88%96-ftrace-%E8%A7%82%E5%AF%9F%E4%BB%BB%E5%8A%A1%E8%BF%81%E7%A7%BB")
      • [4.5 优化观察](#4.5 优化观察 "#45-%E4%BC%98%E5%8C%96%E8%A7%82%E5%AF%9F")
      • [4.6 清理实验](#4.6 清理实验 "#46-%E6%B8%85%E7%90%86%E5%AE%9E%E9%AA%8C-2")
    • [5. 输出解析](#5. 输出解析 "#5-%E8%BE%93%E5%87%BA%E8%A7%A3%E6%9E%90-8")

    • [6. 思考题](#6. 思考题 "#6-%E6%80%9D%E8%80%83%E9%A2%98-8")

    • [7. Day 8 总结](#7. Day 8 总结 "#7-day-8-%E6%80%BB%E7%BB%93")

  • [Linux Process Scheduling 学习手册 - Day 9](#Linux Process Scheduling 学习手册 - Day 9 "#linux-process-scheduling-%E5%AD%A6%E4%B9%A0%E6%89%8B%E5%86%8C-day-9")

    • 主题:调度性能调优与案例分析

    • [1. 学习目标](#1. 学习目标 "#1-%E5%AD%A6%E4%B9%A0%E7%9B%AE%E6%A0%87-9")

    • [2. 理论讲解](#2. 理论讲解 "#2-%E7%90%86%E8%AE%BA%E8%AE%B2%E8%A7%A3-9")

      • [2.1 性能瓶颈来源](#2.1 性能瓶颈来源 "#21-%E6%80%A7%E8%83%BD%E7%93%B6%E9%A2%88%E6%9D%A5%E6%BA%90")
      • [2.2 调度优化策略](#2.2 调度优化策略 "#22-%E8%B0%83%E5%BA%A6%E4%BC%98%E5%8C%96%E7%AD%96%E7%95%A5")
      • [2.3 结合工具分析](#2.3 结合工具分析 "#23-%E7%BB%93%E5%90%88%E5%B7%A5%E5%85%B7%E5%88%86%E6%9E%90")
    • [3. 图解:调度优化流程](#3. 图解:调度优化流程 "#3-%E5%9B%BE%E8%A7%A3%E8%B0%83%E5%BA%A6%E4%BC%98%E5%8C%96%E6%B5%81%E7%A8%8B")

    • [4. 实验步骤](#4. 实验步骤 "#4-%E5%AE%9E%E9%AA%8C%E6%AD%A5%E9%AA%A4-9")

      • [4.1 创建高 CPU 占用任务](#4.1 创建高 CPU 占用任务 "#41-%E5%88%9B%E5%BB%BA%E9%AB%98-cpu-%E5%8D%A0%E7%94%A8%E4%BB%BB%E5%8A%A1")
      • [4.2 观察基线](#4.2 观察基线 "#42-%E8%A7%82%E5%AF%9F%E5%9F%BA%E7%BA%BF")
      • [4.3 调整 nice 值](#4.3 调整 nice 值 "#43-%E8%B0%83%E6%95%B4-nice-%E5%80%BC")
      • [4.4 CPU 绑定实验](#4.4 CPU 绑定实验 "#44-cpu-%E7%BB%91%E5%AE%9A%E5%AE%9E%E9%AA%8C")
      • [4.5 实时任务优先级](#4.5 实时任务优先级 "#45-%E5%AE%9E%E6%97%B6%E4%BB%BB%E5%8A%A1%E4%BC%98%E5%85%88%E7%BA%A7")
      • [4.6 分析 perf / ftrace 输出](#4.6 分析 perf / ftrace 输出 "#46-%E5%88%86%E6%9E%90-perf-ftrace-%E8%BE%93%E5%87%BA")
      • [4.7 清理实验](#4.7 清理实验 "#47-%E6%B8%85%E7%90%86%E5%AE%9E%E9%AA%8C")
    • [5. 输出解析](#5. 输出解析 "#5-%E8%BE%93%E5%87%BA%E8%A7%A3%E6%9E%90-9")

    • [6. 思考题](#6. 思考题 "#6-%E6%80%9D%E8%80%83%E9%A2%98-9")

    • [7. Day 9 总结](#7. Day 9 总结 "#7-day-9-%E6%80%BB%E7%BB%93")

  • [Linux Process Scheduling 学习手册 - Day 10](#Linux Process Scheduling 学习手册 - Day 10 "#linux-process-scheduling-%E5%AD%A6%E4%B9%A0%E6%89%8B%E5%86%8C-day-10")

    • 主题:调度综合实验与案例分析

    • [1. 学习目标](#1. 学习目标 "#1-%E5%AD%A6%E4%B9%A0%E7%9B%AE%E6%A0%87-10")

    • [2. 理论回顾](#2. 理论回顾 "#2-%E7%90%86%E8%AE%BA%E5%9B%9E%E9%A1%BE")

    • [3. 图解:综合实验示意](#3. 图解:综合实验示意 "#3-%E5%9B%BE%E8%A7%A3%E7%BB%BC%E5%90%88%E5%AE%9E%E9%AA%8C%E7%A4%BA%E6%84%8F")

    • [4. 实验步骤](#4. 实验步骤 "#4-%E5%AE%9E%E9%AA%8C%E6%AD%A5%E9%AA%A4-10")

      • [4.1 创建实验任务](#4.1 创建实验任务 "#41-%E5%88%9B%E5%BB%BA%E5%AE%9E%E9%AA%8C%E4%BB%BB%E5%8A%A1")
      • [4.2 分配不同调度策略和优先级](#4.2 分配不同调度策略和优先级 "#42-%E5%88%86%E9%85%8D%E4%B8%8D%E5%90%8C%E8%B0%83%E5%BA%A6%E7%AD%96%E7%95%A5%E5%92%8C%E4%BC%98%E5%85%88%E7%BA%A7")
      • [4.3 CPU 绑定实验](#4.3 CPU 绑定实验 "#43-cpu-%E7%BB%91%E5%AE%9A%E5%AE%9E%E9%AA%8C")
      • [4.4 启动调度追踪](#4.4 启动调度追踪 "#44-%E5%90%AF%E5%8A%A8%E8%B0%83%E5%BA%A6%E8%BF%BD%E8%B8%AA")
      • [4.5 运行实验并收集数据](#4.5 运行实验并收集数据 "#45-%E8%BF%90%E8%A1%8C%E5%AE%9E%E9%AA%8C%E5%B9%B6%E6%94%B6%E9%9B%86%E6%95%B0%E6%8D%AE")
      • [4.6 分析结果](#4.6 分析结果 "#46-%E5%88%86%E6%9E%90%E7%BB%93%E6%9E%9C")
      • [4.7 优化策略](#4.7 优化策略 "#47-%E4%BC%98%E5%8C%96%E7%AD%96%E7%95%A5")
      • [4.8 再次观察](#4.8 再次观察 "#48-%E5%86%8D%E6%AC%A1%E8%A7%82%E5%AF%9F")
      • [4.9 清理实验](#4.9 清理实验 "#49-%E6%B8%85%E7%90%86%E5%AE%9E%E9%AA%8C")
    • [5. 输出解析](#5. 输出解析 "#5-%E8%BE%93%E5%87%BA%E8%A7%A3%E6%9E%90-10")

    • [6. 思考题](#6. 思考题 "#6-%E6%80%9D%E8%80%83%E9%A2%98-10")

    • [7. Day 10 总结](#7. Day 10 总结 "#7-day-10-%E6%80%BB%E7%BB%93")

📅 学习计划(约 10 天)

Day 1 -- Linux 进程模型概述

目标:理解进程、线程和任务结构

  • 理论:

    • task_struct 结构体
    • PID, TGID, thread group
    • 用户态 vs 内核态
  • 实验:

    • ps -efT 查看线程信息
    • pstree -p 查看进程树
  • 思考题:

    • Linux 线程和进程的区别?
    • 线程共享哪些资源?

Day 2 -- 调度器概念

目标:理解调度器基本概念

  • 理论:

    • 调度目标:公平性、响应性、吞吐量
    • 调度决策:选择哪个进程运行
    • 时间片、优先级
  • 图解:

    • Run Queue、Task States (RUNNABLE, RUNNING, SLEEPING, etc.)
  • 思考题:

    • 什么是可抢占性?
    • Linux 如何保证实时进程优先?

Day 3 -- CFS (Completely Fair Scheduler)

目标:掌握 Linux 默认调度器

  • 理论:

    • 虚拟运行时间 (vruntime)
    • 红黑树 (RB tree) 管理可运行任务
    • 时间片计算
  • 实验:

    • chrt -p 查看/修改调度策略
    • 使用 schedtool 观察调度行为
  • 思考题:

    • CFS 如何实现"公平"?
    • vruntime 如何影响任务调度顺序?

Day 4 -- 实时调度策略

目标:理解 SCHED_FIFO、SCHED_RR、SCHED_DEADLINE

  • 理论:

    • FIFO:先到先服务
    • RR:循环分配时间片
    • DEADLINE:保证截止时间
  • 实验:

    • chrt -f -p <pid> 设置 FIFO
    • chrt -r -p <pid> 设置 RR
  • 思考题:

    • 实时策略的优先级规则是什么?
    • 若实时任务长时间占用 CPU,普通任务会怎样?

Day 5 -- 时间片与优先级

目标:理解静态优先级 vs 动态优先级

  • 理论:

    • nice 值与调度优先级
    • CFS 对 nice 的处理
    • 实时任务优先级范围
  • 实验:

    • 使用 nice 调整普通任务优先级
    • 使用 top 观察调度变化
  • 思考题:

    • nice 值为 -20 的进程和 +19 的进程谁更先运行?为什么?

Day 6 -- 调度统计工具

目标:掌握观察调度行为的工具

  • 工具:

    • top / htop
    • ps -eo pid,comm,ni,pri,rtprio,stat
    • vmstat / sar -q
    • perf sched 分析调度事件
  • 实验:

    • 监控高 CPU 负载下的进程调度
    • 使用 perf sched record + perf sched latency
  • 思考题:

    • 如何判断 CPU 负载是由哪个进程主导的?

Day 7 -- ftrace 调度追踪

目标:内核层面跟踪调度事件

  • 理论:

    • sched_switch, sched_wakeup tracepoints
    • ftrace buffer 及过滤方法
  • 实验:

    • 打开 ftrace sched_switch trace
    • cat /sys/kernel/debug/tracing/trace 查看输出
  • 思考题:

    • 调度切换延迟高的原因可能有哪些?

Day 8 -- 多核调度

目标:理解 SMP 系统上的调度

  • 理论:

    • Per-CPU runqueue
    • load balancing
    • CPU affinity (taskset)
  • 实验:

    • taskset -c <cpu> 绑定进程到特定 CPU
    • htop 观察 CPU 使用情况
  • 思考题:

    • 绑定 CPU 对多线程程序性能的影响?
    • load balancing 如何决定任务迁移?

Day 9 -- 调度调优

目标:学习调度参数调整

  • 理论:

    • CFS tunables (sched_latency_ns, sched_min_granularity_ns)
    • 实时调度优先级调整
  • 实验:

    • 修改 /proc/sys/kernel/sched_* 参数
    • 观察高负载进程调度变化
  • 思考题:

    • 调度参数如何影响响应时间和吞吐量?

Day 10 -- 综合案例

目标:分析真实调度瓶颈

  • 实验:

    • 制造 CPU 饱和负载
    • 使用 ftrace + perf 观察调度切换
    • 调整优先级或绑定 CPU,观察改进
  • 思考题:

    • 如何定位调度瓶颈?
    • 哪些场景需要修改调度策略?

✅ 学习成果

  • 理解 Linux 进程调度原理
  • 熟悉 CFS 与实时调度策略
  • 掌握调度优先级、时间片和负载均衡
  • 会使用内核 trace、perf、top 等工具分析调度瓶颈

Linux Process Scheduling 学习手册 - Day 1

主题:Linux 进程模型概述


1. 学习目标

  • 理解 Linux 进程和线程结构
  • 掌握 task_struct 基本字段
  • 能查看进程与线程信息
  • 理解用户态与内核态的区别

2. 理论讲解

2.1 进程 vs 线程

特性 进程 线程
独立地址空间 ✖(共享)
文件描述符 共享
PID TID/线程号
调度 由调度器独立管理 线程作为任务调度单元

2.2 task_struct

  • 内核表示进程的数据结构

  • 关键字段:

    • pid → 进程号
    • tgid → 线程组 ID
    • state → 当前状态(TASK_RUNNING, TASK_INTERRUPTIBLE, TASK_UNINTERRUPTIBLE)
    • prio / static_prio / rt_priority → 优先级
    • sched_class → 调度策略类别

2.3 用户态 vs 内核态

  • 用户态:执行应用程序指令,受限访问硬件
  • 内核态:执行系统调用,直接访问硬件
  • 调度器在内核态控制进程切换

3. 图解:进程与线程

sql 复制代码
+--------------------+
|      进程 A        |
|--------------------|
| PID: 1000          |
| tgid: 1000         |
| state: RUNNING     |
+---------+----------+
          |
          +--> 线程 1 (TID: 1000)
          +--> 线程 2 (TID: 1001)
          +--> 线程 3 (TID: 1002)

4. 实验步骤

4.1 查看进程信息

bash 复制代码
ps -efT | head -n 20
  • -T 显示线程
  • 输出示例:
objectivec 复制代码
UID        PID  PPID  LWP  C STIME TTY          TIME CMD
root         1     0    1  0 08:00 ?        00:00:02 systemd
root         1     0    2  0 08:00 ?        00:00:00 kthreadd

4.2 查看进程树

bash 复制代码
pstree -p | head -n 20
  • -p 显示 PID
  • 可以观察线程与子进程关系

4.3 查看 task_struct 信息(可选)

bash 复制代码
sudo cat /proc/<pid>/status
  • 查看状态、优先级等字段

5. 输出解析

  • LWP → 线程 ID

  • PID → 进程号

  • STAT → 进程状态:

    • R: 运行中
    • S: 可中断睡眠
    • D: 不可中断睡眠
    • Z: 僵尸进程
  • TIME → 累计 CPU 时间


6. 思考题

  1. 进程和线程共享哪些资源?
  2. 如果一个线程阻塞,其他线程会受到影响吗?为什么?
  3. 用户态和内核态切换会产生开销吗?

7. Day 1 总结

  • 熟悉 Linux 进程和线程的基本概念
  • 掌握 pspstree 等工具查看进程信息
  • 理解用户态/内核态的区别,为调度学习打基础

Linux Process Scheduling 学习手册 - Day 2

主题:调度器概念


1. 学习目标

  • 理解 Linux 调度器的作用和基本概念
  • 掌握调度决策、时间片和优先级的基本原理
  • 能观察进程在运行队列中的状态
  • 理解调度策略对系统性能的影响

2. 理论讲解

2.1 调度器作用

  • Linux 调度器负责:

    • 决定哪个可运行进程获得 CPU
    • 分配 CPU 时间片
    • 保证公平性、吞吐量和响应性
  • 调度器主要目标:

    1. 公平性(Fairness) → 各进程公平获得 CPU
    2. 响应性(Responsiveness) → 用户交互任务优先
    3. 吞吐量(Throughput) → 最大化系统总体工作量

2.2 调度决策

  • 可运行任务(RUNNABLE)进入 Run Queue
  • 调度器根据策略和优先级选择任务执行
  • 时间片结束或任务阻塞 → 调度下一任务

2.3 时间片(Timeslice)

  • 为每个进程分配固定时间片
  • 时间片结束 → 可抢占任务切换
  • CFS 中使用 vruntime 代替固定时间片概念

2.4 进程状态

状态 描述
RUNNING 正在运行
RUNNABLE 可运行,等待 CPU
SLEEPING 阻塞等待 I/O 或事件
UNINTERRUPTIBLE 不可中断等待
ZOMBIE 已终止,等待父进程收尸

3. 图解:调度流程

lua 复制代码
       +----------------+
       | Run Queue      |
       +----------------+
        |    ^    ^    
        v    |    |   
   +--------+ +--------+
   | Process A| | Process B |
   +--------+ +--------+
        | CPU | 
        v    v
     调度器选择 → 执行
  • 可运行队列中的任务由调度器选择
  • 时间片结束或任务阻塞 → 下一个任务运行

4. 实验步骤

4.1 查看系统调度信息

bash 复制代码
cat /proc/sched_debug | head -n 20
  • 输出包含 runqueue 长度、各 CPU 调度信息

  • 示例字段:

    • nr_running → 当前可运行任务数
    • load → CPU load 指标

4.2 使用 top/htop 观察

bash 复制代码
top -d 1
  • 观察 CPU 使用率、任务状态

  • STAT 列:

    • R → 运行
    • S → 可中断睡眠
    • D → 不可中断睡眠

4.3 模拟 CPU 负载

bash 复制代码
# 前台占用 CPU
yes > /dev/null &

# 后台再起一个占用 CPU
yes > /dev/null &
  • 使用 tophtop 观察调度器如何分配 CPU

4.4 清理实验

bash 复制代码
killall yes

5. 输出解析

  • top 中 CPU% 表示进程实际使用的 CPU 时间
  • RUNNABLE 状态的进程可能在等待调度
  • nr_running > CPU 核数 → 说明有任务排队等待

6. 思考题

  1. 调度器在选择哪个进程运行时考虑哪些因素?
  2. 如果系统有 8 个核,nr_running = 16,说明什么?
  3. 时间片过长或过短会对系统响应性和吞吐量有什么影响?
  4. 如何判断某个 CPU 是否被调度器过载?

7. Day 2 总结

  • 理解 Linux 调度器的作用和目标
  • 掌握可运行队列、时间片和进程状态
  • 学会使用 tophtop/proc/sched_debug 观察调度情况
  • 为 Day 3 的 CFS 学习打下基础

Linux Process Scheduling 学习手册 - Day 3

主题:CFS (Completely Fair Scheduler)


1. 学习目标

  • 理解 Linux 默认调度器 CFS 的原理
  • 掌握虚拟运行时间(vruntime)和红黑树管理机制
  • 学会观察进程在 CFS 下的调度行为
  • 能使用命令调整和查看调度策略

2. 理论讲解

2.1 CFS 调度器概述

  • Linux 默认调度器,自 2.6.23 引入

  • 目标:保证每个任务公平获取 CPU

  • 主要思想:

    1. 每个可运行任务都有 虚拟运行时间(vruntime)
    2. 使用 红黑树 (RB tree) 管理可运行任务
    3. 选择 vruntime 最小的任务执行

2.2 vruntime

  • 虚拟运行时间 = 实际运行时间 / 权重

  • 权重由 nice 值 决定

    • nice 值越小,权重越大 → vruntime 增长慢 → 优先运行
  • 用 vruntime 来平衡任务 CPU 占用

2.3 CFS 红黑树

  • 可运行任务按 vruntime 排序存储在 RB tree
  • 左子节点 → vruntime 更小 → 下一个被调度
  • 插入、删除、选择最小 vruntime → O(log N)

2.4 调度周期

  • 每个任务在一个 调度周期(sched_latency_ns) 内获得时间片
  • 时间片 = 调度周期 × (任务权重 / 总权重)

3. 图解:CFS 调度流程

lua 复制代码
+-----------------------+
|     CFS Run Queue     |
| (红黑树按 vruntime 排序) |
+-----------------------+
           |
           v
   +----------------+
   | select min vruntime |
   +----------------+
           |
           v
     CPU 执行任务
           |
           v
   vruntime += 实际运行时间 / 权重
           |
           v
   RB tree 更新位置

4. 实验步骤

4.1 查看调度策略

bash 复制代码
ps -eo pid,comm,ni,pri,rtprio,stat | head -n 20
  • PRI → 内核优先级
  • NI → nice 值
  • RT → 实时优先级
  • STAT → 进程状态

4.2 修改进程调度策略

4.2.1 CFS 默认调度
  • 普通任务就是 CFS
bash 复制代码
chrt -p 0 <pid>   # 查看 PID 调度策略
4.2.2 修改 nice 值
bash 复制代码
# 提高优先级
sudo renice -n -10 -p <pid>
# 降低优先级
sudo renice -n 10 -p <pid>
  • nice 值越小,CPU 分配越多

4.3 创建 CPU 占用进程

bash 复制代码
# 前台 CPU 占用
yes > /dev/null &
# 后台多个进程
yes > /dev/null & yes > /dev/null &
  • 使用 top 查看每个进程的 %CPU
  • 调整 nice 值,观察 CFS 对 CPU 分配的变化

4.4 查看 vruntime(可选内核调试)

bash 复制代码
sudo cat /proc/<pid>/sched
  • 字段:

    • se.vruntime → 任务 vruntime
    • nr_running → 当前 CPU 可运行任务数

5. 输出解析

  • nice 值小 → 进程 vruntime 增长慢 → 优先运行
  • nice 值大 → vruntime 增长快 → 先被调度器推迟
  • 多进程运行时,CFS 通过 vruntime 平衡 CPU 使用

6. 思考题

  1. CFS 如何保证公平性?
  2. nice 值对 vruntime 的影响是什么?
  3. 多核 CPU 下,CFS 如何平衡不同核心的负载?
  4. 如果一个任务一直占用 CPU,其他任务的 vruntime 会发生什么变化?

7. Day 3 总结

  • 理解 CFS 调度器原理、虚拟运行时间和红黑树机制
  • 掌握 nice 值对调度的影响
  • 能创建 CPU 占用进程,观察 CFS 调度行为
  • 为 Day 4 实时调度策略学习做基础

Linux Process Scheduling 学习手册 - Day 4

主题:实时调度策略


1. 学习目标

  • 理解 Linux 实时调度策略:SCHED_FIFO、SCHED_RR、SCHED_DEADLINE
  • 掌握实时任务的优先级与 CPU 调度行为
  • 学会使用 chrtschedtool 管理实时任务
  • 能观察实时任务对普通任务的调度影响

2. 理论讲解

2.1 Linux 实时调度概览

策略 描述 特点
SCHED_FIFO 先到先服务 不可时间片轮转,任务运行直到阻塞或完成
SCHED_RR 循环分配时间片 可抢占,同优先级任务轮流执行
SCHED_DEADLINE 保证截止时间 通过 runtime, period, deadline 控制任务执行
  • 实时任务优先于 CFS 普通任务

  • 优先级范围:

    • SCHED_FIFO / SCHED_RR:1--99
    • nice 值仅影响 CFS

2.2 SCHED_FIFO 特性

  • 先到先服务(First-In-First-Out)
  • 不可时间片轮转
  • 同优先级任务先运行的先执行完

2.3 SCHED_RR 特性

  • Round-Robin 时间片轮转
  • 同优先级任务轮流执行
  • 时间片结束 → 调度器切换到下一个任务

2.4 SCHED_DEADLINE 特性

  • 任务声明 runtime / period / deadline
  • 调度器保证在 deadline 前运行完成
  • 对于硬实时系统非常重要

3. 图解:实时调度示意

ini 复制代码
Run Queue (按优先级排序)
+---------------------------+
| P1 (FIFO, pri=80)        |
| P2 (RR, pri=70)          |
| P3 (CFS)                 |
+---------------------------+

调度器执行顺序:
1. P1 -> 占用 CPU,直到阻塞或完成
2. P2 -> 轮流时间片执行
3. P3 -> 只有 CPU 空闲时才运行

4. 实验步骤

4.1 查看当前调度策略

bash 复制代码
chrt -p <pid>

输出示例:

vbnet 复制代码
pid 1234's current scheduling policy: SCHED_OTHER
pid 1234's current scheduling priority: 0

4.2 设置实时任务

4.2.1 SCHED_FIFO
bash 复制代码
# 设置 PID 1234 为 FIFO,优先级 80
sudo chrt -f -p 80 1234
4.2.2 SCHED_RR
bash 复制代码
# 设置 PID 1235 为 RR,优先级 70
sudo chrt -r -p 70 1235
4.2.3 查看修改结果
bash 复制代码
chrt -p 1234
chrt -p 1235

4.3 创建 CPU 占用任务

bash 复制代码
yes > /dev/null &
yes > /dev/null &
  • 使用 top 观察实时任务优先运行情况

4.4 使用 SCHED_DEADLINE(可选,高版本内核)

bash 复制代码
sudo chrt --deadline -p --runtime 50000 --deadline 100000 --period 100000 1236
  • runtime / period / deadline 单位为微秒
  • 查看实时 deadline 任务执行情况

5. 输出解析

  • 实时任务优先于 CFS 任务运行
  • FIFO 同优先级任务按先到先服务
  • RR 同优先级任务按时间片轮转
  • CFS 任务只有在无实时任务时才被调度

6. 思考题

  1. 如果多个 FIFO 实时任务同优先级,会发生什么?
  2. SCHED_RR 的时间片过短或过长会对系统响应性有什么影响?
  3. 什么时候使用 SCHED_DEADLINE 比 FIFO 或 RR 更合适?
  4. 实时任务过多会对普通任务产生什么影响?

7. Day 4 总结

  • 掌握 Linux 实时调度策略:FIFO、RR、DEADLINE
  • 学会使用 chrt 设置和查看实时任务
  • 理解实时任务对普通任务调度的优先影响
  • 为 Day 5(时间片与优先级)做铺垫

好的 👍 我来把 Day 5(时间片与优先级) 做成详细讲义版,保持 目标 → 图解 → 实验步骤 → 输出解析 → 思考题 的风格。


Linux Process Scheduling 学习手册 - Day 5

主题:时间片与优先级


1. 学习目标

  • 理解静态优先级与动态优先级
  • 掌握 nice 值与 CFS 调度的关系
  • 学会调整普通任务和实时任务的优先级
  • 能观察不同优先级任务在 CPU 上的调度情况

2. 理论讲解

2.1 静态优先级与动态优先级

  • 静态优先级:任务创建时确定,不随时间变化

    • 实时任务:RT priority 1--99
    • 普通 CFS 任务:默认静态优先级 120
  • 动态优先级:随 CPU 使用情况变化

    • CFS 根据 vruntime 调整任务运行顺序

2.2 nice 值与权重

  • nice 值范围:-20(最高优先)~ +19(最低优先)

  • nice 值影响 CFS 任务的权重

    • 权重越高 → CPU 时间分配越多
    • 通过 vruntime 计算时间片

2.3 时间片计算(CFS)

  • 调度周期:sched_latency_ns
  • 时间片 = 调度周期 × (任务权重 / 总权重)
  • nice 值越小 → 权重越大 → 时间片分配越多

3. 图解:nice 值对 CPU 分配的影响

ini 复制代码
调度周期: 20ms
----------------------------------
任务A (nice=-10)  | 时间片≈8ms
任务B (nice=0)    | 时间片≈6ms
任务C (nice=10)   | 时间片≈3ms
----------------------------------
CPU 总时间 = 20ms
  • 结果:优先级高的任务运行时间更多

4. 实验步骤

4.1 查看进程优先级

bash 复制代码
ps -eo pid,comm,ni,pri,rtprio,stat | head -n 20
  • NI → nice 值
  • PRI → 内核优先级
  • RT → 实时优先级

4.2 调整 nice 值

bash 复制代码
# 提高优先级(nice 值降低)
sudo renice -n -10 -p <pid>

# 降低优先级(nice 值增加)
sudo renice -n 10 -p <pid>

4.3 创建多进程 CPU 占用实验

bash 复制代码
# 启动三个 CPU 占用进程
yes > /dev/null &
yes > /dev/null &
yes > /dev/null &

4.4 分配不同 nice 值观察

bash 复制代码
sudo renice -n -10 -p <pid1>
sudo renice -n 0   -p <pid2>
sudo renice -n 10  -p <pid3>

4.5 使用 top 观察调度情况

bash 复制代码
top -d 1 -o %CPU
  • 观察 %CPU 随 nice 值变化的分配

4.6 清理实验

bash 复制代码
killall yes

5. 输出解析

  • nice 值小的任务占用 CPU 时间多
  • nice 值大任务运行被延迟
  • 多核 CPU 时,不同核上可能观察到负载均衡情况

6. 思考题

  1. nice 值为 -20 的任务和 +19 的任务,谁先运行?为什么?
  2. 调整 nice 值对实时任务有影响吗?
  3. 动态优先级如何保证交互任务响应性?
  4. 如果所有任务 nice 值相同,CFS 如何分配 CPU?

7. Day 5 总结

  • 理解静态优先级与动态优先级
  • 掌握 nice 值对 CPU 分配的影响
  • 会创建实验进程并观察不同优先级调度行为
  • 为 Day 6(调度统计工具)学习做基础

Linux Process Scheduling 学习手册 - Day 6

主题:调度统计工具


1. 学习目标

  • 掌握 Linux 中常用调度观察工具

    • top / htop / ps
    • vmstat / sar
    • perf sched / ftrace
  • 能监控系统 CPU 负载、任务状态和调度延迟

  • 学会分析调度统计数据


2. 理论讲解

2.1 常用工具概览

工具 功能 输出关键字段
top / htop 实时查看进程和 CPU 使用 %CPU, STAT, PRI, NI
ps 静态快照进程状态 PID, NI, PRI, RT, STAT
vmstat CPU 和进程队列统计 r, b, us, sy, id
sar 历史系统负载 runq-sz, plist-sz, %user, %system
perf sched 调度事件分析 sched_switch, latency
ftrace 内核 trace sched_switch, sched_wakeup

2.2 调度指标解释

  • nr_running / r → 可运行任务数
  • run queue → 排队等待 CPU 的任务
  • CPU 使用率 → user / system / idle
  • sched_switch → 调度切换事件
  • latency → 任务从唤醒到实际执行时间

3. 图解:调度统计观察

diff 复制代码
+-----------------------+
| Run Queue (nr_running)|
+-----------------------+
|  CPU0  CPU1  CPU2 ...|
|  RQ0   RQ1   RQ2     |
+-----------------------+
         |
         v
       CPU 执行任务
         |
         v
   top / htop / perf 观察
  • 每个 CPU 的 Run Queue 单独维护
  • 工具通过 /proc 或内核 trace 读取状态

4. 实验步骤

4.1 top / htop

bash 复制代码
# top 排序 %CPU
top -d 1 -o %CPU

# htop 图形化查看
htop
  • 观察 CPU 使用、进程状态、负载情况

4.2 ps 静态快照

bash 复制代码
ps -eo pid,comm,ni,pri,rtprio,stat,%cpu | head -n 20
  • 查看 nice 值、优先级、CPU 占用

4.3 vmstat / sar

bash 复制代码
# 实时查看
vmstat 1 5

# sar 查看 CPU 和队列统计
sar -q 1 5
  • r → 可运行队列长度
  • b → 阻塞队列长度

4.4 perf sched

bash 复制代码
# 记录调度事件
sudo perf sched record -a sleep 10

# 查看调度延迟
sudo perf sched latency
  • 输出各进程调度切换延迟
  • 可用于分析 CPU 负载下调度瓶颈

4.5 ftrace sched_switch

bash 复制代码
# 打开 trace
sudo su -c 'echo 1 > /sys/kernel/debug/tracing/tracing_on'
sudo su -c 'echo sched_switch > /sys/kernel/debug/tracing/set_event'

# 查看 trace
cat /sys/kernel/debug/tracing/trace | head -n 20

# 关闭 trace
echo 0 > /sys/kernel/debug/tracing/tracing_on
  • 追踪每次调度切换
  • 结合 CPU 负载观察任务切换频率

5. 输出解析

  • top / htop:%CPU 高的任务是占用 CPU 的主导进程
  • vmstat r 值高 → CPU 饱和,存在排队
  • perf sched latency 输出延迟 → 可发现调度瓶颈
  • ftrace sched_switch 输出 → 可分析任务切换顺序和频率

6. 思考题

  1. 如何判断 CPU 负载是由哪个进程主导的?
  2. nr_running > CPU 核数时,会发生什么?
  3. perf sched latency 输出中延迟高的原因可能有哪些?
  4. 在高负载系统中,哪些工具最适合快速排查调度问题?

7. Day 6 总结

  • 掌握 top / htop / ps / vmstat / sar / perf / ftrace 等调度统计工具
  • 能实时或历史观察 CPU 使用、可运行队列、调度延迟
  • 能分析系统调度瓶颈,为多核调度优化提供依据
  • 为 Day 7(ftrace 调度追踪)和 Day 8(多核调度)打基础

Linux Process Scheduling 学习手册 - Day 7

主题:ftrace 调度追踪


1. 学习目标

  • 理解 ftrace 调度追踪原理
  • 掌握 sched_switchsched_wakeup 等 trace 事件
  • 学会捕获多核 CPU 调度情况
  • 能分析任务切换顺序与调度延迟

2. 理论讲解

2.1 ftrace 概述

  • 内核自带轻量级 tracing 框架
  • 用于分析调度、函数调用、内核事件等
  • trace 文件位于:/sys/kernel/debug/tracing/

2.2 调度相关事件

事件 描述
sched_switch 任务切换事件
sched_wakeup 任务被唤醒,准备进入 Run Queue
sched_wakeup_new 新任务第一次唤醒
  • 可用于分析调度延迟、任务阻塞情况
  • 多核系统,每个 CPU 有独立 runqueue

2.3 调度分析意义

  • 找出 CPU 饱和或调度瓶颈
  • 分析任务优先级与调度顺序
  • 优化多核负载均衡

3. 图解:ftrace 调度追踪

arduino 复制代码
CPU0 Run Queue           CPU1 Run Queue
+---------+             +---------+
| Task A  |             | Task D  |
| Task B  |             | Task E  |
+---------+             +---------+
     |                       |
     v                       v
 sched_switch / sched_wakeup  sched_switch / sched_wakeup
     |                       |
     +------> ftrace 收集事件 ------+
  • 每次任务切换或唤醒 ftrace 都会记录事件
  • 可用于可视化 CPU 调度情况

4. 实验步骤

4.1 打开 ftrace

bash 复制代码
sudo su
# 清空 trace buffer
echo > /sys/kernel/debug/tracing/trace
# 打开 tracing
echo 1 > /sys/kernel/debug/tracing/tracing_on

4.2 设置追踪事件

bash 复制代码
# 追踪调度事件
echo sched_switch > /sys/kernel/debug/tracing/set_event
echo sched_wakeup > /sys/kernel/debug/tracing/set_event

4.3 创建 CPU 占用任务

bash 复制代码
yes > /dev/null &
yes > /dev/null &
yes > /dev/null &

4.4 查看 trace

bash 复制代码
cat /sys/kernel/debug/tracing/trace | head -n 20

输出示例:

less 复制代码
           CPU#0     PID#1234 (taskA): sched_switch: prev_comm=taskA prev_pid=1234 prev_prio=120 prev_state=R ==> next_comm=taskB next_pid=1235
           CPU#1     PID#2345 (taskC): sched_wakeup: comm=taskD pid=2346 prio=120 success=1 target_cpu=1

4.5 关闭 trace

bash 复制代码
echo 0 > /sys/kernel/debug/tracing/tracing_on

4.6 分析 trace

  • sched_switch → 当前 CPU 哪个任务切换到哪个任务
  • sched_wakeup → 哪个任务被唤醒,准备加入 runqueue
  • 可用 trace-cmdKernelShark 可视化分析

5. 输出解析

  • CPU#0, CPU#1 → 多核 CPU 调度情况
  • prev_comm / next_comm → 任务切换顺序
  • prev_state → 切换前任务状态(R/S/D)
  • target_cpu → 被唤醒任务分配 CPU

6. 思考题

  1. sched_switch 输出中的 prev_state 各值表示什么?
  2. 多核 CPU 下,任务为什么可能被调度到不同核心?
  3. 如果调度延迟较高,可能原因有哪些?
  4. 如何利用 ftrace 分析特定进程的 CPU 占用情况?

7. Day 7 总结

  • 掌握 ftrace 的基本使用方法
  • 能追踪 sched_switch、sched_wakeup 等调度事件
  • 能分析多核系统任务切换顺序和调度延迟
  • 为 Day 8(多核调度与负载均衡)奠定基础

Linux Process Scheduling 学习手册 - Day 8

主题:多核调度与负载均衡


1. 学习目标

  • 理解多核 CPU 的调度机制
  • 掌握 runqueue、CPU local 和 global load balance
  • 学会观察多核任务调度和负载迁移
  • 能分析负载不均衡原因并提出优化策略

2. 理论讲解

2.1 多核调度概览

  • Linux 每个 CPU 都有独立 runqueue

  • 调度器在本地 runqueue 上选择任务执行

  • 负载均衡(Load Balancing)

    • CPU 之间迁移任务,防止某些核心过载
    • 通过周期性检查 runqueue 长度和负载

2.2 CPU local vs global

  • Local scheduling

    • 优先在本 CPU 上调度任务
    • 减少缓存失效,提高性能
  • Global balancing

    • 监测其他 CPU runqueue
    • 迁移任务到负载较低 CPU

2.3 多核调度挑战

  • 任务迁移增加缓存失效
  • 实时任务可能打破平衡
  • 高负载系统容易出现 CPU 饱和和队列堆积

3. 图解:多核调度与负载均衡

arduino 复制代码
CPU0 Run Queue        CPU1 Run Queue        CPU2 Run Queue
+---------+          +---------+          +---------+
| Task A  |          | Task D  |          | Task G  |
| Task B  |          | Task E  |          | Task H  |
+---------+          +---------+          +---------+
      |                   |                    |
      v                   v                    v
   Local scheduling   Local scheduling    Local scheduling
      |                   |                    |
      +--------负载均衡检查 & 任务迁移--------+
      v                   v                    v
   Task B -> CPU1     Task E -> CPU2       Task H -> CPU0
  • 负载均衡通过周期性迁移任务,使 CPU 闲置/繁忙趋于均衡
  • 避免某个 CPU 长时间过载

4. 实验步骤

4.1 查看每个 CPU runqueue

bash 复制代码
cat /proc/sched_debug | grep "cpu0\|cpu1\|cpu2"
  • 输出每个 CPU 可运行任务数和负载
  • nr_running → 当前 runqueue 长度

4.2 创建多核 CPU 占用任务

bash 复制代码
# 在后台创建多个 CPU 占用进程
yes > /dev/null & yes > /dev/null & yes > /dev/null &

4.3 使用 top / htop 观察多核负载

bash 复制代码
htop
  • 打开 F2 → Setup → Columns → CPU% per core
  • 观察不同核心的负载是否均衡

4.4 使用 perf sched 或 ftrace 观察任务迁移

bash 复制代码
sudo perf sched record -a sleep 10
sudo perf sched latency
  • 可看到任务在不同 CPU 间切换
  • ftrace 也可追踪 sched_migrate_task 事件

4.5 优化观察

  • 使用 taskset 将任务绑定到特定 CPU
bash 复制代码
taskset -c 0 yes > /dev/null &
  • 对比绑定 CPU 与未绑定 CPU 的调度差异

4.6 清理实验

bash 复制代码
killall yes

5. 输出解析

  • 观察 nr_running / CPU%,判断负载均衡情况
  • perf sched 或 ftrace 输出显示任务迁移情况
  • taskset 固定 CPU 任务 → 可减少跨核迁移,提高缓存命中率

6. 思考题

  1. 多核系统中,为什么要优先进行 local scheduling?
  2. 负载均衡策略在高实时任务下会受到什么影响?
  3. CPU 绑定任务和动态负载均衡各自的优缺点是什么?
  4. 如何判断系统存在 CPU 负载不均衡的问题?

7. Day 8 总结

  • 理解多核调度原理和负载均衡机制
  • 能观察 runqueue、CPU 占用和任务迁移情况
  • 掌握使用 taskset 绑定 CPU、perf/ftrace 分析多核调度
  • 为 Day 9(调度性能调优与案例分析)打基础

Linux Process Scheduling 学习手册 - Day 9

主题:调度性能调优与案例分析


1. 学习目标

  • 学会通过调度统计和 trace 数据分析性能瓶颈
  • 掌握调度优化方法:nice 调整、CPU 绑定、实时策略
  • 能结合实验案例提出优化策略
  • 熟悉多工具联合分析(top / vmstat / perf / ftrace)

2. 理论讲解

2.1 性能瓶颈来源

  • CPU 饱和:nr_running 高,CPU 排队等待
  • 调度延迟:任务唤醒到执行的延迟过高
  • 任务迁移过多:多核频繁迁移降低缓存命中率
  • 优先级不合理:普通任务被高优先级任务长期抢占

2.2 调度优化策略

优化方法 描述 适用场景
nice 调整 提高或降低普通任务优先级 CPU 资源有限,普通任务可延迟
CPU 绑定 使用 taskset 固定任务核心 高频缓存访问,减少跨核迁移
实时策略 使用 SCHED_FIFO / SCHED_RR 延迟敏感任务,如音视频处理、控制系统
调整调度参数 调整 CFS sched_latency_nssched_min_granularity_ns 多任务小时间片场景

2.3 结合工具分析

  • top / htop → CPU 使用、任务优先级
  • vmstat / sar → 队列长度、系统负载
  • perf sched / ftrace → 调度延迟、迁移情况

3. 图解:调度优化流程

diff 复制代码
+-------------------+
| 观察系统指标      |
| top, vmstat, sar   |
+-------------------+
          |
          v
+-------------------+
| 分析调度瓶颈       |
| CPU饱和 / 延迟高   |
+-------------------+
          |
          v
+-------------------+
| 选择优化策略       |
| nice / CPU绑定 / RT|
+-------------------+
          |
          v
+-------------------+
| 评估优化效果       |
| 再次观察指标        |
+-------------------+

4. 实验步骤

4.1 创建高 CPU 占用任务

bash 复制代码
# 后台三个任务
yes > /dev/null &
yes > /dev/null &
yes > /dev/null &

4.2 观察基线

bash 复制代码
top -d 1 -o %CPU
vmstat 1 5
perf sched record -a sleep 10
perf sched latency
  • 记录 CPU 占用、队列长度和调度延迟

4.3 调整 nice 值

bash 复制代码
# 降低第一个任务优先级
sudo renice -n 10 -p <pid1>
# 提高第二个任务优先级
sudo renice -n -5 -p <pid2>
  • 再次观察 CPU 占用变化

4.4 CPU 绑定实验

bash 复制代码
taskset -c 0 yes > /dev/null &
taskset -c 1 yes > /dev/null &
  • 对比绑定 CPU 与未绑定 CPU 的调度延迟和缓存命中率

4.5 实时任务优先级

bash 复制代码
# 将任务设置为 SCHED_FIFO
sudo chrt -f -p 80 <pid3>
  • 再次观察普通任务 CPU 分配是否下降

4.6 分析 perf / ftrace 输出

  • 找出调度延迟高的任务
  • 找出频繁迁移的任务
  • 对比优化前后的变化

4.7 清理实验

bash 复制代码
killall yes

5. 输出解析

  • nice 调整 → 优先级低任务 CPU 分配减少
  • CPU 绑定 → 减少任务迁移,提高缓存命中
  • 实时任务 → 占用 CPU 高,普通任务可能被延迟
  • perf sched / ftrace → 量化调度延迟变化

6. 思考题

  1. 如果 CPU 已饱和,nice 调整能完全解决性能问题吗?
  2. CPU 绑定任务与负载均衡冲突时应该如何处理?
  3. 实时任务设置过多会对系统整体性能有什么影响?
  4. 如何结合 perf / ftrace 输出判断调度优化是否有效?

7. Day 9 总结

  • 能分析 CPU 占用和调度延迟,找出性能瓶颈
  • 掌握 nice、CPU 绑定、实时策略等优化方法
  • 能使用 perf / ftrace 量化优化效果
  • 为实际生产环境调度优化提供经验与工具支持

Linux Process Scheduling 学习手册 - Day 10

主题:调度综合实验与案例分析


1. 学习目标

  • 综合运用前 9 天的调度知识
  • 能设计并执行多核、高负载、不同优先级任务的实验
  • 学会识别调度瓶颈并提出优化方案
  • 能量化分析优化效果

2. 理论回顾

  • Linux 调度策略:CFS、SCHED_FIFO、SCHED_RR、SCHED_DEADLINE
  • 任务优先级:静态优先级、动态优先级、nice 值
  • 多核调度:CPU runqueue、local vs global scheduling、负载均衡
  • 调度观察工具:top、htop、vmstat、sar、perf、ftrace

3. 图解:综合实验示意

arduino 复制代码
实验环境:4 核 CPU
+---------+---------+---------+---------+
| CPU0    | CPU1    | CPU2    | CPU3    |
| Task A  | Task D  | Task G  | Task J  |
| Task B  | Task E  | Task H  | Task K  |
+---------+---------+---------+---------+
        |                |                 |
   Local Scheduling    Local Scheduling  Local Scheduling
        |                |                 |
        +----负载均衡 & 任务迁移-----------+
        |                |                 |
        +----perf / ftrace 记录调度事件---+
  • 多核任务创建不同优先级和策略
  • 观察调度、迁移、CPU 占用
  • 通过工具分析瓶颈并优化

4. 实验步骤

4.1 创建实验任务

bash 复制代码
# 生成 CPU 高占用任务
yes > /dev/null &  # PID A
yes > /dev/null &  # PID B
yes > /dev/null &  # PID C
yes > /dev/null &  # PID D

4.2 分配不同调度策略和优先级

bash 复制代码
# Task A → SCHED_FIFO, pri=80
sudo chrt -f -p 80 <pidA>
# Task B → SCHED_RR, pri=70
sudo chrt -r -p 70 <pidB>
# Task C → CFS, nice=-5
sudo renice -n -5 -p <pidC>
# Task D → CFS, nice=10
sudo renice -n 10 -p <pidD>

4.3 CPU 绑定实验

bash 复制代码
# Task A, B 绑定 CPU0
taskset -c 0 <pidA>
taskset -c 0 <pidB>
# Task C, D 绑定 CPU1
taskset -c 1 <pidC>
taskset -c 1 <pidD>

4.4 启动调度追踪

bash 复制代码
sudo su
echo > /sys/kernel/debug/tracing/trace
echo 1 > /sys/kernel/debug/tracing/tracing_on
echo sched_switch > /sys/kernel/debug/tracing/set_event
echo sched_wakeup > /sys/kernel/debug/tracing/set_event

4.5 运行实验并收集数据

bash 复制代码
# 运行 30 秒
sleep 30
# 停止 trace
echo 0 > /sys/kernel/debug/tracing/tracing_on
cat /sys/kernel/debug/tracing/trace > experiment_trace.txt

4.6 分析结果

  • 使用 perf sched latencyKernelShark 分析调度延迟
  • 比较 CPU 占用率、runqueue 长度、任务切换频率
  • 找出调度瓶颈或负载不均衡

4.7 优化策略

  1. 调整 nice 值,降低低优先级任务 CPU 占用
  2. CPU 绑定减少任务跨核迁移
  3. 必要时调整调度策略(SCHED_RR / FIFO / DEADLINE)

4.8 再次观察

  • 记录优化前后调度延迟和 CPU 占用差异
  • 输出报告总结优化效果

4.9 清理实验

bash 复制代码
killall yes

5. 输出解析

  • perf / ftrace trace → 显示调度延迟和任务迁移情况
  • top / htop → 不同策略任务的 CPU 占用
  • vmstat / sar → runqueue 长度和 CPU 平衡
  • 对比优化前后,可量化 CPU 占用和调度延迟改善

6. 思考题

  1. 在多核、高负载下,如何判断实时任务是否影响普通任务?
  2. CPU 绑定和负载均衡策略冲突时,如何选择?
  3. nice 调整和实时策略结合使用有什么注意事项?
  4. 如果调度延迟仍然高,可能的系统瓶颈有哪些?

7. Day 10 总结

  • 综合应用调度策略、优先级、多核调度、nice 值和 CPU 绑定
  • 能通过 perf / ftrace / top / vmstat 分析调度瓶颈
  • 能针对不同问题设计优化方案
  • 完成一个多核、高负载、混合调度策略的完整实验流程
  • 为实际生产系统调度优化提供实践经验

相关推荐
谷雨不太卷17 小时前
Linux_文件权限
linux·运维·服务器
无泪无花月隐星沉18 小时前
uos server 1070e lvm格式磁盘扩容分区
linux·运维·uos
食咗未19 小时前
Linux USB HOST EXTERNAL STORAGE
linux·驱动开发
食咗未19 小时前
Linux USB HOST HID
linux·驱动开发·人机交互
Xの哲學19 小时前
Linux SLAB分配器深度解剖
linux·服务器·网络·算法·边缘计算
齐鲁大虾20 小时前
UOS(统信操作系统)如何更新CUPS(通用Unix打印系统)
linux·服务器·chrome·unix
虾..21 小时前
Linux 简单日志程序
linux·运维·算法
huoxingwen1 天前
Ubuntu 22.04 上 VMware Workstation 点击虚拟机窗口就消失的解决历程
linux·运维·ubuntu
姚青&1 天前
Linux 常用命令之基本命令
linux·运维·服务器
一路往蓝-Anbo1 天前
【第05期】数据的微观世界 (五) —— 浮点数 vs 定点数:MCU的数学课
linux·stm32·单片机·嵌入式硬件·物联网