lcov + gcov-9 性能回归,因为 json 使用
lcov + gcov-9 performance regression because of json usage
我已将我的构建环境编译器从 gcc 5.5.0
更新到 gcc 9.3.0
,并注意到覆盖率计算性能下降。
它变得慢了 10 倍(5 小时对整个项目的 48 小时)。
我的调查表明,在 gcov-9 中,他们开始使用 json
格式而不是 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
我没有找到 return 旧格式的方法,但也许有任何解决方法或补丁。
P.S。我知道 gcov 的参数 --json-format
,但 lcov1.15 可以处理 json
格式或所谓的 intermediate text format
。同时 gcov9 可以输出 json
格式或所谓的 logfile
格式文件
进一步调查表明,这是因为lcov 1.15
使用JSON:PP
模块进行json解析。
将 JSON:PP
替换为 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
我已将我的构建环境编译器从 gcc 5.5.0
更新到 gcc 9.3.0
,并注意到覆盖率计算性能下降。
它变得慢了 10 倍(5 小时对整个项目的 48 小时)。
我的调查表明,在 gcov-9 中,他们开始使用 json
格式而不是 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
我没有找到 return 旧格式的方法,但也许有任何解决方法或补丁。
P.S。我知道 gcov 的参数 --json-format
,但 lcov1.15 可以处理 json
格式或所谓的 intermediate text format
。同时 gcov9 可以输出 json
格式或所谓的 logfile
格式文件
进一步调查表明,这是因为lcov 1.15
使用JSON:PP
模块进行json解析。
将 JSON:PP
替换为 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