Есть ли способ выровнять периоды двух процессов с помощью SCHED_DEADLINE в Linux?Linux

Anonymous
Есть ли способ выровнять периоды двух процессов с помощью SCHED_DEADLINE в Linux?

Сообщение Anonymous »

У меня есть процесс, который должен взаимодействовать с оборудованием в очень строго контролируемые периоды. У меня есть второй процесс, который может запуститься в любое время и должен взаимодействовать с первым процессом, не влияя на время первого процесса. Я использую SCHED_DEADLINE для управления периодом обоих процессов. Есть ли способ заставить второй процесс согласовать свой период с первым процессом?
Я знаю, что могу синхронизировать связь с помощью семафоров. Я говорю не об этом.
Рассмотрим сценарий:
  • часть жесткого диска требует связи каждые 1 мс. (+- 10000 нс).
  • Процесс 1 выполняется с периодом 1 мс в рамках SCHED_DEADLINE.
  • Процесс 2 запускается и также выполняется с периодом. составляет 1 мс при SCHED_DEADLINE, но смещается от процесса 1 на 0,5 мс.
  • Процесс 1 просыпается, но должен подождать 0,5 мс, чтобы процесс 2 был готов к обмену данными.
Поэтому на первом временном шаге два процесса пытаются связаться, время контакта с оборудованием сбрасывается на 0,5 мс. ЕСЛИ периоды двух процессов были синхронизированы, этой проблемы не возникло бы.
Для интересующихся: оборудование в этом случае основано на EtherCAT и использует распределенные часы (DC). Джиттер в 1 временной шаг приведет к десинхронизации постоянного тока, заставляя его повторно синхронизироваться. Время повторной синхронизации составляет около 7 секунд. Я действительно хочу избежать этого штрафа по времени, поскольку человек будет взаимодействовать с системой, а обычные задержки в 7 секунд неприемлемы.
Я пробовал использовать семафоры, чтобы настроить планировщик задач на второй процесс. в специально синхронизированное время с первым процессом. Это не позволило синхронизировать периоды задач достаточно близко.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ine-on-lin

Вернуться в «Linux»