【问题标题】:Benchmarking : Same process multiple times, only one warmup?基准测试:多次相同的过程,只有一次预热?
【发布时间】:2013-02-12 16:52:40
【问题描述】:

我目前正在开发一个 Java 应用程序(基准测试),其目的是测量与数据库相关的一些进程。

我的应用程序应该运行有以下内容:

我有几个我想多次运行的用例(数据库中的简单插入、简单更新等)。运行之间的唯一区别是同时运行的线程数。

我需要使用 1、2、4、8、16 等线程对这些用例进行基准测试,以便在我的测试中包含并发性(使用 ExecutorService)。

我的问题:

我的应用程序是否需要在每次运行之前运行预热?或者只有一个就足够了。换句话说,我的应用程序是否必须执行以下操作:

--warmup
--process(1) (1 thread)
--warmup
--process(2) (2 threads)
etc.

或

--warmup
--process(1)
--process(2)
etc.

基本上,“process()”方法是完全一样的,与线程数无关。我倾向于相信一个显然就足够了,因为 JVM 不会真正优化任何东西,因为代码不会改变。但是,我仍然更喜欢寻求一些经验丰富的建议:)

感谢您的帮助!

注意:我阅读了很多关于基准测试的内容:

这就是为什么我会说只需要一次热身。 :)

【问题讨论】:

  • 当然,第一次预热将只包括一个线程,因为下一次预热也将包括并发线程。这可能会改变 JVM 的行为。类似:--warmup(1)、--process(1)、--warmup(2)、process(2) 等。

标签: java concurrency benchmarking


【解决方案1】:

需要一次热身。如果您涵盖了这些文章并进行了适当的预热(足够的迭代,确保您的预热代码不会被消除等),那么您的预热就足够了,并且您不会在每次测试之前运行它获得任何额外的好处。

【讨论】:

  • 好的,谢谢 :) 确实,我认为 JVM 不会以某种方式得到优化,即使我使用多个线程运行预热...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
  • 2022-08-19
  • 2018-11-16
  • 2014-02-19
  • 1970-01-01
  • 2016-12-24
相关资源
最近更新 更多