Я использую CentOS Linux версии 7.3.1611 на процессоре Intel (R) Xeon (R) E5-2667 v4 @ 3,20 ГГц
Во время тестирования моего приложения в пользовательском пространстве я заметил, что clock_gettime (CLOCK_MONOTONIC, & ts) может занимать до 5-6 микросекунд вместо примерно 23 наносекунд в среднем. Это может произойти только один раз на 10000 последовательных вызовов, но это может случиться.
Если бы не было библиотеки VDSO, это можно было бы объяснить. Однако VDSO используется для каждого clock_gettime (я проверял это с помощью strace).
Независимо от того, привязан ли соответствующий поток к определенному ядру процессора или нет. Независимо от того, изолировано это ядро процессора от ОС или нет. Это означает, что тестовое приложение может работать на эксклюзивном ядре ЦП, но в любом случае может появиться отставание!
Я измеряю задержку, сравнивая результаты двух последовательных вызовов clock_gettime, например:
unsigned long long __gettimeLatencyNs() {
struct timespec t1_ts;
struct timespec t2_ts;
clock_gettime(CLOCK_MONOTONIC, &t1_ts);
clock_gettime(CLOCK_MONOTONIC, &t2_ts);
return ((t2_ts.tv_sec - t1_ts.tv_sec)*NANO_SECONDS_IN_SEC + t2_ts.tv_nsec - t1_ts.tv_nsec);
}
Может кто поделится идеями, что там может быть не так?