Я делал микробенчмарк. Мой код выглядит примерно так
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 для запуска этого кода. Для шифрования я использую aesgcm из openssl.
Я знаю, что это не лучший способ для микробенчмарка, но это не проблема здесь.
Вы отключили масштабирование процессора?
sudo cpupower frequency-set --governor performance
Других решений пока нет …