SWD Software Ltd. - официальный дистрибьютор QNX на территории России и стран бывшего СССР Операционная система реального времени QNX
Инструменты для создания надёжных встраиваемых систем и
интеллектуальных устройств любой сложности
QNX Software Systems - разработчик встраиваемой операционной системы QNX
Информационные брошюры
Статьи и публикации
Обзоры
Операционные системы
Графические интерфейсы
Средства разработки
Прикладные системы на базе ОС QNX
Разное
Конкурсные статьи
Техническая литература
Материалы конференций QNX-Россия
Полезные ссылки
Блог QNX
Главная страница > Материалы > Статьи и публикации > Разное > Использование многоядерных процессоров в высокопроизводительных встраиваемых системах Сделать страницу стартовой Послать ссылку коллеге Версия для печати

Использование многоядерных процессоров в высокопроизводительных встраиваемых системах

Роберт Крейг (Robert Craig), компания QNX Software Systems, старший инженер-программист
Поль Н. Леру (Paul N. Leroux), компания QNX Software Systems, технический аналитик

Решение проблемы многоядерной технологии
Переход к использованию многоядерных процессоров в промышленности становится всё более интенсивным, и тому есть веские причины. По сравнению с традиционными однопроцессорными чипами многоядерные процессоры обеспечивают значительно большую вычислительную мощность благодаря параллельной обработке, делают систему компактнее, а также работают на меньших тактовых частотах, что снижает тепловыделение и энергопотребление системы. Многоядерные процессоры уже заняли центральное место в линейках продуктов нескольких ведущих поставщиков полупроводниковых устройств, которые сегодня предлагают микросхемы с двумя, четырьмя и даже восемью ядрами.

Эффективное использование многоядерной технологии значительно повысит производительность и масштабируемость сетевого оборудования, систем управления, видеоигровых платформ и различных других встраиваемых приложений. Кроме того, оно серьёзно повлияет на многочисленных системотехников и разработчиков программного обеспечения, которые компетентны в проектировании однопроцессорных архитектур, но имеют мало или вообще не имеют опыта разработки многопроцессорных сред.

В качестве примера рассмотрим задачу управления общедоступными ресурсами в многоядерном чипе. Как правило, ядра имеют раздельную кеш-память первого уровня, но совместно используют кеш-память втогого уровня, подсистемы управления памятью и прерываниями, а также периферийные устройства (см. рис. 1). Это значит, что системотехник должен обеспечить каждому ядру исключительный доступ к определённым ресурсам и гарантировать, что приложения, которые работают на одном ядре, не имеют доступа к ресурсам, которые выделены другому ядру.

Наличие нескольких ядер также усложняет архитектуру системы. К примеру, для обмена информацией между приложениями, которые работают на разных ядрах, требуется эффективный механизм межпроцессорного взаимодействия (IPC), инфраструктура данных в общей памяти, а также примитивы синхронизации, которые обеспечивают защиту общедоступных ресурсов.

Перенос кода также является проблемой. Большинство поставщиков встраиваемого оборудования уже вложило средства в создание кода, который в основном предназначен для однопроцессорных архитектур. Этим компаниям необходима законченная стратегия переноса кода, которая обеспечивает максимальное использование ресурсов многоядерного оборудования с минимальными затратами на перенос.


Рис. 1. Структура типичного многоядерного процессора.

Режимы многопроцессорной обработки и роль ОСРВ
Выбор операционной системы (ОС) для многоядерной архитектуры способен как значительно уменьшить, так и увеличить усилия, которые необходимы для решения описанных проблем. Всё зависит от того, поддерживает ли операционная система различные режимы многопроцессорной обработки, которые обеспечивает многоядерный чип. Существует три основных типа многопроцессорной обработки:
  • асимметричная многопроцессорность — на каждом процессорном ядре работает отдельная ОС или отдельные копии одной и той же ОС;
  • симметричная многопроцессорность — все процессорные ядра одновременно управляются единственной копией ОС, а приложения могут перемещаться между ядрами;
  • исключительная многопроцессорность — все процессорные ядра одновременно управляются единственной копией ОС, но каждое приложение привязано к конкретному ядру.

Каждый режим имеет свои достоинства и недостатки, наилучшим образом подходит для решения определённых проблем и предъявляет собственные требования к операционной системе.

Асимметричная многопроцессорность
Ассиметричная многопроцессорность (Asymmetric Multiprocessing — AMP) обеспечивает среду исполнения, которая схожа со средами исполнения традиционных однопроцессорных систем, хорошо известных и понятных большинству разработчиков. По этой причине перенести существующий код в AMP-систему относительно просто. Асимметричная многопроцессорность также обеспечивает прямой механизм управления использованием процессорных ядер. Кроме того, AMP-системы, как правило, дают разработчикам возможность применять стандартные инструменты и методы отладки.

Асимметричная многопроцессорность может быть однородной и неоднородной; в однородных AMP-системах на всех ядрах работают операционные системы одного типа и версии, а в неоднородных AMP-системах операционные системы отличаются по типу или версии. В однородной среде разработчики могут максимально эффективно использовать множественные ядра, выбрав операционную систему (например, ОСРВ QNX® Neutrino®), которая поддерживает модель распределённого программирования. При надлежащей реализации этой модели приложения, которые выполняются на одном ядре, могут прозрачно взаимодействовать с приложениями и службами (к примеру, драйверами устройств и стеками протоколов), работающими на других ядрах, без интенсивного использования процессора, которое характерно для традиционных методов межпроцессорного взаимодействия.

Неоднородная среда предъявляет несколько иные требования. Разработчики должны либо реализовать собственную схему взаимодействия процессоров, либо выбрать две операционные системы, которые используют одни и те же протоколы межпроцессорного взаимодействия (как правило, на основе стека IP). Для разрешения конфликтов при использовании ресурсов обе операционные системы также должны обеспечивать стандартизованные механизмы доступа к общим аппаратным компонентам.

В примере однородной среды, который показан на рис. 2, одно ядро обрабатывает входящий трафик аппаратного интерфейса, а второе ядро — исходящий трафик. Поскольку трафик представляет собой два независимых потока, ядрам не требуется взаимодействовать друг с другом или использовать общие данные. Таким образом, операционной системе не нужно обеспечивать механизм межъядерного взаимодействия. Несмотря на это, операционная система должна работать в реальном времени, чтобы обрабатывать потоки трафика.


Рис. 2. Использование однородной асимметричной многопроцессорности для обработки входящего и исходящего трафика.

На рис. 3 представлен ещё один пример использования однородной среды, в котором распределённая система управления реализована с применением двух ядер, управляющих разными коммуникационными функциями. Для корректной передачи данных необходима согласованная работа приложений, которые выполняются на разных ядрах. Чтобы координировать работу приложений, операционная система должна обеспечивать развитую поддержку механизмов межпроцессорного взаимодействия, в том числе инфраструктуру таблиц маршрутизации в общей памяти.


Рис. 3. Использование однородной асимметричной многопроцессорности в реализации распределённой системы управления.

В примере разнородной среды, который показан на рис. 4, одно ядро реализует систему управления, а другое обрабатывает весь трафик системы передачи данных в реальном времени. В этой среде обе операционные системы, которые работают на ядрах, должны иметь согласованные механизмы межпроцессного взаимодействия, такие как механизм TIPC (Transparent Inter-Process Communication Protocol — протокол прозрачного межпроцессного взаимодействия), который обеспечивает эффективный информационный обмен между ядрами, например, с помощью общих структур данных.


Рис. 4. Использование разнородной асимметричной многопроцессорности в комбинированной системе управления и передачи данных

Операционная система, которая поддерживает простые и лёгкие в использовании протоколы обмена данными, почти всегда значительно улучшает межъядерное взаимодействие. В частности, операционная система, которая основана на модели распределённого программирования, позволяет полнее использовать преимущества параллельной обработки многоядерных процессоров.

Выделение ресурсов
Асимметричная многопроцессорность даёт разработчику приложений возможность управлять распределением общих аппаратных ресурсов между ядрами. Как правило, эта задача выполняется статически во время загрузки системы и включает в себя распределение физической памяти, периферийных устройств и прерываний. Система могла бы распределять ресурсы и динамически, однако это привело бы к сложной координации ядер.

В системе с асимметричной многопроцессорностью каждый процесс всегда выполняется на одном ядре, даже если другие ядра простаивают. По этой причине нагрузка на отдельные ядра системы может быть слишком низкой или слишком высокой. Чтобы устранить эту проблему, можно было бы разрешить приложениям динамически перемещаться между ядрами системы. Тем не менее, такой метод включает в себя сложную операцию сохранения состояния приложения и приводит к прерыванию обслуживания при остановке приложения на одном ядре и его перезапуске на другом ядре. Кроме того, если ядра управляются разными операционными системами, то перенос приложений становится ещё более сложным или вовсе невозможным.

Симметричная многопроцессорность
Процесс выделения ресурсов в многоядерной архитектуре может быть сложным, особенно если многочисленные программные компоненты не располагают информацией о том, как ресурсы используются другими компонентами системы. В симметричной многопроцессорности (Symmetric Multiprocessing — SMP) эта проблема решается использованием единственной копии операционной системы на всех ядрах кристалла. Поскольку операционная система непрерывно наблюдает за всеми системными элементами, она может распределять ресурсы между несколькими ядрами без участия или с минимальным участием разработчика приложений. Более того, операционная система предоставляет такие встроенные стандартизированные примитивы, как pthread_mutex_lock, pthread_mutex_unlock, pthread_spin_lock и pthread_spin_unlock, которые позволяют нескольким приложениям безопасно и легко использовать общие ресурсы.

Поскольку в SMP-системе работает всего одна копия операционной системы, ресурсы можно динамически распределять не между приложениями, а между процессорными ядрами, что позволяет эффективнее использовать оборудование. Кроме того, единственность операционной системы даёт возможность применять инструменты системной трассировки для сбора статистики и данных о взаимодействии приложений всего многоядерного кристалла, благодаря которым разработчики получают важную информацию для оптимизации и отладки приложений. К примеру, системный профайлер комплекта разработчика QNX Momentics® способен отслеживать перемещения потоков между ядрами, использование примитивов операционной системы, события планирования, обмен сообщениями между приложениями и другие события при помощи штампов времени высокого разрешения. Синхронизация приложений также значительно упрощается, поскольку разработчики используют примитивы операционной системы вместо сложных механизмов межпроцессного взаимодействия.

Надлежаще реализованная операционная система с поддержкой симметричной многопроцессорности обеспечивает перечисленные преимущества, не вынуждая разработчика пользоваться специализированными программными интерфейсами приложений (API) или языками программирования. Разработчики много лет успешно используют на практике стандарт POSIX (точнее, API pthreads, который входит в его состав) в передовых средах с симметричной многопроцессорностью. Стандарт POSIX не только широко распространён и качественно документирован, но и позволяет разработчикам писать код, который работает как на однопроцессорных, так и многопроцессорных кристаллах. Некоторые операционные системы обеспечивают исполнение одного и того же двоичного кода на процессорах обоих типов.

Хорошо спроектированная операционная система с симметричной многопроцессорностью, например, QNX Neutrino, обеспечивает возможность одновременного исполнения потоков приложения на любых ядрах. При таком параллелизме приложения могут постоянно использовать всю вычислительную мощность кристалла. Операционная система также помогает разработчику выделять процессорное время приложениям, которым оно наиболее необходимо, если она предоставляет надлежащие возможности вытеснения и приоритезации потоков.

На рис. 5 изображена система управления с симметричной многопроцессорностью, в которой все потоки, принадлежащие различным процессам, могут выполняться на любом ядре. К примеру, процесс командно-строкового интерфейса работает одновременно с приложением маршрутизации, которое выполняет интенсивные вычисления.


Рис. 5 — применение симметричной многопроцессорности в системе управления

Исключительная многопроцессорность
Исключительная многопроцессорность (Bound Multiprocessing, BMP) является новым методом многопроцессорной обработки, который предложен компанией QNX Software Systems и, как симметричная многопроцессорность, обеспечивает преимущество прозрачного управления ресурсами, но также позволяет разработчикам привязывать программные задачи к конкретным ядрам. Как и в симметричной многопроцессорности, единственная копия операционной системы наблюдает за всеми системными ресурсами, обеспечивая их динамическое распределение и совместное использование приложениями. Тем не менее, во время инициализации приложения параметр, который задаётся системным разработчиком, вынуждает все потоки управления приложения выполняться только на заданном ядре.

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

В BMP-системе приложение, которое привязано к одному ядру, не может использовать другие ядра, даже если они простаивают. Тем не менее, разработчик операционной системы может создать инструменты для анализа использования ресурсов (в том числе загрузки процессора) отдельными приложениями и механизм распределения приложений между ядрами, который обеспечивает максимальную производительность системы. Если операционная система также позволяет динамически изменять процессорные ядра, которые назначены приложениям, то пользователь может перемещать приложения между ядрами, не заботясь о сохранении их состояния, остановке и перезапуске.

В примере, который показан на рис. 6, BMP-система работает в полудуплексном режиме. Принимающий процесс с несколькими потоками работает на ядре 0, а передающий процесс, также с несколькими потоками, выполняется на ядре 1. Как и при симметричной многопроцессорности, операционная система имеет полные сведения о работе ядер, что позволяет разработчикам использовать информацию о функционировании и производительности системы в целом. Этот подход избавляет разработчиков от сложной процедуры сбора информации с отдельных ядер и её объединения для последующего анализа.


Рис. 6. Использование исключительной многопроцессорности в полудуплексном режиме.

В примере комбинированной системы передачи данных и управления, который показан на рис. 7, приложения системы управления (командно-строкового интерфейса, эксплуатации, администрирования и обслуживания, а также управления передачей данных) выполняются на ядре 0, а приложения приёма и передачи данных совместно работают на ядре 1. Разработчики могут с лёгкостью реализовать механизм межпроцессного взаимодействия для этой комбинированной системы с помощью локальных механизмов операционной системы или синхронизированных защищённых структур общей памяти.


Рис. 7. Использование исключительной многопроцессорности в системе управления и передачи данных.

Приемлемая стратегия переноса
Исключительная многопроцессорность является промежуточным звеном между асимметричной и симметричной многопроцессорностью и обеспечивает приемлемую стратегию переноса пользователям, которые желают перейти к полностью симметричной многопроцессорности, но озабочены тем, что работа существующего программного кода в полностью параллельной модели исполнения может оказаться некорректной. Пользователи могут перенести существующий код на многоядерный процессор и затем изначально привязать этот код к определённому ядру, чтобы гарантировать его правильную работу.

Рационально связывая приложения (и, возможно, отдельные потоки) с конкретными ядрами, разработчики также локализуют возможные проблемы параллелизма на уровне приложений и потоков. Устранение этих проблем обеспечивает полностью параллельную работу приложений, а, следовательно, позволяет достичь максимального увеличения производительности системы за счёт использования многоядерного процессора.

Вопрос выбора
Какой тип многопроцессорной обработки следует выбрать: AMP, BMP или SMP? Конечно, ответ на этот вопрос зависит от задачи, которую решает разработчик. Таким образом, важно, чтобы операционная система обеспечивала развитую поддержку каждой модели многопроцессорности, позволяя разработчикам выбирать модель, которая наилучшим образом подходит для решаемой задачи. Асимметричная многопроцессорность успешно работает с существующими приложениями, но её масштабируемость для трёх и более ядер ограничена. Симметричная многопроцессорность обеспечивает прозрачное управление ресурсами, но не всегда поддерживает программное обеспечение, которое предназначено для однопроцессорных систем. Исключительная многопроцессорность обладает многими преимуществами симметричной многопроцессорности, а также обеспечивает корректное поведение однопроцессорных приложений, значительно упрощая перенос существующего программного обеспечения. Таблица 1 показывает, что возможность свободного выбора модели многопроцессорной обработки позволяет разработчикам достичь оптимального баланса между производительностью, масштабируемостью системы и простотой переноса программ.

  SMP BMP AMP
Прозрачное совместное использование ресурсов Есть Есть Нет
Возможность использования в системах с тремя и более ядрами Есть Есть Ограничена
Поддержка существующих приложений Нет Есть Есть
Возможность использования нескольких ОС (например, QNX Neutrino и Linux) Нет Нет Есть
Организация процессоров с выделенной функцией Нет Есть Есть
Межъядерный обмен сообщениями Быстрый (функции ОС) Быстрый (функции ОС) Медленный (на уровне приложений)
Межъядерная синхронизация потоков Есть Есть Нет
Динамическое выравнивание загрузки Есть Есть Нет
Отладка и оптимизация в системном масштабе Есть Есть Нет

Табл. 1. Сравнение асимметричной, симметричной и исключительной многопроцессорности.

Рассказать друзьям:

Rambler's Top100           Рейтинг@Mail.ru