Linux, требуется точное время программы. Программа пробуждения планировщика

У меня есть поток, работающий в системе Linux, который мне нужно выполнять с максимально точными интервалами, насколько это возможно. Например.выполняется один раз каждые мс.

В настоящее время это делается путем создания таймера с

 timerfd_create(CLOCK_MONOTONIC, 0)

, а затем передачи желаемого времени ожидания в структуру с помощью

 timerfd_settime (fd, 0, &itval, NULL);

. Вызов блокирующего чтения выполняется на этом таймере, который останавливает выполнение потока и сообщает потерянные вызовы пробуждения.

Проблема в том, что на более высоких частотах система начинает терять дедлайны, даже если загрузка ЦП ниже 10%. Я думаю, это связано с тем, что планировщик не будит поток достаточно часто, чтобы проверить блокирующий вызов. Есть ли команда, которую я могу использовать, чтобы сообщить планировщику, чтобы он будил поток через определенные промежутки времени, насколько это возможно? Ожидание при занятости - плохой вариант, поскольку система выполняет множество других задач.

Спасибо.

11
задан K_scheduler 10 June 2011 в 13:49
поделиться