2010-09-23 36 views
3

摘要如何解釋由Perl的Benchmark模塊報告的基準時間?

當我使用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)

什麼不同字段的含義:掛鐘秒,USR,SYS CPU?他們可以外推得到毫秒值嗎?現在對於我的基準測試來說,我所需要的只是一個單一執行的實際時間,而不需要考慮基準測試中更深奧的一些方面。

+3

你真的很想「使用Benchmark」:hireswallclock'「或者避免首先以這種方式使用模塊。 「wallclock」時間就是你的「真實世界時間」。嘗試用宏觀運行時間對代碼段進行基準測試。如果這是不可能的,因爲額外的循環會使結果偏離太多,那麼你就是微觀優化,我們都知道你不應該那樣做。 – tsee 2010-09-23 07:27:47

+1

只運行一次不會給你一個好的結果。您需要數千次運行您的操作才能獲得有用的實際(平均值)數據。 – Ether 2010-09-23 16:18:55

回答

7

Wallclock seconds是實際的經過時間,就好像你看着你的手錶計時一樣。

實際花在CPU上的usr秒數,在user space

sys秒是實際花在CPU上的時間,在內核空間中。

CPU時間是花在CPU上的總時間。

但是,一旦你擁有了所有這些,你必須弄清楚你實際上想要測量的是什麼。 Benchmark模塊只是您在本地計算機上執行的操作。如果必須在遠程計算機(例如數據庫服務器或Web服務器)上啓動進程,則這些計算機的CPU時間不是結果的一部分。但是,等待響應的時間是掛鐘時間的一部分。

您的結果顯示,所有事情幾乎都是瞬間發生的。你需要更多的內容,所以需要一些時間。如果您只需要單次運行的掛鐘時間,則根本不需要使用Perl。從命令行使用times實用程序。

我在掌握了Perl以及我的一些基準測試談話。不過,就在本週,我認爲Benchmark模塊已經過時了。 SteffenMüller的Dumbbench做得更好。請參閱他的dumbbench博客條目blogs.perl.org

+0

我會小心地說Benchmark.pm已經過時。它做它做廣告的東西,即使這個界面很有趣。 Dumbbench的目的是從用戶那裏控制一些控制,以減少P誤解統計EBKAC的概率。這導致必須運行更多的長時間運行命令的迭代,否則如果您只關心期望值,則必須執行這些迭代。 – tsee 2010-09-23 07:27:11

+1

我從來沒有真正喜歡過Benchmark。我期待着它不是我們使用的工具的那一天。 :) – 2010-09-23 07:37:40