i have one basic doubt in the CFS algorithm.
Following is my doubts. I am using 2.6.23 as the kernel version
In CFS , when a Sleeping task wants to get inside the Running Queue ( cfs_rq ) , Then it calcluates the its own "vruntime" depend on "cfs_rq->min_vruntime" and "sysctl_sched_latency". In function "place_entity" , "vruntime" is assigned the value.
in brief ===>
se.vruntime = cfs_rq->min_vruntime - sysctl_sched_latency ( equation 1 )
So the process which wants to get inserted in CFS QUEUE ,
will have a KEY ==> "se->vruntime - cfs_rq->min_vruntime" ( equation 2 )
If we take merge equation 1 and equation 2 .. then KEY is equal to "-sysctl_sched_latency".
So when the Process will be added to RB TREE , then this new Task will always be the leftmost entry, as its KEY is in negative value.
I thought if we add the value of "sysctl_sched_latency" in equation "1" , then it would have been right as the New task will be waiting minimum "sysctl_sched_latency" nano seconds before getting schedule ( if run queue is heavily loaded ).
Can somebody help me in understanding why we are Subtracting "sysctl_sched_latency" instead of Adding
Help will be greatly appreciated.
below i have added the code for "place_entity" and "entity_key"
regards
Anirban Roy
static void
place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial)
{
u64 vruntime;
vruntime = cfs_rq->min_vruntime;
if (sched_feat(USE_TREE_AVG)) {
struct sched_entity *last = __pick_last_entity(cfs_rq);
if (last) {
vruntime += last->vruntime;
vruntime >>= 1;
}
} else if (sched_feat(APPROX_AVG) && cfs_rq->nr_running)
vruntime += __sched_vslice(cfs_rq->nr_running)/2;
if (initial && sched_feat(START_DEBIT))
vruntime += __sched_vslice(cfs_rq->nr_running + 1);
if (!initial) {
if (sched_feat(NEW_FAIR_SLEEPERS))
vruntime -= sysctl_sched_latency;
vruntime = max_t(s64, vruntime, se->vruntime);
}
se->vruntime = vruntime;
}
static inline s64
entity_key(struct cfs_rq *cfs_rq, struct sched_entity *se)
{
return se->vruntime - cfs_rq->min_vruntime;
}
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies