2010-11-21 59 views
4

我處於以下情況:關於系統和使用時間,Linux中「時間」命令的等效性更準確嗎?

我想確定(PHP和C++)代碼的小片段的系統和使用時間。顯然,我可以在Linux中使用「time」二進制文件,但鑑於這些代碼片段運行速度非常快,「時間」的正常(甚至冗長)輸出不會滿足我的目的。 「時間」的精確度達到毫秒,而我需要幾微秒。甚至更好:納秒。

任何人都可以指向我的一個軟件,可以爲我做這個?我發現了walltime的東西,但是我感興趣的是系統和使用時間。

在此先感謝!

BTW:進出口運行的Ubuntu 10.10 64位

回答

3

沒有任何方法可以給你任何等效的sys或usertime,如time命令所報告的那樣,這將更精確。 time命令的大部分精確度都是錯誤的精度。

處理這個問題的技巧是將這些代碼片段放在緊密循環中,這些循環稱它們數千次,並計算給定循環從中獲得的時間長度。即使如此,你應該重複幾次實驗,並選擇最短的時間。

下面是一個類比描述爲什麼精度是錯誤的,以及我的意思。假設有人使用秒錶通過在比賽開始時以及被定時的人穿過終點線時手動按下按鈕來計時。據說你的秒錶精確到秒的100秒。但是,這種精確度是錯誤的,因爲它由於按下按鈕的人的反應時間引起的錯誤而變得相形見絀。

這非常類似於爲什麼time爲您提供的準確度應該是微秒級的,但確實明顯不夠精確。在任何給定的系統中,在任何給定的時間點都會有很多事情發生,並且所有這些都會在計算中引入錯誤。來自網絡IO或磁盤IO的中斷,用於運行調度程序的定時器中斷以及其他進程對L1或L2 CPU高速緩存執行的操作。這一切都加起來。

使用類似於valgrind這樣的模擬CPU上運行您的程序可以給你看起來精確到CPU週期數的數字。但這種精確度並不是你在現實世界中所經歷的。使用我最初描述的技術會更好,並且接受這些時間可能會很模糊。

+0

哇,感謝您的快速和詳細的anwser! – Stobbej 2010-11-21 15:51:48

+0

我意識到在給定的時間點,很多進程正在運行,所以這就是爲什麼我要求系統和使用時間的原因。對於這些數字,您可以知道CPU實際上正忙於處理您的呼叫,對嗎? 我意識到現在我無法通過單一測量獲得更高的精度,所以我會嘗試循環解決方案! – Stobbej 2010-11-21 15:59:22

+0

@Stobbej - 是的,這兩個數字應該表示CPU在您的流程中特別花費的時間。但奇怪的是,這使得他們更不精確。確切地衡量它實際上並不容易。 – Omnifarious 2010-11-21 16:24:20

0

gettimeofday()會給你的微第二項決議。

0

clock_gettime()會給你納秒的分辨率。