1

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

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。

我知道这不是进行微基准测试的最佳方法,但这不是问题所在。

4

1 回答 1

0

您是否禁用了 CPU 缩放?

sudo cpupower frequency-set --governor performance

这里这里

于 2018-08-02T14:13:55.043 回答