摘要
当我使用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秒,Usr,Sys,CPU?它们可以外推得到毫秒值吗?现在,对于我的基准测试,我需要的只是一次执行的真实世界时间,而不需要考虑基准测试的一些更深奥的方面。
答案 0 :(得分:7)
Wallclock秒是实际经过的时间,就像你看着手表计时一样。
user space中实际花费在CPU上的时间的秒数。
sys seconds是在内核空间中花在CPU上的实际时间。
CPU时间是CPU上花费的总时间。
然而,一旦掌握了所有这些,就必须弄清楚你实际想要衡量的是什么。 Benchmark模块仅对您在本地计算机上执行的操作进行计时。如果必须在远程计算机(例如数据库服务器或Web服务器)上启动进程,则这些计算机的CPU时间不是结果的一部分。但是,等待响应的时间是挂钟时间的一部分。
您的结果显示一切都在瞬间发生。你需要更丰富的东西,所以它需要一些时间。如果您只需要一次运行的挂钟时间,则根本不需要使用Perl。从命令行使用times
实用程序。
我在掌握Perl 和我的一些基准测试会话中相当广泛地介绍了这一点。然而,就在本周,我认为Benchmark模块已经过时了。 SteffenMüller的Dumbbench做得更好。在dumbbench查看他的blogs.perl.org博客条目。