内核调度子系统专栏导航——包括免费专栏里调度子系统部分(持续更新)

一、调度基础概念及各个调度类

1.1 调度基础概念及重要变量

1.1.1 调度时间片与调度时延

调度时间片"过长"的原因及调度时间片的观测

不修改内核镜像的情况下,使用内核模块实现"及时"的调度时间片超时事件上报

调度时延的观测

1.1.2 idle与忙碌

抓取cpu持续忙碌状态的方法

1.1.3 on_cpu与on_rq

抓取任务D状态超时事件监控程序的进一步改进

1.1.4 rq lock

调度关键路径里调整优先级导致hardlockup

1.1.5 rq_clock_task及其他时间接口

与调度相关的内核时间接口的分析及实现介绍

内核模块里访问struct rq及获取rq_clock_task时间的方法

在计算进程D状态持续时间及等IO的时间遇到的一处问题

1.2 cfs相关

1.2.1 cfs基础

CFS及RT调度整体介绍

1.2.2 cgroup cfs相关

cgroup父子进程的加组实验

cgroup threaded功能例子

cgroup sched_cfs_bandwidth_slice参数的作用及效果

cgroup进行限额的逻辑场景之put_prev_entity及dequeue_entity

cgroup cpu相关的基础概念及相关内核逻辑的耗时测试

1.3 rt相关

rt的cpu占比抓取

二、中断与抢占

2.1 中断

show_interrupts函数及nr_irqs

剔除中断和调度影响的耗时测量方法

硬中断关闭后的堆栈抓取方法

2.2 中断上下文及preempt_count

中断上下文及抢占标志位的检查------基于调度及锁举例

2.3 时钟中断

sched_timer与nohz初步介绍

2.4 hrtimer相关

rt-linux下的"硬实时"的hrtimer通知机制

2.5 调度抢占

内核调度抢占模式------voluntary和full对比

内核cfs的唤醒抢占特性

三、唤醒与信号signal处理

3.1 唤醒相关核心逻辑分析

使用数据断点调试唤醒任务时__state的变化

sched_waking事件及try_to_wake_up函数解析

3.2 信号signal

抓取信号发生时的发送者和接受者的堆栈------以gdb attach为例

gdb attach不上的原因分析

信号处理的疑问及进一步实验

do_exit的hungtask问题及coredump的实验及原理分析一

四、内核里的各种任务

4.1 workqueue工作队列相关

workqueue的work派发策略上的实验及相关原理

创建kworker线程的逻辑与need_more_worker

ordered的workqueue及__WQ_ORDERED

4.2 tasklet相关

tasklet上下文内存分配触发might_alloc检查及同步回收调用链

内核调度代码关键路径下的低延迟唤醒

调度关键路径里调整优先级导致hardlockup

4.3 cpu状态机及热插拔

cpu的possible present online active的mask细节

cpu hotplug的调用链整理

五、内核同步原语

5.1 rcu相关

rcu的实例、注意事项及原理讲解

抓取rcu stall初始现场的方法

5.2 顺序锁

顺序锁的原理和使用注意事项

5.3 读写锁

进程内mmap锁相互干扰问题

六、rt-linux专题

6.1 优先级反转

rt-linux之防止优先级反转

6.2 rt-linux里的锁

rt-linux里的泛rtmutex锁的调用链整体分析

6.3 rt-linux下特有的概念及问题

rt-linux下__slab_alloc里的另外一处可能睡眠的逻辑

6.3.1 rt-linux下的D状态

rt-linux下的D状态的堆栈抓取及TASK_RTLOCK_WAIT状态

6.3.2 rt-linux下的cgroup问题

rt-linux下的cgroup cpu的死锁bug

rt-linux下的底层锁依赖因cgroup cpu功能导致不相干进程的高时延问题

七、用户态调度类问题相关

7.1 条件变量相关

notify_one的逻辑里的"反向"唤醒现象的分析及原理

notify_one耗时久的优化尝试

八、调度有关的系统信息及抓取

8.1 系统的统计信息

cpu的iowait指标解释及示例

/proc/stat里的idle及iowait统计项的波动问题

8.2 tracepoint的使用

内核模块注册调度的tracepoint的回调,逻辑里判断当前线程处于内核态还是用户态的方法

8.3 调度时延及调度时间片

调度时延的观测

不修改内核镜像的情况下,使用内核模块实现高效监控调度时延

调度时间片"过长"的原因及调度时间片的观测

不修改内核镜像的情况下,使用内核模块实现"及时"的调度时间片超时事件上报

8.4 D状态相关及iowait相关

线程每次iodelay监控及D状态开始和结束监控并做堆栈记录

在计算进程D状态持续时间及等IO的时间遇到的一处问题

rt-linux下的D状态的堆栈抓取及TASK_RTLOCK_WAIT状态

抓取任务D状态超时事件监控程序的进一步改进

8.5 硬中断关闭后的堆栈抓取

硬中断关闭后的堆栈抓取方法

8.6 perf相关

perf原理介绍

相关推荐
mN9B2uk1713 小时前
大数据量高并发的数据库优化
服务器·数据库·oracle
starvapour13 小时前
Ubuntu部署gitlab频繁出现502的问题
linux·ubuntu·gitlab
jinglong.zha13 小时前
LScript-从零基础到商业变现的AI自动化学习平台
运维·学习·自动化
土星云SaturnCloud13 小时前
边缘计算赋能智慧工地:从“看得见“到“管得住“的智能化升级
服务器·人工智能·ai·边缘计算
Adorable老犀牛13 小时前
Telegraf:InfluxData 出品的指标采集代理
运维·telegraf
北塔软件13 小时前
北塔软件智能体平台 | 不只监控,更是AI时代的数据资产
运维·人工智能·知识库·北塔软件
zhangfeng113314 小时前
ps aux讲解,结合国家超算中心 hpc apptainer
linux·服务器·网络
夜月yeyue14 小时前
STM32 DMA 双缓冲采样
linux·stm32·单片机·嵌入式硬件·系统架构
ScilogyHunter14 小时前
Buildroot完全指南:从入门到实战
linux·嵌入式·buildroot
毕竟是shy哥14 小时前
Claude Code 接入 DeepSeek 保姆级教程,WSL/Linux 通用
linux·安装教程·codex·deepseek·claude code·openclaw