PHP 8 之 JIT 简单使用

老牛浏览 69评论 0发表于

一、简介

OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是省去了每次加载和解析 PHP 脚本的开销。

PHP 8 之后正式支持 JIT 下的 OPcache,加速效果再一次提升。

f32d1efb-f31e-4fde-abb1-863a7b0ab4da

左图是 PHP 8 之前的 OPcache 流程示意图, 右图是 PHP 8 中的 OPcache 示意图。

二、使用

除掉原有的 OPcache 配置以外,对于 JIT 我们需要添加如下配置到 php.ini

ini
[Zend Opcache]
zend_extension="opcache.so"

opcache.jit=1255
opcache.jit_buffer_size=64M

opcache.jit 这个配置由 4 位整数 CRTO 组成:

  • C(特定 CPU 优化 flag)

    • 0:禁用特定 CPU 优化。

    • 1:如果 CPU 支持则启用 AVX。

  • R(寄存器分配)

    • 0:不执行寄存器分配。

    • 1:执行局部域寄存器分配。

    • 2:执行全局寄存器分配。

  • T(触发)

    • 0: 在脚本加载时编译所有函数。

    • 1: 在第一次执行时编译函数。

    • 2:第一次请求时分析函数,然后编译最热门函数。

    • 3:动态分析和编译热门函数。

    • 4:目前未使用。

    • 5:使用追踪 JIT。动态分析和为热门代码段编译追踪。

  • O(优化级别)

    • 0:不 JIT。

    • 1:最小 JIT(调用标准 VM 处理程序)。

    • 2:内联 VM 处理程序。

    • 3:使用类型推断。

    • 4:使用调用图。

    • 5:优化整个脚本。

基于此,我们可以大概得到如下几个结论:

  • 尽量使用 12x5 型的配置,此时应该是效果最优的;

  • 对于 x, 如果是脚本级别的,推荐使用 0, 如果是 Web 服务型的,可以根据测试结果选择 3 或 5。


参考资料:

点赞
收藏
暂无评论,快来发表评论吧~
私信
老牛@ilaoniu
老牛,俗称哞哞。单纯的九零后理工小青年。喜欢折腾,爱玩,爱音乐,爱游戏,爱电影,爱旅游...
最后活跃于