2011-06-16 156 views
5

我知道time命令的輸出可以在user部分顯示比real部分更多的時間,但對於多處理器情況,最近我試圖在我看到程序real實質上大於user + sysLinux時間命令輸出的差異

$ time ./test.o 

real 0m5.576s 
user 0m1.270s 
sys  0m0.540s 

有人可以解釋爲什麼會造成這種行爲嗎?

回答

8

這是正常的行爲。

「真實」是掛鐘時間。在您的示例中,運行'./test.o'需要5.576秒。

'user'是用戶CPU時間或用戶空間進程使用的(大致)CPU時間。這實際上是您的CPU花費在實際執行'./test.o'的時間。 1.270秒。

最後,'sys'是系統CPU時間,或者(大致)CPU時間。 0.540秒。

如果您添加sys +用戶,您將獲得CPU執行程序的時間。

real - (user + sys)是,那麼,花費的時間而不是運行您的程序。在調用和終止之間花費了3.766秒不是運行您的程序 - 可能等待CPU完成運行其他程序,等待磁盤I/O等。

1

至少有兩種可能性:

  • 該系統是忙於其他競爭過程
  • 該程序正在睡覺很多,或者做其他操作,其導致它等待,如I/O(等待用戶輸入,磁盤I/O,網絡I/O等)
4

您的進程花費睡眠(例如,等待I/O)的時間不由「用戶」或「系統」 ,但「真實」的時間仍然流逝。

嘗試:

time cat 

...然後等待10秒鐘,然後按Ctrl-d。