Симуляторы — тренд онлайн образования. Как сделать обучение специалистов эффективнее и кому это нужно?
Даже самый умный выпускник вуза или дистанционных курсов, получивший диплом с отличием, редко когда полностью готов к работе. Свыше 90% работодателей говорят о нехватке практических знаний у выпускников. Первые месяцы человек будет совершать ошибки и учиться применять багаж знаний и навыков на практике.
В некоторых профессиях, где специалист отвечает за здоровье других (например, в медицине), это критично. В других — ошибки новичка просто стоят работодателю части прибыли. Помочь сократить «адаптационный» период в новой профессии или даже на новом месте способны симуляторы, которые постепенно внедряют в образование за рубежом.
Как они помогают человеку, как их использовать в онлайн-образовании и как выглядит такой продукт изнутри, рассказывают создатели проекта soft skills InMind Анастасия Батхина и Владислав Баймурзин.
Настя и Влад познакомились в сообществе Heg.ai — у Насти была идея создания образовательного проекта, которая откликнулась Владу. Они ее продумали, разработали и начали развивать свой проект.
Одна из проблем образования, особенно профессионального — избыток теоретических знаний и нехватка практических. Даже при очном обучении в малых группах, где люди имеют возможность попробовать решить те или иные задачи на практике, отработки материала не хватает.
С онлайн-образованием ситуация обстоит еще хуже. Условный разработчик изучает теорию, получает диплом, а потом приходит в компанию, садится писать код и ничего не получается, потому что было недостаточно отработки.
На Западе есть успешные стартапы, которые разрабатывают симуляторы для подготовки специалистов сложных профессий: например, врачей. Проект такого типа — Medical Realities, где в режиме виртуальной реальности можно получить опыт проведения хирургической операции, или Korbit AI, который в таком же формате выстраивает индивидуальный путь обучения.
То есть подобные симуляторы предназначены для специалистов, которым нужно многократно отработать практические навыки, прежде чем получить допуск к реальным клиентам из-за высокой стоимости ошибки.
Мы делаем то же самое, но для широкой аудитории: снижаем процент ошибок у специалистов разных областей. Пока охвачены не все направления, но фактически симуляторы можно создавать для любых профессий — от разработчиков и аналитиков системы безопасности до мерчендайзеров и маркетологов.
Похожую идею реализует стартап BSGames, предлагающий интерактивные командные тренажеры для повышения вовлеченности сотрудников и платформы для тимблдинга, которые позволяют выстраивать совместную работу. Кроме того, в этих симуляторах новые сотрудники компании получают базовые знания менеджмента и экономики. А Simformer родился на базе онлайн-игры и предлагает целый набор разных бизнес-симуляций, которые используются крупными компаниями вроде Procter & Gamble — через Simformer здесь отбирают стажеров.
Симуляторы преимущественно нужны людям, у которых много знаний, но их сложно применять в реальной жизни
Например, человек планирует запустить рекламную кампанию на ФБ или заняться биржевыми операциями с ценными бумагами. У него есть теория, но на практике он рискует потерять не только время, но и деньги, потому что еще не пробовал это делать. Для начала лучше потренироваться на симуляторе маркетолога или инвестора с виртуальными деньгами, разобраться, как это работает и столкнуться с ситуациями, которые были специально собраны и сформированы авторами так, чтобы человек научился их видеть и применять в реальной жизни.
Также человек с помощью симулятора может тренировать стрессоустойчивость и «правильные» реакции
Например, сотрудник технической поддержки. Неподготовленный человек, столкнувшийся с клиентами и их потоком негатива, теряется, не понимает, что ему делать, тоже раздражается в ответ и заваливает работу. Если он потренировался предварительно с виртуальными клиентами, он бы знал уже типовые запросы, жалобы. Подготовился к возможным конфликтам, знал, как наиболее эффективно действовать в каждом конкретном случае. И таких примеров множество, потому что симуляторы универсальны и всегда работают как тренировка опыта.
Чтобы создать по-настоящему работающий симулятор, нужно пройти через несколько этапов и подключить разных специалистов:
Нужно досконально изучить тот путь в реальности, который предстоит пройти человеку в симуляторе. Например, мы учим project менеджера, соответственно, мы должны оцифровать весь тот путь, который начинающий project проходит в компании, собрать все кейсы и проблемных персонажей, с которыми он сталкивается.
В разработке симулятора мы сначала мы концентрировались на soft skills: на том, что связано с коммуникациями. Поэтому размышляя, что может служить симуляцией для развития таких soft skills, быстро поняли — имитация взаимодействия с другим человеком. Значит, нам требовалось создавать виртуальных персонажей: клиентов, коллег, с которыми пользователь контактирует в диалоговом формате в имитированных реальных ситуациях. Сейчас мы создаем симуляторы и по прикладным и профессиональным темам.
Он создает сеттинг истории, прописывает характеры персонажей и сюжетные повороты. Хороший симулятор имеет такую же логику повествования, как книга или фильм: в нем есть конфликты, нарастающее напряжение и победы над «монстрами» в виде ошибок пользователя или самых сложных заданий.
Для сценариев мы акцентировались на кейсах, через которые проходит условный сотрудник компании регулярно. Например, приходит клиент с жалобой, которая требует срочной реакции, решения возникшей проблемы. В зависимости от ответа обучающегося ситуация поворачивается в одну или другую сторону.
Или симулятор в курсе для разработчиков: пользователь начинает первый рабочий день на новом месте. Его приветствует тимлид, поздравляет с успешным прохождением собеседования и дает первую задачу — запустить конкретный компьютерный код и убедиться, что все нормально работает. Если не работает — исправить ошибки. Дальше появляется ссылка на нужный код, человек выполняет с ним конкретные действия и отправляет на проверку.
На данном этапе над симулятором работают эксперт и методист. Методист помогает упаковать опыт эксперта в соответствии с педагогическим дизайном и целями обучения, прописывает задания, последовательность их выполнения, обратную связь. Проработанная методология важна не меньше, чем интересный сценарий.
Красиво оформляем контент, делаем видео или анимацию, рисуем персонажей и загружаем на платформу.
Завершающий этап, на котором собирается фокус-группа, которая дает развернутую обратную связь по ходу прохождения. В некоторых проектах, кстати, уже есть отдельная позиция тестировщика образовательного контента.
Сначала мы предлагали продукт в мессенджерах, но сейчас создаем полноценную платформу, для которой разрабатываем учебные курсы в формате симуляторов. Они работают по сценарию с деревом решений: определенной логикой действий. Каждый следующий шаг зависит от предыдущего выбора пользователя.
Все сценарии прописаны лично нами, но с использованием информации от клиентов. Одни нам дают полноценные кейсы, актуальные для конкретной компании, другие — идею, изложенную в презентациях, видео, текстовых файлах. В таком случае приходится придумать игровую ситуацию самостоятельно.
В процессе создания сценария необходимо придерживаться основных методологических принципов:
И понимать, что хотим получить в итоге.
Мы всегда начинаем с предполагаемых результатов. Раскладываем курс на микронавыки, которым должен обучиться человек и под каждый делаем один урок или серию. И отталкиваясь от этого, начинаем разрабатывать сценарий, прописывать задания, формировать кейсы. Задача интересная, творческая и не самая простая, но наработанный годами опыт помогает.
Чтобы запустить сценарий, необходим методист, дизайнер и разработчик — последний заливает скрипт на платформу
Но в будущем мы надеемся обходиться без третьего звена: когда разработаем конструктор, который позволит в режиме no-code формировать сценарии. Тогда задачей сможет заняться человек без технического бэкграунда и это сильно ускорит все процессы. Пока же запуск каждого сценария занимает несколько недель. Точные сроки зависят от его размеров, продолжительности обучения, количества контента и срочности заказа. Например, тренинг по продукту для сети салонов красоты мы создали за 5 дней.
Ускорить это мы планируем также за счет изменения архитектуры платформы и увеличения количества сценариев в портфеле. Сейчас у нас около семи программ по разным темам. А когда их накопится больше, скорее всего, появятся какие-то более или менее универсальные шаблоны, которые удастся эффективно масштабировать.
Стоимость использования симулятора для клиента зависит от сложности разрабатываемого курса, его продолжительности, количества предложенных в нем кейсов и от сегмента аудитории (частный/корпоративный).
Например, b2b или b2c-курсы для разработчиков, продакт-менеджеров и сейлзов, по предварительным оценкам, обойдутся уже в 20-30 тысяч рублей — собрано большое количество кейсов, проделана огромная подготовительная работа с экспертами и создан сценарий, а также кастомные доработки под саму платформу относительно конкретного курса. Но случаются и более дорогие разработки.
А b2c-курс по конфликтам и коммуникациям в команде стоит всего 3-5 тысяч рублей, потому что несложный (относится к микрокурсам) и отрабатывает небольшой набор soft-skills. Мы начинали как b2b проект, работали с компаниями Стокманн, Альфабанк, Центробанк и другими, но сейчас активно планируем выходить в b2c сегмент. Уже есть пайп-лайн курсов и экспертов, с которыми мы запускаем подобные курсы.
На фоне стремительного роста спроса на индивидуальное обучение направление выглядит актуальным и перспективным, привлекает большие инвестиции. Как показывает опыт зарубежных стартапов, аудитория вокруг таких курсов растет и готова вкладывать средства, потому что получает более высокую отдачу, чем на обычных видеокурсах.
В образовательных проектах есть две ключевых метрики — это доходимость пользователей до конца курса и их удовлетворенность (NPS). У нас первый показатель достигает 70-80%, а второй — 90% и это отличные результаты. Уровень доходимости у симулятора в несколько раз выше, чем у традиционных онлайн-курсов (обычно это 15-20%). Кроме того, мы получаем хороший фидбек от сотрудников: они регулярно сообщают, что применяют в реальности полученные на симуляторе навыки. Значит, продукт действительно работает.
В дальнейшем мы намерены отслеживать и влияние симуляторов на бизнес-показатели у корпоративных клиентов. Сбор и анализ таких данных для крупных компаний — довольно долгий и трудный процесс, но оценки уже поступают. Мы видим, что методика работает и дает очень хорошие и быстрые результаты.
Также в наших планах разработка полностью адаптивного обучения: когда человек получает только нужные ему знания и двигается по индивидуальной программе в рамках своего профессионального вектора развития.
Например, условный разработчик IT-продукта при помощи симулятора развивает 2-3 навыка, которых не хватает именно ему, а не все навыки, которые есть в целом курсе. Для этого нужно набрать много микрокурсов по разнообразным навыкам. После этого мы сможем предлагать адаптивное обучение для каждого клиента, исходя из его профессии, имеющихся пробелов в знаниях или нехватки опыта. Это повысит эффективность образования для клиента и позволит ему сэкономить время и деньги.
Вместе с этим мы надеемся на активный количественный рост как пользователей, так и продуктов, планируем проводить запуск нескольких новых курсов ежемесячно. Поскольку по нашим расчетам количество пользователей, которые предпочтут обучение и отработку навыков с помощью симуляторов, через 2-3 года в России может достичь десятков миллионов человек.
Медицинские симуляторы – будущее обучения врачей
В медицинской практике используются симуляторы для проведения операций хирургического характера. Обучение хирурга навыкам микрохирургии и владению медицинским симулятором – это основная задача ординатуры после окончания института. Практический опыт опасен тем, что операции проводятся на реальных пациентах. Уменьшить риск при обучении начинающих специалистов можно с помощью моделирования или имитации операционных действий. Обучение студенты проходят под руководством опытных специалистов в этой сфере. Индивидуальные занятия по обучению на тренажерах и симуляторах эффективнее, нежели групповые. Вылечивать клиническое обострение болезни или внезапно возникший приступ можно, обучившись на моделях медицинских симуляторов.
Иллюзия оперативного вмешательства в действительности способствует рассматривать неординарные и сложные медицинские случаи. В реальных случаях с пациентами играет роль опыт и практические навыки специалиста. После прохождения занятий на тренажерах и симуляторах, хирурги обретают большую уверенность, оперируя в повседневной жизни.
Преимущества обучения на медицинских симуляторах:
Приобрести медицинские симуляторы по приемлемым ценам возможно в ООО “Медтехника СПб“. Современные приборы могут имитировать реально сложившуюся ситуацию, а медицинские манекены выполняют все действия человека. Производителями задуманы встроенные функции в манекены: кашель, чихание, разговор и др.
Широкое применение симуляторы имеют в малоинвазивной хирургии. Врачи при помощи тонких трубок проникают через кожу внутрь и производят манипуляции. Разновидности симуляторов различают в зависимости от сферы деятельности, они бывают стоматологические, ортопедические, гинекологические и т. п. Имитирование медицинских инструментов способствует избежать медицинских ошибок в реальных операциях. При помощи тренажера будущий врач учится проводить сложные операции наравне с опытными специалистами. Компьютеризирование манекенов для симуляции оперативных вмешательств дало возможность поделывать до сотни операций ежедневно.
При приеме на работу клиники в редких случаях используют метод симуляторов в качестве проверки опытности специалиста. Проведение тренинга максимально приближенного к реальным хирургическим вмешательствам даст возможность улучшить наработки врачей. Конкретно заданная клиническая ситуация может быть усложнена второстепенными факторами, студент-практикант должен будет справиться с операцией. Медицинские симуляторы созданы в соответствии с разработанными стандартами и имеют сертифицированное подтверждение.
Симуляторы компьютерных систем – похожи ли на реальность
Простым и доступным языком про основные термины из области симуляторов, а также типы и уровни детализации моделей. Материал для легкого и быстрого знакомства с данным направлением.

Если бы меня спросили про симуляцию некоторое время назад, то первое, что пришло бы в голову – это мой сын, рассказывающий о своем больном животе накануне контрольной в школе. Однако последние десять лет я работаю с симуляторами различных компьютерных систем, от телефонов до серверов, основанных на микропроцессорах, SOC-ах (System-On-Chip) и чипсетах одного из крупнейших производителей (к сожалению, название под NDA), и мое представление о симуляции поменялось. Но обо всем по порядку.
Я уверен, что многие из вас сталкивались с симуляторами, которые часто называют виртуальными машинами, гипервизорами. Кто-то устанавливает Parallels Studio себе на Mac, чтобы запускать Windows из MacOS, кто-то пользуется продуктом от VmWare – Workstation, чтобы иметь еще одну операционную систему (ОС), запущенную внутри уже установленной. Те, кто знаком с Linux, предпочитают KVM и QEMU. Также популярен в народе VirtualBox. Люди, профессионально занимающиеся разработкой аппаратуры на базе ПЛИС (Программируемая Логическая Интегральная Схема), знают про VCS от Synopsys и Mentor Graphics Questa. И все же это лишь небольшая часть того, что можно называть симуляторами.
Что такое симулятор?
Симулятором называют модель, как правило, программную, реального устройства. Соответственно, симуляция – это процесс работы такой модели, повторяющий работу устройства.
В принципе, можно сделать модель любого устройства, но наиболее распространенными являются симуляторы микропроцессорных устройств, то есть устройств, центральным компонентом которых является микропроцессор, и вокруг него уже строится остальная логика. Один из основных вариантов использования симулятора – это запуск программ, предназначенных для этого самого микропроцессора. При этом использование реального устройства по тем или иным причинам затруднительно, например, его может просто еще не существовать, если речь идет о моделировании будущего поколения микропроцессоров.
Airbnb в симуляции – гость и хост
Код, запускаемый внутри симулятора, называют «гостевым кодом», это может быть «гостевая программа» или целая «гостевая операционная система». Сама симулируемая система называется просто «гость». В свою очередь, система, компьютер, где запускается симулятор, называется «хостом» (англ. host), а операционная система, работающая на хосте, в которой запускается симулятор, называется «хостовой ОС».
Таким образом, можно сказать, что симулятор, реализующий определенный набор инструкций гостевой системы, моделирует их, используя имеющиеся в наличии средства хостовой системы.
Симуляция и эмуляция – какое название правильное?
Модель может повторять устройство с разной степенью точности и детализации. Часто это симуляция только внешнего поведения системы, доступного программному коду. Коду ведь «все равно», как именно внутри реализована та или иная инструкция процессора, – главное, чтобы работало. Такой вариант симуляции распространен, не сложен в разработке и довольно быстрый, не тормозит даже на обычных пользовательских компьютерах.
Однако этого недостаточно, если мы хотим узнать, например, сколько времени будет выполняться программа на реальной аппаратуре. Для этого необходимо моделирование не только внешнего поведения, но и повторение внутренней структуры и логики работы. Это тоже может быть выполнено с разной степенью детализации и точности. Такие модели правильнее называть эмуляторами, которые действительно эмулируют устройство, а не «симулируют» результаты.
Создание эмуляторов гораздо сложнее из-за большего объема функциональности, которую необходимо реализовывать в модели. Также они функционируют намного медленнее по сравнению с симуляторами внешнего поведения устройства. С эмуляторами речь вообще не идет о запуске Windows – это может занять годы. Никто не занимается созданием программного эмулятора целиком всей платформы – это очень долго и дорого. Вместо этого эмулируются отдельные компоненты системы, такие как тот же центральный процессор, и на нем запускается лишь часть симуляционного процесса. Возможны различные гибридные схемы, когда часть симулятора является верхнеуровневой моделью, часть низкоуровневой, часть в ПЛИС, а часть вообще реальная железка.
4 уровня детализации симуляции
Как я написал выше, наиболее распространенным является вариант симуляции на уровне инструкций процессора, так называемый ISA (Instruction Set Architecture), или, точнее, результата их выполнения, т.е. без эмуляции всей внутренней логики того, как это происходит в реальном процессоре, и без учета времени выполнения различных инструкций. Именно такие симуляторы называют еще функциональными. Так работают VirtualBox, Vmware Workstation, Wind River Simics, KVM и QEMU. Это позволяет удобно, без лишних дополнительных действий запускать программы, предназначенные для симулируемого устройства. Другими словами, не требуется ни перекомпиляция, ни какие-либо другие манипуляции с запускаемыми программами. В таких случаях говорят, что возможен запуск немодифицированного бинарного кода.
Если говорить про более высокий уровень абстракции, то это будет реализация определенного ABI (Application Binary Interface). В двух словах, ABI описывает бинарный интерфейс взаимодействия двух программ – как правило, пользовательской программы и библиотеки или ОС. ABI покрывает соглашения о вызовах (как передавать параметры и возвращать значения), размеры типов данных, выполнение системных вызовов. Как это работает? Например, если программе, написанной для Linux, необходимо создать дополнительный тред (от англ. thread – нить) выполнения, то вызывается функция pthread_create(). А что, если сделать библиотеку с такой функцией в Windows и реализовать необходимые механизмы связывания приложения и библиотеки (динамической линковки)? В таком случае можно будет запускать Linux приложения из Windows. Windows будет «симулировать» Linux. Именно это и было сделано в Windows subsystem for Linux в Windows 10, что позволяет запускать немодифицированные бинарные Linux приложения в Windows.
Теперь посмотрим, как выглядят более низкоуровневые и детальные уровни симуляции. Это будет уровень микроархитектуры, при котором симулируются реальные внутренние алгоритмы и блоки процессора, такие как декодер инструкций, очереди, блок внеочередной обработки, предсказатель переходов, кэш, планировщик и сами счетные устройства. Такое моделирование позволяет анализировать реальную скорость выполнения программ и, например, оптимизировать их под уже имеющиеся архитектуры. А в случае симуляции прототипов будущих микропроцессоров возможны предсказание и оценка производительности этих устройств.
Ниже уровня микроархитектурной симуляции идет уровень эмуляции логических элементов, из которых и состоят современные чипы. Такие эмуляторы бывают и программными, и аппаратными с использованием ПЛИС. Логика ПЛИС описывается с помощью RTL (Register Transfer Level) на языках Verilog, VHDL и др. После компиляции получается образ (bitstream), который потом прошивается в ПЛИС. Причем для этого необязательно пользоваться паяльником и разбираться в электротехнике. Плата подсоединяется к компьютеру, например, по USB или JTAG интерфейсу, а специальный софт от производителя ПЛИС платы выполняет запись. Стоимость таких плат начинается от десяти долларов за простейшие варианты до миллионов долларов для больших ПЛИС стендов размером со шкаф, используемых в крупных компаниях-производителях чипов. В таких компаниях симуляция с использованием ПЛИС является финальной стадией перед отдачей RTL в производство.
Если речь идет о несложных устройствах, то, имея на руках образ ПЛИС, можно обратиться в специализированные компании, которые сделают настоящее (не ПЛИС) устройство с запрограммированной логикой.
На рисунке ниже показаны описанные уровни симуляции.
Кроме этих уровней моделирования, мне также приходилось сталкиваться с гибридными симуляторами. По сути, они представляют собой соединенные друг с другом симуляторы, моделирующие на разных уровнях разные части системы. Например, необходим анализ пропускной способности новой сетевой карты, работающей вместе с разрабатываемым драйвером для определенной ОС. Такое сетевое устройство, а также ряд смежных устройств, могут быть реализованы сначала на микроархитектурном уровне для предварительного анализа, а потом и в ПЛИС, на уровне логических элементов, для финальных проверок. При этом остальная часть системы, задействованная лишь частично, реализуется на уровне инструкций. Обойтись без нее нельзя, так как она необходима, например, для загрузки ОС, а реализовывать ее на более низком и сложном уровне не имеет смысла.
Так что же на счет сравнения симуляторов и реальности?
Как теперь понятно, нет задачи сделать тот или иной симулятор максимально похожим на реальность. Есть задача, которую ставит бизнес, и симуляция выполняется со той степенью “похожести” на реальность, который является минимально достаточным для решения этой задачи, не тратя при этом лишних денег и времени. В одном случае это может быть простая библиотека, реализующая необходимый бинарный интерфейс (ABI), а в другом не обойтись без детального микроархитектурного симулятора.
Это самая базовая информация о том, что такое симуляторы и какие они бывают. В следующей статье я опишу детали реализации полноплатформенных симуляторов, потактовых моделей и работу с трассами.
Симуляторы компьютерных систем: всем знакомый полноплатформенный симулятор и никому неизвестные потактовый и трассы
Во второй части статьи о симуляторах компьютерных систем продолжу рассказывать в простой ознакомительной форме о компьютерных симуляторах, а именно о полноплатформенной симуляции, с которой чаще всего сталкивается обычный пользователь, а также о потактовой модели и трассах, которые больше распространены в кругах разработчиков.

В первой части я рассказал, что такое симуляторы вообще, а также об уровнях моделирования. Теперь на основе тех знаний предлагаю нырнуть чуть поглубже и поговорить о полноплатформенной симуляции, о том, как собрать трассы, что с ними потом делать, а также о потактовой микроархитектурной эмуляции.
Полноплатформенный симулятор (full platform simulator), или “Один в поле — не воин”
Если требуется исследовать работу одного конкретного устройства, например, сетевой карты, или написать для этого устройства прошивку или драйвер, то такое устройство можно смоделировать отдельно. Однако использовать его в отрыве от остальной инфраструктуры не очень удобно. Для запуска соответствующего драйвера потребуется центральный процессор, память, доступ к шине для передачи данных и прочее. Кроме того, для работы драйвера необходимы операционная система (ОС) и сетевой стек. В дополнение к этому может потребоваться отдельный генератор пакетов и сервер приема ответов.
Полноплатформенный симулятор создает окружение для запуска полного софтверного стека, который включает в себя все, начиная с BIOS и загрузчика и заканчивая самой ОС и различными ее подсистемами, такими как тот же сетевой стек, драйверами, приложениями пользовательского уровня. Для этого в нем реализованы программные модели большинства устройств компьютера: процессор и память, диск, устройства ввода-вывода (клавиатура, мышь, дисплей), а также та самая сетевая карта.
Ниже приведена блок-диаграмма чипсета x58 от компании Intel. В полноплатформенном симуляторе компьютера на этом чипсете необходима реализация большинства перечисленных устройств, в том числе и тех, что находятся внутри IOH (Input/Output Hub) и ICH (Input/Output Controller Hub), не нарисованных детально на блок-диаграмме. Хотя, как показывает практика, не так уж мало устройств, которые не используются тем ПО, которое мы собираемся запускать. Модели таких устройств можно не создавать.
Чаще всего полноплатформенные симуляторы реализуются на уровне инструкций процессора (ISA, см. предыдущую статью). Это позволяет относительно быстро и недорого создать сам симулятор. Уровень ISA также хорош тем, что остается более или менее постоянным, в отличие от, например, уровня API/ABI, который меняется чаще. К тому же, реализация на уровне инструкций позволяет запускать так называемое немодифицированное бинарное ПО, то есть запускать уже скомпилированный код без каких-либо изменений, ровно в том виде как он используется на реальном железе. Другими словами, можно сделать копию («дамп») жесткого диска, указать его в качестве образа для модели в полноплатформенном симуляторе и – вуаля! – ОС и остальные программы загружаются в симуляторе без всяких дополнительных действий.
Производительность симуляторов
Как было упомянуто чуть выше, сам процесс симуляции всей системы целиком, то есть всех ее устройств, довольно небыстрое мероприятие. Если еще и реализовать все это на совсем детальном уровне, например, микроархитектурном или логическом, то выполнение станет экстремально медленным. А вот уровень инструкций является подходящим выбором и позволяет ОС и программам выполняться на скоростях, достаточных пользователю для комфортного взаимодействия с ними.
Здесь как раз уместно будет коснуться темы производительности симуляторов. Обычно ее измеряют в IPS (instructions per second), точнее в MIPS (millions IPS), то есть количестве инструкций процессора, выполняемых симулятором за одну секунду. В то же время скорость симуляции зависит и от производительности системы, на которой работает сама симуляция. Поэтому, возможно, правильнее говорить о «замедлении» (slowdown) симулятора по сравнению с оригинальной системой.
Наиболее распространенные на рынке полноплатформенные симуляторы, те же QEMU, VirtualBox или VmWare Workstation, имеют неплохую производительность. Для пользователя может быть даже не заметно, что работа идет в симуляторе. Так происходит благодаря реализованной в процессорах специальной возможности виртуализации, алгоритмам бинарной трансляции и другим интересным вещам. Это все тема для отдельной статьи, но если совсем коротко, то виртуализация – это аппаратная возможность современных процессоров, позволяющая симуляторам не симулировать инструкции, а отдавать на исполнение напрямую в реальный процессор, если, конечно, архитектуры симулятора и процессора похожи. Бинарная трансляция – это перевод гостевого машинного кода в хостовый и последующее исполнение на реальном процессоре. В результате симуляция лишь ненамного медленнее, раз в 5-10, а часто вообще работает с той же скоростью, что и реальная система. Хотя на это влияет очень много факторов. Например, если мы хотим симулировать систему с несколькими десятками процессоров, то скорость тут же упадет в эти несколько десятков раз. С другой стороны, симуляторы типа Simics в последних версиях поддерживают многопроцессорное хостовое «железо» и эффективно распараллеливают симулируемые ядра на ядра реального процессора.
Если говорить про скорость микроархитектурной симуляции, то это обычно на несколько порядков, примерно в 1000-10000 раз, медленнее выполнения на обычном компьютере, без симуляции. А реализации на уровне логических элементов медленнее еще на несколько порядков. Поэтому в качестве эмулятора на этом уровне используют FPGA, что позволяет существенно увеличить производительность.
График ниже показывает примерную зависимость скорости симуляции от детализации модели.
Потактовая симуляция
Несмотря на невысокую скорость выполнения, микроархитектурные симуляторы довольно распространены. Моделирование внутренних блоков процессора необходимо для того, чтобы точно симулировать время выполнения каждой инструкции. Здесь может возникнуть непонимание – ведь, казалось бы, почему просто не взять и запрограммировать время выполнения для каждой инструкции. Но такой симулятор будет работать очень неточно, поскольку время выполнения одной и той же инструкции может отличаться от вызова к вызову.
Простейший пример – инструкция доступа в память. Если запрашиваемая ячейка памяти доступна в кэше, то время выполнения будет минимально. Если в кэше данной информации нет («промах кэша», cache miss), то это сильно увеличит время выполнения инструкции. Таким образом, для точной симуляции необходима модель кэша. Однако моделью кэша дело не ограничивается. Процессор не будет просто ждать получения данных из памяти при ее отсутствии в кэше. Вместо этого он начнет выполнять следующие инструкции, выбирая такие, которые не зависят от результата чтения из памяти. Это так называемое выполнение «не по порядку» (OOO, out of order execution), необходимое для минимизации времени простоя процессора. Учесть все это при расчете времени выполнения инструкций поможет моделирование соответствующих блоков процессора. Среди этих инструкций, выполняемых, пока ожидается результат чтения из памяти, может встретится операция условного перехода. Если результат выполнения условия неизвестен на данный момент, то опять-таки процессор не останавливает выполнение, а делает «предположение», выполняет соответствующий переход и продолжает превентивно выполнять инструкции с места перехода. Такой блок, называемый branch predictor, также должен быть реализован в микроархитектурном симуляторе.
Картинка ниже показывает основные блоки процессора, ее знать необязательно, она приведена лишь для того, чтобы показать сложность микроархитектурной реализации.
Работа всех этих блоков в реальном процессоре синхронизуется специальными тактовыми сигналами, аналогично происходит и в модели. Такой микроархитектурный симулятор называют потактовым (cycle accurate). Основное его назначение – точно спрогнозировать производительность разрабатываемого процессора и/или рассчитать время выполнения определенной программы, например, какого-либо бенчмарка. Если значения будут ниже необходимых, то потребуется дорабатывать алгоритмы и блоки процессора или оптимизировать программу.
Как было показано выше, потактовая симуляция очень медленная, поэтому ее используют только при исследовании определенных моментов работы программы, где необходимо узнать реальную скорость выполнения программ и оценить будущую производительность устройства, прототип которого моделируется.
При этом для симуляции остального времени работы программы используется функциональный симулятор. Как такое комбинированное использование происходит в реальности? Сначала запускается функциональный симулятор, на котором загружается ОС и все необходимое для запуска исследуемой программы. Ведь нас не интересует ни сама ОС, ни начальные стадии запуска программы, ее конфигурирование и прочее. Однако и пропустить эти части и сразу перейти к выполнению программы с середины мы тоже не можем. Поэтому все эти предварительные этапы прогоняются на функциональном симуляторе. После того, как программа исполнилась до интересующего нас момента, возможно два варианта. Можно заменить модель на потактовую и продолжить выполнение. Режим симуляции, при котором используется исполняемый код (т.е. обычные скомпилированные файлы программ), называют симуляцией по исполнению (execution driven simulation). Это самый распространенный вариант симуляции. Возможен также и другой подход – симуляция на основе трасс (trace driven simulation).
Симуляция на основе трасс
Она состоит из двух шагов. С помощью функционального симулятора или на реальной системе собирается и записывается в файл лог действий программы. Такой лог называется трассой (trace). В зависимости от того, что исследуется, трасса может включать исполняемые инструкции, адреса памяти, номера портов, информацию по прерываниям.
Следующий шаг – это «проигрывание» трассы, когда потактовый симулятор читает трассу и выполняет все инструкции, записанные в ней. В конце получаем время выполнения данного куска программы, а также различные характеристики этого процесса, например, процент попадания в кэш.
Важной особенностью работы с трассами является детерминированность, то есть, запуская симуляцию описанным выше образом, раз за разом мы воспроизводим одинаковую последовательность действий. Это дает возможность, изменяя параметры модели (размеры кэша, буферов и очередей) и используя разные внутренние алгоритмы или настраивая их, исследовать, как тот или иной параметр влияет на производительность системы и какой вариант дает наилучшие результаты. Все это можно проделать с моделью прототипа устройства до создания реального аппаратного прототипа.
Сложность данного подхода заключается в необходимости предварительного прогона приложения и сбора трассы, а также огромный размер файла с трассой. К плюсам можно отнести то, что достаточно смоделировать лишь интересующую часть устройства или платформы, в то время как симуляция по исполнению требует, как правило, полной модели.
Итак, в этой статье мы рассмотрели особенности полноплатформенной симуляции, поговорили про скорость реализаций на разных уровнях, потактовую симуляцию и трассы. В следующей статье я опишу основные сценарии использования симуляторов, как в личных целях, так и с точки зрения разработки в больших компаниях.






