簡體   English   中英

配置文件程序在Linux上的速度

[英]profile program's speed on Linux

我有一個程序的幾個變體,要在性能上進行比較。 兩者基本上執行相同的任務。

一個在C和內存中完成。 另一個調用外部實用程序並執行文件IO。

我如何可靠地比較它們?

1)使用“時間”獲取“ CPU上的時間”有助於調用system()和執行IO的第二種變體。 即使我將“系統”時間添加到“用戶”時間,也不會算作在wait()上花費的時間。

2)我不能只為它們計時,因為它們可以在服務器上運行,並且可以隨時從CPU推出。 平均不超過1000個實驗是一個軟選擇,因為我不知道服務器的使用方式-它是群集上的VM,有點復雜。

3)探查器無濟於事,因為它們會讓我花時間在代碼上,這再次偏愛使用system()的版本

我需要累加這些程序消耗的所有CPU時間,包括用戶,內核,IO和子進程的時間。

我以為這是一個普遍的問題,但似乎仍未找到解決方案。

(解決了times()-見下文。謝謝大家)

據我了解,在bash命令行上鍵入“ time myapplication”不是您想要的。

如果需要准確性,則必須使用探查器。

試着像OProfile的Valgrind的 ,或看看一個更加擴展列表。

如果您沒有消息來源,說實話我不知道...

/ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM