测量执行程序时间的方法

时间:2012-10-22 08:34:14

标签: c linux

我在C中有很多简短的程序。每个程序都实现简单的操作,例如:包含库,从文件加载某些东西(ex矩阵),做简单操作,将矩阵写入文件结束。

我想测量整个程序(不仅是代码片段)的实际执行时间。

我的简单想法是使用htop或ps aux - >列时间。但是这种方法并不好,因为我没有执行时间,但是在上次刷新期间没有执行时间,我可能会错过这个。

你有什么方法可以测量linux中的进程时间吗?

3 个答案:

答案 0 :(得分:4)

如果你的程序名为foo,那么只需输入

即可
~$ time foo

应该完全按照自己的意愿行事。

答案 1 :(得分:3)

除了其他答案,主要是建议使用time实用程序或shell内置函数:

  • time(7)是一个非常有用的页面。
  • 您可以使用(在代码中)clock(3)标准函数来获取CPU时间(以微秒为单位)。
  • 时间测量的分辨率和准确性取决于硬件和操作系统内核。您可能更喜欢“实时”内核(例如linux-image-3.2.0-rt包),或者至少使用CONFIG_HZ_1000配置的内核)来获得更精确的时间度量。
  • 您也可以使用(在您的代码中)clock_gettime(2)系统调用(所以也链接-lrt库)。
  • 进行测量时,请尝试让您的测量过程至少运行几秒钟,然后多次测量(因为例如磁盘缓存问题)。

答案 2 :(得分:2)

如果您使用

time <PROGRAM> [ARGS]

这将提供一些基本级别的信息。这应该运行你的shell的时间命令。示例输出:

$ time sleep 2
real    0m2.002s
user    0m0.000s
sys     0m0.000s

但也有

/usr/bin/time <PROGRAM> [ARGS]

更灵活,可提供更多有关时间的诊断信息。这运行GNU计时程序。 This site有一些使用示例。示例输出:

$ /usr/bin/time -v sleep 2
Command being timed: "sleep 2"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 0%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:02.00
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): 2496
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 202
Voluntary context switches: 2
Involuntary context switches: 1
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0