2.6.2.1 调度逻辑 - 数据结构
/* file: include/linux/sched.h */
struct sched_entity {
/* 记录当前se的权重信息,由进程的nice值计算得到 */
struct load_weight load;
/* 指向该se在红黑树中的节点 */
struct rb_node run_node;
/* 是否在 runqueue 上,1 则表示在 rq 中 */
unsigned int on_rq;
/* 当该se被调度时,记录其开始执行的时间,以便后期用来计算该se此次调度的时长 */
u64 exec_start;
/* 记录总运行时间 */
u64 sum_exec_runtime;
/* 该进程的虚拟运行时间,该值是红黑树中的 key, CFS 依据该值来保证公平调度 */
u64 vruntime;
/* 截止该调度周期开始时,进程的总运行时间,在check_preempt_tick中会使用到 */
u64 prev_sum_exec_runtime;
}
struct load_weight {
/* nice 对应的权重数组sched_prio_to_weight中的值 */
unsigned long weight;
/* 记录 sched_prio_to_wmult 数组中的值 */
u32 inv_weight;
};
Last updated