Warum sind Paketmanager so langsam?

Pakete

Dieser Frage geht der bei Google tätige Entwickler Michael Stapelberg derzeit in seinem Blog und in einem Vortrag nach. Im März hatte Stapelberg seinen Rückzug aus Debian bekannt gegeben, wo er über zehn Jahre tätig war. Grund für seine Kritik an Debian waren dessen Strukturen, die ihm ein effizientes Arbeiten unmöglich machten.

Testobjekt Paketmanager

In der Zwischenzeit hat sich Stapelberg der Paketmanager angenommen und die bekanntesten Exemplare unter Linux systematisch untersucht. Im Grunde gibt es nur zwei Formate, von denen fast alle anderen mehr oder weniger abgeleitet sind. Dabei handelt es sich um das Debian-Paket deb und den Red Hat Package Manager rpm, die beide im Grunde Archivformate sind.

Sie machen zu viel

Was passiert nun, wenn wir eine Paketinstallation anstoßen? Traditionell werden zunächst die Paketlisten gelesen und die Abhängigkeiten überprüft. Darauf folgt der Download, das Entpacken der Archive und das Konfigurieren auf der Basis der im Paket hinterlegten Anweisungen. Schließlich wird das Paket in /usr/bin installiert.

Hoffen und Bangen

Der Moment der eigentlichen Installation nach dem Download der Pakete ist bei den hier betrachteten Paketmanagern heikel. Wenn währenddessen der Akku leer ist oder der Kernel aussteigt oder die Software fehlerhaft, haben wir meist ein Problem. Um das möglichst abzufedern, bedienen sich die Paketmanager des Linux-System-Calls fsync, um den gepufferten Dateiinhalt nicht nur im RAM zu haben, sondern auch auf den Datenträger zu schreiben. Das ist aber nur ein Grund warum eine Paketinstallation teilweise so lange dauert.

Stapelberg hat getestet, wie lange eine Auswahl von Paketmanagern braucht, um ein kleines und ein größeres Paket zu installieren:

Quelle: Michael Stapelberg

Dabei hat das Paket ack eine Größe von 70 Kb, während qemu im Download 70 MB in die Waagschale wirft. Fedora macht bei beiden Paketen die schlechteste Figur. Die herunterzuladenden Metadaten stehen in keinem Verhältnis zur Größe des Pakets und das umso mehr, je kleiner das Paket ist.

Maintainer-Scripte

Ein weiterer Grund, warum Paketmanager lange für eine Paketinstallation brauchen sind die Maintainer-Scripte, die während der Installation über Hooks und Trigger abgearbeitet werden. Dabei werden Anweisungen aus den mit im Paket befindlichen Dateien preinst und postinst ausgeführt, die nach Stapelbergs Ansicht meist auch beim ersten Programmstart aufgerufen werden könnten. Zudem verhindert dieses Abarbeiten der Scripte, dass Pakete parallel installiert werden können.

Aus diesen Beobachtungen zog er den Schluss, dass entweder das Potenzial besteht, den Paketmanager selbst zu optimieren oder was das System macht, ist einfach zu komplex. Das veranlasste ihn dazu, eine experimentelle Distribution namens distri zu erstellen, die einige Dinge anders angeht und über einen wieselflinken Paketmanager verfügt.

Nicht ganz neu

Dabei hat Stapelberg das Rad nicht völlig neu erfunden, sondern verwendet Ideen aus der Distribution NixOS und deren Paketmanager Nix. Betrachtet man obige Grafik, so schafft es Nix einerseits, die benötigten Daten klein zu halten, erreicht aber andererseits nur lausige Übertragungsraten, sodass von der möglichen Geschwindigkeit nichts übrig bleibt. Stapelberg vermutet hier Implementationsfehler. Alpine und Arch Linux sind deutlich schneller als der Rest. Sie machen weniger als der Rest und das effizienter.

Images anstatt Archive

Stapelberg verwendet anstelle von Archiven, die entpackt werden müssen, Images, die schnell gemounted werden können, ähnlich wie bei AppImage oder Snap. Als Format kommen nur lesbare Squash-Images zum Zug, gemounted wird per FUSE. Ein weiterer Vorteil dieser Herangehensweise ist, dass die Pakete nicht verändert werden können. Ähnlich wie bei NixOS werden alle Bestandteile eines Pakets in ein einziges Verzeichnis installiert.

Wer näheres dazu lesen möchte, findet Details im Blog. Die Distribution soll ihren experimentellen Charakter behalten, kann aber von GitHub in verschiedenen Formaten heruntergeladen und getestet werden.

Kommentare

12 Antworten zu „Warum sind Paketmanager so langsam?“

  1. Avatar von martin
    martin

    Komisch,
    ich habe mich immer gefragt, warum die Paketmanager im Vergleich mit Windows bei grösseren Updates immer um soviel schneller sind.

    Aber,…., vom reinen Gefühl her, kann ich nur sagen, das mir bisher kein Paketmanager wirklich langsam erscheint. Sowohl opensuse, welches ich seit Jahren auf einem Desktop PC verwende, als auch Fedora (neueres Notebook) und Debian (altes Netbook) liefern hier eine ordentliche Performance.

  2. Avatar von Rainer
    Rainer

    Hallo,
    finde auch das die Installationen und updates mit den Paketmanager schnell gehen.
    Früher bei openSuse, dann bei Linux-Mint und jetzt bei KDE-Neon.
    Läuft eigentlich immer zuckzuck durch.
    Rainer

    1. Avatar von Ferdinand

      Vergleichsweise sind die halt langsam. Schau dir mal den Paketmanager von Void an, da kann man von schnell sprechen.

      1. Avatar von onli

        Void wollte ich auch gerade erwähnen. Mir kommt der Paketmanager da im Vergleich zu ubuntu deutlich schneller vor, ohne dass jedoch richtig gemessen zu haben. Schade dass er im Artikel fehlt.

  3. Avatar von fossonly
    fossonly

    Ich kann nicht wirklich nachvollziehen, was hier allen Ernstes langsam sein soll? Denn ausgehend von einer SSD und einer moderaten CPU, samt ordentlicher Internetverbindung, zieht apt unter Debian bei mir extrem durch. Prinzipiell ist der einzig problematische Faktor die Internetverbindung, die gewissermaßen unter fremder Kontrolle steht, und daher potenziell je nachdem blockieren kann. Aber sonst rattert apt zumindest bei mir, bei selbst großen Updates ausserordentlich schnell durch, und das nebenher ohne negativ zu beeinträchtigen.

    1. Avatar von Ferdinand

      Ich weiß, es ist Meckern auf hohem Niveau. Aber wenn das niemand macht, dann bleibt alles wie es ist. Und das ist nicht zukunftsträchtig. Ich verfolge gerne spannende Ideen und Experimente, von daher berichte ich über sowas. Schaut mal auf die Kommentare bei Pro Linux zur gleichen News von heute, da geht es auch recht kontrovers zu.

  4. Avatar von Fryboyter

    @martin
    >Aber,…., vom reinen Gefühl her, kann ich nur sagen, das mir bisher kein Paketmanager wirklich langsam erscheint

    Im Vergleich zu pacman ist apt relativ langsam. Nehmen wir zwei Raspberri Pi gleicher Bauart. Auf einem läuft Raspian und auf dem anderen Arch. Während apt noch dabei ist herauszufinden ob Updates vorhanden sind läd pacman die Updates meist schon herunter. An sich keine große Sache. Aber mich hat es genug genervt, dass ich die automatischen Updates für Raspbian aktiviert habe.

    An der Bandbreite der verwendeten Mirrors liegt es meiner Meinung aber nicht, da beide Geräte die Updates an sich mit voller Bandbreite herunterladen. Womöglich macht apt einfach mehr im Hintergrund.

  5. Avatar von martin
    martin

    ich kann nur eines sagen. Vor etwa 2 Monaten habe ich einen Windows 10 PC von Version 1809 auf 1903 aktualisiert. Angefangen wurde um 18 Uhr, Ende war um 2 Uhr Nachts (ungefähr 2/3 der Zeit für Downloads). Kurz zuvor hatte ich Fedora von 29 auf 30 aktualisiert. Mit der Downloadzeit dauerte das ganze 90 Minuten, davon 1h für den Download. Ein Netbook habe ich vor wenigen Wochen von Debian 9 auf 10 aktualisiert. Das dauerte etwas über 2h (mit Download) und ist auch der alten Hardware zu schulden. Trotzdem bin ich der Ansicht, das die Paketmanager schnell sind. Muss aber auch zugeben, das Pacman echt schnell ist.
    Zu Void Linux kann ich nur eines sagen, der bisher einzige Versuch dieses Systems ist ca. 2 Jahre her und war extrem erfolglos. Deshalb habe ich Void erst einmal ad acta gelegt, werde mir das System aber irgendwann nochmal ansehen.

  6. Avatar von tuxnix
    tuxnix

    Wenn man Images verwendet spart man das Komprimieren und Dekomprimieren ein. Allerdings geht das zu Lasten der übertragenen Datenmenge. Wenn man Hooks und Trigger erst mit dem Programmstart abarbeitet, muss ein admin nach einem update auch jedes aktualisierte Programm aufrufen um die Installation abzuschließen. Das was als Vorteil erscheint geht hier sehr zu Lasten anderer Teilbereiche.
    Alte Strukturen zu hinterfragen ist immer mal gut. Aber weshalb hat Stapelberg die Werte von „distri“ nicht in die Tabelle geschrieben? Für einen Vergleich wäre das sinnvoll gewesen.
    Den Vorschlag alle Bestandteile eines Pakets in ein einziges Verzeichnis zu installieren sollte man einzeln diskutieren. Die Veränderungen sind zu umfangreich für den direkten Vergleich.
    Was ich mich öfters man gefragt habe ist, ob mit dem Entpacken von Paketen nicht im Hintergrund schon begonnen werden könnte während das Download weiterer Pakete noch läuft. M.m. nach wäre hier viel Zeit einzusparen.

  7. Avatar von Ferdinand

    Auch Hacker News (HN) haben das Thema aufgegriffen. Einer der Kommentare verdeutlicht, wie groß die Unterschiede sein können.: »It’s odd that Alpine lets you install e.g. „emacs-nox“ on an IoT device connected via crappy LTE, on the other side of the world, faster than you can install it on your local Ubuntu dev machine, with like 100-1000x more network bandwidth, 10-100x more CPU and 100-1000x faster local storage«.

  8. Avatar von Thomas S.
    Thomas S.

    Also ich kann das ebenfalls überhaupt nicht nachvollziehen. Selbst größere Updates unter Arch mit zig Programmen laufen in wenigen Minuten durch. Bei Ubuntu dauert es im Vergleich damit tatsächlich etwas länger.

    Ich habe mal getestest. Die qemu-Installation mit pacman ist bei mir in unter 3s fertig und braucht ganz bestimmt nicht über 1 Minute, wie im Test.

    1. Avatar von Ferdinand

      Das lag vermutlich daran, dass du die meisten Abhängigkeiten bereits im System hattest.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert