Точный межпроцессный таймер в Linux
Я хотел бы измерить время проверки связи между процессом отправителя и потребителем.
Оба процесса работают на одном физическом хосте, Linux 64 bit.
Я сейчас пользуюсь clock_gettime(CLOCK_REALTIME, &cur_ts);
, Я в основном фиксирую текущую метку времени cur_ts
и отправить его в потребительский процесс; как только он получен на другом конце, я призываю clock_gettime(CLOCK_REALTIME, &cur_ts);
снова во втором процессе и вычтите два раза.
Является ли эта процедура точной для измерения пинга между двумя процессами? Должен ли я использовать что-то другое?
Спасибо
1 ответ
да
Вы используете правильный интерфейс. Это определенный по Posix HRT (Таймер высокого разрешения), который доступен в современном Loonix, и ваше использование является каноническим стандартом.
Для разрешений пинга это, вероятно, не имеет значения, но возможно использовать CLOCK_MONOTONIC,
особенно на короткие промежутки времени. При других условиях CLOCK_REALTIME
может быть более точным. Однако точное значение этих часов не указано в Posix, а в Linux, я думаю, все они подлежат настройке NTP. Это хорошо для длительных интервалов, по крайней мере.
В Linux, чтобы получить доступ к базовым аппаратным часам без настроек NTP, вам нужно отключить резервирование Posix и использовать CLOCK_MONOTONIC_RAW.
http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_gettime.html