FreeBSD auf Firecracker
(usenix.org)- Das Booten des FreeBSD-14-Kernels auf Firecracker VMM, einer Linux-zentrierten microVM für AWS Lambda, ist ein Beispiel dafür, wie eine minimale Virtualisierungsumgebung verborgene Annahmen und Engpässe im Initialisierungspfad eines Betriebssystems offenlegt
- Der erste Boot scheiterte an Unterschieden im ELF-Note-Format des PVH boot mode, an Xen-spezifischen Hypercalls und an Firecrackers anderer Speicheranordnung; gelöst wurde dies durch Anpassungen am PVH-Code von FreeBSD
- Da Firecracker kein ACPI bereitstellt, änderte sich der Weg, über den CPU- und Interrupt-Informationen ermittelt werden; zudem wurde die Option
MPTABLE_LINUX_BUG_COMPAThinzugefügt, um zu einem Fehler in der MPTable-Verarbeitung von Linux kompatibel zu sein - Beim Anbinden der seriellen Konsole und der Virtio-Geräte wurden Einschränkungen beim UART-Verhalten, beim Parsen der Kernel-Kommandozeile und bei nicht ausgerichtetem Disk-I/O sichtbar; FreeBSD setzt dafür
hw.broken_txfifo, eine Umgehung zum Leeren des FIFO sowie Bounce-Verarbeitung auf Basis vonbusdmaein - Mit nicht committeten Patches bootet der FreeBSD-Kernel in einer VM mit 1 CPU und 128 MB RAM in unter 20 ms; offen bleiben das Mergen der PVH-Unterstützung, die Trennung des Xen-Codes, kleinere Kernel-Konfigurationen und die Prüfung einer FreeBSD-Portierung von Firecracker
Warum FreeBSD auf Firecracker gebracht werden sollte
- Firecracker ist ein VMM, der auf Linux KVM für serverlose Ausführungsumgebungen wie AWS Lambda microVMs mit geringem Overhead erstellt und verwaltet
- Die Portierungsarbeit für FreeBSD begann im Juni 2022
- Die Motivation bestand darin, die Grenzen von FreeBSD und Firecracker gemeinsam auszuloten
- Aufbauend auf Arbeiten zur Verbesserung der FreeBSD-Bootzeit sollte geprüft werden, wie schnell es auf einem minimalen Hypervisor werden kann
- Wenn FreeBSD auf eine neue Plattform portiert wird, kommen Bugs sowohl in FreeBSD als auch in der jeweiligen Plattform zum Vorschein
- AWS Lambda unterstützt derzeit nur Linux; unabhängig davon, ob Lambda FreeBSD übernimmt, ist Firecracker-Unterstützung durch FreeBSD eine notwendige Voraussetzung
- Firecracker selbst ist eine interessante Plattform, daher sollte überprüft werden, ob es tatsächlich funktioniert
Erste Hürden bis zur Kernel-Ausführung
- Firecracker wurde ursprünglich zum Ausführen von Linux-Kerneln entwickelt, erhielt 2020 aber einen Patch zur Unterstützung des PVH boot mode zusätzlich zu
linuxboot - Da FreeBSD PVH-Boots unter Xen unterstützte, wurde derselbe Pfad mit Firecracker ausprobiert
- Das erste Problem war, dass Firecracker nach dem Laden des FreeBSD-Kernels in den Speicher den kernel entry point nicht finden konnte
- Das PVH-Boot-Protokoll speichert diesen Wert in einer ELF Note
- Bei ELF Notes gibt es
PT_NOTEundSHT_NOTE, und FreeBSD stellte nicht das Format bereit, das Firecracker suchte - Nach einer kleinen Änderung am Linker-Skript des FreeBSD-Kernels konnte Firecracker mit der Ausführung des FreeBSD-Kernels beginnen
- Die Kernel-Ausführung brach nach etwa 1 Mikrosekunde erneut ab
Frühes Debugging und Entfernen von Xen-Abhängigkeiten
- Wenn der Kernel stirbt, bevor Kernel-Debugger und serielle Konsole initialisiert sind, helfen die Debugging-Funktionen von FreeBSD kaum weiter
- Die einzige Information aus dem Firecracker-Prozess war, dass der FreeBSD-Gast einen Triple Fault ausgelöst hatte
- Durch Einfügen von
hlt-Instruktionen in die Mitte des Kernel-Startcodes wurde eine Art „Kernel Bisection“ durchgeführt, um die Absturzstelle einzugrenzen- Wird
hlterreicht, läuft Firecracker weiter, die CPU-Auslastung des Hosts fällt aber auf 0 % - Wenn Firecracker beendet wird, lässt sich schließen, dass der Absturz vor dieser Stelle passiert ist
- Wird
- Die erste Ursache war ein Xen hypercall
- Der PVH-Einstiegspunkt von FreeBSD war tatsächlich Code zum Booten unter Xen und ging davon aus, innerhalb von Xen zu laufen
- Das von Firecracker verwendete KVM stellt keine Xen-Hypercalls bereit, daher stürzt die VM beim Aufruf ab
- Anfangs wurden Xen-Hypercalls auskommentiert; später wurde die Logik so geändert, dass sie erst nach Prüfung der Xen-Signatur per
CPUIDaufgerufen werden
- Das Auslesen der physischen Speicherkarte war eine wesentliche Funktion, die bisher von Xen-Hypercalls übernommen wurde
- Seit PVH Version 1 wird ein Pointer auf die Speicherkarte über die
start_info-Seite übergeben - FreeBSD wurde so geändert, dass es statt Xen-Hypercalls die Speicherkarte aus PVH Version 1 verwendet
- Seit PVH Version 1 wird ein Pointer auf die Speicherkarte über die
- Auch Unterschiede in der Speicheranordnung von Firecracker und Xen verursachten Probleme
- Xen lädt zuerst den Kernel und platziert dann die
start_info-Seite am Ende - Firecracker legt die
start_info-Seite an eine feste niedrige Adresse und lädt danach den Kernel - Der FreeBSD-PVH-Code nahm an, dass der Bereich direkt hinter
start_infoals Scratch Space verfügbar ist; unter Firecracker wurde dadurch der frühe Kernel-Stack überschrieben - Gelöst wurde dies, indem Scratch Space hinter allen vom Hypervisor initialisierten Speicherbereichen alloziert wird
- Xen lädt zuerst den Kernel und platziert dann die
Fehlendes ACPI und MPTable-Kompatibilität
- Auf x86 bezieht FreeBSD Informationen über Festplatten, Netzwerkadapter, CPUs und Interrupt-Controller normalerweise über ACPI
- Firecracker stellt bewusst nur eine minimale Implementierung bereit und bietet kein ACPI
- Stattdessen kann FreeBSD die MPTable-Struktur aus der früheren Intel MultiProcessor Specification verwenden
- In der
GENERIC-Kernel-Konfiguration ist sie standardmäßig nicht enthalten - In einer schlanken Kernel-Konfiguration für Firecracker konnte sie durch Hinzufügen von
device mptablegenutzt werden
- In der
- Die von Firecracker bereitgestellte MPTable entsprach nicht dem Standard, sondern war auf die von Linux akzeptierte Form zugeschnitten
- Linux hatte einen Bug in der Art, wie es MPTable findet und parst
- Firecracker wurde mit dem Ziel entworfen, Linux zu booten, und stellt deshalb eine nicht standardkonforme Anordnung bereit, die Linux unterstützt
- Das standardkonform und unabhängig implementierte FreeBSD fand die falsch platzierte MPTable nicht und konnte sie selbst dann nicht parsen, wenn es sie fand
- In FreeBSD wurde die Kernel-Option
options MPTABLE_LINUX_BUG_COMPAThinzugefügt- Sie wird verwendet, wenn Bug-for-Bug-Kompatibilität zur MPTable-Verarbeitung von Linux nötig ist
- Mit dieser Option kam der FreeBSD-Boot unter Firecracker weiter voran
Unterstützung für serielle Konsole und Virtio-Geräte
- Eines der wenigen von Firecracker bereitgestellten emulierten Geräte ist ein serieller Port
- In einer üblichen Konfiguration werden Standardein- und -ausgabe des Firecracker-Prozesses zur Ein- und Ausgabe des seriellen Ports der VM
- Der FreeBSD-Kernel bootete mit einer im Kernel-Image enthaltenen Root-Disk, und auch die Konsolenausgabe des Kernels ließ sich lesen
- Beim Übergang zum Userland-Boot blieb die Konsolenausgabe nach 16 Zeichen stehen
- Das entsprach den Symptomen eines früheren UART-Bugs in QEMU
- Wenn das Transmit-FIFO des UART leer war, kam kein Interrupt, sodass FreeBSD nach 16 Bytes nicht weiterschreiben konnte
- Gelöst wurde dies, indem der bestehende Workaround des FreeBSD-Kernels,
hw.broken_txfifo="1", als Kernel-Umgebungsvariable einkompiliert wurde
- Auch die Konsoleneingabe funktionierte nicht
- Firecracker nahm an, dass das Receive-FIFO des emulierten UART voll sei, und las deshalb nicht von der Konsole
- FreeBSD füllte während der UART-Initialisierung das Receive-FIFO mit Müllwerten, um dessen Größe zu messen, und leerte es anschließend über das FIFO Control Register
- Firecracker implementiert das FIFO Control Register nicht, sodass das FIFO dauerhaft voll blieb
- FreeBSD wurde so geändert, dass es nach dem Leeren des FIFO, falls
LSR_RXRDYweiterhin gesetzt ist, Zeichen einzeln ausliest und verwirft, um das FIFO zu leeren
- Für Disk- und Netzwerkzugriff waren Virtio block/network-Geräte nötig
- Firecracker stellt sie als
mmio-Geräte bereit - In die FreeBSD-Firecracker-Kernel-Konfiguration wurde
device virtio_mmioaufgenommen
- Firecracker stellt sie als
- FreeBSD erwartete ursprünglich,
mmio-Geräte über FDT zu entdecken, während Firecracker auf der Kernel-Kommandozeile Direktiven wievirtio_mmio.device=4K@0x1001e000:5übergibt- FreeBSD fügte Code hinzu, der diese Direktiven parst und Geräteknoten für
virtio_mmioerstellt - Sobald ein Geräteknoten existiert, erkennt der bestehende Probe-Prozess von FreeBSD den Virtio-Gerätetyp und bindet den passenden Treiber an
- FreeBSD fügte Code hinzu, der diese Direktiven parst und Geräteknoten für
- Bei mehreren Virtio-Geräten entstand ein Problem beim Parsen der Kernel-Kommandozeile
- Firecracker übergibt mehrere
key=value-Paare nach Linux-Art - FreeBSD parst die Kernel-Kommandozeile als Umgebungsvariablen; wenn es zwei Einträge mit dem gleichen Namen
virtio_mmio.device=gibt, bleibt nur einer erhalten - Der frühe Parser für die Kernel-Umgebung wurde so geändert, dass doppelte Variablen mit einem nummerierten Suffix bewahrt werden, etwa als
virtio_mmio.device=undvirtio_mmio.device_1=
- Firecracker übergibt mehrere
- Nach einem abnormalen Shutdown kam es beim nächsten Boot zu einer Kernel Panic, sobald
fscklieffsckist einer der seltenen Fälle, die unter FreeBSD nicht seitenausgerichtetes Disk-I/O erzeugen- Firecrackers Virtio-Implementierung akzeptiert nur einen einzelnen Datenpuffer und unterstützt nicht den üblichen Virtio-Ansatz, Puffer über Seitengrenzen hinweg in mehrere Segmente aufzuteilen
- Der Virtio-Block-Treiber von FreeBSD wurde auf die Verwendung von
busdmaumgestellt; nicht ausgerichtete Requests werden über temporäre Puffer per Bounce-Verarbeitung an die Firecracker-Beschränkungen angepasst
Von Firecracker offengelegte Boot-Optimierungen
- Nachdem FreeBSD unter Firecracker zu laufen begann, wurden Ansatzpunkte zur Reduktion von Bootzeit und Speicherverbrauch deutlich
- In einer VM mit 128 MB RAM war fast die Hälfte des Systemspeichers im Zustand
wired, und Prozesse wurden häufig beendet- Die Untersuchung ergab, dass
busdma32 MB für Bounce Pages reservierte - Wegen der Firecracker-Beschränkungen braucht jedes Disk-I/O höchstens eine Bounce Page von 4 KB
- Ein Patch, der die Reservierung von Bounce Pages für Geräte mit nur wenigen unterstützten I/O-Segmenten begrenzt, reduzierte den Speicherverbrauch auf 512 KB
- Die Untersuchung ergab, dass
- Optimierungen am Kernel-Zufallszahlengenerator verkürzten die Bootzeit
- In VMs ist hardwaregerätebasierte Entropie möglicherweise nicht effektiv
RDRANDauf x86 wird als Backup-Entropiequelle genutzt, aber pro Anfrage wurde nur wenig Entropie abgerufen, und das nur alle 100 ms- Die Logik wurde so geändert, dass genug Entropie angefordert wird, um den Fortuna-Zufallszahlengenerator vollständig zu seeden, was 2,3 Sekunden einspart
- Auch die Verarbeitung der Host ID wurde beschleunigt
- Üblicherweise setzt der Bootloader
smbios.system.uuidanhand von BIOS- oder UEFI-Informationen - In Firecracker gibt es keinen Bootloader, daher wird keine ID bereitgestellt
- Das Verhalten wurde so geändert, dass bei fehlerhaften Hardware-IDs nach einer Warnung 2 Sekunden gewartet wird, bei komplett fehlender ID aber still und schnell fortgefahren wird
- Üblicherweise setzt der Bootloader
- Die Wartebedingung für IPv6 DAD wurde eingegrenzt
- FreeBSD wartete auf Duplicate Address Detection, wenn IPv6 auf einem Netzwerk-Interface aktiviert war
- Auf dem loopback-Interface war IPv6 immer aktiviert
- Durch die Änderung, nur dann auf DAD zu warten, wenn auf einem Nicht-loopback-Interface IPv6 vorhanden ist, wurden 2 Sekunden eingespart
- Feste Wartezeiten beim Reboot- und Shutdown-Prozess wurden entfernt
- Das Verhalten, beim Reboot nach der Meldung
Rebooting...1 Sekunde auf Abschluss vonprintfund Lesezeit zu warten, wurde durch das sysctlkern.reboot_wait_timeersetzt; der Standardwert ist 0 - Auch die zusätzliche Wartezeit von 1 Sekunde, nachdem der BSP beim Shutdown oder Reboot das Stoppsignal der anderen CPUs erhalten hat, wurde entfernt
- Das Verhalten, beim Reboot nach der Meldung
- Mit TSLOG wurde ein Boot-Flame-Chart analysiert
- Die minimale Umgebung von Firecracker enthält wenig Rauschen, wodurch verbleibende Engpässe leichter sichtbar wurden
- Da die VM sehr schnell startet, waren neuer Kernel-Build, Ausführung und Erstellung des Flame Chart oft in weniger als 30 Sekunden möglich
- Durch die TSLOG-Analyse wurden mehrere Engpässe im Millisekundenbereich reduziert
- Die 100000-Iterationen-Kalibrierungsschleife in
lapic_initwurde auf 1000 Iterationen reduziert und spart 10 ms ns8250_drainrief bisher für jedes ZeichenDELAYauf; durch die Änderung, erstLSR_RXRDYzu prüfen und nur bei Bedarf zu verzögern, werden 27 ms eingespart- Firecracker wurde dazu gebracht, ein CPUID leaf zu implementieren, das die Frequenzen von TSC und local APIC clock meldet, was 20 ms spart
kern.nswbufwurde von einem konstanten Wert 256 auf32 * mp_ncpusgeändert, was in einer 1-CPU-VM 5 ms spart- Wird die Bubblesort-Implementierung in
mi_startupdurch Quicksort ersetzt, lassen sich 2 ms einsparen; Stand 22. August 2023 ist dies noch nicht committet - Wird
vm_memvon der sofortigen Initialisierung dervm_page-Strukturen für den gesamten physischen Speicher auf Lazy-Initialisierung umgestellt, lassen sich 2 ms einsparen; zum selben Datum ist dies noch nicht committet - Wenn
MAP_POPULATEzummmapdes Guest Memory in Firecracker hinzugefügt wird, sinken die Linux-Kosten zum Erzeugen der Seitenstrukturen beim ersten Seitenzugriff um 2 ms; zum selben Datum ist dies noch nicht committet
- Die 100000-Iterationen-Kalibrierungsschleife in
Aktueller Stand und verbleibende Arbeit
- FreeBSD bootet unter Firecracker und läuft sehr schnell
- Mit nicht committeten Patches in FreeBSD und Firecracker kann der FreeBSD-Kernel in einer VM mit 1 CPU und 128 MB RAM in unter 20 ms booten
- Die verbleibende Arbeit konzentriert sich auf die Bereinigung der PVH-Unterstützung und kleinere Kernel-Konfigurationen
- Die oben genannten Patches müssen committet werden
- Die Unterstützung für den PVH boot mode muss in Firecracker mainline gemergt werden
- Der PVH-Boot-Code ist mit Xen-Unterstützung vermischt und muss davon getrennt werden
- Der FreeBSD-arm64-Kernel kann derzeit nicht ohne PCI- oder ACPI-Unterstützung gebaut werden; durch Entfernen falscher Abhängigkeiten ließe sich ein FreeBSD/Firecracker-Kernel weiter verkleinern
- Für die Prüfung, ob eine Speicherreservierung für Intel-GPUs nötig ist, werden 25 µs aufgewendet; eine kleinere Kernel-Konfiguration könnte die Bootzeit noch um einige Mikrosekunden senken
- Längerfristig besteht auch die Möglichkeit, Firecracker so zu portieren, dass es auf FreeBSD läuft
- Firecracker wurde unter der Annahme geschrieben, Linux KVM zu verwenden
- Es wird kein grundlegender Grund gesehen, warum es nicht so angepasst werden könnte, dass es den Kernel-Teil des FreeBSD-Hypervisors bhyve nutzt
- Wer experimentieren möchte, kann einen FreeBSD-14.0-Kernel für amd64 mit der
FIRECRACKER-Kernel-Konfiguration bauen und denfeature/pvh-Branch des Firecracker-Projekts verwenden- Falls dieser Branch nicht mehr existiert, bedeutet das, dass der Code in den mainline-Firecracker-Tree gemergt wurde
1 Kommentare
Meinungen auf Hacker News
Mir war nicht wirklich klar, dass Firecracker-VMs nicht einfach nur eine Linux-Container-Technologie sind, sondern vollwertige virtuelle Maschinen.
Anfangs mag das ineffizient klingen, aber wenn man sich reale Einsatzfälle wie fly.io ansieht, ist es erstaunlich, dass Micro-VMs so klein und trotzdem leistungsfähig genug sein können.
Dank KVM und minimaler Hardware-Unterstützung (kein PCI, kein ACPI usw.) ist der Firecracker-Quellcode ziemlich einfach und auch für Nicht-Spezialisten vergleichsweise gut lesbar.
Genau deshalb gibt es Firecracker.
ACPI, das im Artikel genannt wird, ist ein Beispiel dafür. Trotzdem stimmt es, dass Hardware und nicht der Kernel virtualisiert wird, und die Initialisierung ist so schnell, dass die meisten Nutzer wohl keinen Unterschied merken würden, wenn sie normales containerd durch firecracker-containerd ersetzen.
Neben Firecracker werden derzeit mehrere Micro-VMs wie crosvm, cloud-hypervisor und Dragonball von Kata auf KVM entwickelt.
Ich habe nicht den Eindruck, dass es besonders schwierig ist, ein neues Target für Programmiersprachen zu implementieren. Wenn man also ein betriebssystemähnliches Target wie WASI/WASM baut und PRs an die unterstützten Sprachen schickt, ließe sich wohl der Großteil des Overheads reduzieren. Der schwierigste Teil dürfte sein, den Linux-Userspace hinreichend exakt nachzubilden; weil dessen Oberfläche aber so groß ist, scheint mir der Weg über ein betriebssystemähnliches Target sogar am besten zu sein.
Wenn Colins Patches in FreeBSD und Firecracker landen, liegt die gesamte Kernel-Bootzeit unter 20 ms.
Wir leben wirklich in einer kaum zu glaubenden Zeit.
Eine kurze Suche liefert zwar Zahlen, aber die stammen von vor ein paar Jahren, und es ist unklar, ob die Bootzeit auf dieselbe Weise gemessen wurde oder ob „Bootzeit“ überhaupt gleich definiert ist. Daher weiß ich nicht, ob sie vergleichbar sind.
Das ist Colins jüngster BSDCan-Vortrag, der vor ein paar Tagen veröffentlicht wurde.
https://youtu.be/MT3cdeuRTzs?si=l6baNriUjcvy0ZOE
Nach dem BSDCan-Vortrag fragte das FreeBSD Journal, ob er den guten Vortrag in einen Artikel umwandeln könne; nachdem der FreeBSD-Journal-Artikel erschienen war, fragte ;login:, ob sie ihn erneut veröffentlichen dürften.
In qemu gibt es ein von Firecracker inspiriertes microvm.
https://qemu.readthedocs.io/en/latest/system/i386/microvm.ht...
Natürlich sind einige davon FreeBSD-Bugfixes und daher unvermeidlich.
Interessant ist, dass sich herausstellt, dass ein großer Teil der 1-Sekunden-Wartezeit eigentlich gar nicht nötig ist.
Ich frage mich, wie viele Systemadministratoren tatsächlich etwas Sinnvolles getan haben, wenn das System wegen einer falschen Maschinen-UUID angehalten wurde.
Anders ist es dagegen bei „dem Benutzer eine Meldung ausgeben, dass neu gestartet wird, eine Sekunde warten, damit er die Konsole lesen kann, und dann rebooten“.
Ich will nicht besserwisserisch klingen, aber ich frage mich, für welche Anwendungsfälle so etwas wie Firecracker-Instanzen geeignet ist.
Ich nutze FreeBSD überall, vom Colocation-Server bis zum privaten PC, und bin eher ein alter Unix-Administrator als ein Entwickler. Ich bevorzuge Bare Metal, begrüße aber Zukunftstechnologien, die zum Betriebssystem beitragen. Bei Buzzwords wie Lambda oder Firecracker weiß ich allerdings trotz allem nicht wirklich, wofür sie praktisch eingesetzt werden. Docker und Container verstehe ich, k8s gerade so, aber ich verstehe nicht, warum man eine VM starten und direkt wieder entfernen sollte, statt einfach eine VM hochzufahren und bei Bedarf zu nutzen. Geht es rein um Cloud-Erfahrung oder Kosteneinsparungen?
So kann jeder Knoten in der Compute Plane beliebigen Anwendungstraffic verarbeiten. Eine Anwendung kann wachsen, indem sie je nach verändertem Traffic-Muster dynamisch freie Compute-Ressourcen der Plane nutzt, und verbraucht keine Ressourcen, wenn sie keinen Traffic verarbeitet. Die Kapazität der Compute Plane zu erhöhen bedeutet, mehr Knoten online zu bringen. Abgesehen von der Verwaltung vieler großer Deployments fällt mir kein besonderer Anwendungsfall ein; in Umgebungen, in denen es nicht um „Scale“ geht, bleibt diese Technik unterhalb der Anbietergrenze verborgen.
Wenn man einen Service betreibt, dessen API nicht häufig genutzt wird, der bei einem Aufruf aber schnell antworten muss, passen Lambda oder ähnliche Ansätze gut. Tatsächlich fallen viele APIs für Smartphone-Apps in diese Kategorie, und man möchte nicht 99 % der Zeit eine Maschine im Leerlauf laufen lassen, nur um auf solche API-Aufrufe zu reagieren.
Die meisten tun es nur nicht, weil der Aufwand größer ist als die Einsparungen; Potenzial ist aber vorhanden. Dinge wie Lambda und Firecracker machen das deutlich einfacher.
Schade, dass weder AWS noch macOS auf ARM Nested Virtualization unterstützen
Wenn sie das unterstützen würden, wäre es deutlich einfacher, Firecracker-basierte Technologien zu entwickeln und bereitzustellen.
Eigentlich ist Virtualisierung auf jedem Instanztyp möglich, aber Hardwarebeschleunigung kann meines Wissens nur auf .metal-Instanzen genutzt werden.
Firecracker ist beeindruckend, hat aber viele Sonderfälle, die dokumentiert werden müssen
Ich bin Colin Percival sehr dankbar, dass er das geteilt hat. Besonders gefällt mir der Satz „nachdem die niedrig hängenden Früchte gepflückt waren“; für Colin sind damit die Custom-
bus_dma-Patches gemeint. Jetzt kann jeder kostenlos davon profitieren, dass „ein FreeBSD-Kernel mit 1 CPU und 128 MB RAM in unter 20 ms bootet“. Wenn man an DevOps mit k8s-Clustern oder vielen Docker-Containern gewöhnt ist, ist das wirklich erstaunlich.Ich habe ein wenig mit Firecracker herumgespielt; die Bootzeit ist wie versprochen, aber die Nutzungserfahrung ist ziemlich steinig
Nachdem ich zum Beispiel gejubelt hatte, weil der Boot gelungen war, war ich ernüchtert, als ich merkte, dass ich für das Networking wieder einem langen Tutorial folgen musste.
Es wäre wirklich schön, wenn man ein einzelnes Binary herunterladen und ausführen könnte, woraufhin sowohl ein Webinterface als auch eine API starten, sich alles schnell konfigurieren lässt und die nötigen Dinge automatisch heruntergeladen werden.
„Ein FreeBSD-Kernel kann in einer virtuellen Maschine mit 1 CPU und 128 MB RAM in unter 20 ms booten“
Meine Güte, wie könnte man dasselbe ohne VM auf echter Hardware erreichen? ;)
Langsam ist alles andere. Auf meiner Maschine heißt es zum Beispiel:
Startup finished in 14.552s (firmware) + 2.885s (loader) + 741ms (kernel) + 23.116s (initrd) + 11.191s (userspace) = 52.488s