Facebook анонсировал виртуальную машину HipHop и JIT-компилятор для языка PHP
12 декабря 2011 года
Компания Facebook открыла результаты работы группы, занимающейся экспериментами в области динамической трансляции кода на языке PHP в машинные инструкции. Разработка позиционируется как продолжение развития проекта HipHop, в рамках которого в прошлом году был разработан транслятор hphpc для преобразования PHP-скриптов в представление на языке C++, пригодное для дальнейшей компиляции при помощи g++ в машинные инструкции. В результате проведённой работы была создана виртуальная машина hhvm (HipHop Virtual Machine), которая за счет JIT-компиляции позволила обеспечить достойный уровень производительности при выполнении PHP-кода.
Hhvm позволяет выполнять практически любой PHP-код, используя в процессе JIT-компиляции динамические оптимизации, учитывающие особенности выполнения скрипта. Статическая компиляция при помощи hphpc вносила существенные ограничения на оформление кода и ограничивалась лишь статическими методами анализа при выработке плана оптимизации. При динамической трансляции в hhvm задействована возможность определения типов данных в процессе выполнения кода и генерации на лету более эффективных наборов машинных инструкций, оптимизированных специально для заданных типов.
Перед выполнением PHP-скрипты преобразуются, с задействованием наработок hphpc, в специальное промежуточное абстрактное представление AST (Abstract Syntax Tree), которое затем транслируется в байткод HHBC (HipHop bytecode), который в дальнейшем выполняется внутри высокоуровневой виртуальной машины. Виртуальная машина поддерживает два режима работы - интерпретация байткода и трансляция на лету в машинные инструкции x64. Оба режима могут бесшовно работать бок о бок, но в качестве перспективного направления развивается режим трансляции.
В настоящее время hhvm уже используется для обеспечения работы сервисов Facebook в качестве замены поддерживаемого силами компании высокопроизводительного PHP-интерпретатора hphpi, обеспечивая прирост производительности в среднем в 1.6 раз, при тестировании на реальных приложениях, используемых в Facebook. В дальнейшем планируется задействование hhvm для выполнения всего кода Facebook, написанного на языке PHP. Скорость работы режима трансляции hhvm приближается к производительности программ, скомпилированных при помощи hphpc (скорость режима интерпретации оценивается коэффициентом 0.2 от скорости скомпилированных программ, а режима трансляции - 0.6).
В настоящее время степень завершённости проекта оценивается в 90% Из планов на будущее отмечается определение формата для сохранения байткода на диске для сокращения времени запуска и сохранении накопленной в процессе выполнения статистики. Полностью стабилизировать работу динамической трансляции и довести уровень производительности до скомпилированных в hphpc программ планируется в течение нескольких месяцев. Код открыт под лицензией PHP и доступен для загрузки на странице проекта в GitHub.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.