0

我有很多用C语言编写的短程序。每个程序都实现了简单的操作,例如:包含库,从文件中加载一些东西(例如矩阵),做简单的操作,将矩阵写入文件末尾。

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

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

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

4

3 回答 3

4

如果您的程序名为 foo,则只需键入

~$ time foo

应该做你想做的事。

于 2012-10-22T08:35:56.743 回答
3

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

  • time(7)是一个非常有用的页面。
  • 您可以使用(在您的代码中)clock(3)标准函数来获取以微秒为单位的 CPU 时间。
  • 时间测量的分辨率和准确性取决于硬件和操作系统内核。您可能更喜欢“实时”内核(例如一个linux-image-3.2.0-rt包),或者至少一个配置有 的内核CONFIG_HZ_1000)来获得更精确的时间测量。
  • You might also use (inside your code) the clock_gettime(2) syscall (so link also the -lrt library).
  • When doing measurements, try to have your measured process run a few seconds at least, and measure it several times (because e.g. of disk cache issues).
于 2012-10-22T09:14:07.567 回答
2

如果你使用

time <PROGRAM> [ARGS]

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

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

但也有

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

它更灵活,并提供了更多关于时间的诊断信息。这运行一个 GNU 计时程序。该站点有一些使用示例。示例输出:

$ /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
于 2012-10-22T08:38:15.587 回答