相关疑难解决方法(0)

使用googletest进行基准测试?

背景(如果不感兴趣,请跳至下面的问题)

我有一个运行三种状态的模拟器:

  1. 单线程启动(I/O ok)
  2. 多线程内存CPU绑定仿真阶段(I/O不行)
  3. 后仿真,后连接单线程阶段(I/O ok)

有没有搞错! 在标准测试期间,CPU使用率从100%下降到20%,总运行时间比正常时间长30倍(130秒与4.2秒).

Callgrind没有发现任何可疑的事情时,我的头嗡嗡作响,因为我正在回到最后一次提交的悬崖上,失去了所有的错误修复.

气馁,我在跑步期间走进服务器机房,注意到讨厌的磨音,后来验证是由于/ proc/PID/fd中的 Mysql套接字写入造成的!事实证明,第2阶段深层的几层Mysql代码导致了问题.

得到教训

  1. 意外I/O对于实时应用程序可能是致命的
  2. 单元测试还不够:我也需要基准测试

修复 我将在ReadAllowed()和WriteAllowed()上引入线程本地存储IOSentinels和asserts(),以确保Stage 2线程永远不会执行任何IO.

任何人都有幸与googletest附加/编写基准测试框架?

不幸的是,这次我的所有googletests都通过了.如果我稍稍离开并在没有注意到运行时间的情况下回来,这将是一个灾难性的提交,并且可能更难修复.

如果运行时间超过上次运行时的2或3倍,我希望googletest失败:这最后一部分很棘手,因为对于非常快速的运行,系统状态可能导致某些事情需要两倍的时间但仍然可以.但是对于长时间的模拟运行/测试,我不希望运行时间变化很大(> 50%会不常见).

我对这里的建议持开放态度,但是对于自动化测试进行低维护检查会很好,所以即使所有输出看起来都没问题,系统突然变慢也很明显.

c++ benchmarking googletest

14
推荐指数
2
解决办法
9614
查看次数

标签 统计

benchmarking ×1

c++ ×1

googletest ×1