Die Ergebnisse der Bewertung der Auswirkungen auf die Leistungsfähigkeit der Neukompilierung von Paketen für Ubuntu mit verschiedenen Optionen und Implementierungen von Speicherzuweisungsfunktionen wurden veröffentlicht. Es gelang dem Experimentator, die Leistung des jq-Pakets mit Werkzeugen zur Verarbeitung von JSON-Daten um 90 % (faktor 1,9) zu steigern, indem er eine reguläre Neukompilierung aus demselben Paket mit dem Quellcode vornahm, ohne das eigentliche Code zu ändern. Die Leistung wurde durch die Messung der Ausführungszeit einer typischen Filterabfrage über GeoJSON-Daten mit einer Größe von 500 MB bewertet.
Ergebnisse des Experiments:
- Die in GCC mit denselben Quelltexten und den Standardflags kompilierte Version war 2-4 % schneller als das binäre Ubuntu-Paket.
- Die Neukompilierung in Clang 18 mit dem Optimierungslevel "-O3", der Aktivierung der Optimierung während des Linkens ("-flto") und der Deaktivierung von Debug-Informationen ("-DNDEBUG") führte zu einer Beschleunigung um 20 %.
- Die Neukompilierung mit dem TCMalloc-Speicherverfahren (durch Hinzufügen von "-L/usr/lib/x86_64-linux-gnu -ltcmalloc_minimal" in den LDFLAGS) führte zu einer Beschleunigung um 40 %.
- Der Austausch der malloc-Funktionen durch die Speicherzuweisungssysteme tcmalloc, jemalloc und mimalloc mittels "LD_PRELOAD=/usr/lib/x86_64-linux-gnu/lib….so" führte zu einer Leistungssteigerung um 27 %, 29 % und 44 %. Bei der Ausführung mit mimalloc, das eine Beschleunigung um 44 % erzielte, wurde die Umgebungsvariable "MIMALLOC_LARGE_OS_PAGES=1" gesetzt.
- Die Neukompilierung des Pakets mit mimalloc in LDFLAGS anstelle der Verlinkung über LD_PRELOAD führte zu einer 90%igen Beschleunigung des Tests. Ein weiterer Test zur Verarbeitung von 2,2 GB JSON-Daten in 13000 Dateien zeigte ebenfalls eine Leistungssteigerung von etwa dem doppelten.
Quelle: opennet.ru
