首页 > 技术分享 > LNMP|WAMP
收藏

PHP8开启JIT,PHP8开启JIT的执行速度

09/06 16:36
大潇博客 原创文章,转载请标明出处

PHP8内置JIT编译器,可以极大地提高性能,拥有更强的cpu密集处理能力。


开启JIT

修改配置文件php.ini:

;加载php_opcache拓展

zend_extension=php_opcache


;开启opcache,关闭则不会执行jit

opcache.enable=1


;开启cli模式opcache

opcache.enable_cli=1


编辑opcahce配置文件:

一般情况下软连接为/etc/php/8.3/fpm/conf.d/10-opcache.ini,实际链接的为文件为/etc/php/8.3/mods-available/opcache.ini

;开启JIT

opcache.jit=on

opcache.jit_buffer_size=256M

opcache.jit=1255



查看是否配置成功

使用phpinfo()查看jit状态

或者以下代码查看jit状态

var_dump(opcache_get_status()['jit']);

这里仅开启php-fpm中的JIT,如果需要在cli中开启,需要再修改cli目录下的php.ini。



PHP开启JIT后的执行速度

运行下面脚本,从零加到一亿,测试不同PHP版本执行速度,以及开启JIT后的执行速度:

$time=microtime(true);

$number=0;

for($i=0;$i<=100000000;$i++)

$number+=$i;

echo $number;

echo '<hr>';

echo microtime(true)-$time;


我的测试结果:

PHP5.6耗时10.6秒。


PHP7.2耗时5.7秒。


PHP7.4耗时3.08秒。


PHP8.3关闭JIT,耗时3.08秒,和PHP7.4相似。


PHP8.3开启JIT,仅用时0.5秒。



补充说明一下opcache.jit=1255的意思:

opcache.jit配置项专门配置优化级别|JIT触发器|寄存器分配|CPU特定的优化标志,官方给的推荐值为1255。

配置的顺序是:

⑴CPU特定的优化标志;

⑵寄存器分配;

⑶JIT触发器;

⑷优化级别。


具体到参数:

⑴CPU特定的优化标志:

0 没有

1个 启用AVX指令生成

⑵R-寄存器分配:

0 不执行寄存器分配

1个 使用本地线性扫描寄存器分配器

2 使用全局线性扫描寄存器分配器

⑶JIT触发器:

0 JIT在第一次脚本加载时的所有功能

1个 首次执行时的JIT函数

2 在第一个请求时进行概要分析,并在第二个请求时编译热功能

3 动态分析并编译热功能

4 在文档注释中使用@jit标记编译函数

5 跟踪JIT

⑷O-优化级别:

0 不要准时

1个 最小JIT(调用标准VM处理程序)

2 选择性VM处理程序内联

3 基于单个函数的静态类型推断的优化JIT

4 静态类型推断和调用树的优化JIT

5 基于静态类型推断和内部过程分析的优化JIT


默认是tracing,也可以function。

tracing是1254,C=1,R=2,T=5,O=4的别名。

function是1205,是C=1,R=2,T=0,O=5的别名。

官方最近值是1255,意思是:启用AVX指令生成,使用本地线性扫描寄存器分配器,跟踪JIT,基于静态类型推断和内部过程的分析优化JIT。


打赏

阅读排行

大家都在搜

博客维护不易,感谢你的肯定
扫码打赏,建议金额1-10元
  • 15601023311