Bash shell - time command
June 01, 2018用途
測量一個command花了多少時間
用法
直接上例子
會看到如下的輸出
你總共會看到三個值
real: 總共的時間 從開始到結束 就像有個人拿著碼錶等著這個指令跑完 所會看到的總時間
user: CPU所花費的運算總時間
sys: CPU所花費的在系統(kernel)相關的時間 比如說配置記憶體
來看個例子 先來睡個三秒
執行它
看起來是沒有用到CPU的時間
現在來用看看CPU
執行它
跟預期的一樣 CPU花了些時間運算 但沒有任何的system call
現在我們來試試system call 跟OS要一點記憶體來用用
執行它
沒fu 加個0
執行它
再加個0
執行它
這樣有感覺到線性的成長了 所以sys是代表花在system call的時間
系統呼叫(System call)
講那麼多 什麼是system call呢
一個電腦上可以跑很多個應用(Application) 有些Application可以自己玩自己的 但有些application就需要OS提供服務來達成目的
所以OS提供了很多API讓應用程式來呼叫 OS所提供的服務包含
1.進程控制: create process, abort process, allocate memory, free memory
2.檔案管理: file open, file close, delete file, read file
3.裝置管理: request device, delete device, get device attribute
4.資訊管理: get system time or data
5.通訊: create/delete communication, send/receive messages
這些東西都算在system call的範疇
結論
user time + system time 會告訴你你的CPU花了多少時間處理這個命令 特別注意這個是加總了所有的CPU
所以如果你的進程(process)有兩個以上的線程(thread) 那user time + system time就會是所有線程的時間相加 所以你看到加起來大於你的real time也不要太驚訝 因為不同的線程可以同時運行
有興趣的讀者可以用time跑跑看C++多線程教學的範例程式