Как дать значение задержки, которое меньше, чем у jiffies в отложенной работе

58
6

queue_delayed_work(struct workqueue_struct *wq,struct delayed_work *dwork,unsigned long delay)

В приведенной выше функции можно ли дать задержку, которая меньше одного jiffy?

спросил(а) 2017-10-25T11:51:00+03:00 2 года, 12 месяцев назад
1
Решение
59

Вы можете дать задержку в ноль или более jiffies. Чтобы получить задержку, ядро внутренне использует таймер. Самый ранний таймер может истекать на ближайшем следующем тике. поэтому наименьшая возможная задержка составляет 1 микс. В случае нуля jiffies, отложенная работа (dwork) немедленно начнется без какой-либо задержки.

queue_delayed_work внутренне вызывает __queue_delayed_work, где выполняется реализация для настройки таймера. Минимальное время истечения - это jiffies + delay. Для получения дополнительной информации см. Ссылки.

Чтобы запланировать работу меньше, чем таймер jiffiy, вы можете использовать hrtimers (таймер с высоким разрешением).

Для получения дополнительной информации, связанной с реализацией hrtimer, прочитайте следующие ссылки:

Повторяющаяся задача hrtimer в ядре Linux

https://www.ibm.com/developerworks/library/l-timers-list/

ответил(а) 2017-10-25T13:26:00+03:00 2 года, 12 месяцев назад
41

когда мы вызываем wait_event_interruptible (wq, condition), обязательно ли вызывать функцию wake_up при использовании wait_event_interruptible?

ответил(а) 2017-10-30T09:32:00+03:00 2 года, 11 месяцев назад
41

Единственная задержка, которая будет меньше одного jiffy, равна 0 jiffies в случае queue_delayed_work.

delay имеет тип unsigned long и он задается как "количество jiffies для ожидания перед очередью".

ответил(а) 2017-10-25T12:13:00+03:00 2 года, 12 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема