虽迟但到!PHP8测评来了~

广告:宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取~~~

虽迟但到!PHP8测评来了~

6月25号php 8 alpha 1发布,7月9号 php 8 alpha 2发布,一般alpha 2是一个稍微能用的版本,所以周末测评了一下php8 JIT到底是个什么?

先看一下结果:

JIT不开启的情况

php -d opcache.jit_buffer_size=0 Zend/bench.phpsimple             0.025simplecall         0.012simpleucall        0.012simpleudcall       0.012mandel             0.135mandel2            0.211ackermann(7)       0.082ary(50000)         0.012ary2(50000)        0.010ary3(2000)         0.186fibo(30)           0.283hash1(50000)       0.039hash2(500)         0.041heapsort(20000)    0.089matrix(20)         0.110nestedloop(12)     0.096sieve(30)          0.045strcat(200000)     0.019------------------------Total              1.419
登录后复制

JIT开启的情况下:

php -d -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.phpsimple             0.001simplecall         0.000simpleucall        0.000simpleudcall       0.000mandel             0.005mandel2            0.006ackermann(7)       0.010ary(50000)         0.005ary2(50000)        0.004ary3(2000)         0.011fibo(30)           0.027hash1(50000)       0.027hash2(500)         0.018heapsort(20000)    0.011matrix(20)         0.011nestedloop(12)     0.006sieve(30)          0.004strcat(200000)     0.009------------------------Total              0.155
登录后复制

还有不打开Opcache的情况下:

php Zend/bench.phpsimple             0.051simplecall         0.017simpleucall        0.083simpleudcall       0.089mandel             0.506mandel2            0.409ackermann(7)       0.095ary(50000)         0.012ary2(50000)        0.010ary3(2000)         0.187fibo(30)           0.367hash1(50000)       0.040hash2(500)         0.041heapsort(20000)    0.097matrix(20)         0.122nestedloop(12)     0.093sieve(30)          0.063strcat(200000)     0.018------------------------Total              2.299
登录后复制

不开启Opcache : 2.299s开启Opcache不开启JIT情况下:1.419s开启Opcache且开启JIT情况下:0.155s

开启JIT情况下是不开启JIT情况下的接近9.15倍,多次测试这个值稳定在8倍到10倍之间。

MPF表现如何?

为了接近我们的业务,所以在mpf框架下进行测试

环境

aliyun centos 6.9

php7.test.com php-fpm一个进程php8.test.com php-fpm一个进程

Mpf两个接口

/v1/hello/wzh/index1

public function index1() {    $this->output('123');}
登录后复制

/v1/hello/wzh/index2

public function index2() {    $a = 0;    for ($i = 0; $i < 1000000; $i++)        $a++;    $this->output($a);}
登录后复制

我们压测一下

php7 计算少情况

wrk -c36 -d 5s -t12 https://php7.test.com/v1/hello/wzh/index1Running 5s test @ https://php7.test.com/v1/hello/wzh/index1  12 threads and 36 connections  Thread Stats   Avg      Stdev     Max   +/- Stdev    Latency   432.97ms   76.00ms 527.38ms   92.17%    Req/Sec     8.38      5.36    20.00     63.85%  396 requests in 5.09s, 121.43KB readRequests/sec:     77.78Transfer/sec:     23.85KB
登录后复制

php7 计算多情况

wrk -c36 -d 5s -t12 https://php7.test.com/v1/hello/wzh/index2Running 5s test @ https://php7.test.com/v1/hello/wzh/index2  12 threads and 36 connections  Thread Stats   Avg      Stdev     Max   +/- Stdev    Latency     1.02s   569.99ms   1.96s    57.14%    Req/Sec     3.18      3.43    10.00     80.88%  70 requests in 5.03s, 21.60KB read  Socket errors: connect 0, read 0, write 0, timeout 42Requests/sec:     13.91Transfer/sec:      4.29KB
登录后复制

php8 JIT开启计算少情况

wrk -c36 -d 5s -t12 https://php8.test.com/v1/hello/wzh/index1Running 5s test @ https://php8.test.com/v1/hello/wzh/index1  12 threads and 36 connections  Thread Stats   Avg      Stdev     Max   +/- Stdev    Latency    34.48ms    4.34ms  95.45ms   87.87%    Req/Sec    84.61     13.36   121.00     85.28%  5083 requests in 5.03s, 1.67MB readRequests/sec:   1010.55Transfer/sec:    340.43KB
登录后复制

php8 JIT开启计算多情况

wrk -c36 -d 5s -t12 https://php8.test.com/v1/hello/wzh/index2Running 5s test @ https://php8.test.com/v1/hello/wzh/index2  12 threads and 36 connections  Thread Stats   Avg      Stdev     Max   +/- Stdev    Latency    97.84ms    4.97ms 159.50ms   92.12%    Req/Sec    30.27      4.42    50.00     86.50%  1814 requests in 5.07s, 614.71KB readRequests/sec:    357.76Transfer/sec:    121.23KB
登录后复制

php8 JIT关闭计算少情况

wrk -c36 -d 5s -t12 https://php8.test.com/v1/hello/wzh/index1Running 5s test @ https://php8.test.com/v1/hello/wzh/index1  12 threads and 36 connections  Thread Stats   Avg      Stdev     Max   +/- Stdev    Latency    38.10ms    6.47ms 239.60ms   94.01%    Req/Sec    77.50     12.76   110.00     89.63%  4622 requests in 5.04s, 1.52MB readRequests/sec:    916.22Transfer/sec:    308.65KB
登录后复制

php8 JIT关闭计算多情况

php -d -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.phpsimple             0.001simplecall         0.000simpleucall        0.000simpleudcall       0.000mandel             0.005mandel2            0.006ackermann(7)       0.010ary(50000)         0.005ary2(50000)        0.004ary3(2000)         0.011fibo(30)           0.027hash1(50000)       0.027hash2(500)         0.018heapsort(20000)    0.011matrix(20)         0.011nestedloop(12)     0.006sieve(30)          0.004strcat(200000)     0.009------------------------Total              0.1550
登录后复制

[image:BA1A37D8-760E-4637-901B-3E3521F969E7-4107-0000191504DD1B2E/86D37899-3B46-4BDA-B396-E5C8DD51068E.png]

发现计算少情况下php8JIT是php7性能的13倍,而且计算越多优化越明显,计算多情况下php8JIT是php7性能的25.7倍。

但是有一个问题我觉得很神奇php8无JIT计算少的情况居然也优化了很多,我以为是测试方向的问题,但是经过多次论证,这个数据是准确的,有时间想找一下这里的优化点是什么。

编译过程

吐槽:php手动编译越来越麻烦了,编译了2个小时才编译完,踩了N个坑,为了让大家多写几个需求,把坑分享出来

环境

aliyun centos 6.9,咱们公司一般都是这个版本。

php源码编译
php -d -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.phpsimple             0.001simplecall         0.000simpleucall        0.000simpleudcall       0.000mandel             0.005mandel2            0.006ackermann(7)       0.010ary(50000)         0.005ary2(50000)        0.004ary3(2000)         0.011fibo(30)           0.027hash1(50000)       0.027hash2(500)         0.018heapsort(20000)    0.011matrix(20)         0.011nestedloop(12)     0.006sieve(30)          0.004strcat(200000)     0.009------------------------Total              0.1551
登录后复制

这里一般都是makefile生成失败的,后面有生成失败的例子,生成成功后

php -d -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.phpsimple             0.001simplecall         0.000simpleucall        0.000simpleudcall       0.000mandel             0.005mandel2            0.006ackermann(7)       0.010ary(50000)         0.005ary2(50000)        0.004ary3(2000)         0.011fibo(30)           0.027hash1(50000)       0.027hash2(500)         0.018heapsort(20000)    0.011matrix(20)         0.011nestedloop(12)     0.006sieve(30)          0.004strcat(200000)     0.009------------------------Total              0.1552
登录后复制配置php.ini

记住一定要把opcache.ini旧的配置也写上,JIT说到底还是对Opcache的优化。

php -d -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.phpsimple             0.001simplecall         0.000simpleucall        0.000simpleudcall       0.000mandel             0.005mandel2            0.006ackermann(7)       0.010ary(50000)         0.005ary2(50000)        0.004ary3(2000)         0.011fibo(30)           0.027hash1(50000)       0.027hash2(500)         0.018heapsort(20000)    0.011matrix(20)         0.011nestedloop(12)     0.006sieve(30)          0.004strcat(200000)     0.009------------------------Total              0.1553
登录后复制configure失败解决方法

这里解决./configure 失败的一些问题

问题一
php -d -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.phpsimple             0.001simplecall         0.000simpleucall        0.000simpleudcall       0.000mandel             0.005mandel2            0.006ackermann(7)       0.010ary(50000)         0.005ary2(50000)        0.004ary3(2000)         0.011fibo(30)           0.027hash1(50000)       0.027hash2(500)         0.018heapsort(20000)    0.011matrix(20)         0.011nestedloop(12)     0.006sieve(30)          0.004strcat(200000)     0.009------------------------Total              0.1554
登录后复制

解决办法

php -d -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.phpsimple             0.001simplecall         0.000simpleucall        0.000simpleudcall       0.000mandel             0.005mandel2            0.006ackermann(7)       0.010ary(50000)         0.005ary2(50000)        0.004ary3(2000)         0.011fibo(30)           0.027hash1(50000)       0.027hash2(500)         0.018heapsort(20000)    0.011matrix(20)         0.011nestedloop(12)     0.006sieve(30)          0.004strcat(200000)     0.009------------------------Total              0.1555
登录后复制

注意

直接这样是不行的,yum仓库里的版本太低。

php -d -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.phpsimple             0.001simplecall         0.000simpleucall        0.000simpleudcall       0.000mandel             0.005mandel2            0.006ackermann(7)       0.010ary(50000)         0.005ary2(50000)        0.004ary3(2000)         0.011fibo(30)           0.027hash1(50000)       0.027hash2(500)         0.018heapsort(20000)    0.011matrix(20)         0.011nestedloop(12)     0.006sieve(30)          0.004strcat(200000)     0.009------------------------Total              0.1556
登录后复制问题二
php -d -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.phpsimple             0.001simplecall         0.000simpleucall        0.000simpleudcall       0.000mandel             0.005mandel2            0.006ackermann(7)       0.010ary(50000)         0.005ary2(50000)        0.004ary3(2000)         0.011fibo(30)           0.027hash1(50000)       0.027hash2(500)         0.018heapsort(20000)    0.011matrix(20)         0.011nestedloop(12)     0.006sieve(30)          0.004strcat(200000)     0.009------------------------Total              0.1557
登录后复制

解决办法

php -d -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.phpsimple             0.001simplecall         0.000simpleucall        0.000simpleudcall       0.000mandel             0.005mandel2            0.006ackermann(7)       0.010ary(50000)         0.005ary2(50000)        0.004ary3(2000)         0.011fibo(30)           0.027hash1(50000)       0.027hash2(500)         0.018heapsort(20000)    0.011matrix(20)         0.011nestedloop(12)     0.006sieve(30)          0.004strcat(200000)     0.009------------------------Total              0.1558
登录后复制问题三
php -d -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.phpsimple             0.001simplecall         0.000simpleucall        0.000simpleudcall       0.000mandel             0.005mandel2            0.006ackermann(7)       0.010ary(50000)         0.005ary2(50000)        0.004ary3(2000)         0.011fibo(30)           0.027hash1(50000)       0.027hash2(500)         0.018heapsort(20000)    0.011matrix(20)         0.011nestedloop(12)     0.006sieve(30)          0.004strcat(200000)     0.009------------------------Total              0.1559
登录后复制

同样yum也是不行的,版本太低。

php Zend/bench.phpsimple             0.051simplecall         0.017simpleucall        0.083simpleudcall       0.089mandel             0.506mandel2            0.409ackermann(7)       0.095ary(50000)         0.012ary2(50000)        0.010ary3(2000)         0.187fibo(30)           0.367hash1(50000)       0.040hash2(500)         0.041heapsort(20000)    0.097matrix(20)         0.122nestedloop(12)     0.093sieve(30)          0.063strcat(200000)     0.018------------------------Total              2.2990
登录后复制

解决办法

php Zend/bench.phpsimple             0.051simplecall         0.017simpleucall        0.083simpleudcall       0.089mandel             0.506mandel2            0.409ackermann(7)       0.095ary(50000)         0.012ary2(50000)        0.010ary3(2000)         0.187fibo(30)           0.367hash1(50000)       0.040hash2(500)         0.041heapsort(20000)    0.097matrix(20)         0.122nestedloop(12)     0.093sieve(30)          0.063strcat(200000)     0.018------------------------Total              2.2991
登录后复制问题四
php Zend/bench.phpsimple             0.051simplecall         0.017simpleucall        0.083simpleudcall       0.089mandel             0.506mandel2            0.409ackermann(7)       0.095ary(50000)         0.012ary2(50000)        0.010ary3(2000)         0.187fibo(30)           0.367hash1(50000)       0.040hash2(500)         0.041heapsort(20000)    0.097matrix(20)         0.122nestedloop(12)     0.093sieve(30)          0.063strcat(200000)     0.018------------------------Total              2.2992
登录后复制

解决办法

php Zend/bench.phpsimple             0.051simplecall         0.017simpleucall        0.083simpleudcall       0.089mandel             0.506mandel2            0.409ackermann(7)       0.095ary(50000)         0.012ary2(50000)        0.010ary3(2000)         0.187fibo(30)           0.367hash1(50000)       0.040hash2(500)         0.041heapsort(20000)    0.097matrix(20)         0.122nestedloop(12)     0.093sieve(30)          0.063strcat(200000)     0.018------------------------Total              2.2993
登录后复制

Enjoy php 8 & JIT !

以上就是虽迟但到!PHP8测评来了~的详细内容,更多请关注9543建站博客其它相关文章!

9543建站博客
一个专注于网站开发、微信开发的技术类纯净博客。
作者头像
admin创始人

肥猫,知名SEO博客站长,14年SEO经验。

上一篇:讲解php7连接mysql数据库
下一篇:laravel怎么关闭debug模式

发表评论

关闭广告
关闭广告