我正在研究实时数据的加密。我开发了加密和解密算法。现在我想用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);
这就给了我微秒的时间。是正确的时间测量方法还是我应该使用其他的功能?任何提示将不胜感激。
3条答案
按热度按时间vm0i2vca1#
clock()
:返回的值是到目前为止使用的CPU时间,作为一个clock_t;逻辑
获取程序开始和结束时的CPU时间。差异是你想要的。
代码
为了得到使用的秒数,我们将差值除以
CLOCKS_PER_SEC
。更准确
在C11中,
timespec_get()
提供**纳秒 * 范围内的时间测量。但准确性是由实现定义的,并且可以变化。r55awzrz2#
读取time(7)。您可能希望将clock_gettime(2)与
CLOCK_PROCESS_CPUTIME_ID
或CLOCK_MONOTONIC
一起使用。或者您可以只使用clock(3)(表示以微秒为单位的CPU时间,因为CLOCK_PER_SEC
总是一百万)。如果您想测试整个程序(可执行程序),请使用time(1)命令。
ozxc1zmp3#
测量一个正确的加密代码的执行时间是简单的,尽管有点乏味。一个好的加密代码的运行时间与输入的质量无关--不管你对它做什么,它总是需要相同数量的操作。如果不是这样,你有一个问题,称为定时攻击。
因此,您唯一需要做的就是展开所有循环,计算操作码,并将各个操作码乘以其时钟滴答数,以获得确切的运行时间。有一个问题:一些CPU的某些操作具有可变数量的时钟节拍,您可能必须将其更改为具有固定数量时钟节拍的操作。他的背部疼痛,承认。
如果你只想知道代码是否运行得足够快,以适应你的实时操作系统的插槽,你可以简单地把它取到最大值,然后用NOOP填充下面的情况(你的实时操作系统可能有一个例程)。