关于系统:如何解释 Perl 的基准模块报告的基准时间?

How do I interpret benchmark times as reported by Perl's Benchmark module?

总结

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

示例:

1
2
3
4
5
6
7
8
9
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?可以推断它们以获得毫秒值吗?现在对于我的基准测试,我所需要的只是单次执行的真实时间,而无需考虑基准测试的一些更深奥的方面。


Wallclock seconds 是实际经过的时间,就像您在看手表来计时一样。

用户空间中实际花费在 CPU 上的 usr 秒数。

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

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

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

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

我在精通 Perl 和我的一些基准测试演讲中对此进行了相当广泛的讨论。然而,就在本周,我认为 Benchmark 模块已经过时了。 Steffen Müller 的 Dumbbench 做得更好。在 blogs.perl.org 上查看他的dumbbench 博客条目。