美文网首页
让你的PHP7更快(GCC PGO)

让你的PHP7更快(GCC PGO)

作者: 小甲鱼python | 来源:发表于2017-06-15 09:44 被阅读65次

背景

我们一直致力于提升PHP7的性能, 上个月我们注意到GCC的PGO能在Wordpress上能带来近10%的性能提升, 这个让我们很激动.

然而, PGO正如名字所说(Profile Guided Optimization 有兴趣的可以Google), 他需要用一些用例来获得反馈, 也就是说这个优化是需要和一个特定的场景绑定的.

你对一个场景的优化, 也许在另外一个场景就事与愿违了. 它不是一个通用的优化. 所以我们不能简单的就包含这些优化, 也无法直接发布PGO编译后的PHP7.

当然, 我们正在尝试从PGO找出一些共性的优化, 然后手工Apply到PHP7上去, 但这个很明显不能做到针对一个场景的特别优化所能达到的效果, 所以我决定写这篇文章简单介绍下怎么使用PGO来编译PHP7, 让你编译的PHP7能特别的让你自己的独立的应用变得更快.

首先, 要决定的就是拿什么场景去Feedback GCC, 我们一般都会选择: 在你要优化的场景中: 访问量最大的, 耗时最多的, 资源消耗最重的一个页面.

Wordpree例子测试

拿Wordpress为例, 我们选择Wordpress的首页(因为首页往往是访问量最大的).

我们以我的机器为例:

Intel(R)Xeon(R)CPU          X5687@3.60GHzX16(超线程),

48GMemory

php-fpm采用固定32个worker,opcache采用默认的配置(一定要记得加载opcache)

以wordpress4.1为优化场景..

首先我们来测试下目前WP在PHP7的性能(ab-n10000-c100):

$ ab-n10000-c100http://inf-dev-maybach.weibo.com:8000/wordpress/

ThisisApacheBench,Version2.3<$Revision:655654$>

Copyright1996AdamTwiss,ZeusTechnologyLtd,http://www.zeustech.net/

LicensedtoTheApacheSoftwareFoundation,http://www.apache.org/

Benchmarkinginf-dev-maybach.weibo.com(be patient)

Completed1000requests

Completed2000requests

Completed3000requests

Completed4000requests

Completed5000requests

Completed6000requests

Completed7000requests

Completed8000requests

Completed9000requests

Completed10000requests

Finished10000requests

ServerSoftware:nginx/1.7.12

ServerHostname:inf-dev-maybach.weibo.com

ServerPort:8000

DocumentPath:/wordpress/

DocumentLength:9048bytes

ConcurrencyLevel:100

Timetakenfortests:8.957seconds

Completerequests:10000

Failedrequests:0

Writeerrors:0

Totaltransferred:92860000bytes

HTML transferred:90480000bytes

Requestsper second:1116.48[#/sec] (mean)

Timeper request:89.567[ms](mean)

Timeper request:0.896[ms](mean,across all concurrent requests)

Transferrate:10124.65[Kbytes/sec]received

可见Wordpress 4.1 目前在这个机器上, 首页的QPS可以到1116.48. 也就是每秒钟可以处理这么多个对首页的请求,

现在, 让我们开始教GCC, 让他编译出跑Wordpress4.1更快的PHP7来, 首先要求GCC 4.0以上的版本, 不过我建议大家使用GCC-4.8以上的版本(现在都GCC-5.1了).

步骤

第一步, 自然是下载PHP7的源代码了, 然后做./configure. 这些都没什么区别

接下来就是有区别的地方了, 我们要首先第一遍编译PHP7, 让它生成会产生profile数据的可执行文件:

$ make prof-gen

```注意, 我们用到了prof-gen参数(这个是PHP7的Makefile特有的, 不要尝试在其他项目上也这么搞哈 :) )

然后, 让我们开始训练GCC:

```php

$ sapi/cgi/php-cgi-T100/home/huixinchen/local/www/htdocs/wordpress/index.php>/dev/null

也就是让php-cgi跑100遍wordpress的首页, 从而生成一些在这个过程中的profile信息.

然后, 我们开始第二次编译PHP7.

$ make prof-clean

$ make prof-use&&make install

好的, 就这么简单, PGO编译完成了, 现在我们看看PGO编译以后的PHP7的性能:

$ ab-n10000-c100http://inf-dev-maybach.weibo.com:8000/wordpress/

ThisisApacheBench,Version2.3<$Revision:655654$>

Copyright1996AdamTwiss,ZeusTechnologyLtd,http://www.zeustech.net/

LicensedtoTheApacheSoftwareFoundation,http://www.apache.org/

Benchmarkinginf-dev-maybach.weibo.com(be patient)

Completed1000requests

Completed2000requests

Completed3000requests

Completed4000requests

Completed5000requests

Completed6000requests

Completed7000requests

Completed8000requests

Completed9000requests

Completed10000requests

Finished10000requests

ServerSoftware:nginx/1.7.12

ServerHostname:inf-dev-maybach.weibo.com

ServerPort:8000

DocumentPath:/wordpress/

DocumentLength:9048bytes

ConcurrencyLevel:100

Timetakenfortests:8.391seconds

Completerequests:10000

Failedrequests:0

Writeerrors:0

Totaltransferred:92860000bytes

HTML transferred:90480000bytes

Requestsper second:1191.78[#/sec] (mean)

Timeper request:83.908[ms](mean)

Timeper request:0.839[ms](mean,across all concurrent requests)

Transferrate:10807.45[Kbytes/sec]received`

现在每秒钟可以处理1191.78个QPS了, 提升是~7%. 还不赖哈(咦, 你不是说10%么? 怎么成7%了? 呵呵, 正如我之前说过, 我们尝试分析PGO都做了些什么优化, 然后把一些通用的优化手工Apply到PHP7中. 所以也就是说, 那~3%的比较通用的优化已经包含到了PHP7里面了, 当然这个工作还在继续).

于是就这么简单, 大家可以用自己的产品的经典场景来训练GCC, 简单几步, 获得提升, 何乐而不为呢

如果你觉得眼前需要更好的提高你可以来千锋学PHP,国内最好的PHP机构。

相关文章

  • 让你的PHP7更快(GCC PGO)

    背景 我们一直致力于提升PHP7的性能, 上个月我们注意到GCC的PGO能在Wordpress上能带来近10%的性...

  • php7

    1,下载 php7文件2,安装依赖库yum -y install gcc-c++ gd zlib zlib-dev...

  • PHP7编译安装与勾结HTTPD

    //以后写要简单点,写清楚点。//PHP7需要的依赖(前面我已经安装了gcc/c++)yum install li...

  • [神器点滴之gcc] 你确认比它更聪明?

    有追求的程序员总是千方百计的优化自己的代码,期望代码体积更小,运行速度更快。 你确认你比gcc更聪明?看看编译器有...

  • 使用配置文件引导优化(PGO)

    原文:https://source.android.com/devices/tech/perf/pgo Andro...

  • 电脑 | 让硬盘更快更快更快~

    2014年十一假期的时候写下了这篇文章,我看了看,感觉完成度还是挺高的,所以还是发出来啦。最重要的事:数据无价,一...

  • Android PGO Guide

    Part 1 采集数据 在fio的Android.bp加入下面的code. make fio ANDROID_PG...

  • Ubuntu16.04 编译protobuf及安装

    首先确保你的gcc版本没有改过gcc -v查看gcc版本 不然会报错error: *** A compiler w...

  • 如何让你骑的更快

    上一期我写了《铁三小白的训练方法和训练哲学》一文,对于骑车的训练方法说的不透,今天和大家详细探讨关于骑车训练的那些...

  • PHP7 新特性你知道多少?

    PHP7 新特性你知道多少? 2015.12.3发生了两件大事,PHP7问世了,Swift开源了。 最好的语言发布...

网友评论

      本文标题:让你的PHP7更快(GCC PGO)

      本文链接:https://www.haomeiwen.com/subject/ftsyqxtx.html