RTDS currently has no admission control: nothing stops the sum of
all admitted units' (budget/period) reservations in a cpupool from
exceeding what its pCPUs can actually provide. Once that happens,
the global-EDF deadline guarantees the scheduler is built around no
longer hold for any unit sharing that pool.
This series adds admission control to prevent that, tracks and
report utilization, and makes the check toggleable per cpupool so
an operator can disable it if they intentionally want to overcommit.
Patch 1 introduces the core mechanism: a running utilization total
per cpupool, a fixed-point representation of a unit's (budget/period),
and a capacity check enforced in rt_alloc_udata()/rt_free_udata() -
the lifecycle hooks that catch every new unit's default reservation.
Patch 2 extends the same check to domctl, so growing an existing
reservation via xl sched-rtds is checked too.
Patch 3 reports a cpupool's admitted utilization agains its capacity
via the 'r' debug key.
Patch 4 makes admission control itself toggleable per cpupool
(enabled by default) via sysctl.
Patch 5 wires that toggle through libxl and adds -s/-a to
xl sched-rtds, and documents it.
Furkan Caliskan (5):
xen/sched: rtds: add global-EDF utilization admission control
xen/sched: rtds: enforce admission control in xl sched-rtds
xen/sched: rtds: report utilization and cap via debug key
xen/sched: rtds: make admission control cpupool-wide toggleable
tools: expose admission control toggle via xl sched-rtds
docs/man/xl.1.pod.in | 20 +++
tools/golang/xenlight/helpers.gen.go | 23 +++
tools/golang/xenlight/types.gen.go | 4 +
tools/include/libxl.h | 4 +
tools/include/xenctrl.h | 6 +
tools/libs/ctrl/xc_rt.c | 40 ++++++
tools/libs/light/libxl_sched.c | 46 ++++++
tools/libs/light/libxl_types.idl | 5 +
tools/xl/xl_cmdtable.c | 8 +-
tools/xl/xl_sched.c | 103 +++++++++++++-
xen/common/sched/rt.c | 205 ++++++++++++++++++++++++++-
xen/include/public/sysctl.h | 5 +
12 files changed, 463 insertions(+), 6 deletions(-)
--
2.34.1