程式撰寫好的時候,總是會想測試一下執行時間
以望都是在程式中加入開始時間及結束時間來進行判斷
但是在閱覽文章的時,發現 time 這個方便的指令
time
指令可以計算程序需要運行多長的時間,用於測試指令的性能很方便
可以拿來比較版本、優化前後的差異,就能使用 time
指令來確認執行時間
Time 版本
bash 和 zsh 這兩個 Linux Shell 分別有自己的 time command 版本
可以使用 type
來確認 time 的版本
1
2
3
4
5
6
7
|
# bash
$ type time
> time is a shell keyword
# zsh
$ type time
> time is a reserved word
|
time 說明
bash
產生時間報告
- real 指令執行到結束的時間,包含所有的程序佔用、阻塞時的時間
- user 指令花費在使用者中的CPU時間,只有執行指令程序的時間
- sys 指令花費在內核模式的CPU時間,內核執行指令程序的時間
zsh
- total 等同 real
- cpu 百分比 = 100 * (user + sys) / total
1
2
3
4
5
6
7
8
9
10
11
|
# bash
$ time
real 0m0.000s
user 0m0.000s
sys 0m0.000s
# zsh
$ time
0.00s user 0.00s system 00% cpu 0.000 total
|
如果覺得 zsh 的顯示方式不容易看
可以修改輸出格式,可以參考 手冊
1
2
3
4
5
6
7
8
9
|
# zsh
$ TIMEFMT=$'\nCPU\t%P\nuser\t%*U\nsystem\t%*S\ntotal\t%*E'
$ time
CPU 82%
user 0.001
system 0.002
total 0.004
|
測試指令
剛好比較一個剛寫好的 perl 解析 pcap
和 golang 解析 pcap
以下就是 golang 和 perl 版本的 time 測試報告
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# bash
time ./golang_parse_pcap time perl main.pl -f dns.pcap
real 0m0.016s real 0m0.042s
user 0m0.009s user 0m0.032s
sys 0m0.007s sys 0m0.007s
# zsh
time ./golang_parse_pcap time perl main.pl -f dns.pcap
CPU 103% CPU 92%
user 0.010 user 0.032
system 0.010 system 0.007
total 0.019 total 0.041
|
參考資料
- https://linuxize.com/post/linux-time-command/
- https://en.wikipedia.org/wiki/Time_(Unix)
- http://zsh.sourceforge.net/Doc/Release/Parameters.html