Elevating System Requests to First-Class Citizens of Work-Stealing Concurrency Platforms

Florian Fischer

Abstract

Concurrency platforms are a widespread tool for writing comprehensible and maintainable programs utilizing the parallel computing resources provided by modern hardware. Language-based concurrency platforms like Google’s Go expand the benefits of concurrent programming to system requests by providing a seemingly blocking API and thus allow, e.g., the creation of simple while high-performant network services. Existing concurrency platforms rely on outdated synchronous I/O and readiness interfaces of the underlying operating system. Schmaus et al. proposed a general and highly efficient way to integrate system-request capabilities into a prototypical concurrency platform employing modern queue-based asynchronous system-request interfaces (e.g., Linux’s io_uring). This thesis takes the proposed integration one step further by adapting the inexpensive and effective work-stealing scheme to the request completions asynchronously generated by the operating system. Furthermore, it presents a novel synthesis of the concurrency platform worker-suspension mechanisms with the queue-based system-request interface. This synthesis, combined with specialized task-suspension kernel-interface waitfd, increases the runtime systems throughput while reducing its latency. The in this thesis proposed waitfd interface allows efficient futex-like suspension while passing information about where new work can be obtained to an awoken worker. This information helps to mitigate the initial uninformed randomized work stealing. Additionally, using a specialized in-kernel object (i.e., waitfd) allows the operating system to participate in the suspension mechanisms by directly posting notifications about completed system requests (e.g., a completed read() operation). This participation prevents further context-switches caused otherwise by an additional round-trip through user space. Micro-benchmarks show that posting notifications from the kernel is an adequate tradeoff compared to busy polling between continuation latency (42us higher latency) and power consumption (55.51% less energy needed). A network echo server benchmark shows that completion stealing increases the runtime system’s throughput by 54.87% and using a waitfd-based sleep strategy by 61.2% compared to the status quo. Furthermore, a waitfd-based sleep strategy can reduce the time needed to search the Linux kernel source for a fixed string by 4.95%.

Kurzfassung

Nebenläufigkeitsplattformen sind ein weit verbreitetes Werkzeug, um verständliche und wartbare Programme zu schreiben, welche die parallelen Rechenressourcen moderner Hardware ausnutzen. Programmiersprachenbasierte Nebenläufigkeitsplattformen, wie z.B. Go der Firma Google, erweitern die Vorteile nebenläufiger Programmierung mit Betriebssystemfunktionen, indem sie eine vermeintlich blockierende Programmierschnittstelle anbieten, wodurch z.B. das Schreiben einfacher aber hoch-performanter Netzwerkdienste ermöglicht wird. Bestehende Nebenläufigkeitsplattformen setzen auf überholte synchrone E/A- und Verfügbarkeitsschnittstellen des zugrundeliegenden Betriebssystems. Schmaus et al. haben eine generische, hocheffiziente Integration von Betriebssystemfunktionen in eine prototypische Nebenläufigkeitsplattform vorgestellt, basierend auf modernen warteschlangenbasierten, asynchronen Schnittstellen, wie Linux’s io_uring. Diese Arbeit verbessert die vorgeschlagene Integration durch die Anwendung der günstigen und effektiven Arbeitsentzugs-Ablaufplanung auf die asynchron erzeugten Ergebnisse der Betriebssystemfunktionen. Des Weiteren präsentiert sie eine neuartige Synthese der Arbeiterprozessstilllegung einer Nebenläufigkeitsplattform mit der warteschlangenbasierten Betriebssystemschnittstelle. Diese Synthese in Kombination mit der auf Stilllegung spezialisierten Kernschnittstelle waitfd erhöhen den Durchsatz und reduzieren die Verzögerung des Laufzeitsystems. Die in dieser Arbeit vorgeschlagene waitfd Schnittstelle erlaubt die futex ähnliche Prozessstilllegung sowie das Zustellen von Informationen an aufgeweckte Prozesse, wo Arbeit gefunden werden kann. Diese Information hilft den anfänglichen, uninformierten zufälligen Arbeitsentzug einzudämmen. Zusätzlich ermöglicht die Verwendung des spezialisierten Kernobjekts waitfd dem Betriebssystem am Stilllegungsverfahren teilzunehmen, indem es direkt Benachrichtigungen über abgeschlossene Systemanfragen (z.B. eine abgeschlossene Leseoperation) bekanntmacht. Diese Kooperation des Betriebssystems vermeidet zusätzliche Kontextwechsel erzeugt durch ein ansonsten benötigtes Hin-und-Zurück durch den Benutzerbereich. Mikroexperimente zeigen, dass das Bekanntmachen von Ereignissen aus dem Kern einen geeigneten Kompromiss zwischen Verzögerung (42us höhere Verzögerung) und Stromverbrauch (55.51% weniger Stromverbrauch) im Vergleich zu anhaltendem Abfragen darstellt. Ein Netzwerk-Echoserver-Experiment zeigt, dass Ergebnisentzug den Durchsatz des Systems um 54.87% steigert, sowie die Verwendung eines auf waitfd basierenden Stilllegungsverfahrens 61.2% verglichen mit dem Status Quo. Darüber hinaus verkürzt das waitfd basierte Verfahren die Zeit, den Linux Quellcode nach einem festen Wort zu durchsuchen, um 4.95%.

Thesis

Florian Fischer, “Elevating System Requests to First-Class Citizens of Work-Stealing Concurrency Platforms”, Master’s Thesis, Friedrich-Alexander-Universität Erlangen-Nürnberg (FAU), Dept. of Computer Science, June 2022. MA-I4-2022-01. DOI: 10.25593/opus4-fau-19938

PDF Copyright 2022 Florian Fischer.
This thesis is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. To view a copy of this license, visit https://creativecommons.org/licenses/by-nc-nd/4.0/.

Evaluation Data

Fischer, Florian. (2022). Florian Fischer Master thesis data. Zenodo. https://doi.org/10.5281/zenodo.6587463

FOSS contributions

FOSS