Zum Inhalt springen

Maßstäbe

Warum Ihr QEMU arm64-Build 40-mal langsamer ist

Eine gemessene Aufschlüsselung emulierter und nativer arm64 Docker-Builds über fünf reale Workloads hinweg und warum die Strafe so unterschiedlich ist.

{Autor} · {Rolle} · {Datum} · {Minuten} {MinutenLabel}

Das Hinzufügen von linux/arm64 zu einem Docker-Build dauert eine Zeile. Die Folge ist manchmal eine dreifache Verlangsamung und manchmal eine 40-fache Verlangsamung, und der Unterschied verwirrt die Menschen. Es ist kein Zufall.

Der Mechanismus

QEMU übersetzt in der Benutzermodus-Emulation arm64-Anweisungen zur Laufzeit in x64-Anweisungen. Die Übersetzung hat einen festen Overhead pro Anweisung. Die Strafe hängt also davon ab, wie viele Anweisungen Ihr Build ausführt – nicht davon, wie lange es dauert und nicht von der Bildgröße.

Ein Build, der Dateien kopiert und apt-get ausführt, führt relativ wenige Anweisungen aus. Ein Build, der einen Compiler ausführt, führt eine enorme Anzahl aus.

Gemessen

Das Muster ist klar: Je mehr Ihr Build kompiliert wird, desto schlechter wird die Emulation. Wenn Ihre Docker-Datei einen Compiler aufruft, ist QEMU keine praktikable Strategie.

Die Lösung

Erstellen Sie jede Architektur auf ihrer eigenen Hardware und führen Sie die Digests in einer Manifestliste zusammen. Es ist mehr YAML als eine einzelne Plattformzeile und es ist der Unterschied zwischen drei Minuten und zwei Stunden.

Ihr nächster Build könnte doppelt so schnell sein — zum halben Preis

Kostenlos starten. Der Wechsel zurück ist dieselbe eine Zeile — auch dieses Diff veröffentlichen wir.