1% Credit Scheduler
2% Revision 1
3
4\clearpage
5
6# Basics
7---------------- ----------------------------------------------------
8         Status: **Supported**
9
10      Component: Hypervisor
11---------------- ----------------------------------------------------
12
13# Overview
14
15Credit (also known as Credit1) is the old virtual CPU (vCPU) scheduler
16of the Xen hypervisor.
17
18It is a general purpose, weighted fair-share scheduler.
19
20# User details
21
22Xen supports multiple schedulers. Credit is no longer the default.  In
23order to use it as the Xen scheduler the following parameter should be
24passed to the hypervisor at boot:
25
26    `sched=credit`
27
28Once the system is live, for creating a cpupool with Credit as its
29scheduler, either compile a cpupool configuration file, as described
30in `docs/man/xlcpupool.cfg.pod.5` (and as exemplified in
31`tools/examples/cpupool`), or use just `xl` directly:
32
33    xl cpupool-create name=\"pool1\" sched=\"credit\" cpus=[4,8]
34
35Two kind of interactions with the scheduler are possible:
36
37* checking or changing the global parameters, via, e.g.:
38    * `xl sched-credit -s`
39    * `xl sched-credit -s -p pool1`
40    * `xl sched-credit -s -t 20`
41* checking or changing a VM's scheduling parameters, via, e.g.:
42    * `xl sched-credit -d vm1`
43    * `xl sched-credit -d vm1 -w 512`
44
45# Technical details
46
47Implementation entirely lives in the hypervisor. Xen has a pluggable,
48hook based, architecture for schedulers. Thanks to this, Credit code
49is all contained in `xen/common/sched_credit.c`.
50
51# Limitations
52
53In Credit, a vCPU has a priority, a status (i.e., active or inactive),
54a weight and some credits... and all these things interact in a rather
55involved way. Also, with years of use, things have gotten even more
56complex (due to, e.g., the introduction of boosting, caps and vCPU
57soft-affinity).
58
59Dealing with such complexity is starting to be an issue. Odd behavior
60or subtle scheduling anomalies, that is not always possible to act upon,
61have been identified already. [1][2][3]
62
63A certain lack of scalability and difficulties and weakness in dealing
64with mixed workloads and VMs with low latency requirements are other
65known problems. [4] For all these reasons, effort is ongoing to have
66Credit2 become the new default scheduler.
67
68# Testing
69
70Any change to Credit code must to be tested by doing at least the following:
71
72* create a few virtual machine and verify that they boot and can
73  run some basic workload (e.g., login into them and run simple commands),
74* shutdown/reboot the virtual machines,
75* shutdown the system.
76
77Ideally, all the above steps should **also** be performed in a configuration
78that includes cpupools, better if with pools using different schedulers, and
79by also doing the following:
80
81* move the virtual machines between cpupools.
82
83# References
84
85* [potential non-ideal behavior on hyperthreaded systems](https://lists.xenproject.org/archives/html/xen-devel/2014-07/msg01848.html) [1]
86* [long standing BOOST vs. migration bug](https://lists.xen.org/archives/html/xen-devel/2015-10/msg02851.html) [2]
87* [priority handling issues](https://lists.xenproject.org/archives/html/xen-devel/2016-05/msg01362.html) [3]
88* "Scheduler development update", XenSummit Asia 2009 [whitepaper](http://www-archive.xenproject.org/files/xensummit_intel09/George_Dunlap.pdf) [4]
89* "Scheduling in Xen" [XPDS15 Presentation](http://events.linuxfoundation.org/sites/events/files/slides/Faggioli_XenSummit.pdf)
90* "The Credit Scheduler" [on the Xen-Project wiki](https://wiki.xenproject.org/wiki/Credit_Scheduler)
91* "Xen Project Schedulers" [on the Xen-Project wiki](https://wiki.xenproject.org/wiki/Xen_Project_Schedulers)
92
93# History
94
95------------------------------------------------------------------------
96Date       Revision Version  Notes
97---------- -------- -------- -------------------------------------------
982016-10-14 1        Xen 4.8  Document written
992019-02-7  3        Xen 4.12 No longer default scheduler
100---------- -------- -------- -------------------------------------------
101