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

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?