CPU sharing allows the virtual CPUs (vCPUs) of different VMs to run on the same physical CPU, just like how multiple processes run concurrently on a single CPU. Internally the hypervisor adopts time slicing scheduling and periodically switches among those vCPUs.
This feature can help improve overall CPU utilization when the VMs are not fully loaded. However, sharing a physical CPU among multiple vCPUs increases the worst-case response latency of them, and thus is not suitable for vCPUs running latency-sensitive workloads.
2. ACRN vCPU Scheduling Overview
Fig 1: ACRN vCPU Scheduling Overview
3. ACRN Scheduling Framework
The design principle of ACRN scheduling framework
- Follow the principle of modularity and Decoupling vCPU layer and specific scheduling algorithms
- Abstract the scheduling objects, new scheduler can be easily extended.
- A scalable context switch architecture
- Maintain the thread_object state machine
Fig 2: ACRN Scheduling Framework
Fig 3: Relationships Between Key Data Structures
Fig.4 Scheduling Object State Transition
4. Scheduling Framework API
Fig.5 Scheduling Framework API
- vcpu derived from thread_obj
- thread_obj is the scheduling entity from the scheduling framework perspective
- scheduler is abstracted from the scheduling framework, several callbacks need to be implemented by each scheduler.
5. Scheduling Points and Scheduling Request Submitting Points
6. Registers Save and Restore In Context Switch
The vCPU layer will register two function switch_in and switch_out for platform architecture level context switch handling.
7. The Schedulers
The IORR Scheduler
The BVT Scheduler
The Priority Based Scheduler
This scheduler supports vCPU scheduling based on their static priorities defined in the scenario configuration. A vCPU can be running only if there is no higher-priority vCPU running on the same physical CPU.