#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