基准测试和分析之间的区别

Jim*_*ams 16 benchmarking profiling

我看到术语软件基准测试分析有时可以互换,但据我的理解,这是一个微妙的差异.

两者都是按时间连接的.但是,虽然基准测试主要是确定可以与其他应用程序进行比较的特定速度分数,但分析可以为您提供有关应用程序在大部分时间(或周期数)上花费的确切信息.

对我来说,它总是如下:集成测试是基准测试和单元测试对应的分析测试的对应物.但微基准测试如何适用于此?

有人在这里说:

分析和基准测试是相同硬币的另一面,分析可帮助您缩小到最有用的优化位置,基准测试可让您轻松隔离优化并对它们进行交叉比较.

另一个人在这里谈到分析:

分析在不同时间意味着不同的东西.有时它意味着衡量绩效.有时它意味着诊断内存泄漏.有时它意味着可以了解多线程或其他低级别活动.

那么,这些技术在概念上是不同的还是不是那种黑白?

Pet*_*des 21

基准测量可以衡量整个操作的时间.例如,在某些工作负载下每秒的I/O操作.因此,结果通常是单个数字,以秒或每秒操作数.或者包含不同参数结果的数据集,因此您可以对其进行绘图.

您可以使用基准测试来比较不同硬件上的相同软件,或基准测试与之交互的其他软件的不同版本.例如,每秒使用不同的apache设置进行基准最大连接.


分析不是为了比较不同的东西:它是关于理解程序的行为. 配置文件结果可能是每个功能所用的时间表,甚至是带有采样分析器的每条指令.你可以说它不是一个基准测试,因为说"这个功能占用的时间最少,所以我们保留一个并停止使用其余部分"是没有意义的.

阅读维基百科文章以了解更多信息:https://en.wikipedia.org/wiki/Profiling_ (computer_programming)

您可以使用配置文件找出要优化的位置.在你的程序花费99%的时间的函数中,10%的加速比在任何其他函数中的100%加速更有价值.更好的是当你可以改进你的高级设计时,所以昂贵的功能被称为更少,并且只是让它更快.


微标记是一种特定的基准测试形式.这意味着你正在测试一个超级特定的东西来单独测量它,而不是真正有用的任何东西的整体性能.

示例微基准测试结果:

示例非微基准测试结果:

  • 使用7-zip(具有特定选项和硬件)压缩此100MB文件集合需要23秒.
  • 在某些硬件/软件组合上编译Linux内核需要99秒.

另请参见https://en.wikipedia.org/wiki/Benchmark_(computing)#Types_of_benchmarks.

微基准测试是基准测试的一个特例.如果你做得对,它会告诉你哪些操作很昂贵,哪些操作很便宜,这有助于你在尝试优化时.如果你做错了,你甚至可能根本没有测量你想要测量的东西.例如,你写了一些C来测试循环与while循环,但编译器因不同的原因制作了不同的代码,你的结果毫无意义.(表达相同逻辑的不同方式对于现代优化编译器几乎无关紧要;不要在此基础上浪费时间.)微基准测试很难.

告诉它是微基准测试的另一种方法是你通常需要查看编译器的asm输出,以确保它测试你想要测试的内容.(例如,它没有被提升的东西贵出那是应该重复整个操作足够的时间以得到可以准确地测量时间循环的在您的重复-10M-次循环迭代优化.)

微基准测试可能会扭曲事物,因为它们通过热缓存和分支预测器来测试您的函数,并且它们不会在被测代码的调用之间运行任何其他代码.这可以使巨大的循环展开看起来很好,当作为真实程序的一部分时,它会导致更多的缓存未命中.类似地,它使大的查找表看起来很好,因为整个查找表最终在缓存中.完整的程序通常会在对查找表并不总是在缓存中命中的函数的调用之间弄脏足够的缓存,因此计算某些东西会更便宜.(大多数程序都受内存限制.重新计算不太复杂的东西通常和查找它一样快.)


lfr*_*ree 5

基准测试可以帮助您观察系统在负载下的行为、确定系统的容量、了解哪些更改是重要的,或者查看您的应用程序如何处理不同的数据。

剖析是衡量和分析时间消耗的主要手段。分析需要两个步骤:测量任务和经过的时间,并对结果进行汇总和排序,以便重要的任务冒泡到顶部。--高性能 MySQL

我的理解是:基准是了解您的应用程序的措施,而分析是改进您的应用程序的措施。