[英]profile program's speed on Linux
我有一個程序的幾個變體,要在性能上進行比較。 兩者基本上執行相同的任務。
一個在C和內存中完成。 另一個調用外部實用程序並執行文件IO。
我如何可靠地比較它們?
1)使用“時間”獲取“ CPU上的時間”有助於調用system()和執行IO的第二種變體。 即使我將“系統”時間添加到“用戶”時間,也不會算作在wait()上花費的時間。
2)我不能只為它們計時,因為它們可以在服務器上運行,並且可以隨時從CPU推出。 平均不超過1000個實驗是一個軟選擇,因為我不知道服務器的使用方式-它是群集上的VM,有點復雜。
3)探查器無濟於事,因為它們會讓我花時間在代碼上,這再次偏愛使用system()的版本
我需要累加這些程序消耗的所有CPU時間,包括用戶,內核,IO和子進程的時間。
我以為這是一個普遍的問題,但似乎仍未找到解決方案。
(解決了times()-見下文。謝謝大家)
/ usr / bin / time(bash中不是內置的“ time”)可以提供一些有趣的統計信息。
$ /usr/bin/time -v xeyes Command being timed: "xeyes" User time (seconds): 0.00 System time (seconds): 0.01 Percent of CPU this job got: 0% Elapsed (wall clock) time (h:mm:ss or m:ss): 0:04.57 Average shared text size (kbytes): 0 Average unshared data size (kbytes): 0 Average stack size (kbytes): 0 Average total size (kbytes): 0 Maximum resident set size (kbytes): 0 Average resident set size (kbytes): 0 Major (requiring I/O) page faults: 9 Minor (reclaiming a frame) page faults: 517 Voluntary context switches: 243 Involuntary context switches: 0 Swaps: 0 File system inputs: 1072 File system outputs: 0 Socket messages sent: 0 Socket messages received: 0 Signals delivered: 0 Page size (bytes): 4096 Exit status: 0
運行它們一千次,測量實際花費的時間,然后取平均結果。 這應該可以消除由於服務器上運行其他應用程序引起的差異。
我似乎終於找到了它。
NAME時間-獲取處理時間
大綱#include
clock_t times(struct tms *buf);
說明times()將當前處理時間存儲在buf指向的struct tms中。 結構tms如以下定義:
struct tms {
clock_t tms_utime; /* user time */
clock_t tms_stime; /* system time */
clock_t tms_cutime; /* user time of children */
clock_t tms_cstime; /* system time of children */
};
兒童時間是所有等待兒童的遞歸總和。
我想知道為什么它還沒有成為標准的CLI實用程序。 也許我只是一無所知。
我可能傾向於將“ time -o somefile”添加到系統命令的開頭,然后將其添加到主程序的時間給定的時間中以獲得總計。 除非我必須做很多次,否則我會找到一種方法來獲取兩次時間輸出並將它們添加到屏幕上(使用awk或shell或perl或其他東西)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.