реклама на сайте
подробности

 
 
> watchdog в Linux
Idle
сообщение Mar 24 2008, 18:54
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



Стандартную связку driver(kernel timer) и userspace daemon написал, это просто.
В чем предвижу проблему: сетевые интерфейсы заштормят, живой userspace не отсигналит и идем на ребут. Нас в ребут, а мы крепчаем, да.
Вопросы:
1. Есть вообще какой-то смысл ограничивать watchdog только драйвером, никак не оглядываясь на userspace?
2. Можно вообще реализовать драйвер watchdog, чтобы он "ну уж точно успел дернуть biggrin.gif "?

PS Про NAPI в курсе; то что надо на досуге почитывать Лава и LDD, а не тереть с клоунами в оффтопике тоже smile.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 9)
Harbour
сообщение Mar 25 2008, 04:19
Сообщение #2


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



из поста непонятно кто "дергает" - лучше использовать hardware one - если конечно не интересует результат. кто скeазал что драйвер ядра будет всегда выполнятся (ooops/memory corruption/cpu thermal halt) ?
Go to the top of the page
 
+Quote Post
Idle
сообщение Mar 25 2008, 05:00
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



Цитата(Harbour @ Mar 25 2008, 07:19) *
из поста непонятно кто "дергает" - лучше использовать hardware one - если конечно не интересует результат. кто скeазал что драйвер ядра будет всегда выполнятся (ooops/memory corruption/cpu thermal halt) ?

Да, не ясно написал. Watchdog аппаратный, внешняя микросхема. Вопрос о том, как реализовать драйвер, который будет подтверждать что всё ok. Т.е. я боюсь, что драйвер вовремя не получит управление при большой загрузке системы прерываниями от сетевых интерфейсов.
Go to the top of the page
 
+Quote Post
amw
сообщение Mar 25 2008, 09:10
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(Idle @ Mar 25 2008, 07:00) *
Да, не ясно написал. Watchdog аппаратный, внешняя микросхема. Вопрос о том, как реализовать драйвер, который будет подтверждать что всё ok. Т.е. я боюсь, что драйвер вовремя не получит управление при большой загрузке системы прерываниями от сетевых интерфейсов.

В ядре есть реализация драйвером нескольких watchdog. Посмотрите там.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
Idle
сообщение Mar 25 2008, 10:22
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



Цитата(amw @ Mar 25 2008, 12:10) *
В ядре есть реализация драйвером нескольких watchdog. Посмотрите там.

Так уже посмотрел, написал свой, работает. Проблема в том, что (IMO) при серьезной нагрузке устройство будет перезагружаться не из-за того, что ядро "повисло", а из за того, что процессор занимается обработкой пакетов, и драйвер watchdog не получает управление вовремя.

Сообщение отредактировал Idle - Mar 25 2008, 10:23
Go to the top of the page
 
+Quote Post
vshemm
сообщение Mar 25 2008, 12:13
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 167
Регистрация: 15-08-07
Пользователь №: 29 803



А какой период таймера? Если хотя бы секунд 10 - то, может, все-таки перезагрузиться?
Вообще, при малых периодах таймера его сброс делают не из юзерспейса, а по ядерному таймеру (например, w83877f_wdt.c). В этом случае, даже при большой сетевой загрузке, вотчдог "сбросится", т.к. ядерные таймеры выполняются на уровне softirq, как и основные обработчики сетевых пакетов (причем таймеры даже имеют бОльший приоритет, т.е. будут выполняться в первую очередь).

Сообщение отредактировал vshemm - Mar 25 2008, 12:18
Go to the top of the page
 
+Quote Post
Idle
сообщение Mar 25 2008, 13:02
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



Цитата(vshemm @ Mar 25 2008, 15:13) *
А какой период таймера? Если хотя бы секунд 10 - то, может, все-таки перезагрузиться?

0,5 с

Цитата(vshemm @ Mar 25 2008, 15:13) *
Вообще, при малых периодах таймера его сброс делают не из юзерспейса, а по ядерному таймеру (например, w83877f_wdt.c).


так и сделал, но сейчас еще проверяю флаг, выставляемый userspace-ом, ему даю до 30с - убрать не проблема
Код
static void brandname_wdt_pingtimer(unsigned long data)
{
        if(time_before(jiffies, next_heartbeat))
        {
                /* set timer again */
                timer.expires = jiffies + WDT_INTERVAL;
                add_timer(&timer);
                /* kick watchdog */
                if (flg == 0) {


Цитата(vshemm @ Mar 25 2008, 15:13) *
В этом случае, даже при большой сетевой загрузке, вотчдог "сбросится", т.к. ядерные таймеры выполняются на уровне softirq, как и основные обработчики сетевых пакетов (причем таймеры даже имеют бОльший приоритет, т.е. будут выполняться в первую очередь).

Вот в этом весь мой вопрос. Я не знаю как работает ядро, надо учить матчасть, но спросить не грех. Допустим, что fast обработчик только у таймера, другие обработчики не отключают чужие прерывания.
У меня (и 2.4, и 2.6 ядра) время между срабатыванием таймера и передачей управления моей функции не может при каких-либо условиях оказаться больше 0,5с?
Go to the top of the page
 
+Quote Post
vshemm
сообщение Mar 25 2008, 15:52
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 167
Регистрация: 15-08-07
Пользователь №: 29 803



Ядра 2.6.11+.
Обработка всех softirq (это нечто вроде DPC в WindowsNT) выполняется при разрешенных прерываниях. Инициируется выполнение softirq при выходе из обработчиков аппаратных прерываний (и еще из нескольких мест).
Поэтому, если процессор 100% времени не будет сидеть внутри обработчиков прерываний, он рано или поздно попадет в код "сброса" вотчдога. Как скоро - зависит от обработчиков и интенсивности прерываний.
Т.о., высокая интенсивнось прерываний действительно может привести с перезагрузке по вотчдогу, но система при этом действительно рабочей быть не может. Если требуется в таких случаях просто "переждать" (???), нужно увеличивать таймаут вотчдога (хардварный).
Есть другой случай, когда прерываний мало. Здесь нужно рассчитывать на тик системного таймера. Т.е. выполнение ядерного таймера может задержаться в наихудшем случае на ~1 тик системного таймера от рассчитаного значения (в новых tickless-ядрах немного по-другому smile.gif).
Кстати, период таймера обычно делают где-то в 2 раза меньше периода вотчдога - именно по этой причине, чтобы был запас.

С некоторыми оговорками это справедливо и для старших версий ядер 2.4.

Цитата(Idle @ Mar 25 2008, 16:02) *
Допустим, что fast обработчик только у таймера, другие обработчики не отключают чужие прерывания.

А у Вас вотчдог умеет генерить прерывания?
Go to the top of the page
 
+Quote Post
Idle
сообщение Mar 25 2008, 18:15
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



Цитата(vshemm @ Mar 25 2008, 18:52) *
А у Вас вотчдог умеет генерить прерывания?

нет, это я на всякий случай

Спасибо за информацию. Ага, значит вызов моей функции вызывается в процессе обработки BH прерывания таймера. BH "накручены" на softirq.
Код
/* timer.c */
void timer_bh(void)
{
        TRACE_EVENT(TRACE_EV_KERNEL_TIMER, NULL);
        update_times();
        run_timer_list();
}

При этом прерывания разрешены. Таким образом, 100Мбит Ethernet заребутит за милую душу.

Выводы такие (я прав?):
1. NAPI драйвер для сетевых устройств.
2. Определенное нахождения в обработчике для всех остальных также.
3. Сумма всех этих времен в худшем случае не должна превышать мой интервал.

Цитата(vshemm @ Mar 25 2008, 18:52) *
система при этом действительно рабочей быть не может

Оборудование сетевое, так что режим "штатный" smile.gif

Ну в общем, watchdog скорее всего - в топку, дел и так выше крыши.

Спасибо.
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 27 2008, 13:54
Сообщение #10


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Делай как я: для каждого потока создавай свой виртуальный Watchdog-таймер

Сообщение отредактировал Дон Амброзио - Mar 27 2008, 13:56


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st August 2025 - 10:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01434 секунд с 7
ELECTRONIX ©2004-2016