[PATCH RFC 0/3] sched/fair: cpu time reserves for cgroups

From: Konstantin Khlebnikov
Date: Mon May 16 2016 - 05:36:36 EST


This feature allows to change cpu cgroup weight for a limited time.

Cgroup interface:
cpu.cfs_reserve_us - reserved time for each cpu.cfs_period_us
cpu.cfs_reserve_shares - group weight during reserved time

While cfs group consumes reserved cpu time it has different weight,
thus it gets different vruntime penalty for that execution.

^ weight
|
|
reserve |
shares -------*
| |
| |
| |
shares - *-----------------*
| |
| |
0------|-----------------|-----------> time
reserve quota

Reserve can work as a "low limit": boost weight for "guaranteed" time,
and as a "high limit": give normal weight for a limited time and allow
utilize cpu when nobody else needs it.

Sample setup:

level | shares reserve shares
--------+----------------------------
high | 1024*16 1024*16*16
normal | 1024 1024*16
low | 1024/16 1024

In this way cgroups are devided into three levels.
During reserved time they are promoted to the next level.

---

Konstantin Khlebnikov (3):
sched/fair: call __refill_cfs_bandwidth_runtime only for finite quota
sched/fair: copy taskgroup shares to each cfs_rq
sched/fair: pulse-weight modulation controller for cpu cgroup

kernel/sched/core.c | 96 +++++++++++++++++++++++++++++++++++++++++++-----
kernel/sched/fair.c | 101 ++++++++++++++++++++++++++++++++++++++------------
kernel/sched/sched.h | 5 ++
3 files changed, 168 insertions(+), 34 deletions(-)