Производительность Ubuntu-пакета jq удалось увеличить в 1.9 раза путём пересборки

Опубликованы результаты оценки влияния на производительность пересборки пакетов для Ubuntu с различными опциями и реализациями функций выделения памяти. Экспериментатору удалось на 90% (в 1.9 раза) повысить производительность пакета jq с инструментарием для обработки данных в формате JSON, путём обычной пересборки из того же пакета с исходным кодом, без внесения изменений в сам код. Производительность оценивалась через измерение времени выполнения типового фильтрующего запроса над данными GeoJSON, размером 500МБ.

Итоги эксперимента:

  • Вариант, собранный в 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 файлах также показал прирост производительности примерно в два раза.



Источник: http://www.opennet.ru/opennews/art.shtml? num=62912

Полный текст статьи читайте на OpenNet