一、调度基础概念及各个调度类
1.1 调度基础概念及重要变量
1.1.1 调度时间片与调度时延
不修改内核镜像的情况下,使用内核模块实现"及时"的调度时间片超时事件上报
1.1.2 idle与忙碌
1.1.3 on_cpu与on_rq
1.1.4 rq lock
1.1.5 rq_clock_task及其他时间接口
内核模块里访问struct rq及获取rq_clock_task时间的方法
1.2 cfs相关
1.2.1 cfs基础
1.2.2 cgroup cfs相关
cgroup sched_cfs_bandwidth_slice参数的作用及效果
cgroup进行限额的逻辑场景之put_prev_entity及dequeue_entity
1.3 rt相关
二、中断与抢占
2.1 中断
2.2 中断上下文及preempt_count
2.3 时钟中断
2.4 hrtimer相关
2.5 调度抢占
内核调度抢占模式------voluntary和full对比
三、唤醒与信号signal处理
3.1 唤醒相关核心逻辑分析
sched_waking事件及try_to_wake_up函数解析
3.2 信号signal
抓取信号发生时的发送者和接受者的堆栈------以gdb attach为例
do_exit的hungtask问题及coredump的实验及原理分析一
四、内核里的各种任务
4.1 workqueue工作队列相关
创建kworker线程的逻辑与need_more_worker
ordered的workqueue及__WQ_ORDERED
4.2 tasklet相关
tasklet上下文内存分配触发might_alloc检查及同步回收调用链
4.3 cpu状态机及热插拔
cpu的possible present online active的mask细节
五、内核同步原语
5.1 rcu相关
5.2 顺序锁
5.3 读写锁
六、rt-linux专题
6.1 优先级反转
6.2 rt-linux里的锁
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功能导致不相干进程的高时延问题
七、用户态调度类问题相关
7.1 条件变量相关
八、调度有关的系统信息及抓取
8.1 系统的统计信息
/proc/stat里的idle及iowait统计项的波动问题
8.2 tracepoint的使用
内核模块注册调度的tracepoint的回调,逻辑里判断当前线程处于内核态还是用户态的方法
8.3 调度时延及调度时间片
不修改内核镜像的情况下,使用内核模块实现"及时"的调度时间片超时事件上报
8.4 D状态相关及iowait相关
线程每次iodelay监控及D状态开始和结束监控并做堆栈记录
rt-linux下的D状态的堆栈抓取及TASK_RTLOCK_WAIT状态