这个决定了进程在CPU上的运行时间和被调度次数 */struct rb_node run_node;unsigned int on_rq;/* 是否在就绪队列上 */u64 exec_start;/* 上次启动的时间*/u64 sum_exec_runtime;u64 vruntime;u64 prev_sum_exec_runtime;/* rq on which this entity is (to be) queued: */struct cfs_rq*cfs_...
se->vruntime += cfs_rq->min_vruntime; /* * Update run-time statistics of the 'current'. * 更新进程的统计量信息 */ update_curr(cfs_rq); enqueue_entity_load_avg(cfs_rq, se); account_entity_enqueue(cfs_rq, se); update_cfs_shares(cfs_rq); /* 如果当前进行之前在睡眠刚被唤醒 */...
resched_task(rq_of(cfs_rq)->curr); return; } /* * don't let the period tick interfere with the hrtick preemption */ if (!sched_feat(DOUBLE_TICK) && hrtimer_active(&rq_of(cfs_rq)->hrtick_timer)) return; #endif if (cfs_rq->nr_running > 1 || !sched_feat(WAKEUP_PREEMPT)) ...
其中辅助函数rq_of用于确定与CFS就绪队列相关的struct rq实例, 其定义在kernel/sched/fair.c, line 248 cfs_rq就绪队列中存储了指向就绪队列的实例,参见kernel/sched/sched.h, line412, 而rq_of就返回了这个指向rq的指针, rq_of定义在kernel/sched/fair.c, line 249 rq_clock_task函数返回了运行队列的clock_...
其中辅助函数rq_of用于确定与CFS就绪队列相关的struct rq实例, 其定义在kernel/sched/fair.c, line 248 cfs_rq就绪队列中存储了指向就绪队列的实例,参见kernel/sched/sched.h, line412, 而rq_of就返回了这个指向rq的指针, rq_of定义在kernel/sched/fair.c, line 249 ...
cfs_rq=cfs_rq_of(se); load=&cfs_rq->load;// cfs总的负载 if(unlikely(!se->on_rq)) {// on_rq大于0是在对列中,如果在对列中就更新,unlikely是制定cpu流水线的unlikely代码逻辑假的概率大,也就是在对列中概率比较大 lw=cfs_rq->load; ...
// enqueue_task_fair函数{/* 如果当前进程已经在就绪队列上 */if(se->on_rq)break;/* 获取到当前进程所在的cfs_rq就绪队列 */cfs_rq = cfs_rq_of(se);/* 内核委托enqueue_entity完成真正的插入工作 */enqueue_entity(cfs_rq, se, flags); ...
u64 now = rq_clock_task(rq_of(cfs_rq)); u64 delta_exec; 如果就队列上没有进程在执行, 则显然无事可做, 否则内核计算当前和上一次更新负荷权重时两次的时间的差值 /* 如果就队列上没有进程在执行, 则显然无事可做 */ if (unlikely(!curr)) ...
v=4.6#L3134staticvoidplace_entity(struct cfs_rq*cfs_rq,struct sched_entity*se,int initial){u64 vruntime=cfs_rq->min_vruntime;/* * The 'current' period is already promised to the current tasks, * however the extra weight of the new task will slow them down a * little, place the...
rq: 使能组调度后才加的这个成员,若没有使能组调度的话,cfs_rq就是rq的一个成员,使用 container_of进行路由,使能组调度后,增加了一个rq成员进行cfs_rq到rq的路由。 on_list/leaf_cfs_rq_list: 尝试将叶cfs_rq串联起来,在CFS负载均衡和带宽控制相关逻辑中使用。