我在做一个微型马克。我的代码看起来像这样

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()中输入的睡眠时间实际上会影响观察到的时间差。如果我使用上面的骨架来度量代码的执行,那么我得到的睡眠时间分别为100us和1000us,从~1.8us到~7us不等。当睡眠时间在仪器块之外时,为什么测量的时间会随着睡眠时间的变化而变化?
时间结果是多次运行的平均值。我使用Ubuntu 14.04来运行这段代码。对于加密,我使用来自openssl的aesgcm。
我知道这不是到达微基准的最佳方式,但这不是问题所在。

最佳答案

是否禁用了CPU扩展?
sudo cpupower frequency-set --governor performance
请参见herehere

10-04 14:43