On 04/02/20(Tue) 08:43, Amit Kulkarni wrote:
> When a cpu is idle, and wants to steal, it should steal from worst loaded 
> cpu, i.e. with the highest cost, not the least cost.

What you say might be a valid choice.  However I'm not sure to
understand how does it relate to the behavior of the code?

When stealing sched_proc_to_cpu_cost() is always called with for the
same CPU, `ci' is always the same, which means `cost' is equivalent to
`p_usrpri', right?

Now the priority space is defined in sys/param.h and the higher priority
correspond to a small number.  So are we sure we want to steal a thread
with the highest `cost', which would mean with the lowest priority?  Or
did I miss something?

> Index: kern/kern_sched.c
> ===================================================================
> RCS file: /cvs/src/sys/kern/kern_sched.c,v
> retrieving revision 1.64
> diff -u -p -u -p -r1.64 kern_sched.c
> --- kern/kern_sched.c 30 Jan 2020 08:51:27 -0000      1.64
> +++ kern/kern_sched.c 4 Feb 2020 14:25:59 -0000
> @@ -487,7 +487,7 @@ sched_steal_proc(struct cpu_info *self)
>       struct proc *best = NULL;
>  #ifdef MULTIPROCESSOR
>       struct schedstate_percpu *spc;
> -     int bestcost = INT_MAX;
> +     int bestcost = 0;
>       struct cpu_info *ci;
>       struct cpuset set;
>  
> @@ -515,7 +515,7 @@ sched_steal_proc(struct cpu_info *self)
>  
>                       cost = sched_proc_to_cpu_cost(self, p);
>  
> -                     if (best == NULL || cost < bestcost) {
> +                     if (cost > bestcost) {
>                               best = p;
>                               bestcost = cost;
>                       }
> @@ -524,7 +524,6 @@ sched_steal_proc(struct cpu_info *self)
>       if (best == NULL)
>               return (NULL);
>  
> -     spc = &best->p_cpu->ci_schedstate;
>       remrunqueue(best);
>       best->p_cpu = self;
>  
> 

Reply via email to