У меня есть поток, работающий в системе Linux, который мне нужно выполнять с максимально точными интервалами, насколько это возможно. Например.выполняется один раз каждые мс.
В настоящее время это делается путем создания таймера с
timerfd_create(CLOCK_MONOTONIC, 0)
, а затем передачи желаемого времени ожидания в структуру с помощью
timerfd_settime (fd, 0, &itval, NULL);
. Вызов блокирующего чтения выполняется на этом таймере, который останавливает выполнение потока и сообщает потерянные вызовы пробуждения.
Проблема в том, что на более высоких частотах система начинает терять дедлайны, даже если загрузка ЦП ниже 10%. Я думаю, это связано с тем, что планировщик не будит поток достаточно часто, чтобы проверить блокирующий вызов. Есть ли команда, которую я могу использовать, чтобы сообщить планировщику, чтобы он будил поток через определенные промежутки времени, насколько это возможно? Ожидание при занятости - плохой вариант, поскольку система выполняет множество других задач.
Спасибо.