PHP各版本技术特性(标贝科技)

PHP8

JIT

PHP8JIT( Just In Time )无疑是新特性中一大亮点, JIT 是一种编译器策略,它将代码表述为一种中间状态,在运行时将其转换为依赖于体系结构的机器码,并即时执行。在 PHP 中,这意味着 JIT 将为 Zend VM 生成的指令视为中间表述,并以依赖于体系结构的机器码执行,也就是说托管代码的不再是 Zend VM,而是更为底层的 CPU。下面我们就将简单的介绍一下JIT:

流程

JIT运行流转图:
请添加图片描述
左图是PHP8之前的Opcache流程示意图, 右图是PHP8中的Opcache示意图, 可以看出几个关键点:

  1. Opcache会做opcode层面的优化,比如图中的俩条opcode合并为一条

  2. PHP8的JIT目前是在Opcache之中提供的

  3. JIT在Opcache优化之后的基础上,结合Runtime的信息再次优化,直接生成机器码

  4. JIT不是原来Opcache优化的替代,是增强

  5. 目前PHP8只支持x86架构的CPU

配置

使用JIT我们需要在php配置文件 php.ini 中做如下配置:

opcache.jit=1205
opcache.jit_buffer_size=64M

这个配置由4个独立的数字组成,从左到右分别是 :

1:是否在生成机器码点时候使用AVX指令, 需要CPU支持

0: 不使用
1: 使用

2: 寄存器分配策略

0: 不使用寄存器分配
1: 局部(block)域分配
2: 全局(function)域分配

0JIT触发策略

0: PHP脚本载入的时候就JIT
1: 当函数第一次被执行时JIT
2: 在一次运行后,JIT调用次数最多的百分之(opcache.prof_threshold * 100)的函数
3: 当函数/方法执行超过N(N和opcache.jit_hot_func相关)次以后JIT
4: 当函数方法的注释中含有@jit的时候对它进行JIT
5: 当一个Trace执行超过N次(和opcache.jit_hot_loop, jit_hot_return等有关)以后JIT

5JIT优化策略,数值越大优化力度越大

0: 不JIT
1: 做opline之间的跳转部分的JIT
2: 内敛opcode handler调用
3: 基于类型推断做函数级别的JIT
4: 基于类型推断,过程调用图做函数级别JIT
5: 基于类型推断,过程调用图做脚本级别的JIT

注意以下几点:

  • 尽量使用12x5型的配置,此时应该是效果最优的
  • 对于x, 如果是脚本级别的,推荐使用0, 如果是Web服务型的,可以根据测试结果选择3或5
  • @jit的形式,在有了attributes以后,可能变为<>

测试

完成上述准备工作后,就可以正式开始测试工作了。 PHP 官方在源码中提供了一个基准测试文件,我们进入源码所在目录 php-8.0.0alpha2,通过如下命令测试不启动 JIT 情况下代码运行情况 :

不启用JIT运行:

运行命令: /usr/local/php8/bin/php -d opcache.jit_buffer_size=0 Zend/bench.php

运行结果:请添加图片描述
启用JIT运行:

运行命令: `/usr/local/php8/bin/php -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.php

运行结果:
请添加图片描述
可见,对于Zend/bench.php, 相比不开启JIT,开启了以后,耗时降低将近60%,性能提升将近2倍

小结

网上看到很多人说JIT对于网站来说提速

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值