Zend JIT 即时编译器开源

jopen 10年前

Zend 宣布 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 编译时间也不适合运行时代码生成的。

来自:http://www.oschina.net/news/60073/zend-jit-opensource