For people who know me it's not a secret that PHP performance is my mainresponsibility and passion at Zend. Actually, starting from PHP 5.0 wealready made 6 times speedup on synthetic benchmarks and about 2 timesspeedup on real-life applications. We endlessly made improvements in PHPengine and OPCache. However, by PHP 5.5 release we weren’t be able to makeany serious progress, and among other things started to experiment withmemory managers, JIT technologies and other potential ideas.

I spent a significant amount of time experimenting with JIT, and evencreated a PoC of transparent LLVM based JIT compiler embedded into OPCache.The results on bench.php was just amazing – (0.219 seconds against 2.175 – *10times speedup of PHP 5.5*), but on real-life apps we got just few percentspeedup. This made us look much deeper into some of the runtimecharacteristics and what was truly the bottleneck to making moresubstantial progress. It was clear the VM is already highly optimized, butworks with data structures that require endless memory allocation,deallocation and reference counting. Typical real-life PHP applicationspends about 20% of the CPU time in memory manager, 10% doing hash tablesoperations, 30% in internal functions and only 30% in VM. Of course, wetried to JIT only VM code and in most cases it had to perform the samememory allocations. So we decided to change focus and work on the bigbottlenecks. The idea was to change our data types to minimize heapallocations. This was a very difficult decision because we had to startwith a huge refactoring, and we had no idea whether it’s going to have anyimpact or not.

Now I'm glad to present you a result of our recent four month work. It's arefactoring of the PHP engine that significantly improves performance,memory usage and builds a foundation for a lot more future performanceimprovements incl. JIT. I'll avoid technical details (more details will bepublished at *http://wiki.php.net/phpng <http://wiki.php.net/phpng>*), butin few words - we changed the basement trying to keep most of the buildingunchanged. Right now the new engine already makes *10-30% speedup ofphp*not only on benchmarks but on real-life applications as well!

*Some benchmarks we ran so far:*

Wordpress 3.6 – 20.0% gain (253 vs 211 req/sec)

Drupal 6.1 – 11.7% gain (1770 vs 1585 req/sec

Qdig – 15.3% gain (555 vs 482 req/sec)

ZF test app – 30.5% gain (217 vs 166 req/sec)

On some apps we show better results than other PHP implementations. It willbe great if others here could test this on their apps and compare to theirexisting PHP version to get additional results.

The re-factoring is not finished yet as the focus was to first test whetherthis effort would deliver results. Not all extensions are supported, sometests are failing, and we also have more ideas for additional improvement.

But we feel, we’ve proven enough out to open it up for review, feedbackand assistance, and wanted to involve the community as soon as we managedto get on a promising direction. There’s more work to do in finishingsupport of all extensions and continue to make some additional engineimprovements.

Please try the refactored PHP engine and provide feedback re: performance,memory usage and any issues that come up. You may find it in *phpng* branchat *php.net <http://php.net>*. Some instructions may be found at*http://wiki.php.net/phpng<http://wiki.php.net/phpng>*. As mentioned, there are some missingextensions so not everything will run.

I would like to say many thanks to Xinchen and Nikita who made significantpart of presented work.

I think that this engine can make the new major version of PHP we’retalking about a lot more interesting.