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 portato a un aumento della performance del pacchetto jq utilizzando strumenti per l'elaborazione dei dati in formato JSON del 90% (1,9 volte), attraverso una ricompilazione del pacchetto con il codice sorgente, senza modifiche al codice stesso. La performance è stata valutata misurando il tempo di esecuzione di una query filtrante tipica sui dati GeoJSON della dimensione di 500 MB.
Risultati dell'esperimento:
- L'opzione compilata in GCC dai medesimi sorgenti con flag di default si è rivelata più veloce del pacchetto binario di Ubuntu dal 2 al 4%.
- La ricompilazione in Clang 18 con livello di ottimizzazione '-O3', includendo l'ottimizzazione al momento del collegamento ('-flto') e disabilitando le informazioni di debug ('-DNDEBUG'), ha portato a un'accelerazione del 20%.
- La ricompilazione con il sistema di distribuzione della memoria TCMalloc (aggiungendo '-L/usr/lib/x86_64-linux-gnu -ltcmalloc_minimal' in LDFLAGS) ha portato a un'accelerazione del 40%.
- La sostituzione delle funzioni malloc con i sistemi di distribuzione della memoria tcmalloc, jemalloc e mimalloc tramite 'LD_PRELOAD=/usr/lib/x86_64-linux-gnu/lib….so' ha comportato un aumento della performance del 27%, 29% e 44%. Con mimalloc, che ha mostrato un'accelerazione del 44%, è stata impostata la variabile d'ambiente 'MIMALLOC_LARGE_OS_PAGES=1'.
- La ricompilazione del pacchetto con mimalloc in LDFLAGS anziché collegare tramite LD_PRELOAD ha portato a un'accelerazione dei test del 90%. Un altro test che ha elaborato 2,2 GB di dati JSON in 13.000 file ha dimostrato un aumento delle performance di circa il doppio.
Fonte: opennet.ru
