Процесс с низкой задержкой на одном ядре со встроенным 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 в приложении, чтобы установить планирование на одну из политик реального времени. Это может улучшить задержки вашего приложения (но также может ухудшить ситуацию).

Обратите внимание, что настройка соответствия процессору не является тривиальной задачей, а четкие решения встречаются редко. Вам нужно будет протестировать и поэкспериментировать, чтобы убедиться, что конфигурация может поддерживать требуемую производительность. Например, вполне вероятно, что ваше приложение будет взаимодействовать с другими процессами. Если связь является синхронной, а другие процессы реагируют медленно (так как они имеют ограниченные ресурсы ЦП), это, в свою очередь, отрицательно скажется на производительности вашего критически важного приложения. То же самое относится и к прерыванию (ям) звуковой карты.

Надеюсь, это поможет.

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