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

From: Juri Lelli
Date: Fri Jun 28 2019 - 04:06:38 EST


Hi,

v8 of a series of patches, originally authored by Mathieu, with the intent
of fixing a long standing issue of SCHED_DEADLINE bandwidth accounting.
As originally reported by Steve [1], when hotplug and/or (certain)
cpuset reconfiguration operations take place, DEADLINE bandwidth
accounting information is lost since root domains are destroyed and
recreated.

Mathieu's approach is based on restoring bandwidth accounting info on
the newly created root domains by iterating through the (DEADLINE) tasks
belonging to the configured cpuset(s).

Apart from the usual rebase on top of cgroup/for-next, this version
brings in an important difference w.r.t. v7: cpuset_mutex conversion to
percpu_rwsem (as suggested by Peter) to deal with a performance
regression caused by the fact that grabbing the (v7) callback_lock raw
spinlock from sched_setscheduler() was in fact a bottleneck. The
conversion required some lock order changes and an rcu related mod.

So, this is (unfortunately) more than a small update. Hope it still
makes sense, though.

Set also available at

https://github.com/jlelli/linux.git fixes/deadline/root-domain-accounting-v8

Thanks,

- Juri

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

Juri Lelli (6):
cpuset: Rebuild root domain deadline accounting information
sched/deadline: Fix bandwidth accounting at all levels after offline
migration
cgroup/cpuset: convert cpuset_mutex to percpu_rwsem
cgroup/cpuset: Change cpuset_rwsem and hotplug lock order
sched/core: Prevent race condition between cpuset and
__sched_setscheduler()
rcu/tree: Setschedule gp ktread to SCHED_FIFO outside of atomic region

Mathieu Poirier (2):
sched/topology: Adding function partition_sched_domains_locked()
sched/core: Streamlining calls to task_rq_unlock()

include/linux/cgroup.h | 1 +
include/linux/cpuset.h | 13 ++-
include/linux/sched.h | 5 +
include/linux/sched/deadline.h | 8 ++
include/linux/sched/topology.h | 10 ++
kernel/cgroup/cgroup.c | 2 +-
kernel/cgroup/cpuset.c | 163 +++++++++++++++++++++++++--------
kernel/rcu/tree.c | 6 +-
kernel/sched/core.c | 57 ++++++++----
kernel/sched/deadline.c | 63 +++++++++++++
kernel/sched/sched.h | 3 -
kernel/sched/topology.c | 30 +++++-
12 files changed, 290 insertions(+), 71 deletions(-)

--
2.17.2