Re: [RFC] Cpuset: explicit dynamic sched domain control flags

Paul Jackson
2006-10-17T19:18:55Z

> What happens when the job in the cpuset with no sched domain
> becomes active? In this case, scheduler can't make use of all cpus
> that this cpuset is allowed to use.

What happens then is that the job manager marks the cpuset of this
newly activated job as being a sched_domain.

And if the job manager doesn't do that, and sets up a situation in
which the scheduler domains don't line up with the active jobs, then
they can't get scheduler load balancing across all the CPUs in those
jobs cpusets. That's exactly what they asked for -- that's exactly
what they got.

(Actually, is that right? I thought load balancing would still occur
at higher levels in the sched domain/group hierarchy, just not as
often.)

It is not the kernels job to make it impossible for user code to do
stupid things. It's the kernels job to offer up various mechanisms,
and let user space code decide what to do when.

And, anyhow, how does this differ from overloading the cpu_exclusive
flag to define sched domains. One can setup the same thing there,
where a job can't balance across all its CPUs:

/dev/cpuset/cs1 cpu_exclusive = 1; cpus = 0-7
/dev/cpuset/cs1/suba cpu_exclusive = 1; cpus = 0-3
/dev/cpuset/cs1/subb cpu_exclusive = 1; cpus = 4-7

(sched_domain_enabled = 0 in all cpusets)

If you put a task in cpuset "cs1" (not in one of the sub cpusets)
then it can't load balance between CPUs 0-3 and CPUs 4-7 (or can't
load balance as often - depending on how this works.)