Недостатки preempt_rt
целевая аппаратная платформа имеет ограниченную мощность, и / или вы хотите, чтобы работа в режиме реального времени создавала минимальные накладные расходы в вашей системе. Именно здесь двойные ядра обычно лучше, чем собственная система вытеснения.
Отсюда: http://www.xenomai.org/index.php/Xenomai:Roadmap
Preempt_rt выгружает весь Linux. Каким образом вытеснение Linux создает нагрузку на систему?
Часто задаваемые вопросы говорят о preempt_rt по сравнению с Xenomai.
2 ответа
CONFIG_PREEMPT_VOLUNTARY -
Эта опция вводит проверки для наиболее распространенных причин длительных задержек в коде ядра, так что ядро может добровольно передать управление задаче с более высоким приоритетом, ожидающей выполнения. Говорят, что этот вариант в значительной степени уменьшает возникновение длительных задержек, но, тем не менее, он не устраняет их полностью.
CONFIG_PREEMPT_RT -
Эта опция приводит к тому, что весь код ядра за пределами защищенных спин-блокировками областей (созданный raw_spinlock_t) будет иметь право на недобровольное вытеснение потоками ядра с более высоким приоритетом. Spinlocks, созданные spinlock_t и rwlock_t, и прерывания также делаются приоритетными с включенной этой опцией. При использовании этой опции задержка в худшем случае падает до (около) миллисекунд с одной цифрой.
Недостаток -
Обычное ядро Linux позволяет выполнять приоритет задачи с более высоким приоритетом только тогда, когда выполняется код пользовательского пространства.
Чтобы уменьшить задержку, патч CONFIG_PREEMPT_RT вынуждает ядро не выполнять добровольную выгрузку стоящей перед ним задачи по прибытии задачи ядра с более высоким приоритетом. Это неизбежно приведет к снижению общей пропускной способности системы, поскольку будет несколько переключений контекста, а также задачи с более низким приоритетом не получат большого шанса.
Источник: https://rt.wiki.kernel.org/index.php/Frequently_Asked_Questions
Описание используемых технических терминов:
Что такое латентность?
Время, прошедшее между запросом, выданным компьютерной системой, и началом ответа на тот же запрос, называется задержкой или временем ответа.
Виды задержек:
- Задержка прерывания:
Время между генерацией прерывания и началом выполнения соответствующего обработчика прерываний.
Пример: когда аппаратное устройство выполняет задачу, оно генерирует прерывание. Это прерывание содержит информацию о задаче, которая должна быть выполнена, и о обработчике прерывания, который должен быть выполнен. Затем обработчик прерываний выполняет конкретную задачу. - Планирование задержки:
Это время между сигналом пробуждения о том, что событие произошло, и планировщик ядра получает возможность запланировать поток, ожидающий пробуждение (ответ). Задержка планирования также известна как задержка отправки. - В худшем случае латентность:
Максимальное время, которое может пройти между запросом, выданным компьютерной системой, и началом ответа на тот же запрос.
Что такое пропускная способность?
Объем работы, которую компьютер может выполнить за определенный период времени, называется пропускной способностью.
Что такое переключение контекста?
Переключение контекста - это переключение ЦП с одного процесса / потока на другой. Переключение контекста может происходить только в режиме ядра. Это процесс сохранения текущего состояния выполнения процесса (для возобновления выполнения позже) и загрузки сохраненного состояния нового процесса / потока для выполнения.
Добавление ответа на голосование "Задачи с более низким приоритетом не дадут много шансов пройти"
В этом вся суть (хотя в системе с ядром 4+ эти задачи с низким приоритетом могут выполняться, если им запрещено выполнять действия, которые будут мешать выполнению критических задач - вот где важно убедиться, что все подключенные периферийные устройства играют хорошо, не блокируя, когда приложение, запускающее критический поток, хочет получить к ним доступ). Критический бит (если, например, думать о разработке полезной системы для своевременной обработки внешнего ввода или проверять поведение преобразования данных с живыми данными в отличие от модели), это иметь способ сообщить ядру, откуда поступает критический по времени ввод,
Проблема с током например Системы Windows - это то, что вы можете быть "серьезным игроком или серьезным музыкантом", который замечает такие вещи, как 150 микросекундных дрожаний. Если у вас нет возможности указать, что клавиатура, мышь или другое устройство интерфейса пользователя должны рассматриваться как критически важные, тогда могут появиться все виды "обновлений Windows" и тому подобное, которые, в свою очередь, могут вызвать некоторую активность на USB-накопителе. контроллер, который имеет более высокий приоритет, чем потоки, связанные с выполнением ввода.
Я читал о случае, когда глюки в звуке были устранены путем добавления второго контроллера USB, на котором ничего не было, кроме устройства ввода. В переносимых настройках вам практически необходим транзистор Thunderbolt PCIe, чтобы добавить выделенный концентратор (или fpga), который может вместе с драйверами перекрывать все остальное в системе. Вот почему на рынке не так много USB-продуктов, которые обеспечивают достаточно хорошую производительность для музыкантов. (2 мс задержки в оба конца с максимальным джиттером 150 микросекунд в течение всего дня без пропаданий)