一、简介
OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是省去了每次加载和解析 PHP 脚本的开销。
PHP 8 之后正式支持 JIT 下的 OPcache,加速效果再一次提升。
左图是 PHP 8 之前的 OPcache 流程示意图, 右图是 PHP 8 中的 OPcache 示意图。
二、使用
除掉原有的 OPcache 配置以外,对于 JIT 我们需要添加如下配置到 php.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。
参考资料: