2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHP7調査(4)メモリマネージャの書き直し

Last updated at Posted at 2014-10-09

PHP7からメモリマネージャが一新されます。これはDmitryが新規に書いたもので、masterブランチには2014-08-26に取り込まれています。

https://github.com/php/php-src/pull/777 に性能比較が書いてあるんですが、アプリケーションによっては5%から10%の性能アップとなっており、すごい成果だといえるでしょう。

概要

内容についてどうこう言えるほどの知識は無いのですが、Zend/zend_alloc.cの先頭に次のようなコメントがありました。「jemallocやtcmallocからアイデアをもらった」だそうで、最近の速いmalloc実装と同等の実装を行ったということのようですね。

/*
 * zend_alloc is designed to be a modern CPU cache friendly memory manager
 * for PHP. Most ideas are taken from jemalloc and tcmalloc implementations.

速度の比較

開発最新版のPHPでは、環境変数USE_ZEND_ALLOCを0に設定することで新規実装したmallocを使わず、システムが提供するmallocを使うことができます。

この両者の性能を実際に比較してみましょう。下記はMacOSX 10.9.5(Mavericks)上での結果です。

$ php -v
PHP 7.0.0-dev (cli) (built: Oct  1 2014 18:09:49)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.8.0-dev, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
$ php Zend/bench.php
simple             0.093
simplecall         0.025
simpleucall        0.054
simpleudcall       0.058
mandel             0.263
mandel2            0.327
ackermann(7)       0.074
ary(50000)         0.008
ary2(50000)        0.010
ary3(2000)         0.120
fibo(30)           0.175
hash1(50000)       0.017
hash2(500)         0.018
heapsort(20000)    0.071
matrix(20)         0.067
nestedloop(12)     0.155
sieve(30)          0.043
strcat(200000)     0.010
------------------------
Total              1.587
$ USE_ZEND_ALLOC=0 php Zend/bench.php
simple             0.093
simplecall         0.030
simpleucall        0.059
simpleudcall       0.057
mandel             0.264
mandel2            0.326
ackermann(7)       0.082
ary(50000)         0.008
ary2(50000)        0.007
ary3(2000)         0.119
fibo(30)           0.186
hash1(50000)       0.027
hash2(500)         0.018
heapsort(20000)    0.062
matrix(20)         0.063
nestedloop(12)     0.157
sieve(30)          0.048
strcat(200000)     0.023
------------------------
Total              1.629

テスト内容によって差はありますが、新しいmallocの方が総じて速いと言えそうです。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?