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 即时编译器开源的主要内容,如果未能解决你的问题,请参考以下文章