[Podcast] Kernel Panic - Board on Fire ~~> #009: Ho Ho Ho VirtIO - QEMU, KVM, Barebox und wie sie zusammengefunden haben
Wir haben lange gewartet, um endlich wieder eine Weihnachtssonderfolge herausbringen zu können. Für diese Folge hat uns Ahmad mal wieder ein spannendes Thema mitgebracht, oder viel mehr einen Themenkomplex. Er erzählt uns nämlich wie sich, als Barebox in die oe-core Layer des Yocto Projekts gebracht wurde, die Gelegenheit ergeben hat spannendeende Dinge über Emulation und Virtualisierung mit QEMU und KVM und Paravirtualisierung mit VirtIO zu lernen.
Über den Kernel Panic - Board on Fire Podcast
In wahrscheinlich jedem Berufsfeld gibt es Schauergeschichten, die man sich abends am Lagerfeuer mit einer Taschenlampe am Kinn erzählen kann. So auch in der Welt der Software. In diesem Podcast geben wir in unregelmäßigen Abständen Entwicklerinnen und Entwicklern die Möglichkeit ihre Schauergeschichten zu erzählen. Es geht um monatelange Fehlersuchen, deren Ergebnis nur eine Hand voll Zeilen falscher Code sind, um subtil fehlerhafte Hardware, die zu sporadisch auftretenden Geistern im System führt, um bröckelnde Software, deren Quellcode schon vor Jahren verloren gegangen ist, und manchmal auch um ganz was anderes.
Shownotes
Wer nicht die ganze Folge hören möchte kann sich an den folgenden Zeitmarken orientieren:
- 00:00
Einleitende warme Worte. Ahmad ist zwar nicht das erste Mal im Podcast, trotzdem stellen wir ihn, mich (Leonard), den Podcast und das Drumherum nochmal bestmöglich vor.
Wir sind ein bisschen aus der Übung, also schnallt euch an. Es wird holprig.
- 02:50
- Was ist QEMU und wo begegnet es uns als Embedded-Linux-Menschen? Warum ist manche Software besser im Emulator debuggbar als auf der echten Hardware?
- 06:50
- Welche Vor- und Nachteile bringt hardwareunterstützte Virtualisierung mit KVM gegenüber der Emulation in QEMU?
- 12:00
- Wie funktioniert eigentlich die Kommunikation mit emulierter Hardware? Also wie emuliert QEMU Peripherieeinheiten und welche Nachteile hat das für die Performance - inbesondere bei hardwareunterstützter Virtualisierung.
- 23:00
Was macht VirtIO, um den den emulierten Systemen performantere Peripherieeinheiten zur Verfügung zu stellen?
Der Oberbegriff hier ist Paravirtualisierung. In diesem Fall ist dem emulierten System durchaus bewusst, dass es in einem Emulator läuft.
- 27:00
- Ahmad erzählt wie ein Aprilscherz und das Spiel Doom dafür gesorgt haben, dass es jetzt überhaupt VirtIO-Support in Barebox gibt.
- 31:00
- Eine Lobrede auf VirtIO im Allgemeinen, darüber wo es überall genutzt wird und welche Peripherie man mittlerweile damit abdecken kann. Dazu eine Erklärung wie VirtIO eigentlich funktioniert und warum es schneller ist als klassische emulierte Peripherieeinheiten.
- 40:00
- Eine kleine Zusammenfassung dessen, was wir bisher gehört haben.
- 48:00
Zum eigentlichen Hauptteil. Dem Bug, der uns zu alledem gebracht hat.
Barebox sollte in die oe-core Layer des Yocto Projekts Einzug erhalten. Dazu wurden automatisierte Tests geschrieben, die Barebox in einer virtuellen Maschine starten und prüfen ob es grundsätzlich noch funktioniert. Das Schlug in einem Fall fehl: wenn der Test auf einem ARM64 Host in einer KVM-beschleunigten ARM64 virtuellen Maschine läuft.
- 60:00
Bonus-Bug Nr. 1:
There are two hards things in Computer Science: cache invalidation and naming things.
—Phil Karlton
In diesem Fall crashte Barebox unter KVM-Virtualisierung unter ARM64 wegen nicht implementierter Cache-Maintenance Funktionalität.
- 66:00
Bonus-Bug Nr. 2: The Caches strike back.
Das System lief grundsätzlich mit KVM Virtualisierung, aber Zugriffe auf VirtIO Geräte waren enorm langsam und wurden schneller wenn sie auf eigentlich langsameren Prozessorkernen ausgeführt wurden oder andere Prozesse den Prozessor ausgelastet haben.
- 72:00
Ende gut alles gut.
Barebox is jetzt in oe-core und steht damit ohne zusätzliche Layer einbinden zu müssen allen Yocto-Nutzenden zur Verfügung.
Further Readings
[Podcast] Kernel Panic - Board on Fire ~~> #008: Aus dem Takt - Das Doppelpack Clock-Glitches
In dieser Folge reden Ahmad und Leonard über Takte / Clocks in Prozessoren. Darüber warum es so viele gibt, wie sie erzeugt und im Chip verteilt werden und darüber, was dabei eigentlich so schief gehen kann.
[Podcast] Kernel Panic - Board on Fire ~~> #007: GPU und nu? Der Weg zum offenen Grafiktreiber
In dieser Folge erzählt Lucas Stach uns wie er in die Entwicklung der offenen Grafiktreiber Nouveau und Etnaviv hineingeraten ist und was so ein Grafiktreiber eigentlich tut. Wir reden darüber warum Grafikkarten überhaupt Software ausführen und wie diese Software von der Anwendung bis in die Grafikkarte kommt.
[Podcast] Kernel Panic - Board on Fire ~~> #006: Der Browser im Fahrkartenautomaten - Webtechnologie trifft Embedded-GUIs
In dieser Folge erzählt Bastian Krause uns warum man öfter als man vielleicht denkt Webbrowser auf Embeddedgeräten vorfindet und was die verwendeten Browser von normalen Desktopbrowsern unterscheidet. Außerdem reden wir über Browserengines im Allgemeinen und auch ein bisschen über automatisiertes Testing von Webapplikationen.