регрессия производительности lcov gcov-9 из-за использования json

#gcc #gcov #lcov

#ссагпз #gcov #lcov

Вопрос:

Я обновил свой компилятор среды сборки с gcc 5.5.0 до gcc 9.3.0 и заметил регрессию производительности вычисления покрытия.

Это стало в 10 раз медленнее (5 часов против 48 часов для всего проекта).

Мое исследование показывает, что в gcov-9 они начали использовать json format вместо intermediate text format . Это замедлило создание и анализ промежуточных gcov-файлов.

Минимальный пример ниже:

 > time geninfo --gcov-tool gcov-5 test5/CPrimitiveLayerTest.cpp.gcno 
Found gcov version: 5.5.0
Using intermediate gcov format
Processing test5/CPrimitiveLayerTest.cpp.gcno
Finished .info-file creation

real    0m0.351s
user    0m0.298s
sys     0m0.047s

> time geninfo --gcov-tool gcov-9 test9/CPrimitiveLayerTest.cpp.gcno 
Found gcov version: 9.3.0
Using intermediate gcov format
Processing test9/CPrimitiveLayerTest.cpp.gcno
Finished .info-file creation

real    0m8.024s
user    0m7.929s
sys     0m0.084s
 

Я не нашел способа вернуться к старому формату, но, возможно, есть какие-либо обходные пути или исправления.

PS Я знаю об аргументе gcov --json-format , но lcov1.15 может обрабатывать либо json формат, либо так называемый intermediate text format . В то же время gcov9 может выводить либо json формат, либо так называемые logfile файлы формата

Ответ №1:

Дальнейшее исследование показывает, что это связано lcov 1.15 с использованием JSON:PP модуля uses для синтаксического анализа json. Замена JSON:PP to JSON:XS (быстрый анализатор) дает требуемое ускорение.

Поэтому я использую следующие команды для его достижения:

 # patch geninfo to use fast json parser
> sudo sed -i 's/use JSON::PP/use JSON::XS/g' /usr/local/bin/geninfo

# install perl module
> sudo cpan install JSON:XS