Hello everyone,
This patchset aims at adding support for the SCHED_DEADLINE Linux
scheduling policy for vcpus, io-threads and emulator processes.
In fact, libvirt currently supports SCHED_OTHER, SCHED_BATCH,
SCHED_IDLE, SCHE_FIFO and SCHED_RR, but not SCHED_DEADLINE.
SCHED_DEADLINE is a policy implementing an algorithm originating from
the real-time scheduling community, but it can be useful outside of
the real-time computing field as well.
It allows one to set a specific amount of CPU time that a task should
receive with a given periodicity, and withing a certain deadline.
E.g., task t should be scheduled at least for 50 ms every 100 ms. To
achieve this, it needs 3 parameters: runtime, deadline and period
(although period can just be equal to deadline, which is what happens
automatically if one sets period=0). It must always hold that:
runtime <= deadline <= period (and this is enforced by the kernel,
but checks are included in the patches, so that meaningful and easy
to interpret error messages can be printed to the user).
More info on SCHED_DEADLINE are available here:
https://docs.kernel.org/scheduler/sched-deadline.html
The interface will look like this, e.g., for setting SCHED_DEADLINE
as a policy for 3 (0-2) vcpus, with runtime = 10000000, deadline =
15000000 and period = 20000000:
<cputune>
...
<vcpusched vcpus="0-2" scheduler="deadline"
runtime="10000000"
deadline="15000000" period="20000000"/>
...
</cputune>
This a link to a branch containing the patches:
https://gitlab.com/Algisi-00/libvirt/-/tree/sched-deadline
And this is the link to results of running the CI on such branch:
https://gitlab.com/Algisi-00/libvirt/-/pipelines/601795712
Note that the jobs that are failing are also failing in the exact
same way without these patches applied.
Feedback is welcome and very much appreciated.
Thanks and regards.
Sasha Algisi (3):
virprocess: define sched_attr and sched_setattr
virprocess: add the SCHED_DEADLINE scheduling policy
domain_conf: add SCHED_DEADLINE support in the XML configuration
NEWS.rst | 5 ++
docs/formatdomain.rst | 16 +++-
src/ch/ch_process.c | 3 +-
src/conf/domain_conf.c | 52 +++++++++++--
src/conf/domain_conf.h | 3 +
src/conf/schemas/domaincommon.rng | 16 ++++
src/qemu/qemu_process.c | 8 +-
src/util/virprocess.c | 123 +++++++++++++++++++++++++++++-
src/util/virprocess.h | 6 +-
9 files changed, 216 insertions(+), 16 deletions(-)
Hey, the code looks good. However, we require that the code compiles
after each patch, which is not the case with your series. The reason for
our requirement is simple: easy git bisect. Therefore, it's okay if
feature does not work until the very last commit. We often have
patches/commits that work gradually towards grand finale.
Can you please fix that in v2?
Michal