Treiber in High-Level Programmiersprachen
2019-04-21, 16:00–16:45, EI 7

Treiber werden üblicherweise in C geschrieben. Wir zeigen wie man Netzwerktreiber in Rust, Go, OCaml, Haskell, C#, Python und Swift schreibt.


Treiber in Betriebssystemen werden üblicherweise in der selben Sprache wie das System geschrieben -- also in C oder eingeschränkten Varianten von C++.
In der Welt der Netzwerktreiber gibt es einen Trend dazu den Treiber aus dem Kernel in normale Prozesse zu verlagern. Dadurch fällt die Einschränkung in der Sprachwahl weg, aber gängige Treiber wie DPDK werden trotzdem noch in C geschrieben.

Wir haben Netzwerktreiber für Intel 10 Gbit/s Netzwerkkarten in Rust, Go, OCaml, Haskell, C#, Python und Swift geschrieben.
Alle Implementierungen sind komplett im Userspace laufende PCIe Treiber die in jeweils ca. 1.000 Zeilen Code demonstrieren dass es möglich ist andere Sprachen als C zu benutzen.

Der Talk geht auf die Vor- und Nachteile der einzelnen Sprachen ein, insbesondere welche Sicherheitsfeatures von Sprachen für bessere Treiber benutzt werden können und wie viel Performance diese Sicherheitsfeatures kosten.
Zusätzlich dazu haben wir noch Unterstützung für die IOMMU implementiert und evaluieren ob sich die Nutzung dieser Hardware lohnt.

Weitere Informationen zu den verschiedenen Projekten finden sich auf unserer GitHub-Seite:
https://github.com/ixy-languages/ixy-languages/

Dieser Talk ist ein Update zu unserem Talk auf dem 35C3, seitdem hat sich viel getan:

  • Performance- und Latenzmessungen für alle Sprachen
  • Warum ist Rust langsamer als C? Ergebnisse basierend auf Performancecountern der CPUs
  • Meta-Analyse der Implementierungen: Welche Sprache bietet welche Sicherheitsfeatures? Wie groß/komplex sind die verschiedenen Implementierungen?
Siehe auch: Folien