Sono stati pubblicati i risultati della valutazione dell'impatto sulla performance della ricompilazione dei pacchetti per Ubuntu con diverse opzioni e implementazioni delle funzioni di allocazione della memoria. L'esperimento ha consentito di aumentare le prestazioni del pacchetto jq, un toolkit per l'elaborazione di dati in formato JSON, del 90% (1.9 volte), mediante una semplice ricompilazione dello stesso pacchetto dal codice sorgente, senza modifiche al codice stesso. Le prestazioni sono state valutate misurando il tempo di esecuzione di una tipica query di filtro su dati GeoJSON di 500 MB.
Risultati dell'esperimento:
- La versione compilata con GCC dagli stessi sorgenti con le flag di default si è rivelata più veloce del pacchetto binario di Ubuntu del 2-4%.
- La ricompilazione con Clang 18 a livello di ottimizzazione '-O3', includendo l'ottimizzazione a livello di collegamento ('-flto') e disabilitando le informazioni di debug ('-DNDEBUG'), ha portato a un incremento della velocità del 20%.
- La ricompilazione con il sistema di allocazione della memoria TCMalloc (aggiungendo '-L/usr/lib/x86_64-linux-gnu -ltcmalloc_minimal' in LDFLAGS) ha comportato un incremento della velocità del 40%.
- La sostituzione delle funzioni malloc con i sistemi di allocazione della memoria tcmalloc, jemalloc e mimalloc tramite 'LD_PRELOAD=/usr/lib/x86_64-linux-gnu/lib….so' ha incrementato le prestazioni del 27%, 29% e 44%. Quando è stato eseguito con mimalloc, che ha mostrato un incremento della velocità pari al 44%, è stata impostata la variabile d'ambiente 'MIMALLOC_LARGE_OS_PAGES=1'.
- La ricompilazione del pacchetto con mimalloc in LDFLAGS invece di collegarlo tramite LD_PRELOAD ha portato a un incremento della velocità del 90% nel test. Un altro test sull'elaborazione di 2.2GB di dati JSON in 13000 file ha inoltre mostrato un guadagno prestazionale di circa il doppio.
Fonte: opennet.ru
