Что такое Simics?

от автора

Simics – полноплатформенный симулятор, используемый для запуска немодифицированных исполняемых файлов целевой платформы. Изначально разрабатывался Шведским институтом информатики, из которого в 1998 году была выделена компании Virtutech для коммерческой разработки симулятора. В 2010 году компания Virtutech была приобретена компанией Intel, и сейчас симулятор Simics продаётся ее дочерней компанией Wind River Systems.
Simics может симулировать системы с архитектурой Alpha, x86-64, IA-64, ARM, MIPS (32х- и 64х-битной), MSP430, PowerPC (32х- и 64х-битной), POWER, SPARC-V8 и x86. На разнообразных симулируемых системах были запущены многие операционные системы, включая MS-DOS, Windows, VxWorks, OSE, Solaris, FreeBSD, Linux, QNX и RTEMS. Портирование операционной системы NetBSD на процессоры AMD64 было изначально осуществлено с использованием симулятора Simics до публичной доступности данных процессоров. Часто Simics используется как виртуальная платформа для разработки ПО для конкретного вида встроенных аппаратных средств.
Текущая версия симулятора 5.0, она доступна для операционных систем Windows и Linux.

Симулятор Simics имеет возможность исполнять программу в обратном направлении. Такое исполнение может показать, как случилась исключительная ситуация или программная ошибка. Когда в обратном направлении исполняется операционная система, например, Linux, то ранее удалённые файлы появляются обратно в тот момент, когда симуляция (двигающаяся обратно) проходит через момент их удаления; информация, отображаемая на экранах гостевой системы, также проигрывается в обратном направлении.

Вы, возможно, уже знаете, что Wind River приобрёл Simics, продукт, ранее продававшийся компанией Virtutech. Мои коллеги Michel Genard и Bill Graham недавно писали об этом.

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

Simics является симулятором – программным решением, симулирующим аппаратуру. Такой симулятор часто называют виртуальной платформой, так как он предоставляет виртуальную аппаратную платформу для запущенного на нём ПО. Следует отметить, что Simics виртуализирует встроенную аппаратуру по-другому, нежели гипервизоры, такие как Wind River Hypervisor.

Гипервизор ожидает, что операционная система, запущенная в нём, поддерживает определённую архитектуру виртуальной машины, тогда как виртуальная платформа Simics симулирует конкретную аппаратуру. Simics представляет собой инструмент, позволяющий разрабатывать ПО без наличия соответствующей аппаратуры, в то время как гипервизор является способом управления аппаратурой при её работе. Вы легко можете запустить гипервизор и операционные системы, исполняемые в нём, в симуляторе Simics. Wind River Hypervisor был даже разработан с использованием симулятора Simics.

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

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

Simics – это обычное приложение. Ему не требуется специального оборудования, плат с FPGA или специальных эмуляторов. Simics может работать на любом ПК, везде, в любое время (по крайней мере, если на ПК используется Windows или Linux). Вы можете отправить виртуальную платформу, реализованную с помощью симулятора Simics, буквально в электронном письме. Таким образом можно заменить аппаратные платы для команд разработчиков, располагающихся на большом удалении друг от друга, прямо-таки волшебным способом.

снимок окон симулятора Simics

Внутри Simics симуляции

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

Ключевым ядром симулятора являются системы моделирования набора команд [ориг. ISS], которые могут моделировать ARM, DSP, MIPS, Power архитектуру, SPARC, x86/IA и другие процессоры. Тем не менее, сама по себе модель процессора не позволит запустить на ней операционную систему. Виртуальные платформы Simics по этой причине также включают в себя модели блоков управления памятью (MMU), а также запоминающих и прочих устройств, которые доступны процессору.

схема симулятора с объектами симулятора и ПО, исполняющимся внутри симулятора

Давайте рассмотрим то, как процессором выполняется базовая операция: доступ в память. Когда процессор делает запрос на чтение или запись памяти, то в первую очередь адрес транслируется блоком управления памятью, выдающим физический адрес. Физический адрес используется для создания транзакции в симуляторе Simics.

Далее транзакция проходит через карту памяти, которая определяет куда в итоге транзакция будет отправлена. Если транзакция попадает в память, то содержимое памяти считывается или модифицируется.

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

Если посмотреть на Simics как на программу, то всё описанное выше выглядит как цепь вызовов функций между объектами, из которых состоит симулируемая модель. В Simics всё представляется объектами, которые используют вызовы функций, чтобы пересылать как транзакции, связанные с моделирование целевой платформы (например, доступы в память), так и сообщения для внутренних действий симулятора (логирования, трассировки). В сообществе проектировщиков аппаратуры, такой тип симуляции известен как моделирования на уровне транзакций [http://en.wikipedia.org/wiki/Transaction-level_modeling]. Главной особенностью такого моделирования является использование движения данных в виде транзакций, а не моделирование синхронизационных таймеров, выводов или других низкоуровневых вещей.

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

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

Для того, чтобы поддерживать динамические изменения, все объекты, используемые в симуляторе, создаются из классов, которые загружаются динамически. Каждая модель, используемая в симуляторе, определяется в своём .dll или .so файле и может быть загружена динамически. Пользователю не нужно ничего перекомпилировать, чтобы создать новую конфигурацию, а только загрузить необходимые модули в симулятор динамически. Simics очень похож на среду Java и .NET в плане того, как объекты компилируются, загружаются, управляются и соединяются. Это не статическая линковка, как в простых C и C++ программах.

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

Модули симулятора Simics могут быть написаны на C, С++, Python, или на внутреннем языке моделирования аппаратуры DML [, а также использованием SystemC]. DML представляет собой генератор C кода, который автоматизирует генерацию шаблонного кода, необходимого для создания модели устройства. Другие языки программирования также могут быть использованы, при условии, что они могут линковаться с модулями, написанными на языке C.

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

Что может быть смоделировано?

По сути, Simics может моделировать любую систему. Несколько процессоров, плат, сетей и гетерогенных компьютерных архитектур c несколькими гостевыми операционными системами – это не проблема. Самые большие конфигурации, использованные нашими клиентами, включали до тысячи процессоров. Самые длительные симуляции длились много месяцев гостевого времени. Наиболее гетерогенные симуляции включают десятки процессоров разных типов из разных семейств. Многоядерность, одноядерность, симметричная мультипроцессорность, гетерогенные системы, 8ми- или 64х-битные, Simics использовался, чтобы симулировать всё это.

Добавление моделей новых гостевых систем может быть сделано компанией Wind River, пользователем Simics или сторонними консультантами. Здесь нет никакой магии: каждый пользователь Simics может расширить библиотеку моделей аппаратуры, доступных в Simics, любыми компонентами, которые ему потребуются. Правда, для этого в дополнение к базовому продукту Simics надо приобрести продукт Model Builder, который даёт возможность создавать новые гостевые системы.

Ввод/вывод

Для осуществления ввода в симулируемую систему, Simics предоставляет пользователю возможность взаимодействовать с последовательной консолью и графическими дисплеями симулируемой системы. Также есть возможно соединить симулируемые последовательные порты и Ethernet-сети с реальными физическими сетями. Обычно ввод/вывод целевой системы автоматизируется и делается воспроизводимым с помощью скриптов и разных генераторов траффика. Если рассматривать изменения ПО на целевой машине как ввод, то загрузка заново собранных исполняемых файлов целевой системы в симулируемую память и на диски – это самая главная форма ввода, которую Simics выполняет сам, без вовлечения целевого ПО. Это далеко не полное описывает всех возможностей; существуют много других (обычно специфичных для конкретного применения) способов, чтобы взаимодействовать с симулируемой системой.

Для пользователя Simics предоставляет также много способов взаимодействия с самим симулятором, включающие скриптуемый интерфейс командной строки; возможность писать скрипты на языке Python; простой графический интерфейс; графический интерфейс, основанный на Eclipse; соединения с отладчиками, такими как Wind River Workbench по протоколам WDB и gdb-serial. Эти интерфейсы позволяют пользователям управлять целевой системой и отлаживать ПО, исполняющееся на ней, не внося изменений в работу целевого ПО.

Расширяемость

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

Любой пользователь Simics (с доступными ему соответствующими продуктами) может расширять функциональность симулятора своими собственными модулями, например, модулями для сбора трасс, модулями для внесения неисправностей [ориг. fault-injection], для соединения с её/его любимым малоизвестным отладчиком, модулями удалённого контроля, и даже своими собственными графическими интерфейсами.

Дальнейшее чтение

Эта статья из блога смогла только поверхностно описать то, что может делать Simics и как он работает. При наличии желания можно ознакомиться с доступными техническими описаниями отдельных аспектов работы Simics [ссылка в оригинале нерабочая, кое-что можно почитать здесь и здесь, а также в выпуске журнала Intel Technology Journal, посвящённом симулятору Simics и его использованию Интеле].

Доступно также моё ESC 2008 занятие, посвящённое симуляции встроенных систем и которое даёт более глубокое абстрактное введение в предмет симуляции.

[Бонус: интервью с инженерами Intel, использующими симулятор Simics.]

ссылка на оригинал статьи https://habrahabr.ru/post/280838/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *