Разница между временем в пространстве ядра и в пространстве пользователя - PullRequest
3 голосов
/ 30 июня 2011

Мне нужно обменяться структурным временным интервалом между kernl-space и user-space (через сообщение netlink), чтобы вычислить прошедшее время между созданием сообщения и разработкой в ​​userpace. я использую функцию jiffies_to_timeval в пространстве ядра; в пользовательском пространстве я вызываю gettimeofday ... но если я напечатаю количество секунд обеих структур, я получу разницу в 200 секунд ... я не могу выяснить причину этого.

Есть идеи?

Спасибо всем!

1 Ответ

5 голосов
/ 30 июня 2011

В Linux есть несколько часов.Различия сводятся к тому, тикают ли они, когда машина находится в режиме ожидания, пытаются ли они отслеживать «время настенных часов» и насколько они высокого разрешения.

do_gettimeofday, вероятно, не то, что вы хотите использоватьпоскольку эти часы пытаются отследить «время настенных часов»;то есть он может прыгать вперед или назад.Что, если кто-то - или что-то (например, NTP) - решил установить системные часы между двумя прочтениями?

Для синхронизации я бы рекомендовал использовать POSIX clock_gettime функция с CLOCK_MONOTONIC идентификатором часов.(Возможно, вам придется скомпилировать ваше приложение пользовательского пространства с помощью -lrt.)

Я считаю, что clock_gettime также существует как функция ядра, хотя у меня пока нет под рукой моих исходников ядра...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...