Xen Project Schedulers: Difference between revisions
From Xen
Jump to navigationJump to search
Lars.kurth (talk | contribs) m (moved Scheduling in Xen to Xen Project Schedulers: Terminology) |
Lars.kurth (talk | contribs) (Added first 4.5 related info) |
||
Line 1: | Line 1: | ||
__NOTOC__ |
__NOTOC__ |
||
= Xen Scheduling = |
|||
⚫ | |||
= Overview = |
|||
Xen includes kernel boot time options for scheduling. Similiar to traditional Linux schedulers that divide CPU time for userland processes, Below you will find some Xen & DomU options for the schedulers. |
|||
The Xen Project Hypervisor supports several different schedulers with different properties. |
|||
Different schedulers can be assigned to |
|||
* an entire host |
|||
* a [[Cpupools_Howto|pool]] of physical CPU’s on a host (VMs need to be assigned to a pool or pinned to a CPU) |
|||
Scheduler parameters can be modified per |
|||
* an entire host |
|||
* a CPU pool |
|||
* A Virtual Machine |
|||
== Schedulers in Xen 4.5 and beyond == |
|||
''Legend:'' |
|||
* {{Tick}} likely in 4.6 |
|||
* {{HalfDone}} possible in 4.6 |
|||
<br> |
|||
{|class="prettytable" style="text-align: left;" valign="top" |
|||
!style="width: 15%;"|Scheduler |
|||
!style="width: 30%;"|Use-cases |
|||
!style="width: 15%;"|Xen 4.5 |
|||
!style="width: 30%;"|Plans for 4.6+ |
|||
|- |
|||
|[[Credit_Scheduler|Credit]] |
|||
|General Purpose |
|||
|Supported<br>'''Default''' |
|||
|Supported |
|||
|- |
|||
|[[Credit2_Scheduler_Development|Credit 2]] |
|||
|General Purpose<br> |
|||
Optimized for lower latency, high VM density |
|||
|Experimental |
|||
|{{Tick}} Supported<br>{{HalfDone}} '''Default''' |
|||
|- |
|||
⚫ | |||
|Soft & Firm Real-time<br>Multicore<br>Embedded, Automotive, Graphics & Gaming in the Cloud, Low Latency Workloads |
|||
|Experimental |
|||
|{{Tick}} Hardening<br>{{Tick}} Optimization<br>{{Tick}} Better XL support<br>{{Tick}} <1μs granularity<br>{{HalfDone}} Supported |
|||
|- |
|||
|[[ARINC653_Scheduler|ARINC 653]] |
|||
|Hard Real-time <br>Single core<br>Avionics, Drones, Medical |
|||
|Supported<br>Compile time |
|||
|{{Tick}} No change |
|||
|} |
|||
⚫ | |||
* '''sched''' heading in [http://xenbits.xen.org/docs/unstable/misc/xen-command-line.html Xen unstable boot options] (for other versions of Xen, see [[:Category:ManPage]]) |
|||
* [[XL]] scheduler commands under '''SCHEDULER SUBCOMMANDS''' in [http://xenbits.xen.org/docs/unstable/man/xl.1.html#scheduler_subcommands XL unstable man pages] (for other versions of Xen, see [[:Category:ManPage]]) |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
* [[:Category:Performance]] |
|||
= History of Xen Schedulers = |
= History of Xen Schedulers = |
||
⚫ | |||
== 1. Borrowed Virtual Time (Xen 2.0/3.0) == |
== 1. Borrowed Virtual Time (Xen 2.0/3.0) == |
||
Line 109: | Line 166: | ||
A related wiki topic on Real Time Applications & [[Preemption]] . |
A related wiki topic on Real Time Applications & [[Preemption]] . |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
[[Category:Xen]] |
[[Category:Xen]] |
||
[[Category:Xen 4.5]] |
|||
[[Category:Overview]] |
[[Category:Overview]] |
||
[[Category:Developers]] |
[[Category:Developers]] |
Revision as of 13:48, 9 February 2015
Overview
The Xen Project Hypervisor supports several different schedulers with different properties.
Different schedulers can be assigned to
- an entire host
- a pool of physical CPU’s on a host (VMs need to be assigned to a pool or pinned to a CPU)
Scheduler parameters can be modified per
- an entire host
- a CPU pool
- A Virtual Machine
Schedulers in Xen 4.5 and beyond
Legend:
- ✓ likely in 4.6
- ✓ possible in 4.6
Scheduler | Use-cases | Xen 4.5 | Plans for 4.6+ |
---|---|---|---|
Credit | General Purpose | Supported Default |
Supported |
Credit 2 | General Purpose Optimized for lower latency, high VM density |
Experimental | ✓ Supported ✓ Default |
RTDS | Soft & Firm Real-time Multicore Embedded, Automotive, Graphics & Gaming in the Cloud, Low Latency Workloads |
Experimental | ✓ Hardening ✓ Optimization ✓ Better XL support ✓ <1μs granularity ✓ Supported |
ARINC 653 | Hard Real-time Single core Avionics, Drones, Medical |
Supported Compile time |
✓ No change |
Also See
- sched heading in Xen unstable boot options (for other versions of Xen, see Category:ManPage)
- XL scheduler commands under SCHEDULER SUBCOMMANDS in XL unstable man pages (for other versions of Xen, see Category:ManPage)
- Credit Scheduler
- Credit2 Scheduler Development
- RTDS-Based-Scheduler
- ARINC653 Scheduler
- Category:Scheduler
- Category:Resource Management
- Category:Performance
History of Xen Schedulers
This content was originally compiled by Jacob Mathai.
1. Borrowed Virtual Time (Xen 2.0/3.0)
sched=bvt Global Parameters ctx_allow - The context switch allowance is similar to the ''quantum'' in traditional schedulers. It is the minimum time that a scheduled domain will be allowed to run before being preempted. Per-domain parameters mcuadv - the MCU (Minimum Charging Unit) advance determines the proportional share of the CPU that a domain receives. It is set inversely proportionally to a domain's sharing weight. warp - the amount of `virtual time' the domain is allowed to warp backwards warpl - the warp limit is the maximum time a domain can run warped for warpu - the unwarp requirement is the minimum time a domain must run unwarped for before it can warp again
2. Atropos (Xen 2.0)
sched=atropos Atropos is a soft real time scheduler. It provides guarantees about absolute shares of the CPU, with a facility for sharing slack CPU time on a best-effort basis. It can provide timeliness guarantees for latency-sensitive domains. Every domain has an associated period and slice. The domain should receive `slice' nanoseconds every `period' nanoseconds. This allows the administrator to configure both the absolute share of the CPU a domain receives and the frequency with which it is scheduled. Note: don't over-commit the CPU when using Atropos (i.e. don't reserve more CPU than is available -- the utilization should be kept to slightly less than 100% in order to ensure predictable behavior). Per-domain parameters : period - The regular time interval during which a domain is guaranteed to receive its allocation of CPU time. slice - The length of time per period that a domain is guaranteed to run for (in the absence of voluntary yielding of the CPU). latency - The latency hint is used to control how soon after waking up a domain it should be scheduled. xtratime - This is a boolean flag that specifies whether a domain should be allowed a share of the system slack time.
3. Round Robin (Xen 2.0)
sched=rrobin The round robin scheduler is included as a simple demonstration of Xen's internal scheduler API. It is not intended for production use. Global Parameters rr_slice - The maximum time each domain runs before the next scheduling decision is made.
4. sEDF scheduler (Xen 3.0)
sched=sedf (from docs/misc/sedf_scheduler_mini-HOWTO.txt) This scheduler provides weighted CPU sharing in an intuitive way and uses realtime-algorithms to ensure time guarantees. Per-domain parameters use "xm sched-sedf <dom-id> <period> <slice> <latency-hint> <extra> <weight>" -period/slice are the normal EDF scheduling parameters in nanosecs -latency-hint is the scaled period in case the domain is doing heavy I/O (unused by the currently compiled version) -extra is a flag (0/1), which controls whether the domain can run in extra-time -weight is mutually exclusive with period/slice and specifies another way of setting a domains cpu slice See wikipedia for a short intro to EDF: http://en.wikipedia.org/wiki/Earliest_deadline_first_scheduling
5. ARINC 653 (Xen 4.0)
sched=arinc653 The arinc653 scheduler follows the ARINC 653 specification for scheduling, giving each partition (domain) a fixed, dedicated time slot for execution. Note: Current implementation does not support multicore, so 'maxcpus=1' must be set at boot.
System Calls and Scheduling
Some Scheduling System Calls /schedule.c SCHEDOP_yield SCHEDOP_block SCHEDOP_shutdown *nice( ) getpriority( ) setpriority( ) sched_getscheduler( ) sched_setscheduler( ) sched_getparam( ) sched_setparam( ) sched_yield( ) sched_get_ priority_min( ) sched_get_ priority_max( ) sched_rr_get_interval( )
A related wiki topic on Real Time Applications & Preemption .