Вопрос по Linux preempt для программистов

Общие вопросы по операционным системам семейства Linux.
Аватара пользователя
mycnc
Мастер
Сообщения: 913
Зарегистрирован: 03 июл 2011, 02:01
Репутация: 623
Контактная информация:

Вопрос по Linux preempt для программистов

Сообщение mycnc »

Как правильно организовать основной цикл RT thread, чтобы он крутился с заданной частотой (например 2кГц) ?
Попробовал usleep(500) - появляются лаги в 2-5мс
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Вопрос по Linux preempt для программистов

Сообщение Serg »

clock_nanosleep и настройки шедулера смотри.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6191
Откуда: Казахстан.
Контактная информация:

Re: Вопрос по Linux preempt для программистов

Сообщение aftaev »

mycnc писал(а):Как правильно организовать основной цикл RT thread
Для каких целей это нужно? Уже мощи МК не хватает?
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
mycnc
Мастер
Сообщения: 913
Зарегистрирован: 03 июл 2011, 02:01
Репутация: 623
Контактная информация:

Re: Вопрос по Linux preempt для программистов

Сообщение mycnc »

для 5 осевой фрезеровки текущей мощности достаточно -
https://www.youtube.com/watch?v=G0dzUZL76VU

А для 7 осевого робота с заданием кинематики и других интересных фишек, требующих вычислительных ресурсов - будет еще один контроллер.
Аватара пользователя
mycnc
Мастер
Сообщения: 913
Зарегистрирован: 03 июл 2011, 02:01
Репутация: 623
Контактная информация:

Re: Вопрос по Linux preempt для программистов

Сообщение mycnc »

UAVpilot писал(а):clock_nanosleep и настройки шедулера смотри.
настройки шедулера смотрел, без них не запускался RT-процесс
Но вот что означают значения приоритетов - не нашел

Для обычных процессов -20...20

тут стоит по умолчанию "80", причем htop показывает при этом "-81", но много это или мало - инфы не вижу.
nanosleep проблему не решил - в основном все хорошо, но при дисковых операциях или большом траффике по сети лагает.

Похоже у драйвера диска или сетки - приоритет еще выше и проснуться не дает.
Аватара пользователя
mycnc
Мастер
Сообщения: 913
Зарегистрирован: 03 июл 2011, 02:01
Репутация: 623
Контактная информация:

Re: Вопрос по Linux preempt для программистов

Сообщение mycnc »

сам себе отвечу, вдруг кому пригодится
Processes scheduled under one of the real-time policies (SCHED_FIFO,
SCHED_RR) have a sched_priority value in the range 1 (low) to 99
(high). (As the numbers imply, real-time threads always have higher
priority than normal threads.) Note well: POSIX.1 requires an
implementation to support only a minimum 32 distinct priority levels
for the real-time policies, and some systems supply just this
minimum. Portable programs should use sched_get_priority_min(2) and
sched_get_priority_max(2) to find the range of priorities supported
for a particular policy.
Аватара пользователя
Olej
Кандидат
Сообщения: 66
Зарегистрирован: 03 июл 2018, 22:41
Репутация: 4
Настоящее имя: Олег Цилюрик
Откуда: Харьков
Контактная информация:

Re: Вопрос по Linux preempt для программистов

Сообщение Olej »

mycnc писал(а): настройки шедулера смотрел, без них не запускался RT-процесс
Но вот что означают значения приоритетов - не нашел
Здесь есть путаница:

- все обычные процессы/потоки Linux вообще не имеют приоритета, они имеют NICE (команда nice) -20 - +19, а NICE - это не приоритет, а уступчивость, это связано с особенным алгоритмом O(1) шедулирования в Linux, когда ни один процесс (или его потоки) вообще не вытесняет другие в смысле realtime терминологии;

- приоритеты в Linux имею только процессы/потоки с realtime алгоритмами шедулирования SCHED_RR или SHED_FIFO (некоторые патчи ещё добавляют SCHED_SPORADIC): 0 - 99

- все обычные процессы/потоки имеют приоритет (реального времени) = 0, и отличаются они между собой только по NICE

- ни один обычный поток (SCHED_OTHER) не может выполняться до тех пор, пока есть активный хотя бы один поток с шедулированием реального времени.

См.:

Код: Выделить всё

$ ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
Всё увидите. ;)
Ответить

Вернуться в «Прочие вопросы Linux»