научная статья по теме ФОНОВАЯ ОПТИМИЗАЦИЯ В СИСТЕМЕ ДИНАМИЧЕСКОЙ ДВОИЧНОЙ ТРАНСЛЯЦИИ Математика

Текст научной статьи на тему «ФОНОВАЯ ОПТИМИЗАЦИЯ В СИСТЕМЕ ДИНАМИЧЕСКОЙ ДВОИЧНОЙ ТРАНСЛЯЦИИ»

ЯЗЫКИ И СИСТЕМЫ ПРОГРАММИРОВАНИЯ

УДК 681.3.06

ФОНОВАЯ ОПТИМИЗАЦИЯ В СИСТЕМЕ ДИНАМИЧЕСКОЙ

ДВОИЧНОЙ ТРАНСЛЯЦИИ

© 2012 г. Р.А. Соколов*, А.В. Ермолович**

*ЗАО МЦСТ, 105066 Москва, ул. Красносельская Нижняя, дом 35, корп. 50 **ЗАО Интел А/О, 121614 Москва, ул. Крылатская, дом 17 E-mail: roman.a.sokolov@gmail.com, karbo@pvk13.org Поступила в редакцию 30.11.2011

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

Технологии программной двоичной трансляции и динамической оптимизации широко применяются в современных программных и аппаратных вычислительных системах [1]. В частности, основанные на этих технологиях системы динамической двоичной трансляции (СДДТ) активно используются для обеспечения совместимости распространенных традиционных (исходных) и вновь разрабатываемых перспективных (целевых) архитектур микропроцессоров на уровне исполняемых программных кодов.

1. ВВЕДЕНИЕ

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

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

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

Во-вторых, работа оптимизирующего транслятора может отрицательно сказываться на латентности транслируемого интерактивного приложения или операционной системы в целом. Под латентностью здесь понимается время отклика системы на какие-либо внешние события (в частности, аппаратные прерывания), вызванные подключенными к системе устройствами ввода/вывода. Ла-тентность вычислительной системы как ее способность оперативно реагировать на внешние события является не менее важным свойством, с точки зрения пользователя, подключенного к компьютеру оборудования или другого компьютера, подключенного по сети, чем общая производительность. Этот параметр особенно важен для СДДТ уровня виртуальной машины (ВМ). Такие системы реализуют семантику исходной архитектуры в полном объеме и предназначены для трансляции всей иерархии программного обеспечения вычислительного комплекса - BIOS, операционной системы, приложений, и, как следствие, контролируют всю работу вычислительного комплекса, фактически являясь частью микропроцессора.

Один из способов снижения издержек, связанных с динамической оптимизацией, заключается в том, чтобы выполнять ее одновременно с исполнением исходных кодов,

используя для этого не занятые вычислительные ресурсы системы. Он находит применение в системах динамической трансляции и оптимизации различного назначения [2, 8]. В рамках данной работы мы будем называть этот подход фоновой оптимизацией (в отличие от последовательной оптимизации, когда исполнение прерывается до конца оптимизации).

Непосредственными результатами данной работы являются:

• реализация многопоточной инфраструктуры в системе динамической двоичной трансляции уровня виртуальной машины;

• реализация фоновой оптимизации в однопроцессорной системе посредством разделения процессорного времени между потоками исполнения двоично-транслируемых кодов и оптимизирующей трансляции;

• реализация фоновой оптимизации в двухпроцессорной системе посредством выноса оптимизирующей трансляции на свободное микропроцессорное ядро.

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

Представленные в работе схемы фоновой оптимизации были реализованы в СДДТ уровня виртуальной машины Lintel, обеспечивающей полную двоичную совместимость микропроцессора архитектуры Эльбрус [9, 10] с архитектурой Intel IA-32.

1 Однако, как будет показано далее, производительность двоичной трансляции при этом снижается.

2. LINTEL

В основе микропроцессорной архитектуры Эльбрус лежит принцип широкого командного слова VLIW (Very Long Instruction Word). Кроме этого, она имеет ряд других особенностей, в частности, аппаратную поддержку для обеспечения полной совместимости с архитектурой IA-32 посредством прозрачной динамической двоичной трансляции.

СДДТ LIntel предназначена для эмуляции поведения машины на базе процессора Intel архитектуры IA-32 полностью совместимым и высокопроизводительным способом за счет трансляции исходных инструкций архитектуры Intel IA-32 в широкие команды архитектуры Эльбрус. При этом архитектура процессора Эльбрус двоично-несовместима с исходной платформой IA-32. LIntel обеспечивает функциональность уровня виртуальной машины, выполняя трансляцию всей иерархии программного обеспечения от BIOS до операционной системы и пользовательских приложений "прозрачно" для конечного пользователя (рис. 1). Одной из основных особенностей системы LIntel является то, что она использует в своей работе заложенные в микропроцессоре Эльбрус механизмы аппаратной поддержки эффективной двоичной трансляции и оптимизации.

По своей структуре она аналогична другим описанным в литературе системам двоичной трансляции [11, 13] и функционально наиболее близка системе Code Morphing Software компании Transmeta [14, 15]. Так же как и перед другими СДДТ, перед LIntel стоит задача эффективного разделения ресурсов целевой платформы между нуждами собственно СДДТ и исполняемыми двоично-транслированными кодами.

2.1. Адаптивная динамическая двоичная трансляция

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

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

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

Неоптимизирующий транслятор создает трассу - семантически точное отображение одного или нескольких последовательных линейных участков исходного кода, объединенных последовательным потоком управления, в коды целевой архитектуры. Трасса формируется из шаблонов - заранее подготовленных последовательностей широких команд архитектуры Эльбрус, реализующих соответствующие инструкции архитектуры 1А-32. После генерации кода трассы и подстановки актуальных

Для дальнейшего прочтения статьи необходимо приобрести полный текст. Статьи высылаются в формате PDF на указанную при оплате почту. Время доставки составляет менее 10 минут. Стоимость одной статьи — 150 рублей.

Показать целиком