Разработчики PHP представили интерпретатор нового поколения (PHPNG)
Сообщается, что с момента выпуска PHP 5.0 наблюдается значительный прогресс в области увеличения производительности PHP - скорость выполнения синтетических тестов увеличилась в 6 раз, а ускорение выполнения реальных приложений оценивается в два раза. При разработке новой ветки большое внимание уделяется экспериментам с технологиями JIT-компиляции. В частности, на базе LLVM подготовлен прототип встроенного в OPCache JIT-компилятора, что позволило по сравнению с PHP 5.5 увеличить скорость выполнения тестового набора в 10 раз, но в реальных приложениях ускорение составило всего несколько процентов.
Различия в показателях тестов и реальных приложений заставили задуматься разработчиков и провести более глубокую ревизию возможных узких мест, устранение которых позволило бы добиться более ощутимого прогресса в оптимизации. Сама по себе виртуальная машина уже достаточно хорошо оптимизирована, но проблема оказалась в методах работы с памятью и организации хранения структур данных. В текущем виде, работа со структурами данных приводит к большому числу операций выделения и перераспределения памяти, а также подсчёта ссылок на структуры для работы сборщика мусора. В итоге, типичное PHP-приложение тратит примерно 20% времени на выполнение задач менеджера памяти, 10% на обработку хэш-таблиц, 30% на вызов внутренних функций и только 30% на выполнение кода в виртуальной машине.
При подготовке PHPNG основное внимание уделено изменению методов работы с памятью и переходу на новые структуры хранения данных, которые минимизируют число операций в куче. Идея переработки структур была сопряжена с определённым риском, связанным с появлением непредсказуемых результатов глобального рефакторинга. Сейчас уже доступны первые результаты проделанной работы, которые показали, что разработчиками был выбран правильный путь, который привёл к существенному повышению производительности, снижению потребления памяти и стал хорошей предпосылкой к внедрению новых JIT-технологий для дальнейшего ускорения работы PHP.
В среднем изменения позволили добиться увеличения производительности реальных приложений на 10-30%:
- Wordpress 3.6 – 20.0% (было 211, стало 253 запросов в секунду)
- Drupal 6.1 – 11.7% (1585/1770 запросов в секунду)
- Qdig – 15.3% (482/555 запросов в секунду)
- ZF test app – 30.5% (166/217 запросов в секунду)
Из идей по проведению дальнейших оптимизаций отмечается:
- Оптимизация вызова и возврата из функций;
- Замена Zend Memory Manager на xx_malloc, что позволит увеличить производительность приблизительно на 2%;
- Переработка очень медленного API zend_parse_parameters();
- Сокращение объёма данных, копируемых из областей разделяемой памяти OPCache в память процесса;
- Переход на libpcre с поддержкой JIT-компиляции регулярных выражений;
- Замена ext/json на pecl/jsond.
Источник: http://www.opennet.ru/opennews/art.shtml?num=39724
|
0 | Tweet | Нравится |
|