Opublikowano wyniki oceny wpływu na wydajność przebudowy pakietów dla Ubuntu z różnymi opcjami i realizacjami funkcji alokacji pamięci. Eksperymentatorowi udało się zwiększyć wydajność pakietu jq, który służy do przetwarzania danych w formacie JSON, o 90% (1,9 razy) poprzez standardową przebudowę z tego samego pakietu źródłowego, bez wprowadzania zmian w samym kodzie. Wydajność oceniano poprzez pomiar czasu wykonania typowego zapytania filtrującego na danych GeoJSON o rozmiarze 500 MB.
Wyniki eksperymentu:
- Wariant zbudowany w GCC z tych samych źródeł z flagami domyślnymi okazał się szybszy od binarnego pakietu Ubuntu o 2-4%.
- Przebudowa w Clang 18 z poziomem optymalizacji '-O3', włączeniem optymalizacji na etapie łączenia ('-flto') i wyłączeniem informacji debugowych ('-DNDEBUG') prowadziła do przyspieszenia o 20%.
- Przebudowa z systemem alokacji pamięci TCMalloc (dodanie '-L/usr/lib/x86_64-linux-gnu -ltcmalloc_minimal' do LDFLAGS) dała przyspieszenie o 40%.
- Zastąpienie funkcji malloc systemami alokacji pamięci tcmalloc, jemalloc i mimalloc poprzez 'LD_PRELOAD=/usr/lib/x86_64-linux-gnu/lib….so' doprowadziło do wzrostu wydajności o 27%, 29% i 44%. Przy uruchomieniu z mimalloc, które pokazało przyspieszenie o 44%, ustalono zmienną środowiskową 'MIMALLOC_LARGE_OS_PAGES=1'.
- Przebudowa pakietu z mimalloc w LDFLAGS zamiast łączenia przez LD_PRELOAD doprowadziła do przyspieszenia w teście o 90%. Inny test przetwarzania danych JSON o wielkości 2,2 GB w 13000 plików również pokazał wzrost wydajności o około dwa razy.
Źródło: opennet.ru
