Аннотация. В работе представлены два подхода к реализации полносистемного детерминированного воспроизведения в симуляторе QEMU, которые отличаются тем, какие компоненты виртуальной машины включаются в воспроизведение. Оба предложенных подхода позволяют воспроизводить выполнение гостевой ОС и прикладных программ без модификации их кода. Они не предполагают никаких ограничений на аппаратное окружение виртуальной машины. В частности, поддерживаются устройства, использующие в своей работе DMA. Оцениваются достоинства и недостатки этих подходов, оценивается уровень накладных расходов при записи журнала невоспроизводимых событий.Ключевые слова: QEMU, детерминированное воспроизведение, программный симулятор
ВведениеЗа последнее десятилетие виртуальные машины получили широкое распространение среди пользователей, как Linux, так и Windows. Основным сценарием использования можно считать развертывание виртуальной платформы (virtual appliance) на которой устанавливается некоторое ПО, требующее определенное окружение, отличное от имеющегося на физической машине, либо намеренная изоляция установленного ПО от внешнего мира. Массовое использование виртуальных машин началось благодаря тому, что их производительность достигла достаточно высокого уровня. Такие техники, как бинарная трансляция и аппаратная виртуализация, позволяют получать накладные расходы в пределах нескольких десятков процентов. Помимо того, развитый графический интерфейс и устойчивость работы бесплатных виртуальных машин (VMware Player [1], Virtual Box [2], QEMU [3, 4]) значительно упростили их эксплуатацию, рядовой пользователь имеет возможность начать эксплуатировать машину без длительного предварительного обучения, непосредственно после скачивания дистрибутива с сайта разработчика.
78Но виртуальные машины вошли не только в обиход обычных пользователей, но и самих разработчиков. Отладка ядерного кода еще в начале нулевых годов начала мигрировать с обычных программных отладчиков, использующих возможности уровня ОС и аппаратуры, на отладчики, работающие с виртуальными машинами. Такой подход к отладке необходим для поиска и устранения сложных ошибок, проявление которых зависит, в том числе и от влияния отладчика на изучаемую систему. В этом случае связка отладчик/виртуальная машина успешно применяется для отладки Гейзенбагов, ошибок в драйверах устройств, межпроцессном и межтредовом взаимодействии, отладки ПО при кроссплатформенной разработке. Последнее становится все более актуальным, поскольку последние годы стремительно растет рынок мобильных устройств. Ведущие производители предлагают разработчикам набор программных инструментов, в состав которых обязательно входит виртуальная машина, используемая для отладки. Еще одним востребованным сценарием использования виртуальных машин является расследование инцидентов нарушения информационной безопасности и криминалистическая экспертиза. Широкое распространение информационных технологий привело к необходимости соблюдения определенных политик информационной безопасности при работе с персональными данными и секретной ин...