1 基礎用法詳解
先來看下最基礎的用法,也可能是大家最常見的用法了
root@chopin:~$ time find . -name "chopin.txt"
......
real 0m0.174s
user 0m0.084s
sys 0m0.084s
可以很清楚看到,find 命令執行的時間為 0.174s ,是不是很簡單,很方便呢
不過,time
命令輸出了三個參數,我們只用到了第一個參數,其它兩個參數代表什么含義呢?
這里我來解釋一下:
- real :表示的是墻上時間,說白了,其實就是從程序運行開始到結束所經歷的時間;
- user :表示程序運行期間,cpu 在用戶態所花費的時間;
- sys :表示程序運行期間,cpu 在內核態所花費的時間;
細心的讀者會發現,上述案例中的 user + sys 不等于 real ,這是怎么回事呢?
其實上邊解釋的 user 和 sys ,是 cpu 執行指令所消耗的時間,并不包含:進程阻塞 IO、調度排隊,這些非 cpu 運行時間。
案例中 find 執行查找文件過程中,會有磁盤 IO 讀取,這時 cpu 會被釋放出來干別的事情,這些 IO 消耗的時間,是不包含在 user 和 sys 統計數據中,所以就出現了 real 時間大于 user + sys 了。
再通過一個示例來驗證并加強我們的理解
root@chopin:~$ time sleep 2
real 0m2.001s
user 0m0.000s
sys 0m0.000s
可以清楚地看到,sleep 命令基本上沒有消耗 cpu,程序真實的運行時間就是 2 秒
那我們是不是可以得出如下結論了呢:
real >= user + sys
其實這個結論在單個 cpu 情況下,是正確的。
如果服務器是多個 cpu,你的程序正好可以將多個 cpu 充分利用起來,程序運行期間是多核心并行的,那么 user + sys 統計的 cpu 時間可能就會大于 real 時間啦
所以這 3 個時間之間的關系并不是恒定的,你需要清楚的了解服務器是否為多個核心。
通過統計到的 cpu 消耗時間,我們也可以大概知道,程序運行期間 cpu 利用情況。對于單核,計算密集型的程序,real 會很接近 user 和 sys 時間之和的。
Tips:有些同學可能對操作系統可能不太熟悉,這里簡單科普下內核態和用戶態的基本概念
Linux 為使系統更穩定,采取了隔離保護的措施,運行狀態分為內核態和用戶態 :
- 用戶態 :用戶代碼不具備直接訪問底層資源的能力,需要借助內核提供的系統調用 API。在這種隔離保護下,即使用戶程序崩潰,也不會影響整個系統的功能。
- 內核態 :內核代碼具備最大權限,可執行任意 cpu 指令,不受任何限制。內核態通常是操作系統提供的最底層、最可靠的代碼運行的,內核態的代碼崩潰是災難性的,影響整個系
-
內核
+關注
關注
3文章
1377瀏覽量
40327 -
cpu
+關注
關注
68文章
10882瀏覽量
212229 -
Linux
+關注
關注
87文章
11322瀏覽量
209867
發布評論請先 登錄
相關推薦
評論