Component Based System Design
This is a collection of slides and small programs / scripts (with
corresponding instructions) used in the CBSD course, for the lessons
about scheduling real-time components (10 hours in total).
The teaching material is stored here because didactive
sucks has some "interesting issues".
List of slides:
Other Material
To begin, here are some simple
analysis tools, also
containing some simple exercizes (look at the README.txt file). As an
example, a possible minimalistic solution to the 4th exercize can be
downloaded from here (notice that this program
uses a brute force approach iterating the server period and maximum
budget over a lot of possible values, and checking if the taskset is
schedulable; the ranges of values over which the two parameters iterate
are just examples...). A similar result can
be obtained using a shell script.
To run some simple experiments with KVM and periodic tasksets,
you can use these scripts and binaries.
The initramfs image contains the
PeriodicTask program used for tests.
The initramfs used for the tests
can be built using some scripts and the
PeriodicTask sources.
Some Possible Projects for the Exam
Notice that some of the projects are easier and some are more difficult;
if you are interested, contact me for more information.
Extend the periodic server design tool
(see the 4th exercize in the README.txt of the
analysis tools) to support EDF
as a guest scheduler. Then, Repeat the
experiments with KVM and periodic tasksets
using EDF (SCHED_DEADLINE) as a guest scheduler and check the
results
- Extend the periodic server design tool
(see the 4th exercize in the README.txt of the
analysis tools) to support VMs
with multiple virtual CPUs (you will need to partition the guest
taskset, using some kind bin-packing heuristics)
Re-implement the BuildCore scripts
seen during the lessons using a Makefile
- Analyze the problems of global guest schedulers from the theoretical
point of view (find a better example to show the issue and
eventually try to address the issue)
- Experiment with a para-virtualized scheduler to address the
problems with global guest schedulers
- Run some experiments with a
hierarchical extension for SCHED_DEADLINE
that allows to build scheduling hierarchies based on Linux
containers (cgroups/namespaces)
- Some other projects based on this patchset are also available
(using the patchset with Docker/Kubernetes or similar,
re-implementing part of the patchset based on a new proposal,
implementing support for cgroups v2, ...)