Свяжитесь с нами

info@serverion.com

Позвоните нам

+1 (302) 380 3902

PREEMPT_RT: объяснение возможностей ядра реального времени

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 обеспечивает производительность в реальном времени

PREEMPT_RT: объяснение принципа работы: сборка и оптимизация ядра Linux для работы в реальном времени и с ультранизкой задержкой.

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

Похожие записи в блоге

ru_RU