Я пытаюсь получить наносекундное разрешение от CLOCK_REALTIME
на маршрутизаторе MIPS с тактовой частотой 1 ГГц. Когда я компилирую приведенный ниже код для x86 и работаю с частотой 1 ГГц, я получаю наносекундное разрешение. Когда я компилирую для mips и запускаю на маршрутизаторе 1 ГГц, он, кажется, округляется до микросекунды.nanoseconds from clock_gettime() on mips router
#include <stdio.h>
#include <time.h>
int main(int argc, char **argv, char **arge) {
struct timespec tps, tpe;
if ((clock_gettime(CLOCK_REALTIME, &tps) != 0)
|| (clock_gettime(CLOCK_REALTIME, &tpe) != 0)) {
perror("clock_gettime");
return -1;
}
printf("%lu s, %lu ns\n", tpe.tv_sec-tps.tv_sec,
tpe.tv_nsec-tps.tv_nsec);
return 0;
}
Вот образец раз:
[email protected]:~$ gcc clock.c -o clock_x86 -static -lrt
[email protected]:~$ ./clock_x86
0 s, 221 ns
[email protected]:~$ mipsel-openwrt-linux-gcc clock.c -lrt -static -o clock_mips
<...scp...>
[email protected]:~# ./clock_mips
0 s, 3000 ns
там что-то я недоразумение о часах, MIPS, процессоры, и т.д.? Я ожидал бы вызова CLOCK_REALTIME
для получения наносекундной гранулярности/разрешения независимо от архитектуры процессора.
Кроме того, если кто-нибудь может пролить свет на то, как эти таймеры POSIX реализованы и как они получают свои измерения, я был бы признателен.
Это помогает. Когда вы упоминаете «спецификация реализации», ссылаетесь ли вы на ядро? То есть, если мне нужно лучшее разрешение, я сосредоточусь на поиске ядра, которое реализует эти таймеры по-разному? – djh