使用clock_gettime()问题

时间:2017-03-12 17:07:18

标签: c++ c usleep

我正在做一个微基准测试。我的代码看起来像这样

while(some condition){
    struct timespec tps, tpe;
    clock_gettime(CLOCK_REALTIME, &tps);

    encrypt_data(some_data)

    clock_gettime(CLOCK_REALTIME, &tpe);
    long time_diff = tpe.tv_nsec - tps.tv_nsec;
    usleep(1000);
}

然而,我放入usleep()的睡眠时间实际上影响了我得到的观察到的time_diff。如果我使用上面的骨架测量这个代码的执行时间,我得到的时间从~1.8us变化到~7us,睡眠时间分别为100us和1000us。当睡眠时间在仪表区之外时,为什么测量时间会随着睡眠时间的变化而变化?

时间结果是多次运行的平均值。我正在使用Ubuntu 14.04来运行此代码。对于加密,我使用的是openssl的aesgcm。

我知道这不是microbenchmark的最佳方法,但这不是问题所在。

1 个答案:

答案 0 :(得分:0)

您是否禁用了CPU缩放?

sudo cpupower frequency-set --governor performance

请参见herehere