SC(1): Weggabelungen, Kontrollpunkte und Adressräume
Mit Stefan Naumann, Florian RommelIm 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.
- Usenix: Instant OS Updates via Userspace Checkput-and-Restart
- Weiterführende Links:
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.