Различия в производительности между nanosleep и / dev / rtc - PullRequest
1 голос
/ 17 августа 2011

Я конвертировал основной цикл встроенной программы linux для запуска на сервере, и одним из приятных моментов будет запуск без полномочий root.Программа отвечает за периодические запросы сканирования IO с сетевого устройства - каждые 2 мс.Сегодня я заменил использование / dev / rtc вызовом nanosleep.В этом конкретном случае мы можем избежать больших задержек, но мне интересно, можно ли оставить вызов nanosleep для случая, когда мы работаем на встроенном устройстве с более строгими требованиями к синхронизации (что имеет место для больших проектов)).Есть большая разница в производительности?

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

Это зависит от версии ядра Linux. Со времени (7) manpage:

   High-Resolution Timers
       Before Linux 2.6.21, the accuracy of timer and sleep system calls (see below) was also limited by the
       size of the jiffy.

       Since  Linux  2.6.21,  Linux supports high-resolution timers (HRTs), optionally configurable via CON‐
       FIG_HIGH_RES_TIMERS.  On a system that supports HRTs, the accuracy of sleep and timer system calls is
       no  longer constrained by the jiffy, but instead can be as accurate as the hardware allows (microsec‐
       ond accuracy is typical of modern hardware).

Примечание: "jiffy" - частота тиков таймера, упомянутая в ответе "Greg". Также обратите внимание, что системные вызовы, к которым это относится, включают nanosleep ().

То есть, если у вас есть достаточно свежая версия ядра на вашей встроенной цели, nanosleep () должен быть достаточно хорошим. Если у вас более старая версия ядра, вы действительно ограничены тактовой частотой, и в этом случае у вас могут возникнуть проблемы, поскольку 2 мс довольно близки к тактовой частоте 1 мс с CONFIG_HZ = 1000.

1 голос
/ 17 августа 2011

Man-страница для nanosleep предполагает использование таймеров ядра, что делает его чувствительным к значению "HZ" (ядро "tick"). Тик обычно составляет 1000 Гц (1 мс), однако для встроенной системы это значение может не совпадать, вы можете настроить его с параметрами ядра в зависимости от того, какие источники синхронизации у вас доступны.

Поскольку / dev / rtc использует прерывания, это не привязывает вас к HZ, поэтому время может быть более чувствительным. Конечно, это также зависит от вашего оборудования RTC.

Если сомневаетесь, сделайте тонкую абстракцию, которая позволит вам установить время и передать обратный вызов, чтобы вы могли переключаться между реализациями, и, как всегда, для встроенных систем - измерьте его на реальном устройстве.

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