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