[PATCH 0/2] sched/deadline: fix cpusets bandwidth accounting

From: Juri Lelli
Date: Mon Feb 08 2016 - 07:45:14 EST


Steven Rostedt provided a detailed bug report [1] highlighting the fact that we
lose bandwidth accounting information across scheduling domains changes. This
happens when we make changes to cpusets or when hotplug comes into play (this
has been already pointed out in the past by Wanpeng Li). Problem is that these
operations are destructive w.r.t. root_domain data structure(s), that is where
we store information about the amount of bandwidth has been admitted.

This set proposes to fix that by relying on the rq_{online, offline} calls,
that IIUC were introduced exactly to cope with the problem that we have.

Patches description:

o 01/02 introduces per-rq admitted bandwidth accounting (I stole this from
Luca with his approval, but I changed it a bit; I kept attribution in
the patch, but everything that I could have break is on me; also,
Vincent posted something similar as part of the sched-freq story)
o 02/02 uses information provided by 01/02 to save restore bandwidth
information in root_domain(s)

Steven already provided instructions on how to reproduce that problem and test
the proposed fix in [1]. I updated my tests accordingly

https://github.com/jlelli/tests

This set is based on tip/sched/core as of today. I pushed this set on a branch
together with Steve's sched_debug enhancements to print root_domain bandwidth
and some trace_printks that should help to track what these changes are doing.

git://linux-arm.org/linux-jl.git upstream/fixes/dl_rootdomain_account-v1

Changelogs can be improved and patches requires more comments, but I wanted to
send this out early to understand if we are really fixing the problem and to
see if people think this approach could fly. Also, I expect that there are
still corner cases that we don't cover with the bandwidth tracking.

Testing and feedback is more than welcome.

Best,

- Juri

[1] https://lkml.org/lkml/2016/2/3/966

Juri Lelli (2):
sched/deadline: add per rq tracking of admitted bandwidth
sched/deadline: rq_{online,offline}_dl for root_domain changes

kernel/sched/core.c | 2 ++
kernel/sched/deadline.c | 20 ++++++++++++++++++++
kernel/sched/sched.h | 22 ++++++++++++++++++++++
3 files changed, 44 insertions(+)

--
2.7.0