Итоги эксперимента:
- Вариант, собранный в GCC из тех же исходных текстов с флагами по умолчанию оказался быстрее бинарного пакета Ubuntu на 2-4%.
- Пересборка в Clang 18 с уровнем оптимизации"-O3", включением оптимизации на этапе связывания ("-flto") и отключением отладочной информации ("-DNDEBUG") привела к ускорению на 20%.
- Пересборка с системой распределения памяти TCMalloc (добавление "-L/usr/lib/x86_64-linux-gnu -ltcmalloc_minimal" в LDFLAGS) привела к ускорению на 40%.
- Замена функций malloc на системы распределения памяти tcmalloc, jemalloc и mimalloc через "LD_PRELOAD=/usr/lib/x86_64-linux-gnu/lib....so" привела к увеличению производительности на 27%, 29% и 44%. При запуске с mimalloc, показавшем ускорение на 44%, выставлялась переменная окружения "MIMALLOC_LARGE_OS_PAGES=1".
- Пересборка пакета с mimalloc в LDFLAGS вместо связывания через LD_PRELOAD привела к ускорению прохождения теста на 90%. Другой тест по обработке 2.2GB JSON-данных в 13000 файлах также показал прирост производительности примерно в два раза.
Источник: https://www.opennet.ru/opennews/art.shtml?num=62912
(opennet.ru, основная лента)