Erste stabile Version des von LLVM lld entwickelten Mold Builders

Rui Ueyama, Autor des LLVM-LLD-Linkers und des Chibicc-Compilers, stellte die erste stabile Version des neuen Hochleistungs-Mold-Linkers vor, der in der Geschwindigkeit der Verknüpfung von Objektdateien deutlich schneller ist als die GNU-Gold- und LLVM-LLD-Linker. Das Projekt gilt als bereit für die Produktionsimplementierung und kann als schnellerer, transparenter Ersatz für den GNU-Linker auf Linux-Systemen verwendet werden. Zu den Plänen für die nächste Hauptversion gehört die Fertigstellung der Unterstützung für die macOS-Plattform. Anschließend wird mit der Anpassung von Mold für Windows begonnen.

Mold ist in C++ (C++20) geschrieben und unter AGPLv3 lizenziert, das mit GPLv3, aber nicht mit GPLv2 kompatibel ist, da bei der Entwicklung von Netzwerkdiensten offene Änderungen erforderlich sind. Diese Wahl erklärt sich aus dem Wunsch, Entwicklungsgelder zu erhalten – der Autor ist bereit, die Rechte am Code für die Neulizenzierung unter einer freizügigen Lizenz wie MIT zu verkaufen oder denjenigen, die mit der AGPL nicht zufrieden sind, eine separate kommerzielle Lizenz zur Verfügung zu stellen.

Mold unterstützt alle Funktionen des GNU-Linkers und verfügt über eine sehr hohe Leistung – das Verknüpfen erfolgt mit einer Geschwindigkeit, die nur halb so hoch ist wie das einfache Kopieren von Dateien mit dem Dienstprogramm cp. Beim Erstellen von Chrome 96 (Codegröße 1.89 GB) dauert es beispielsweise 8 Sekunden, um ausführbare Dateien mit Debuginfo auf einem 53-Core-Computer mit GNU Gold zu verknüpfen, LLVM lld - 11.7 Sekunden und Mold nur 2.2 Sekunden (26-mal schneller als GNU-Gold). Bei der Verknüpfung von Clang 13 (3.18 GB) dauert es 64 Sekunden in GNU Gold, 5.8 Sekunden in LLVM lld und 2.9 Sekunden in Mold. Beim Erstellen von Firefox 89 (1.64 GB) dauert es 32.9 Sekunden in GNU Gold, 6.8 Sekunden in LLVM lld und 1.4 Sekunden in Mold.

Erste stabile Version des von LLVM lld entwickelten Mold Builders

Die Verkürzung der Build-Zeit kann den Komfort bei der Entwicklung großer Projekte erheblich verbessern, indem die Wartezeit beim Generieren ausführbarer Dateien beim Debuggen und Testen von Änderungen verkürzt wird. Die Motivation für die Erstellung von Mold war die Frustration, nach jeder Codeänderung auf den Abschluss der Verknüpfung warten zu müssen, die schlechte Leistung vorhandener Linker auf Mehrkernsystemen und der Wunsch, eine grundlegend andere Verknüpfungsarchitektur auszuprobieren, ohne auf übermäßig komplizierte Modelle wie z. B. zurückzugreifen als inkrementelle Verlinkung.

Eine hohe Leistung beim Verknüpfen einer ausführbaren Datei aus einer großen Anzahl vom Compiler vorbereiteter Objektdateien in Mold wird durch die Verwendung schnellerer Algorithmen, die aktive Parallelisierung von Operationen zwischen verfügbaren CPU-Kernen und die Verwendung effizienterer Datenstrukturen erreicht. Mold implementiert beispielsweise Techniken zur Durchführung intensiver Berechnungen beim Kopieren von Dateien, zum Vorladen von Objektdateien in den Speicher, zur Verwendung schneller Hash-Tabellen zur Zeichenauflösung, zum Scannen von Verschiebungstabellen in einem separaten Thread und zur Deduplizierung zusammengeführter Abschnitte, die in verschiedenen Dateien wiederholt werden.

Source: opennet.ru

Kommentar hinzufügen