Design and Implementation of a Light-Weight Container Runtime for Real-Time Applications
- Typ der Arbeit: Masterarbeit
- Status der Arbeit: abgeschlossen
- Betreuer: Christian Dietrich
- Bearbeiter: Niklas Gollenstede
- Ende der Arbeit: 31. Aug 2022
From industrial automation, to automotive assistance, to experiments in space, there are numerous fields where multiple applications with different real-time requirements are located in close proximity and/or need to re-deployable. Containerization can help deploy run multiple applications on the same hardware, at the same or different times. While this is an established technique esp. for web applications in data centers, there are some significant challenges when applying it to real time applications on lower end hardware. We propose a statically configured container runtime that:
- reduces runtime overhead, by doing analytical and setup tasks ahead of time and outside the execution environment
- allows switching between configurations, while minimizing deployment overhead (storage/transmission)
- requires the containers to declare their real-time requirements, such that they can be statically analyzed and monitored during execution
- provides containers direct access to dedicated hardware
- statically configures low-overhead/jitter communication between containers
The system is composed of standard Linux and other open source
components where possible, e.g. systemd-nspawn
for process isolation
(possibly with some patches), file hard links to reduce storage
overhead, various mount options, ZeroMQ backed by shared memory for
RPC, etc. A PREEMPT_RT
-patched Linux kernel is used as a basis to
provide real-time scheduling. Proper configuration of process
priorities based on the container declarations is (presumably)
important for sufficiently deterministic timing. Dual-kernel or
hypervisor based approaches may later be added to satisfy applications
with tighter requirements. Research question(s): (Will probably need
to be based on shortcomings with existing approaches early on.) What
are the main (technical) challenges why such systems aren’t (widely)
used yet? What are the easiest (/ most standard) approaches to tackle
those?