Могу ли я иметь планирование в реальном времени в моем процессе (но без влияния на других)? - PullRequest
1 голос
/ 07 октября 2011

По моему вопросу здесь Я хотел бы использовать SCHED_RR с pthread_setschedparam для своих потоков в приложении Linux.Тем не менее, это оказывает влияние даже на модули ядра , которые в настоящее время я не могу решить.

Я нашел http://www.icir.org/gregor/tools/pthread-scheduling.html, который говорит, что я могу создавать свои потоки с атрибутом PTHREAD_SCOPE_PROCESS,но я не нашел дополнительной информации по этому вопросу.

Будет ли это работать с (Angstrom) Linux, версия ядра 2.6.6?(Как) это повлияет на то, как мой процесс конкурирует с другими процессами?Будет ли способ заставить мои процессы конкурировать с планированием в реальном времени, но другие процессы не будут затронуты?

(Поскольку я использую потоки наддува, я не могу просто попробовать это ...)

1 Ответ

3 голосов
/ 07 октября 2011

Потоки, созданные с помощью PTHREAD_SCOPE_PROCESS, будут использовать один и тот же поток ядра (http://lists.freebsd.org/pipermail/freebsd-threads/2006-August/003674.html)

Однако SCHED_RR должен запускаться под привилегированным пользователем процессом.

По-круговой;Потоки, чья область конкуренции является системной (PTHREAD_SCOPE_SYSTEM), находятся в классе планирования в реальном времени (RT), если вызывающий процесс имеет эффективный идентификатор пользователя 0. Эти потоки, если они не прерваны потоком с более высоким приоритетом, и если они не дают илиблок, будет выполняться в течение периода времени, определенного системой. SCHED_RR для потоков, которые имеют конфликтную область процесса (PTHREAD_SCOPE_PROCESS) или чей вызывающий процесс не имеет эффективного идентификатора пользователя, равного 0, основан на классе планирования TS.

ОднакоИсходя из вашей связанной проблемы, я думаю, что вы столкнулись с более глубокой проблемой.Вы пытались настроить свое ядро, чтобы оно было более «приоритетным»?Preemption должен позволять ядру принудительно планировать запуск вашего процесса, что позволяет более оперативно запускать некоторые части ядра.Это не должно влиять на IRQ, может быть, что-то отключило ваши IRQ?

Еще одна вещь, о которой я думаю, - возможно, вы не получаете данные SPI достаточно быстро, и буфер для ваших данных в ядре становится полным иотсюда потеря данных.Попробуйте также увеличить эти буферы.

...