Виртуализация в встраиваемых операционных системах для гибкости
Введение: почему виртуализация важна для встраиваемых систем
Встроенные операционные системы являются невидимым мозгом бесчисленных устройств — от датчиков IoT и медицинских имплантатов до автомобильных информационно-развлекательных устройств и промышленных контроллеров. По мере роста спроса на более умные, более подключенные устройства растет и сложность их программных стеков. Разработчиков все чаще просят запускать несколько приложений с различными уровнями доверия, требованиями к задержке и циклами обновления на одном и том же оборудовании. Традиционные встроенные операционные системы часто борются за обеспечение гибкости, безопасности и эффективности ресурсов, которые требуют эти сценарии. Виртуализация, когда-то ограниченная серверными и настольными средами, появилась в качестве мощного инструмента для решения этих проблем. Абстрагируя аппаратные ресурсы и создавая изолированные виртуальные машины (VM), виртуализация позволяет встроенным системам запускать неоднородные операционные системы, консолидировать рабочие нагрузки и улучшать ремонтопригодность, не жертвуя производительностью в реальном времени.
В этой статье рассматривается, как виртуализация может быть реализована во встроенных операционных системах для достижения большей гибкости. Мы рассмотрим основные концепции, практические преимущества, стратегии реализации и ключевые проблемы, с которыми сталкиваются инженеры при внедрении виртуализации на устройства с ограниченными ресурсами. К концу вы поймете, почему виртуализация становится критическим компонентом современной встроенной архитектуры программного обеспечения.
Понимание виртуализации во встроенных системах
По своей сути, виртуализация создает программную абстракцию аппаратных ресурсов, таких как ядра процессора, память, запоминающие устройства и устройства ввода-вывода, чтобы несколько операционных систем или приложений могли работать одновременно на одной физической платформе. В встроенных системах это обычно достигается через гипервизор (также называемый монитором виртуальной машины), который находится между аппаратным обеспечением и гостевыми операционными системами. Гипервизор управляет распределением ресурсов, обеспечивает изоляцию и обрабатывает прерывания и исключения.
В отличие от виртуализации серверов, где вычислительная мощность и массивная память в изобилии, встроенные системы часто ограничены ограниченной возможностью обработки, небольшими размерами памяти и строгими бюджетами мощности. Поэтому встроенные гипервизоры предназначены для легкого веса, сводя к минимуму накладные расходы, все еще предоставляя основные функции виртуализации. Многие встроенные гипервизоры реализуют архитектуры типа 1 (bare-metal) , где гипервизор работает непосредственно на аппаратном обеспечении, или архитектуры типа 2 (hosted) типа 2 (hosted) , где хост-ОС управляет виртуализацией. Для большинства встроенных вариантов использования гипервизоры типа 1 предпочтительны, потому что они предлагают лучшую производительность и детерминизм.
Другим критическим аспектом встроенной виртуализации является поддержка рабочих нагрузок в реальном времени. В отличие от вычислений общего назначения, многие встроенные устройства должны реагировать на события в течение микросекунд. Это требует, чтобы гипервизор эффективно обрабатывал прерывание виртуализации, избегал введения непредсказуемых задержек и обеспечивал механизмы резервирования циклов ЦП для критически важных по времени задач. Расширения виртуализации аппаратного обеспечения, такие как ARM’s Virtualization Extensions (например, в процессорах Cortex-A) или Intel VT-x/AMD-V, помогают, выгружая некоторые задачи виртуализации на аппаратное обеспечение, значительно снижая накладные расходы на гипервизор.
Преимущества виртуализации для встроенных операционных систем
Виртуализация предлагает ряд преимуществ, которые непосредственно касаются растущей сложности встроенного программного обеспечения. В следующих разделах разбиваются наиболее эффективные преимущества.
Усиленная гибкость и динамическое распределение ресурсов
С виртуализацией системные архитекторы могут разделять аппаратные ресурсы между несколькими экземплярами гостевой ОС. Каждый гость может запускать разные операционные системы — например, ОС реального времени (RTOS) для циклов управления наряду с экземпляром Linux для задач сетей и пользовательского интерфейса. Эта гибкость позволяет разработчикам выбирать лучшую операционную систему для каждой подсистемы, не будучи заблокированными в одной монолитной платформе. Кроме того, ресурсы могут быть динамически настроены : если RTOS требуется больше времени процессора в период с высоким прерыванием, гипервизор может перераспределять циклы от менее критических гостей, адаптируясь к изменениям рабочей нагрузки в реальном времени.
Сильная изоляция для безопасности и безопасности
Изоляция, пожалуй, является наиболее важным преимуществом виртуализации во встроенных системах. Каждая виртуальная машина работает в своем собственном защищенном домене, поэтому неисправность (например, сбой программного обеспечения или повреждение памяти) в одной виртуальной машине не может распространяться на другие. Это особенно важно для систем смешанной критичности , где сосуществуют приложения с различными уровнями целостности безопасности. Например, в контроллере автомобильной области программное обеспечение управления тормозами (ASIL D) может быть изолировано от информационно-развлекательной системы (QM), предотвращая сбой в развлекательной консоли от воздействия на функции безопасности. Аналогично, нарушение безопасности в одной виртуальной машине не подвергает других, уменьшая поверхность атаки всего устройства.
Эффективное использование ресурсов и снижение затрат
Встроенные устройства часто имеют несколько дискретных микроконтроллеров или процессоров для удовлетворения различных требований. Консолидируя рабочие нагрузки на один многоядерный процессор с использованием виртуализации, производители могут уменьшить количество чипов, пространства на плате и энергопотребления. Эта аппаратная консолидация снижает затраты на материалы и упрощает проектирование системы. Кроме того, поскольку виртуальные машины могут совместно использовать периферию и память через паравиртуализированные драйверы, общее использование ресурсов улучшается, что приводит к снижению потребления энергии и увеличению срока службы батареи в портативных устройствах.
Упрощенное техническое обслуживание, обновления и управление жизненным циклом
Встроенные устройства все чаще требуют обновления полей — для исправлений безопасности, исправлений ошибок или дополнений функций. Виртуализация делает обновления более безопасными и менее разрушительными. Вместо обновления всей прошивки системы вы можете обновлять одну ВМ за раз, в то время как другие ВМ продолжают работать. Если обновление вызывает сбой, вы можете откатить назад только эту ВМ. Этот подход минимизирует время простоя и особенно ценен в системах, где непрерывная работа обязательна, таких как медицинские вентиляторы или промышленные ПЛК.
Повышение производительности разработчиков
Разработчики могут самостоятельно работать над различными подсистемами (например, UI на Linux, логика управления на RTOS) и тестировать их в виртуализированной среде перед интеграцией. Гипервизор обеспечивает стандартный уровень абстракции аппаратного обеспечения, поэтому команды могут разрабатывать и отлаживать с помощью того же программного стека, который будет работать на целевом устройстве. Это уменьшает сюрпризы интеграции и сокращает время выхода на рынок.
Виртуализация в встраиваемых системах
Развертывание виртуализации во встроенной среде требует тщательного выбора гипервизора, адаптации драйверов и рассмотрения дизайна для ограничений в реальном времени.В следующих разделах излагается практический путь реализации.
Выбираем правильного гипервизора
Гипервизор является краеугольным камнем любого решения виртуализации. Для встроенных систем гипервизор должен быть легким, масштабируемым и поддерживающим рабочие нагрузки в реальном времени. Существует несколько проверенных вариантов:
- Xen Project — гипервизор типа 1 с открытым исходным кодом, который был адаптирован для встроенного использования (например, Xen для ARM). Он поддерживает паравиртуализированных и полностью виртуализированных гостей и предлагает сильную изоляцию. Возможности Xen в реальном времени улучшились с введением ко-ядра Xenomai и выделенной поддержкой планирования. (Xen Embedded and Automotive)
- KVM (виртуальная машина на основе ядра) — гипервизор типа 2, который использует возможности виртуализации ядра Linux. Традиционно используемый в серверах, KVM можно настроить для встроенных систем (например, в сборках на основе Yocto). Он извлекает выгоду из обширной экосистемы инструментов и поддержки драйверов.(Главная страница KVM)
- OpenAMP / Xilinx RFSoC — Для систем на базе ARM с расширениями аппаратной виртуализации OpenAMP обеспечивает основу для запуска нескольких гостевых ОС с использованием механизмов remoteproc и rpmsg.
- Коммерческие гипервизоры RTOS — Продукты, такие как Green Hills Integrity Multivisor, QNX Hypervisor или Wind River Helix Virtualization Platform, разработаны специально для смешанных критических и безопасных сред.
При выборе гипервизора оцените его присутствие (ОЗУ и хранилище), задержку прерывания, поддержку планирования (особенно для сложных задач в режиме реального времени) и готовность к сертификации (например, ISO 26262 для автомобилей, IEC 62304 для медицинских).
Поддержка аппаратного обеспечения и соображения платформы
Современные встроенные процессоры все чаще включают расширения аппаратной виртуализации. Для архитектуры ARM расширения виртуализации (VE), доступные в процессорах Cortex-A (не Cortex-M) обеспечивают выделенный уровень исключений (EL2) для гипервизора. Это позволяет гипервизору захватывать привилегированные операции у гостей без переписывания их кода ядра (полная виртуализация). Без таких расширений гипервизор все еще может запускать гостевые ОС через паравиртуализацию , где гостевая ОС модифицирована для выдачи гипервызовов вместо выполнения привилегированных инструкций. Паравиртуализация распространена во встроенных системах, поскольку она предлагает более низкие накладные расходы и лучшую производительность на более низких процессорах.
Другие архитектурные особенности, которые помогают встроенной виртуализации, включают:
- IOMMU (Input/Output Memory Management Unit) — обеспечивает изоляцию устройства и безопасный DMA (Direct Memory Access) для каждого виртуального компьютера.
- GICv2/v3 (Generic Interrupt Controller) — управляет маршрутизацией прерываний на правильную виртуальную машину без посредничества гипервизора для каждого прерывания.
- Многоядерные процессоры — позволяют прикреплять VM-визуальные процессоры к выделенным физическим ядрам, уменьшая трэширование кэша и обеспечивая детерминированное исполнение.
Если вашей целевой платформе не хватает этих функций, планируйте больше накладных расходов на гипервизор и ожидайте ограничений на количество одновременных гостей или сложность эмуляции устройства.
Управление производительностью и задержкой в реальном времени
Одна из самых больших проблем в встроенной виртуализации - сохранение поведения в реальном времени. Гипервизор должен планировать vCPU, виртуализировать прерывания и управлять памятью таким образом, чтобы минимизировать задержку. Несколько стратегий могут помочь:
- Приоритетное, превентивное планирование — Приоритет планирования выше для гостевых виртуальных машин в реальном времени. Некоторые гипервизоры (например, KVM с патчем ядра в реальном времени, Xen с планировщиком RTDS) поддерживают расписание на основе сроков.
- Выделенное назначение ядра — Зарезервировать целое физическое ядро для гостя в реальном времени. Когда это сделано, этот гость никогда не страдает от задержек совместного планирования. Гипервизор обрабатывает только переадресацию прерываний, что можно сделать на аппаратном обеспечении с поддержкой VGIC.
- Пассажирский I/O — Для чувствительных ко времени периферийных устройств, предоставляйте VM прямой доступ к оборудованию (например, используя VFIO или virtio в режиме пропуска). Это обходит гипервизор на пути передачи данных и уменьшает задержку до почти нативных уровней.
- Паравиртуализированные драйверы — Используйте легкие паравиртуализированные драйверы для блокировки, сети и серийного ввода/вывода, чтобы избежать эмуляции в тяжелом весе.
Даже с этими методами будет существовать некоторая остаточная задержка.Необходимо тщательное тестирование с помощью таких инструментов, как циклотест (на Linux-гостей) или специализированное оборудование для измерения в реальном времени.
Управление памятью и хранением
Встроенные системы часто имеют ограниченную память. Сам гипервизор потребляет ОЗУ для своих структур данных (например, таблицы страниц, блоки управления VM). Каждая гостевая ОС также требует выделенной памяти, которая может быть выделена статически или динамически. Статическое распределение проще и гарантирует, что интенсивное использование памяти гостями никогда не голодает, но это может привести к отходам. Динамический раздувание памяти позволяет гипервизору восстанавливать неиспользованную память от проставших гостей и перераспределять ее, но он добавляет сложность и может вводить переменные задержки. Для систем, имеющих важное значение для безопасности, статическое распределение обычно требуется по стандартам сертификации.
Хранение во встроенных устройствах часто основано на флэш-памяти (eMMC, NAND или NOR). Гипервизор может обеспечить виртуальные диски или хранилище разделов на уровне блока для каждого гостя. Рассмотрим варианты выравнивания износа и файловой системы (например, UBIFS для сырой NAND) при проектировании виртуализации хранения. Паравиртуализированные драйверы хранения (например, virtio-blk) уменьшают накладные расходы на эмуляцию.
Проблемы и ограничения встроенной виртуализации
Несмотря на множество преимуществ, виртуализация не является серебряной пулей. Разработчики должны знать о следующих препятствиях.
Выступление Overhead
Даже с аппаратным ускорением виртуализация вводит некоторые накладные расходы — особенно для обработки прерываний, переключения контекста и управления памятью. Для наиболее интенсивных или чувствительных к задержке задач накладные расходы могут быть неприемлемы. В таких случаях рассмотрите возможность использования разделов bare-metal (назначение физического ядра исключительно для критической задачи без ОС) или использования минимальной RTOS, которая работает непосредственно на аппаратном обеспечении, с виртуализированными только некритическими функциями.
Сертификация и квалификационные расходы
Встраиваемые системы, имеющие критически важное значение для безопасности (автомобильные, аэрокосмические, медицинские) требуют сертификации по стандартам функциональной безопасности. Добавление гипервизора увеличивает сложность системы и вводит дополнительные режимы отказа. Сам гипервизор должен быть сертифицирован. Коммерческие поставщики гипервизоров часто предоставляют артефакты сертификации, но это добавляет стоимость и может ограничить выбор решений для виртуализации. Использование гипервизора, который уже был квалифицирован (например, QNX Hypervisor для ISO 26262) может снизить нагрузку.
Отсутствие поддержки аппаратного обеспечения на низкоуровневых MCU
Большинство встроенных подходов виртуализации ориентированы на микропроцессоры (МПУ) с MMU и расширениями виртуализации - обычно Cortex-A или x86. На ресурсо-ограниченных микроконтроллерах (MCU), таких как Cortex-M, которым не хватает поддержки MMU и гипервизорной ловушки, возможна только виртуализация программного обеспечения (например, FreeRTOS с изоляцией на основе MPU).
Водитель и периферийная сложность
Каждый VM обычно ожидает своих собственных драйверов устройств. Для обмена периферийными устройствами между виртуальными машинами (например, один UART, шина SPI или контроллер Ethernet) требуется тщательная конструкция. Паравиртуализированные драйверы могут помочь, но их необходимо портировать на каждую гостевую ОС. Для устаревших или запатентованных периферийных устройств гипервизору может потребоваться эмулировать аппаратное обеспечение, которое является сложным и медленным. Многие встроенные проекты ограничивают виртуализацию только самыми критическими рабочими нагрузками и позволяют назначать некоторые периферийные устройства исключительно.
Гарантии изоляции в реальном времени
Гарантировать, что сложная задача в реальном времени соответствует своим срокам, когда другие виртуальные машины работают, сложно. Помехи кэша, раздоры между шинами и разделение полосы пропускания памяти могут вызвать непредсказуемые задержки. Продвинутые методы, такие как раскраска кэша, разделение LLC (кэш последнего уровня) и резервирование полосы пропускания памяти изучаются, но еще не широко доступны в производственных гипервизорах.
Будущие направления в встраиваемой виртуализации
Развивается ландшафт встраиваемой виртуализации. Несколько тенденций формируют следующее поколение гибких встраиваемых систем.
Уникеры и легкие виртуальные машины
Unikernels - это специализированные одноцелевые виртуальные машины, которые включают в себя только минимальные компоненты ОС, необходимые для приложения. Они уменьшают объем памяти и время загрузки, сохраняя преимущества изоляции виртуализации. Например, одноярусный контроллер сенсорного концентратора может загружаться в миллисекундах и использовать всего несколько сотен килобайт. Комбинирование одноярусов с легким гипервизором позволяет высокоэффективные, гибкие встроенные платформы.
Контейнеризация на встроенных устройствах
В то время как контейнеры имеют общее ядро хоста и, следовательно, имеют более низкие накладные расходы, чем виртуальные машины, они не имеют одинакового уровня изоляции. Однако встроенные контейнеры (например, Docker на Yocto или LXC на малом Linux) становятся возможными, потому что современные ядра Linux предлагают более сильные функции изоляции (секкомп, пространства имен, группы). В некоторых случаях смешивание контейнеров для некритических рабочих нагрузок с виртуальными машинами на основе гипервизора для критических предлагает лучшее из обоих миров.
Системы смешанной критики и открытые стандарты
Такие стандарты, как AMBA CHI (CoreLink) и ASIL-разложение в автомобилестроении, приводят к аппаратной изоляции.Рабочая группа по виртуализации Multicore Association’s Virtualization Working Group разрабатывает API для связи с гипервизором и управления ресурсами. Ожидайте увидеть больше единообразия в том, как гипервизоры предоставляют возможности более высокоуровневому программному обеспечению, упрощая переносимость.
Edge AI и виртуализация
Поскольку встроенные устройства включают в себя ускорители ИИ (NPU, GPU), виртуализация должна управлять этими специализированными ресурсами. Виртуализация движков вывода нейронных сетей, например, может потребовать моделей обмена памятью (например, раздел GPU Nvidia с vGPU). Исследование в гетерогенной виртуализации системы позволит нескольким гостям безопасно делиться ресурсами ускорителя.
Заключение
Виртуализация больше не является просто концепцией центра обработки данных — это практичная и мощная техника для повышения гибкости, безопасности и эффективности использования ресурсов во встроенных операционных системах. Тщательно выбирая гипервизор, который соответствует аппаратным возможностям и требованиям реального времени, инженеры могут консолидировать несколько рабочих нагрузок на одной платформе, изолировать критические от некритических функций и упростить долгосрочное обслуживание. Проблемы накладных расходов, сертификации и поддержки устройств низкого класса реальны, но продолжающиеся достижения в области аппаратных средств и технологии гипервизора продолжают снижать барьеры.
Независимо от того, создаете ли вы следующее поколение контроллеров автомобильных доменов, медицинских инфузионных насосов или промышленных шлюзов IoT, виртуализация предлагает путь для удовлетворения растущих требований сложности программного обеспечения, не жертвуя детерминизмом и надежностью, которые требуют встроенные системы.