PREEMPT_RT: объяснение возможностей ядра реального времени
PREEMPT_RT преобразует ядро Linux в операционную систему реального времени, обеспечивая точное управление временем выполнения критически важных задач. Полностью интегрированная в Linux 6.12 (выпущенную 20 сентября 2024 г.), она обеспечивает возможности работы в реальном времени для таких архитектур, как x86, ARM64 и RISC-V. Вот что вам нужно знать:
- Основные характеристики:
- Заменяет традиционные спин-блокировки на прерываемые спящие блокировки.
- Преобразует обработчики прерываний в потоки, делая их планируемыми и вытесняемыми.
- Реализует наследование приоритетов для решения проблем инверсии приоритетов.
- Обеспечивает полную возможность прерывания операций RCU (чтение-копирование-обновление).
- Приложения:
- Используется в таких отраслях, как автомобильная промышленность, робототехника, телекоммуникации и производство медицинских приборов, где критически важна точность синхронизации.
- Обеспечивает работу таких систем, как средства промышленной автоматизации, системы управления полетом и среды хостинга, требующие... виртуальные частные серверы с низкой задержкой.
- Настраивать:
- Давать возможность
CONFIG_PREEMPT_RTв конфигурации ядра. - Точная настройка параметров, таких как
CONFIG_NO_HZ_FULLа такжеCONFIG_RCU_BOOSTдля оптимальной производительности. - Используйте такие инструменты, как
циклический тестдля измерения задержки и проверки производительности.
- Давать возможность
PREEMPT_RT отдает приоритет времени выполнения над пропускной способностью, что делает Linux подходящим для приложений, где сроки выполнения не подлежат обсуждению. Это кардинально меняет ситуацию в отраслях, требующих детерминированной производительности.
Основные возможности PREEMPT_RT: как Linux обеспечивает производительность в реальном времени
PREEMPT_RT: объяснение принципа работы: сборка и оптимизация ядра Linux для работы в реальном времени и с ультранизкой задержкой.
sbb-itb-59e1987
Основные функции PREEMPT_RT
PREEMPT_RT фокусируется на четырех основных функциях, предназначенных для сокращения невытесняемого кода и улучшения контроля над планированием задач. Рассмотрим каждую из них подробнее.
Полное вытеснение ядра
Одно из самых значительных обновлений — это трансформация стандартных спин-блокировок (spinlock_t) и блокировки читатель-писатель (rwlock_t) в спящие спин-блокировки на основе мьютексов. Традиционные спин-блокировки могут вызывать задержки, поскольку они отключают вытеснение, переводя задачи в режим ожидания. PREEMPT_RT изменяет это, вводя блокировки, которые позволяют задачам переходить в спящий режим и быть вытесненными, даже если они удерживают ресурс.
Это означает, что задачи с высоким приоритетом могут прерывать задачи с более низким приоритетом, даже если последние удерживают блокировки. Однако для некоторых критически важных операций, таких как работа планировщика или аппаратных точек входа, PREEMPT_RT сохраняет raw_spinlock_t, которая ведёт себя подобно оригинальным непрерываемым блокировкам. Как выразился Пол МакКенни, выдающийся инженер:
"Ключевая цель патча PREEMPT_RT — минимизировать объем кода ядра, который не подлежит вытеснению, а также минимизировать объем кода, который необходимо изменить для обеспечения этой дополнительной возможности вытеснения"."
Далее рассмотрим, как такой подход улучшает обработку прерываний.
Потоковые прерывания
PREEMPT_RT переводит большинство обработчиков аппаратных прерываний из контекста "жесткого прерывания" в другой контекст. потоки ядра Выполнение в контексте процесса. Эта настройка позволяет устанавливать приоритеты для обработчиков прерываний, вытеснять их или даже блокировать.
В стандартном ядре Linux длительный обработчик прерываний может приводить к неограниченной задержке, поскольку он останавливает все остальные процессы. Потоковые прерывания решают эту проблему. По умолчанию эти потоки прерываний работают с определенными параметрами. SCHED_FIFO Приоритет равен 50, но администраторы могут изменять свои приоритеты с помощью таких инструментов, как... крт. Например, можно отдать приоритет прерыванию сетевой карты для промышленного управления, одновременно понизив приоритет для дискового ввода-вывода. Поскольку эти потоки используют спящие спин-блокировки вместо обычных спин-блокировок, им не нужно отключать аппаратные прерывания во время удержания блокировки.
Теперь давайте рассмотрим, как PREEMPT_RT обрабатывает проблемы, связанные с приоритетами.
Наследование приоритетов и Rtmutex
Инверсия приоритетов Это серьёзная проблема, когда задача с высоким приоритетом застревает в ожидании ресурса, занимаемого задачей с низким приоритетом, в то время как задача со средним приоритетом (которая не нуждается в ресурсе) вытесняет задачу с низким приоритетом. PREEMPT_RT решает эту проблему с помощью приоритетное наследование, временно повышая приоритет задачи с низким приоритетом до уровня задачи с наивысшим приоритетом, ожидающей получения ресурса.
The rtmutex Primitive — это инструмент, который делает это возможным. Он гарантирует, что при возникновении конфликта задача с низким приоритетом получает повышение приоритета для завершения своей критической секции без помех со стороны задач со средним приоритетом. Если задача с повышенным приоритетом блокируется другой блокировкой, повышение приоритета распространяется по всей цепочке зависимостей. Как поясняется в документации ядра Linux:
"Приоритетное наследование позволяет хорошо спроектированным приложениям использовать блокировки пользовательского пространства в критически важных частях потока с высоким приоритетом, не теряя при этом детерминизма"."
Для достижения этой цели, rtmutex Использует флаг и дерево приоритетов для управления ожидающими задачами, что позволяет снизить накладные расходы на поддерживаемых архитектурах.
Наконец, давайте рассмотрим, как PREEMPT_RT улучшает работу RCU.
Прерываемый RCU (чтение-копирование-обновление)

Синхронизация Read-Copy-Update (RCU) — это метод синхронизации, широко используемый в ядре Linux. В стандартных ядрах секции чтения RCU не являются вытесняемыми, что может приводить к непредсказуемым задержкам. PREEMPT_RT изменяет это, делая секции чтения RCU вытесняемыми. полностью отменяемый, что гарантирует соблюдение сроков выполнения задач в режиме реального времени. Эта корректировка является краеугольным камнем достижения предсказуемого поведения, необходимого в системах реального времени.
Как настроить и использовать PREEMPT_RT
PREEMPT_RT полностью интегрирован в основные ядра Linux, что означает, что внешние патчи больше не нужны. Однако применение последних обновлений по-прежнему рекомендуется для лучшей поддержки архитектуры и улучшения графики. После того, как ядро будет готово, вам потребуется настроить его параметры, чтобы в полной мере использовать его возможности.
Параметры конфигурации ядра
Чтобы включить полностью вытесняемое ядро, включите соответствующую опцию. CONFIG_PREEMPT_RT. В более новых версиях ядра этот параметр находится в разделе "Общие настройки", но вам может потребоваться его включить. CONFIG_EXPERT Во-первых, чтобы сделать его видимым в меню настроек.
Для производства Выделенные серверы В других высокопроизводительных средах дополнительные опции могут еще больше оптимизировать производительность:
CONFIG_NO_HZ_FULL: Уменьшает количество прерываний синхронизации на загруженных процессорах, что помогает минимизировать дрожание сигнала.CONFIG_RCU_BOOST: Предотвращает задержку льготных периодов со стороны устройств чтения RCU, которые были отключены.CONFIG_RCU_NOCB_CPU: Переносит обработку обратных вызовов RCU на определенные процессоры, уменьшая помехи для задач реального времени.
Также крайне важно отключить параметры отладки, которые могут вызывать высокую задержку. Отключите такие настройки, как... CONFIG_DEBUG_LOCKDEP, CONFIG_DEBUG_PREEMPT, CONFIG_DEBUG_OBJECTS, и CONFIG_SLUB_DEBUG. Хотя эти инструменты полезны для разработки, они могут значительно ухудшить показатели задержки. Как объясняет kernelconfig.io:
"Эта опция превращает ядро в ядро реального времени, заменяя различные примитивы блокировки (спин-блокировки, блокировки чтения/записи и т. д.) на варианты с возможностью вытеснения и учетом наследования приоритетов"."
После сборки и загрузки ядра подтвердите активность параметра PREEMPT_RT, выполнив команду... cat /sys/kernel/realtime. Возвращаемое значение 1 Это означает успех. Вы также можете проверить наличие "PREEMPT_RT" в выводе. имя -а.
Отладка и оптимизация производительности
Тонкая настройка ядра имеет решающее значение для достижения оптимальной производительности при работе с рабочими нагрузками реального времени. Одна из ключевых областей, требующих внимания, — это... механизм регулирования в реальном времени, которая по умолчанию резервирует 50 мс в секунду для задач, не требующих обработки в реальном времени. Если ваша рабочая нагрузка выполняется исключительно в реальном времени, вы можете отключить этот механизм, написав -1 к /proc/sys/kernel/sched_rt_runtime_us. Как отмечает Ян Альтенберг, старший консультант по открытому исходному коду в OSADL:
"Выход из-под контроля задачи реального времени может привести к истощению ресурсов системы. В качестве защитного механизма время выполнения задач реального времени можно ограничить, установив значение в микросекундах в файле /proc/sys/kernel/sched_rt_runtime_us‘.’
Для повышения детерминированности используйте для выделения отдельных ядер ЦП такие параметры, как... isolcpus=2,3, rcu_nocbs=2,3, nohz_full=2,3, и установить irqaffinity=0. Это резервирует эти ядра исключительно для задач реального времени.
Для управления потоками прерываний используйте крт Этот инструмент обычно запускается с настройками по умолчанию. SCHED_FIFO Приоритет равен 50, но вы можете изменить его, чтобы избежать конфликтов с вашим приложением. Например, чтобы установить приоритет потока прерываний сетевой карты на 98, используйте команду: chrt -p -f 98.
После завершения настройки крайне важно протестировать и проверить производительность по задержке. Для этого используются такие инструменты, как... циклический тест может измерять задержку (например, циклический тест -S -m -p98 -i250), пока ртла Инструменты анализа задержек в реальном времени (Real-time Linux Analysis) помогают выявлять и анализировать пики задержки. Эти инструменты гарантируют, что ваша система соответствует требованиям приложений реального времени.
PREEMPT_RT Применение и преимущества
Примеры использования приложений в режиме реального времени
Функция PREEMPT_RT особенно эффективна в системах, где точность синхронизации имеет первостепенное значение. аэрокосмическая отрасль, Это гарантирует бесперебойную работу систем навигации и управления полетом без задержек в микросекунды, которые в противном случае могли бы поставить под угрозу безопасность. Телекоммуникации Компании полагаются на него для управления маршрутизацией данных в режиме реального времени, обеспечивая бесперебойные голосовые и видеозвонки за счет устранения скачков задержки и дрожания сигнала.
В автомобильная промышленность, Это краеугольный камень систем управления транспортными средствами, и такие крупные игроки, как Continental Automotive, поддерживают его внедрение. промышленная автоматизация, PREEMPT_RT используется в программируемых логических контроллерах (ПЛК) и системах SCADA, часто работая совместно с такими протоколами, как EtherCAT, для обеспечения безопасности и эффективности на производственных площадках. Робототехника Эта технология также в значительной степени используется для точного управления исполнительными механизмами и мгновенной обратной связи от датчиков, что позволяет роботам немедленно реагировать на изменения окружающей среды.
Возможно, наиболее важные области применения находятся в медицинские устройства, где точность имеет первостепенное значение. От мониторов состояния пациента до хирургических роботов, PREEMPT_RT обеспечивает детерминированную производительность, необходимую для безупречной работы критически важных систем.
Преимущества для хостинговых сред
Преимущества PREEMPT_RT распространяются и на среды хостинга, где скорость отклика в реальном времени имеет решающее значение. VPS и выделенные серверы, Это позволяет минимизировать задержки, давая планировщику возможность отдавать приоритет задачам с высоким приоритетом перед менее важными. Это обеспечивает стабильное время отклика, что напрямую влияет на удобство использования и надежность сервиса.
Многопоточная модель прерываний предотвращает перегрузку системы "штормами прерываний" во время интенсивных операций ввода-вывода. rt_mutex, Наследование приоритетов гарантирует, что фоновые задачи с низким приоритетом не будут блокировать критически важные службы хостинга. Таймеры с высокой точностью обеспечивают планирование с точностью до микросекунды, уменьшая дрожание в виртуализированных средах. Хостинг-провайдеры, такие как Serverion, Предлагаются пользовательские сборки ядра с параметром PREEMPT_RT, что дает администраторам возможность гибко настраивать конфигурации для конкретных рабочих нагрузок. Используя такие параметры, как isolcpus а также irqaffinity, Таким образом, поставщики могут выделять ядра ЦП для задач, критически важных с точки зрения производительности, сохраняя при этом изоляцию от обычных системных операций.
Заключение
В этом руководстве подробно рассмотрено, как PREEMPT_RT Эта технология превращает Linux в операционную систему реального времени, предоставляя планировщику практически полный контроль. С момента её включения в основные ядра, начиная с Linux 6.12 (сентябрь 2024 г.), она устранила необходимость во внешних патчах для таких архитектур, как x86, ARM64 и RISC-V.
Концепция проста: максимально сократить невытесняемый код. Преобразуя спин-блокировки в блокировки сна и запуская обработчики прерываний в виде потоков, высокоприоритетные задачи могут вытеснять почти все действия ядра. Такие функции, как наследование приоритетов, предотвращают задержку критически важных операций низкоприоритетными задачами, а вытесняемый RCU гарантирует, что даже критические секции на стороне чтения не вызовут значительных задержек. Себастьян Сивиор, Разработчик PREEMPT_RT справедливо отмечает:
"Весь контроль в руках планировщика"."
Этот технический прорыв приносит и практические выгоды. Например, Serverion Использует пользовательские сборки ядра PREEMPT_RT для точной настройки изоляции ЦП и оптимизации рабочих нагрузок в реальном времени, обеспечивая стабильное время отклика даже при интенсивной нагрузке на ввод-вывод.
Отличительной чертой систем реального времени является не только скорость, но и предсказуемость. PREEMPT_RT минимизирует дрожание, обеспечивая точное выполнение задач в нужный момент. Это крайне важно для таких приложений, как промышленная автоматизация, телекоммуникации и критически важные для производительности хостинговые сервисы. Это обеспечивает детерминированное поведение, которое стандартные ядра просто не могут обеспечить.
Благодаря интеграции в основное ядро и поддержке корпоративных дистрибутивов, таких как Ubuntu Pro С февраля 2023 года PREEMPT_RT стал более доступным для хостинг-провайдеров и системных администраторов. Он обеспечивает надежную работу с низкой задержкой, необходимую для самых требовательных и критичных ко времени сред в наши дни.
Часто задаваемые вопросы
Нужен ли мне PREEMPT_RT, или достаточно стандартного Linux?
Стандартное ядро Linux в сочетании с Патч PREEMPT_RT, Она приобретает возможности работы в режиме реального времени. Это делает её отличным выбором для приложений, где критически важны низкая задержка и стабильное время отклика. Однако сама по себе основная ветка ядра Linux может оказаться недостаточной для удовлетворения строгих требований к работе в режиме реального времени.
Приведёт ли параметр PREEMPT_RT к снижению общей пропускной способности моей системы?
Для достижения производительности в режиме реального времени, PREEMPT_RT Основное внимание уделяется сокращению невытесняемого кода ядра, что способствует повышению быстродействия системы. Такой подход может привести к неболькому снижению общей пропускной способности, но он обеспечивает стабильное и предсказуемое поведение, что критически важно для приложений, чувствительных ко времени. Этот компромисс является преднамеренным и имеет центральное значение для удовлетворения требований систем реального времени.
Какой целевой показатель задержки является реалистичным при использовании PREEMPT_RT?
С PREEMPT_RT, Достижение задержки в миллисекундном диапазоне является реалистичной целью как для настольных, так и для встроенных систем. Однако фактическая производительность в значительной степени зависит от того, насколько хорошо система сконфигурирована и настроена в соответствии с конкретными требованиями. Правильная настройка является ключом к обеспечению желаемого уровня быстродействия.