Files
xen/docs/features/sched_rtds.pandoc
Andrew Cooper 5020c170e2 docs/pandoc: Don't escape underscores in the middle of text
Pandoc deliberately (and contrary to markdown) doesn't treat underscores in
the middle of normal text as emphasis markers, as this is almost always the
unhelpful interpretation.

For text which is emphasised using _, an underscore in the middle is
interpreted, but the emphasis marker can be switched to * instead.

One problem case is where we use {} globbing with identifier names, as it
counts as a word break.  Therefore, we do need to retain the escaped
underscore immediately following a closing brace.

No change in content - only formatting.  This results in the text being easier
to read and grep.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
2019-01-02 17:50:36 +00:00

123 lines
4.7 KiB
Plaintext

% RTDS Scheduler
% Revision 1
\clearpage
# Basics
---------------- ----------------------------------------------------
Status: **Experimental**
Component: Hypervisor
---------------- ----------------------------------------------------
# Overview
RTDS is one of the virtual CPU (vCPU) scheduler available in the Xen
hypervisor.
RTDS is a real-time scheduler, so its purpose is enabling
**deterministic** scheduling of the virtual machine's vCPUs. It has
been originally developed in the context of the RT-Xen project.
# User details
RTDS is not in use by default. In order to use it as the Xen scheduler
the following parameter should be passed to the hypervisor at boot:
`sched=rtds`
Once the system is live, for creating a cpupool with RTDS as its
scheduler, either compile a cpupool configuration file, as described
in `docs/man/xlcpupool.cfg.pod.5` (and as exemplified in
`tools/examples/cpupool`), or use just `xl` directly:
xl cpupool-create name=\"pool-rt\" sched=\"rtds\" cpus=[4,5,6,8]
For checking or changing a VM's scheduling parameters from xl, do
as follows:
* `xl sched-rtds -d vm-rt -v all`
* `xl sched-rtds -d vm-rt -v all -p 10000 -b 2500`
It is possible, for a multiple vCPUs VM, to change the parameters of
each vCPU individually:
* `xl sched-rtds -d vm-rt -v 0 -p 20000 -b 10000 -e 1 -v 1 -p 45000 -b 12000 -e 0`
# Technical details
Implementation entirely lives in the hypervisor. Xen has a pluggable,
hook based, architecture for schedulers. Thanks to this, RTDS code
is all contained in `xen/common/sched_rtds.c`.
In libxl, the availability of the RTDS scheduler is advertised by
the presence of the LIBXL_HAVE_SCHED_RTDS symbol. The ability of
specifying different scheduling parameters for each vcpu has been
introduced later, and is available if the following symbols are defined:
* LIBXL_HAVE_VCPU_SCHED_PARAMS,
* LIBXL_HAVE_SCHED_RTDS_VCPU_PARAMS,
* LIBXL_HAVE_SCHED_RTDS_VCPU_EXTRA.
# Limitations
RTDS is a special purpose scheduling. This is by design, and not at
all a limitation, but it is certainly something to keep in mind when
thinking about using it. The purpose of the scheduler is enabling
deterministic and statically analyzable behavior (as per the
real-time academic literature), according to the scheduling parameters
assigned to each vCPU.
Using RTDS a the Xen scheduler, and/or for general purpose workloads
is definitely possible, but the vCPU scheduling parameters (of both
Domain0 and of the various VMs) would probably require tweaking, with
respect to their default values.
# Testing
Any change done in RTDS must be tested by doing the following:
* create a cpupool with RTDS as its scheduler,
* create a few virtual machines a move them in and out of the pool,
* create a few virtual machines, directly inside the pool, and verify
that they boot and can run some basic workload (e.g., login into them
and run simple commands),
* shutdown/reboot the virtual machines,
The fact that the system boots fine when passing `sched=rtds` to Xen
should also be verified.
Finally, to check that the scheduler is working properly (although only
at a macroscopic level), the following should be done:
* create a VM with 1 vCPU and put it in the RTDS cpupool,
* set the scheduling parameters such as it has a 50% reservation, with
`xl sched-rtds -d vm -v all -p 100000 -b 50000`,
* run a CPU-burning process inside the VM (e.g., `yes`),
* check with `xentop` (in Domain0) that the VM is getting no more than
50% pCPU time.
# Areas for improvement
* performance assessment, especially focusing on what level of real-time
behavior the scheduler enables.
# Known issues
* OSSTest reports occasional failures on ARM.
# References
* "RT-Xen: Real-Time Virtualization" [XPDS14 Presentation](http://events.linuxfoundation.org/sites/events/files/slides/2014_Xen_Developer_Summit_0.pdf)
* "Scheduling in Xen" [XPDS15 Presentation](http://events.linuxfoundation.org/sites/events/files/slides/Faggioli_XenSummit.pdf)
* [RT-Xen Project](https://sites.google.com/site/realtimexen/)
* [RTDS-Based-Scheduler](https://wiki.xenproject.org/wiki/RTDS-Based-Scheduler)
* "The RTDS Scheduler" [on the Xen-Project wiki](https://wiki.xenproject.org/wiki/RTDS-Based-Scheduler)
* "Xen Project Schedulers" [on the Xen-Project wiki](https://wiki.xenproject.org/wiki/Xen_Project_Schedulers)
# History
------------------------------------------------------------------------
Date Revision Version Notes
---------- -------- -------- -------------------------------------------
2016-10-14 1 Xen 4.8 Document written
2017-08-31 2 Xen 4.10 Revise for work conserving feature
---------- -------- -------- -------------------------------------------