Процесс с низкой задержкой на одном ядре со встроенным Linux
Я хотел бы запустить одну задачу с низкой задержкой (для аудио, ALSA/JACK
) на отдельном ядре со встроенной системой Linux. Удаление планировщика и других прерываний может быть ключевым моментом здесь.
Я нашел несколько подходов, например, cpusets
и автономный планировщик с 2009 года (который, к сожалению, не поддерживает задачи пространства пользователя).
Есть ли более новый / более удобный способ добиться этого?
1 ответ
Тема, которую вы ищете, называется "привязка к процессору". Существует два основных аспекта близости процессоров: сходство процессов и сходство прерываний.
Насколько мне известно (ограниченно):
Процессы назначаются процессорам с помощью
taskset
команда. (Сродство наследуется дочерними процессами.)Прерываниями для назначения ЦП в Linux можно управлять с помощью
/proc/irq/<n>/smp_affinity
, Чтобы проверить эффективность назначения, проверьте/proc/interrupts
чтобы увидеть, какие процессоры обслуживают какие прерывания. Посмотреть здесь.
В вашем конкретном случае вы хотите зарезервировать один ЦП (он же ядро) для вашего критически важного приложения, например, CPU0. Это означает, что все процессы и прерывания должны быть назначены всем, кроме CPU0, с использованием маски сходства, для которой очищен бит 0 (== CPU0), например 0xfffffffe. И ваше критическое приложение будет иметь маску сродства 0x1, что означает, что ему разрешено работать только на CPU0.
Кроме того, вам может понадобиться sched_setscheduler
syscall в приложении, чтобы установить планирование на одну из политик реального времени. Это может улучшить задержки вашего приложения (но также может ухудшить ситуацию).
Обратите внимание, что настройка соответствия процессору не является тривиальной задачей, а четкие решения встречаются редко. Вам нужно будет протестировать и поэкспериментировать, чтобы убедиться, что конфигурация может поддерживать требуемую производительность. Например, вполне вероятно, что ваше приложение будет взаимодействовать с другими процессами. Если связь является синхронной, а другие процессы реагируют медленно (так как они имеют ограниченные ресурсы ЦП), это, в свою очередь, отрицательно скажется на производительности вашего критически важного приложения. То же самое относится и к прерыванию (ям) звуковой карты.
Надеюсь, это поможет.