HMP, Real-Time Linux и Xenomai – обзор трех подходов к разработке систем реального времени на процессорах приложений

Это гостевой пост о гетерогенной многопроцессорной обработке (HMP) , Real-Time Linux и Xenomai для разработки систем реального времени на Linux, написанный Гилерме Фернандесом, Раулем Муньосом, Леонардо Вейгой и Брэндоном Шиббли, работающими в Toradex.

Введение

Сфера применения процессоров приложений продолжает расширяться. Системы-на-кристалле, обычно на базе ядер ARM Cortex-A, осваивают области, где традиционно доминировали маломощные ARM Cortex-M и другие микроконтроллеры. Этот тренд обусловлен несколькими факторами:

  • Жесткие требования к подключению, связанные с IoT, причем не только на аппаратном уровне, но и в части ПО, протоколов и безопасности
  • Потребность в высокоинтерактивных интерфейсах, таких как мультитач, экраны высокого разрешения и сложные графические оболочки
  • Снижение стоимости SoC благодаря росту объемов производства и новым производственным возможностям.

Типичные примеры, иллюстрирующие вышесказанное – ежедневно наблюдаемые случаи модернизации продуктов при переходе с микроконтроллера на микропроцессор. Такой шаг создает новые сложности из-за усложнения проектирования и более высокого уровня абстракции ОС. Трудности аппаратного проектирования преодолеваются использованием референсных конструкций и готовых решений, таких как модульные компьютеры или одноплатные ЭВМ. На уровне ОС широко распространены встраиваемые дистрибутивы Linux. Огромный мир open-source инструментов упрощает разработку сложных многофункциональных встраиваемых систем. Подобная разработка на микроконтроллерах была бы крайне трудоемкой. Несмотря на преимущества, использование ОС вроде Linux вызывает вопросы и сомнения при обсуждении детерминизма и приложений реального времени.

Распространенная стратегия разработчиков – разделение задач с жесткими временными ограничениями и обычных задач между разными процессорами. Так, Cortex-A или аналоги обычно выбирают для мультимедиа и коммуникаций, а микроконтроллер сохраняют для обработки детерминированных задач реального времени. Цель статьи – представить варианты разработки систем реального времени на процессорах приложений. Рассматриваются три решения для обеспечения возможностей реального времени.

Гетерогенная многопроцессорная обработка

Гетерогенная многопроцессорная обработка (HMP) – аппаратное решение. Процессоры приложений, такие как серия NXP i.MX7 , NXP i.MX6SoloX и грядущая серия NXP i.MX8 , содержат разнородные ядра. Например, i.MX7S – двухъядерный процессор с Cortex-A7 @ 800 МГц и Cortex-M4 @ 200 МГц. Базовый принцип: интерфейс пользователя и высокоскоростные подключения реализуются на абстрагированной ОС (Linux, ядро Cortex-A), а управляющие задачи параллельно выполняются на ОС реального времени (FreeRTOS) на ядре Cortex-M. Оба ядра имеют доступ к общей памяти и периферии, обеспечивая гибкость распределения задач. См. Рисунок 1.

NXP i.MX7 Block Diagram (Click to Enlarge)
Рисунок 1 – Структурная схема NXP i.MX7 (нажмите для увеличения)

Преимущества подхода HMP:

  • Упрощенное повторное использование унаследованного ПО для микроконтроллеров
  • Упрощенное обновление ПО (ядро M4), так как прошивка может храниться в ФС ОС Cortex-A
  • Гибкость выбора периферии для каждого ядра. Программная настройка позволяет вносить изменения без переделки аппаратной части.

Дополнительная информация по разработке для HMP:

Toradex , Antimicro и The Qt Company совместно создали демонстрационного робота TAQ – балансирующий перевернутый маятник на модуле Colibri iMX7 . Интерфейс построен на Linux с фреймворком QT (Cortex-A7), а управление моторами/балансировка – на Cortex-M4. Межъядерная связь используется для управления роботом и анимации его “лица”, как показано в видео ниже.

Real-Time Linux

Второй подход – программный. Linux не является ОС реального времени , но существуют инициативы, значительно улучшающие его детерминизм. Один из проектов – Real-Time Linux . Это набор патчей (PREEMPT_RT), добавляющих новые варианты вытеснения в ядро Linux, а также другие функции для задач реального времени. Документация по применению патча и разработке приложений доступна на вики Real-Time Linux .

Тесты с патчами PREEMPT_RT на Colibri iMX6DL демонстрируют улучшение производительности реального времени. Инструкции по подготовке образа Toradex Linux с патчем доступны по ссылке . Простое приложение переключало GPIO на частоте 2.5 КГц (200 мкс вкл/200 мкс выкл). Выходной сигнал анализировался осциллографом. Гистограммы ниже сравнивают стандартное ядро Linux с Voluntary Preemption (сверху) и ядро с PREEMPT_RT и Real-time Preemption (снизу). По оси X – период выборки, по оси Y – количество выборок. Таблица под графиком показывает наихудшие и средние значения.

Real-time Linux vs Xenomai

Рисунок 2: Гистограмма меандра, сгенерированного стандартным ядром (сверху) и ядром Preempt-RT (снизу) – Нажмите для увеличения

Описание

Выборки

Минимальный (мкс)

Наихудший случай для 99% образцов (мкс)

Наихудший случай (мкс)

Медиана (мкс)

Среднее значение (мкс)

Стандартное ядро

694,780

36

415

4,635

400

400

Ядро PREEMPT_RT

683,593

369

407

431

400

400

Таблица 1: Сравнение стандартного ядра и ядра реального времени при генерации прямоугольного сигнала.

Пример программной системы с использованием патча PREEMP_RT предоставляет Codesys Solutions . Их решение использует ядро Linux реального времени совместно с OSADL (Open Source Automation Development Lab) для развертывания программных ПЛК, уже широко применяемых в промышленной автоматизации на тысячах устройств. В представленном ниже видео показана работа решения на Apalis iMX6Q.

Xenomai

Xenomai — еще один популярный фреймворк для превращения Linux в систему реального времени. Xenomai достигает этого путем добавления ко-ядра к основному ядру Linux. Ко-ядро обрабатывает критичные ко времени операции и имеет более высокий приоритет. Для использования возможностей реального времени Xenomai необходимо применять специализированные API (libcobalt), которые обеспечивают взаимодействие пользовательских приложений с ядром Cobalt, отвечающим за гарантированное исполнение в реальном времени.

dual core xenomai configuration

Рисунок 3: Конфигурация Xenomai с двумя ядрами

Инструкции по установке Xenomai на целевое устройство доступны на сайте Xenomai. Также существует перечень совместимого оборудования , включающий всю серию SoC NXP i.MX.

Для проверки работы Xenomai на i.MX6 SoC был проведен эксперимент с использованием модуля Colibri iMX6DL от Toradex. Применялась та же методика тестирования, что и для расширения реального времени Linux. Фрагменты кода ниже демонстрируют использование API Xenomai.

Результаты сравнения Xenomai со стандартным ядром Linux представлены на диаграмме. Решение реального времени демонстрирует явное преимущество — с еще большим отрывом — по времени отклика относительно стандартного ядра Linux.

Standard Linux vs Xenomai

Рисунок 3: Гистограмма прямоугольного сигнала, сгенерированного стандартным ядром (вверху) и Xenomai (внизу) — Нажмите для увеличения

Описание

Образцы

Минимальное (мкс)

Наихудший случай для 99% образцов (мкс)

Наихудший случай (мкс)

Медиана (мкс)

Среднее значение (мкс)

Стандартное ядро

694,780

36

415

4,635

400

400

Реализация Xenomai

1,323,521

386

402

414

400

400

Таблица 2: Сравнение стандартного ядра и реализации Xenomai при генерации прямоугольного сигнала.

Заключение

В статье представлен краткий обзор решений для разработки систем реального времени на application-процессорах под управлением ОС Linux. Это отправная точка для разработчиков, использующих микропроцессоры и требующих детерминированного управления в реальном времени.

Рассмотрены аппаратный подход с использованием гетерогенных многопроцессорных SoC и два программных решения: патч Linux-RT и Xenomai. Представленные результаты не являются сравнением ОС или методик реального времени. Каждое решение имеет сильные и слабые стороны, применимость которых зависит от конкретной задачи.

Ключевой вывод: существуют несколько эффективных решений для надежного использования Linux на application-процессорах в системах реального времени.

Выражаем свою благодарность источнику, с которого взята и переведена статья, сайту cnx-software.com.

Оригинал статьи вы можете прочитать здесь.

0 0 votes
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Inline Feedbacks
View all comments