Linux中time命令,我們經常用來計算某個程式的運行耗時(real),使用者態cpu耗時(user),系統態cpu耗時(sys)
time命令最常用的使用方式就是在其後面直接跟上命令和參數:
time <command> [<arguments...>]
舉個栗子1:
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ time sleep 2real 0m2.005suser 0m0.001ssys 0m0.002s
小解其意:
real 0m2.005s :sleep這個程式運行耗時為0m2.005s
user 0m0.001s : 這個時間代表的是sleep運行在使用者態的cpu時間
sys 0m0.002s : 這個時間代表的是sleep運行在核心態的cpu時間。
使用者態(User Mode):
在使用者態,代碼不具備直接存取硬體或者訪問記憶體的能力,而必須藉助作業系統提供的可靠的,底層的APIs來訪問硬體或者記憶體。由於這種隔離帶來的保護作用,使用者態的代碼崩潰(Crash),系統是可以恢複的。我們大多數的代碼都是運行在使用者態的。
核心態(Kernel Mode):
在核心態,代碼擁有完全的,不受任何限制的訪問底層硬體的能力。可以執行任意的CPU指令,訪問任意的記憶體位址。核心態通常情況下,都是為那些最底層的,由作業系統提供的,可信可靠的代碼來啟動並執行。核心態的代碼崩潰將是災難性的,它會影響到整個系統。
為什麼要區分Kernel Mode 和 User Mode:
隔離保護,使得系統更穩定。
好,講完使用者態和核心態之後,我們來看user time,說過了,這個指的是程式foo運行在使用者態的cpu時間,cpu時間不是牆上的鐘走過的時間,而是指CPU工作時間。
舉個栗子2:
#time -p 不顯示單位bixiaopeng@bixiaopengtekiMacBook-Pro ~$ time -p sleep 2real 2.00user 0.00sys 0.00