SystemCall

Forschungspodcast über Betriebssysteme

Mit
  • Stefan Naumann
  • Florian Rommel

SC(1): Weggabelungen, Kontrollpunkte und Adressräume

Mit Stefan Naumann, Florian Rommel

Im SystemCall Podcast diskutieren wir aktuelle Themen in der Betriebssystemforschung. In der ersten Folge besprechen wir "A fork() in the Road", ein Diskussionspapier über den Systemruf fork und "Instant OS Updates via Userspace Checkpoint-and-Restart", in dem eine Möglichkeit dargestellt wird, den Betriebssystemkern auszutauschen, und die Downtime der Nutzeranwendungen gering zu halten.

In "A fork() in the Road" (HotOS'19) diskutieren die Authoren Baumann et al. den Systemruf fork. fork ist in Unix fast die einzige Möglichkeit einen neuen Prozess zu erzeugen. Dabei wird der gesamte Elternprozess kopiert, also sowohl der Adressraum, wie auch andere Kernobjekte, wie Dateideskriptoren. Daraus entstehen neue Probleme, die bei der erste Implementierung von fork in den 1970ern nicht bedacht worden sind. Baumann et al. sprechen sich dafür aus, fork als deprecated zu markieren, in neuem Code nicht mehr zu verwenden, und aus altem Code zu entfernen.

"Instant OS Updates via Userspace Checkpoint-and-Restart" verwendet Checkpoints for die Userspace Anwendungen um den Speicherinhalt bspw. für in-memory Datenbanken oder Caches über Kernwechsel hinaus zu erhalten, indem sie nach dem Restart wieder vom Kontrollpunkt gestartet werden. Dafür verwenden sie CRIU (Checkpoint-and-Restart in Userspace), eine Anwendung für das Ziehen von Kontrollpunkten für Linux. Weiter beschreiben Sie Verbesserungen im eigentlichen Umschalten zwischen den beiden Kernels durch kexec und besprechen auch Optimierungen im Ziehen und Wiederherstellen der Kontrollpunkte unserer eigentlichen Payload-Anwendungen.

Am Ende diskutieren wir kurz die aktuelle Forschung von Florian Rommel, der sich mit Adressräumen auseinander gesetzt hat und dem Wartefreien Aktualisieren von Nutzeranwendungen. Dafür wurde das Prozesskonzept von Linux derart erweitert, dass ein Prozess mehrere Adressräume beinhalten kann, zwischen denen ein Thread mehr oder weniger beliebig wechseln kann. Für das Update wird ein neuer Adressraumklon erstellt und die Änderung im neuen Adressraum vorgenommen. Änderungen von Thread in dem alten Adressraum werden auch in den neuen gespiegelt. Wenn die Threads das für angebracht halten, also wenn sie in einem sicheren Zustand sind bspw. am Ende der Abarbeitung einer Anfrage, wechseln sie in die neue Welt und arbeiten fortan auf der aktualisierten Fassung der Anwendung. Das Papier wurde auf der OSDI'20 vorgestellt.

Links

A fork() in the road

Andrew Baumann, Jonathan Appavoo, Orran Krieger, and Timothy Roscoe. 2019. A fork() in the road. In Proceedings of the Workshop on Hot Topics in Operating Systems (HotOS'19). Association for Computing Machinery, New York, NY, USA, 14–22. DOI: https://doi.org/10.1145/3317550.3321435

Instant OS Updates via Userspace Checkpoint-and-Restart

Kashyap, Sanidhya, et al. "Instant OS Updates via Userspace Checkpoint-and-Restart." 2016 USENIX Annual Technical Conference (USENIX ATC'16). 2016.

From Global to Local Quiescence: Wait-Free Code Patching of Multi-Threaded Processes

Florian Rommel, Christian Dietrich, Daniel Friesel, Marcel Köppen, Christoph Borchert, Michael Müller, Olaf Spinczyk, and Daniel Lohmann. From Global to Local Quiescence: Wait-Free Code Patching of Multi-Threaded Processes. 14th Symposium on Operating System Design and Implementation (OSDI '20). 2020.