Programmierbare asynchrone Ein-/Ausgabe auf Basis von io_uring und eBPF

Bereits vor dem Aufkommen der beiden Sicherheitslücken Meltdown und Spectre entstand durch die Moduswechsel bei der Ausführung von Systemaufrufen ein nicht zu vernachlässigender Overhead, der sich negativ auf die Ausführungszeiten von Programmen auswirkt [4, 9]. Durch die eingeführten Maßnahmen gegen die beiden Sicherheitslücken ist der Overhead noch größer geworden [3, 5] – im Extremfall werden Systemaufrufe um den Faktor 5 verlangsamt [7]. Mit einer Systemaufrufsammelschnitt stelle können mehrere aufeinanderfolgende Systemaufrufe ohne zwischenzeitige Rück kehr in den Benutzermodus gesammelt im Kernelmodus ausgeführt werden [6]. Auf diese Weise ist es möglich, die Anzahl an Moduswechsel deutlich zu verringern.

Im Rahmen einer Vorarbeit [8] wurden Systemaufrufmuster häufiger UNIX-Kommandos bezüglich ihrer Kompatibilität zu einer bereits im Ansatz in Linux existierenden Systemaufrufsammelschnittstelle analysiert: io_uring [1]. Die Analyse ergab, dass diese Schnittstelle momentan lediglich für einfache Systemaufrufmuster effektiv anwendbar ist. Für eine breite Anwendung muss von Systemaufrufen abhängige Logik durch die Schnittstelle mit im Kernelmodus ausgeführt werden, wofür sich die eBPF-VM (Extended Berkeley Packet Filter Virtual Machine) des Linuxkernels anbietet.

Ziel dieser Masterarbeit ist es, eine in der Community in Entwicklung befindliche eBPF-Erweiterung [2] für io_uring anhand realistischer und komplexer Anwendungs fälle wie dem Key-Value-Store MrCache, aber auch der in der Vorarbeit identifizierten Problemfälle, zu analysieren. An das erweiterte io_uring angepasste Varianten die ser Programme sollen bezüglich Metriken wie Laufzeit, Transaktionsdurchsatz oder Anzahl Moduswechsel – aber auch nicht-funktionaler Eigenschaften wie Anwender freundlichkeit/Benutzbarkeit der Schnittstelle – bewertet werden. Punktuell sollen hierbei Entwurfsalternativen oder -ergänzungen zur io_uring-Erweiterung, wie die Frage der Synchronisation parallel ablaufender eBPF-Programme, umgesetzt und mite valuiert werden.

Further Reading

  • [1] Axboe, J. Efficient IO with io_uring. 2019.
  • [2] Axboe, J. BPF meets io_uring., 2021.
  • [3] Becker, M., and Chakraborty, S. Measuring software performance on Linux, 2018.
  • [4] Mauro, J., and McDougall, R. Solaris internals: core kernel components, vol. 1. Prentice Hall Professional, 2001.
  • [5] Prout, A., Arcand, W., Bestor, D., Bergeron, B., Byun, C., Gadepally, V., Houle, M., Hubbell, M., Jones, M., Klein, A., et al. Measuring the impact of Spectre and Meltdown. In 2018 IEEE High Performance extreme Computing Conference (HPEC) (2018), IEEE, pp. 1–5.
  • [6] Rajagopalan, M., Debray, S. K., Hiltunen, M. A., and Schlichting, R. D. Cassyopia: Compiler assisted system optimization. In HotOS (2003), vol. 3, pp. 1–5.
  • [7] Schirmeier, H. Revisiting OS multi-calls in the light of Meltdown and KPTI, 2018.
  • [8] Tuneke, F.-B. Analyse von Systemaufrufmustern für POSIX-Sammelschnittstellen. Studienarbeit, TU Dortmund, Dec. 2020.
  • [9] Zadok, E., Callanan, S., Rai, A., Sivathanu, G., and Traeger, A. Efficient and safe execution of user-level code in the kernel. In Parallel and Distributed Processing Symposium (IPDPS’05) (2005).