[Перевод] PHP New Generation
Немного вольный перевод письма Дмитрия Стогова на internal рассылку PHP сообщества, написанного 5-го мая. Для знающих меня людей не секрет, что улучшение производительности PHP является моей главной обязанностью и увлечением в Zend. Вообще, начиная с PHP 5.0 мы уже шестикратно ускорили PHP в синтетических тестах и примерно двукратно в реальных проектах. Мы не прекращали улучшать ядро PHP и OPCache. Но все же, с релизом PHP 5.5 у нас не получалось сильно продвинуться дальше и вместе с остальным мы начали экспериментировать с менеджерами памяти, технологией JIT и другими потенциальными решениями.Я потратил очень мгного времени экспериментируя с JIT, и даже сделал прототип прозрачного, основанного на LLVM, JIT компилятора встроенного в OPCache. Результаты для bench.php были восхитительны (0,219 секунд против 2,175 — десятикратный прирост для PHP 5.5), но для реальных проектов мы получили всего-лишь пару процентов прироста производительности. Это заставило нас всмотреться глубже в характеристики исполняемой среды и в то, что было по-настоящему бутылочным горлышком. Ясно, что виртуальная машина уже была хорошо оптимизирована, но она работала со структурами данных, постоянно требующими выделение и освобождение памяти и подсчет ссылок на значения. Обычное реальное PHP приложение тратит примерно 20% процессорного времени в менеджере памяти, 10% при операциях с хэш-таблицами, 30% во встроенных функциях PHP и всего-лишь 30% в виртуальной машине. Конечно же мы пробовали JIT только для кода виртуальной машины и в большинстве случаев этот код все равно делал теже самые операции с памятью. Поэтому мы решили сменить фокус и работать над этим крупным бутылочным горлышком. Идея состояла в изменении типов данных для оптимизации выделения кусков памяти. Это было очень трудным решением, так как нам нужно было начать огромный рефакторинг и мы понятия не имели повлияет ли он на что-нибудь вообще.
Я с радостью представляю вам результат нашей работы за последние четыре месяца. Это рефакторинг ядра PHP, который существенно повышает производительность и улучшает использование памяти, и главное дает фундамент для крупных улучшений в будущем, включая JIT. Я упущу технические детали (подробности опубликованы тут wiki.php.net/phpng), но если двумя словами, то мы изминили фундамент попытавшись сохранить бОльшую часть здания без изменений. Уже сейчас новое ядро дает 10–30% прироста производительности не только в тестах, но также и в реальных проектах!
Некоторые тесты производительности: Wordpress 3.6 — 20.0% прирост (253 vs 211 req/sec)Drupal 6.1 — 11.7% прирост (1770 vs 1585 req/secQdig — 15.3% прирост (555 vs 482 req/sec)ZF test app — 30.5% прирост (217 vs 166 req/sec)
На некоторых приложениях мы получили результаты даже лучше, чем в других реализациях PHP.Было бы замечательно, если другие люди проверят свои приложения и сравнят с их текущей версией PHP.
Рефакторинг еще далек от завершения, так как упор делался на проверку будет ли вообще какой-то положительный результат. Еще не все расширения поддерживаются, некоторые тесты не проходят, и у нас так же есть множество идей для последующих улучшений.
Но как нам кажется, мы достаточно уверены, чтобы открыть его для ривью, фидбека и поддержки сообщества. … Нужно еще много сделать для поддержки всех расширений PHP и продолжить дополнительно улучшать ядро.
Попробуйте отрефакторенный PHP и дайте ваш фидбек по производительности, использованию памяти и любым проблемам.Ветку *phpng* можно найти на php.net. Есть также немного инструкций тут wiki.php.net/phpng. …
Я хотел бы отдельно поблагодарить Xinchen и Nikita за значительную часть проделанной работы!
Я надеюсь, что это новое ядро может сделать новую версию PHP, о которой мы так много говорим, намного интересней.
Всем спасибо!
От себя хочу отметить, что на прошлогодней конференции devconf, Дмитрия спрашивали про JIT и он как раз рассказал про их не совсем удачный опыт с ним. Но это письмо дает нам понять, что PHP все еще торт.
Также хочу отметить, что упомянутые Никита Попов (переводы его статей по php не однократно появлялись на хабре) и Xinchen Hui (и его проекты тоже светились на хабре) совсем молодые парни, влившиеся в сообщество всего пару лет назад. На таких энтузиастах держится не одно сообщество.
*Все ошибки в переводе или опечатки, грамматику и орфографию присылайте в личку, спасибо!