Performance

Ускоряем PHP с HipHop

Posted in HipHop, PHP, Performance on February 4th, 2010 by Yaroslav Vorozhko – 1 Comment

Сегодня Facebook анонсировал релиз HipHop.

Коротко, что такое HipHop для PHP:

  • HipHop – это компилятор кода PHP в C++. Т.е. он преобразует PHP код в C++ код для дальнейшей компиляции. Это не другой язык. И это не компилятор времени исполнения (JIT).
  • HipHop будет выпущен Facebook под opensource лицензией, под такой же как и основной код PHP. Facebook возлагает надежды, что разработчики улучшать HipHop и расширят его функциональность, таким образом HipHop сможет заменить больший набор функций PHP.
  • HipHop был одним из проектов в Facebook по улучшению его производительности. Все таки Facebook, второй сайт по объему траффика в интерент и в основном построенный на PHP. HipHop запущен на большинстве LAMP PHP серверах Facebook и в среднем улучшил производительность этих серверов в два раза.
  • HipHop достигает этого, путем исследования вашего PHP приложения и на его основе строить C++ проект. C++ проект потом компилируется и запускается на собственном веб серврере. Это дает возможность исключить PHP Zend engine и Apache из цепочки.
  • Учитывая что, некоторые возможности PHP не поддерживаются. Также, дополнения к PHP написанные на C, должны быть переписаны в HipHop C++ дополнения.
  • Преимущества в скороости HipHop достигаются благодаря статическому анализу, который парсит ваш PHP код ищя пути преобразования динамических частей в статические.
    Учитывая это, ваше улучшение производительности, может сильно варьроваться – более структурированный код получить наибольший прирост в производительности.

Что значит HipHop для вас:

  • Если ваш проект использует sharing хостинг – то ничего.
  • Если ваш проект использует 2 или менее серверов – то ничего.
  • Если у вас нет выделенного development и deployment окружения и у вас нет разработчика знающего C++ – то ничего.
  • Если вы разработчик open source приложения – то немного.
  • Если вы shared хостинг компания – то немного.
  • Если PHP не bottleneck вашего приложения – то пока еще ничего.
  • Если ваше приложения использует много серверов, и в основном на них работает PHP, а также у вас есть все исходники PHP кода, у вас есть немного знаний C/C++, тогджа ответ возможно.
  • Если вы разрабатываете php framework, то ответ иногда.
  • Если у вас есть сильно-связанные части архитектуры, которые удовлетворяют требованиям выше и эти части слабо связаны (через API) с остальной системой, то ответ много что.
  • Если вы обдумываете какой язык выбрать для реализации вашей системы, то ответ очень много.
  • Если вы обдумываете аргумент, переписать весь сайт на другой язык, то вы потеряли свой аргумент.

Есть очень много языковы возможностей, хороших или плохих, которые PHP должен поддерживать, а HipHop нет. Потому как HipHop уникальное решение, он никгода не заменит Zend Engine.

Статья является частичным переводом статьи Terry Chay Faster PHP fo shizzle—HipHop for PHP

Мифы PHP оптимизации

Posted in PHP, Performance on August 11th, 2009 by Yaroslav Vorozhko – Be the first to comment

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

а. echo быстрее чем print
Echo может быть быстрее, так как оно не возвращает значение. Но, в моем бенчмарке преимущество было очень мало. А, в некоторых ситуациях print будет быстрее echo, например когда ob_start включен.

б. меньше комментариев ускоряет код
Если вы используете кеширование opcodes, то комментарии уже игнорируются. Этот миф идет от PHP3, когда каждая строка PHP интерпретировалась во время исполнения.

в. 'var='.$var быстрее чем, "var=$var"
Так было до версии 4.2 и было исправлено в версии 4.3.

Ускоряет ли код использование ссылок?
Ссылки не дают преимущества строковым, целым и другим базовым типам данных.
Например:

PHP:
  1. function TestRef(&$a)
  2. {
  3. $b = $a;
  4. $c = $a;
  5. }
  6. $one = 1;
  7.  
  8. ProcessArrayRef($one);

И тот же самый код без ссылки.

PHP:
  1. function TestNoRef($a)
  2. {
  3. $b = $a;
  4. $c = $a;
  5. }
  6. $one = 1;
  7.  
  8. ProcessArrayNoRef($one);

PHP не создает дубликат переменной "отправленной по значению", вместо этого он использует внутренних высокоскоростной подсчет ссылок. Поэтому в TestRef(), $b и $c будут дольше устанавливаться, так как надо вести "трэкинг" ссылок, в то время как в TestNoRef(), $b и $c сразу будут ссылаться на исходное значение $a, а значение счетчика ссылок будет инкрементировано.
В сравнении, функции которые принимают массивы и объекты, работают быстрее тех, которых принимают ссылки. Потому что, массивы и объекты не используют подсчет ссылок, а используется оригинальное значение переданное в параметре.
Например:

PHP:
  1. function ObjRef(&$o)
  2. {
  3. $a =$o->name;
  4. }

медленнее чем:

PHP:
  1. function ObjRef($o)
  2. {
  3. $a = $o->name;
  4. }

Примечание: в PHP5 все объекты передаются по ссылке, и нет необходимости устанавливать знак '&' в списке параметров. Производительность работы с объектами в PHP5 значительно выше, чем в php4.

XtraDB новый Storage Engine от Percona

Posted in Development, MySQL, Performance on December 23rd, 2008 by Yaroslav Vorozhko – 1 Comment

Новый движок XtraDB был выпущен Percona как замена стандартного InnoDB.

XtraDB на 100% совместим с InnoDB, поэтому вы можете использовать его как полную замену InnoDB. XtraDB разрабатывался для улучшения масштабируемости на современном железе, а также включает в себя множество других возможностей и патчей оптимизированных для высоко нагруженных систем.

Percona XtraDB включает всю InnoDB ACID-совместимую архитектуру и расширенную MVCC архитектуру, добавлены новые возможности, более тюнингована, более информативна, более масштабируема на мульти-процессорных системах, и с улучшенной системой использования оперативной памяти.

Что нового в этом движке? Вот список улучшений:

  • INFORMATION_SCHEMA.XTRADB_ENHANCEMENTS. Эта таблица содержит информацию про различия XtraDb и той же версии InnoDb.
  • Улучшения в SHOW INNODB STATUS.
  • Улучшения в InnoDB IO.
  • InnoDB RW-lock fixes. Улучшена масштабируемость для систем с 8+ ядер.
  • Buffer pool fixes
  • innodb_buffer_pool_pages

В общем это сейчас тунингованый InnoDB, только OpenSource. Для комьюнити публичный OpenSource считаю большим плюсом.

Percona сделала и продолжает делать отличную работу по развитию и поддержке MySQL.

Думаю Percona это новая MySQL и уже в скором будущем мы не раз в этом убедимся. :)

Оффициальный анонс XtraDB

Тесты производительность ввода вывода XtraDB

Тесты производительности и нагрузки CPU XtraDb

Документация по XtraDB http://www.percona.com/docs/wiki/percona-xtradb:start

Исходные коды на XtraDB https://launchpad.net/percona-xtradb

Обсуждения XtraDB и остальных разработок Perocona http://groups.google.com/group/percona-dev

MySQL Row Format Tuning

Posted in MySQL, Performance on March 18th, 2008 by Yaroslav Vorozhko – 1 Comment

При создании или модифицировании таблиц используя MyISAM, вы можете запросить MySQL хранить строки в фиксированном или динамическом формате. Если таблица не содержит BLOB и TEXT полей, то фиксированный формат выбирается по умолчанию, который автоматически конвертирует VARCHAR в CHAR. Иначе, если выбрать динамический формат, то MySQL конвертирует все колонки из типа CHAR в VARCHAR.

Для MySQL, фиксированный формат легче в доступе, кешировании и обновлении информации. Также этот формат менее подвержен порче данных. Если дисковое пространство не является критическим, то фиксированный формат будет хорошим выбором.

Динамический формат использует меньше дискового пространства, но более подвержен риску фрагментации и/или порче данных.

Но давайте сначала посмотрим, на тесты и потом сделаем окончательное заключение.

read more »