Программирование в реальном времени с Linux

Я только что собрал и настроил ванильное ядро ​​Linux с примененным исправлением RT. Все прошло нормально, и теперь я могу корректно загрузиться в новом ядре.

Меня удивляет следующее: у меня есть программа-симулятор, созданная на C, и я хочу, чтобы она выполнялась в режиме реального времени, что должно быть разрешено новым ядром. Вероятно, весь симулятор не нужно запускать с приоритетом в реальном времени, но некоторые задачи внутри него выполняются.

Как я могу сделать это? Я так понимаю, что просто запустить программу не получится.

1 ответ

Решение

Если вы спрашиваете, как запустить некоторые потоки в контексте реального времени, а другие - как обычные потоки с разделением времени, то все, что вам нужно, это правильно настроить их планировщики, используя sched_setscheduler,

Темы с разделением времени хотят быть SCHED_OTHER; темы симулятора в реальном времени хотят быть SCHED_FIFO или же SCHED_RR,

В Linux, чтобы работать с приоритетами в реальном времени, ваш пользователь должен иметь ограничения ресурсов ( man 2 rlimit), которые позволяют это. В частности, ваш rtprio Для rlimit должен быть установлен самый высокий приоритет, который вам потребуется. Кроме того, вы можете запустить приложение от имени пользователя root. В системе Linux с PAM это обычно достигается добавлением соответствующей строки в /etc/security/limits.conf

 @realtime   -  rtprio     99 

Это предоставит rtprio ограничения до приоритета 99 в реальном времени для группы в реальном времени. Затем вы добавляете группу в реальном времени /etc/groups и убедитесь, что ваш пользователь находится в группе.

(И поскольку это, по-видимому, вы делаете в первый раз, вам также может понадобиться высокоприоритетная нить в реальном времени "Переключатель мертвеца", чтобы убедиться, что ваш симулятор не выходит из-под контроля и отображает систему. непригодный для использования... если вы имитируете высокую нагрузку на процессор, вы можете получить НАСТОЯЩУЮ высокую нагрузку на процессор и не сможете остановить работу без перезагрузки.)

Другие вопросы по тегам