LINUX.ORG.RU

Процесс в userspace, возврат из ядра иногда задерживается

 , ,


1

3

Есть некий драйвер, который ловит прерывания с периодичностью несколько десятков миллисекунд, и судя по time stamp в логе dmesg, делает это очень надежно и регулярно, очень точно с точностью до десятков микросекунд

В ядре используется wait_queue_head_t, в обработчике прерывания wake_up_interruptible, далее wait_event_interruptible, после чего userspace процесс просыпается

Вот иногда в 1% случаев, оно делает это слишком поздно, мне надо успеть за 100-150 мкс, а оно в такие моменты может даже до миллисекунды скакнуть это время ожидания. А когда всё хорошо, оно успевает за 50 в среднем мкс, иногда за 115 что тоже нормально

Пробовал ставить nice -n 0, лочить процесс на ядро taskset -c. И ничего не помогло не улучшило ситуацию

Но программа работает и с еще одним драйвером, который тоже завязан на прерывания, и они тоже приходят очень точно и хорошо. И там тоже проблема что иногда изредка программа просто не просыпается несколько миллисекунд, чтобы отреагировать

Я так понимаю, это ядро просто не всегда хочет будить процесс в userspace?

Уже и nice использовал, что еще можно попробовать, чтобы сказать системе - вот это важные процессы в системе, их нельзя обижать и выгружать, вытеснять и так далее? Что мне все равно что будет со всеми прочими программами в системе

Как объяснить - вот эта программа это VIP, это священный процесс, он всегда должен быть бодряком. Ядро ради него отдам, два, три! Как то так

★★★★★

Последнее исправление: I-Love-Microsoft (всего исправлений: 1)

Иногда между wake_up_interruptible и wait_event_interruptible проходит несколько миллисекунд, это находясь в ядре, уж куда выше приоритет, но видимо процесс драйвера засыпает

Прикол в том что между wake_up_interruptible и wait_event_interruptible в норме проходит не более 10 мкс - ну тут то что может быть

Проблема исчезает если ничем на фоне не грузить процессор, и то, это все равно не есть надежно и стабильно

Говорил же что тут точно надо QNX или ЗОСРВ, и вот получаем что я боялся. Разве что собрать ядро real time и там что то делать, или планировщик сменить

Иными словами, либо видим что возврат в userspace задержался, либо wait_event_interruptible уже в ядре задержался. Думаю что это следствие одной и той же проблемы между креслом и монитором

I-Love-Microsoft ★★★★★
() автор топика
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Начинать надо с настройки железа. Вот неплохое руководство по снижению задержек - https://support.hpe.com/hpesc/public/docDisplay?cc=us&docId=emr_na-c01804533&lang=en-us
Ну и как уже сказали, даже у обычного ядро есть разные политики планировщика и приоритеты.
Если всего этого мало - смотрите в сторону RTAI, Xenomai и прочих ядер для LinuxCNC.

sigurd ★★★★★
()
Ответ на: комментарий от mky

Спасибо за подсказку, программно почему то sched_setscheduler не срабатывает. Зато есть способ: sudo chrt –rr 99 ./vip_programm

Это действительно меняет приоритет на RT, что вижу в статусе htop. Буду теперь проверять долговременную стабильность при такой опции приоритета

I-Love-Microsoft ★★★★★
() автор топика

Как объяснить - вот эта программа это VIP, это священный процесс, он всегда должен быть бодряком. Ядро ради него отдам, два, три! Как то так

Надеюсь, у вашего проца нет встроенного видео? Иначе вы никак не избавитесь от не-маскируемых прерываний от видео.

sigurd ★★★★★
()
Ответ на: комментарий от sigurd

Спасибо, всё прочитаю, я мотивированный по части обучения когда надо реально решить задачу. И на RTAI и CNC - на всё готов заморочиться. Даже переписать на QNX/ЗОСРВ, что угодно лишь бы получилось. Только лучше, если изучать что то новое и продвинутое

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от sigurd

Есть встроенное видео. Но надеюсь на возможность отдать под процесс и два драйвера - три ядра. А видео пусть довольствуется остальными ядрами, надеюсь это реально

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

sched_setscheduler() может выполняться только от root'а. Может у вас процесс уже сбросил привилегии.

Относительно ОС реального времени мало что знаю, но, ЕМНИП, там говорят про гарантированное время реакции на событие, но говорят касательно мс (миллисекунд), а у вас 10 мкс. Не знаю, помог бы вам QNX...

mky ★★★★★
()
Ответ на: комментарий от mky

Про root не знал, вот наверное почему не срабатывало

Не 10 мкс, как раз 200-500 мкс допустимы. Так беда же в том что иногда оно меня огорошивает миллисекундами где только что было 10-50 мкс

I-Love-Microsoft ★★★★★
() автор топика