Messages in this thread | | | Date | Tue, 16 Jul 2019 15:34:35 +0100 | From | Patrick Bellasi <> | Subject | Re: [PATCH v11 4/5] sched/core: uclamp: Use TG's clamps to restrict TASK's clamps |
| |
On 15-Jul 18:42, Michal Koutný wrote: > On Mon, Jul 08, 2019 at 09:43:56AM +0100, Patrick Bellasi <patrick.bellasi@arm.com> wrote: > > This mimics what already happens for a task's CPU affinity mask when the > > task is also in a cpuset, i.e. cgroup attributes are always used to > > restrict per-task attributes. > If I am not mistaken when set_schedaffinity(2) call is made that results > in an empty cpuset, the call fails with EINVAL [1]. > > If I track the code correctly, the values passed to sched_setattr(2) are > checked against the trivial validity (umin <= umax) and later on, they > are adjusted to match the effective clamping of the containing > task_group. Is that correct? > > If the user attempted to sched_setattr [a, b], and the effective uclamp > was [c, d] such that [a, b] ∩ [c, d] = ∅, the set uclamp will be > silently moved out of their intended range. Wouldn't it be better to > return with EINVAL too when the intersection is empty (since the user > supplied range won't be attained)?
You right for the cpuset case, but I don't think we never end up with a "empty" set in the case of utilization clamping.
We limit clamps hierarchically in such a way that:
clamp[clamp_id] = min(task::clamp[clamp_id], tg::clamp[clamp_id], system::clamp[clamp_id])
and we ensure, on top of the above that:
clamp[UCLAMP_MIN] = min(clamp[UCLAMP_MIN], clamp[UCLAMP_MAX])
Since it's all and only about "capping" values, at the very extreme case you can end up with:
clamp[UCLAMP_MIN] = clamp[UCLAMP_MAX] = 0
but that's till a valid configuration.
Am I missing something?
Otherwise, I think the changelog sentence you quoted is just misleading. I'll remove it from v12 since it does not really clarify anything more then the rest of the message.
Cheers, Patrick
-- #include <best/regards.h>
Patrick Bellasi
| |