![](/img/trans.png)
[英]How to measure the ACTUAL execution time of a C program under Linux?
[英]How to measure execution time in C on Linux
我正在对实时数据进行加密。 我已经开发了加密和解密算法。 现在,我想测量在C语言中Linux平台上相同程序的执行时间。我如何正确地测量它? 我已经尝试过如下
gettimeofday(&tv1, NULL);
/* Algorithm Implementation Code*/
gettimeofday(&tv2, NULL);
Total_Runtime=(tv2.tv_usec - tv1.tv_usec) +
(tv2.tv_sec - tv1.tv_sec)*1000000);
这给了我微秒的时间。 是正确的时间测量方式还是我应该使用其他功能? 任何提示将不胜感激。
读取时间(7) 。 您可能想将clock_gettime(2)与CLOCK_PROCESS_CPUTIME_ID
或CLOCK_MONOTONIC
。 或者,您可以只使用clock(3) (用于CPU时间(以微秒为单位,因为CLOCK_PER_SEC
始终为一百万))。
如果要对整个程序(可执行文件)进行基准测试,请使用time(1)命令。
clock()
:返回的值是到目前为止使用的CPU时间,作为clock_t;
获取程序开始和结束时的CPU时间。 差异就是你想要的。
clock_t begin = clock();
/**** code ****/
clock_t end = clock();
double time_spent = (double)(end - begin) //in microseconds
要获得使用的秒数,我们将差值除以CLOCKS_PER_SEC
。
在C11中, timespec_get()
提供了以纳秒为单位的时间测量。 但是准确性是由实现定义的,并且会有所不同。
测量适当的加密代码的执行时间很简单,尽管有点乏味。 好的加密代码的运行时间与输入的质量无关-不管您对它进行什么投入,每块输入总是需要相同数量的操作。 如果不是这样,您会遇到一个称为定时攻击的问题。
因此,您唯一需要做的就是展开所有循环,对操作码进行计数,并将各个操作码乘以其时钟信号的数量,以获取准确的运行时间。 有一个问题:某些CPU的某些操作具有可变数量的时钟,而您可能必须将其更改为具有固定时钟数量的操作。 坦白的说,这是一种痛苦。
如果您只想知道代码是否能够以足够快的速度运行以适合您的实时操作系统的插槽,则可以简单地将代码最大化并在下面的示例中填充NOOP(您的RTOS可能有一个例程)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.