Zend JIT 即时编译器开源

Posted OSC开源社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zend JIT 即时编译器开源相关的知识,希望对你有一定的参考价值。


https://github.com/zendtech/php-src/tree/zend-jit/ext/opcache/jit


该分支包含 PHP JIT 的 PoC 概念实现,JIT 是 OPCache 的部分实现,不要求对 PHP 引擎进行任何修改,设计时 100% 兼容。JIT 使用 LLVM 后端,在 x86 和 x86_64 平台下测试通过。目前该项目还在体验阶段。


构建


PHP 可通过如下参数进行配置和构建。LLVM 代码不稳定,因此版本间可能会有一些不兼容的问题。建议使用 LLVM 3.5 来避免兼容性问题。


  • --enable-jit

  • --with-llvm=/usr/local/llvm-3.5'

  • --with-valgrind

  • --with-oprofile


配置


为了启用 JIT 需要在 opcache ini 指令增加新行:

  • opcache.jit_buffer_size=32M


性能


JIT 提供超过 5 倍的性能提升,一些如 Mandelbrot 的性能提升 30 倍


Test JIT off JIT on
simple 0.030 0.004
simplecall 0.013 0.000
simpleucall 0.040 0.008
simpleudcall 0.041 0.008
mandel 0.210 0.007
mandel2 0.280 0.009
ackermann(7) 0.062 0.014
ary(50000) 0.006 0.003
ary2(50000) 0.005 0.003
ary3(2000) 0.088 0.027
fibo(30) 0.126 0.037
hash1(50000) 0.017 0.012
hash2(500) 0.017 0.010
heapsort(20000) 0.053 0.018
matrix(20) 0.055 0.024
nestedloop(12) 0.059 0.010
sieve(30) 0.039 0.007
strcat(200000) 0.008 0.004
Total 1.147 0.206


不幸的是 JIT 并没有提升真实应用的性能,同时 LLVM 编译时间也不适合运行时代码生成的。


以上是关于Zend JIT 即时编译器开源的主要内容,如果未能解决你的问题,请参考以下文章

jit即时编译

jit即时编译

即时编译器(JIT) 速成课

『GCTT 出品』使用 Go 语言写一个即时编译器(JIT)

浅析 JIT 即时编译技术

JVM之JIT即时编译