【问题标题】:How do I interpret benchmark times as reported by Perl's Benchmark module?如何解释 Perl 的基准模块报告的基准时间?
【发布时间】:2010-09-23 06:21:05
【问题描述】:

总结

当我使用 Perl 的 Benchmark 实用程序执行一个非常简单的程序时。我得到的值不是(显示为)毫秒或纳秒。返回的基准数据对我没有用,因为我不知道如何解释它。

示例:

use Benchmark;

my $start = Benchmark->new;
print "foo!";
my $end = Benchmark->new;

my $diff = timediff($end, $start);

print timestr($diff);

返回:foo! 0 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)

不同的字段是什么意思:Wallclock seconds、Usr、Sys、CPU?可以推断它们以获得毫秒值吗?现在,对于我的基准测试,我只需要一次执行的真实时间,而无需考虑基准测试的一些更深奥的方面。

【问题讨论】:

  • 你真的,真的想要“使用 Benchmark ':hireswallclock'”或者首先避免以这种方式使用模块。 “挂钟”时间是您的“现实世界时间”。尝试使用宏观运行时对代码片段进行基准测试。如果这是不可能的,因为额外的循环会使结果产生过多的偏差,那么您就是在进行微优化,我们都知道您不应该这样做。
  • 只运行一次不会给你一个好的结果。您需要运行数千次操作才能获得有用的真实(平均)数据。

标签: perl system benchmarking


【解决方案1】:

挂钟秒数是实际经过的时间,就像您看着手表计时一样。

实际在 CPU 上花费的时间中的 usr 秒数,在 user space 中。

sys 秒是在内核空间中实际花费在 CPU 上的时间。

CPU时间是在CPU上花费的总时间。

然而,一旦你掌握了所有这些,你就必须弄清楚你真正想要测量的是什么。 Benchmark 模块只计算你在本地机器上所做的事情。如果您必须在远程机器(例如数据库服务器或 Web 服务器)上启动进程,则这些机器的 CPU 时间不是结果的一部分。但是,您等待他们回复的时间是挂钟时间的一部分。

您的结果表明,一切几乎都是瞬间发生的。你需要一些更肉的东西,所以它需要一些时间。如果您只需要一次运行的挂钟时间,则根本不需要使用 Perl。从命令行使用times 实用程序。

我在 Mastering Perl 和我的一些基准测试演讲中深入探讨了这一点。然而,就在本周,我认为 Benchmark 模块已经过时了。 Steffen Müller 的Dumbbench 做得更好。在blogs.perl.org 上查看他的dumbbench 博客条目。

【讨论】:

  • 我会小心地说 Benchmark.pm 已过时。它做它所宣传的,即使界面是……有趣的。 Dumbbench 的真正目的是从用户那里获得一些控制,以减少 P 误解统计 EBKAC 的概率。如果您只关心期望值,这将导致必须运行比其他必要条件更多的长时间运行命令的迭代。
  • 我从来没有真正喜欢过 Benchmark。我期待有一天它不再是我们使用的工具。 :)
猜你喜欢
  • 2023-03-09
  • 1970-01-01
  • 2015-03-27
  • 2017-01-23
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
  • 2017-10-07
  • 2018-02-15
相关资源
最近更新 更多