版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第PHP8新特性之JIT案例讲解PHP8alpha1已经在昨天发布,相信关于JIT是大家最关心的,它到底怎么用,有什么要注意的,以及性能提升到底咋样?
首先,我们来看一张图:
左图是PHP8之前的Opcache流程示意图,右图是PHP8中的Opcache示意图,可以看出几个关键点:
PHP8的JIT是在Opcache之中提供的
目前PHP8只支持x86架构的CPU
JIT是在原来Opcache优化的优化基础之上进行优化的,不是替代
事实上JIT共用了很多原来Opcache做优化的基础数据结构,比如dataflowgraph,callgraph,SSA等,关于这部分,后续如果有时间,可以单独在写一个文章来介绍,今天就只是着重在使用层面。
下载安装好以后,除掉原有的opcache配置以外,对于JIT我们需要添加如下配置到php.ini:
opcache.jit=1205
opcache.jit_buffer_size=64M
opcache.jit这个配置看起来稍微有点复杂,我来解释下,这个配置由4个独立的数字组成,从左到右分别是(请注意,这个是基于目前alpha1的版本设置,一些配置可能会随着后续版本做微调):
是否在生成机器码点时候使用AVX指令,需要CPU支持:0:不使用
1:使用
寄存器分配策略:0:不使用寄存器分配
1:局部(block)域分配
2:全局(function)域分配
JIT触发策略:0:PHP脚本载入的时候就JIT
1:当函数第一次被执行时JIT
2:在一次运行后,JIT调用次数最多的百分之(f_threshold*100)的函数
3:当函数/方法执行超过N(N和opcache.jit_hot_func相关)次以后JIT
4:当函数方法的注释中含有@jit的时候对它进行JIT
5:当一个Trace执行超过N次(和opcache.jit_hot_loop,jit_hot_return等有关)以后JIT
JIT优化策略,数值越大优化力度越大:0:不JIT
1:做opline之间的跳转部分的JIT
2:内敛opcodehandler调用
3:基于类型推断做函数级别的JIT
4:基于类型推断,过程调用图做函数级别JIT
5:基于类型推断,过程调用图做脚本级别的JIT
基于此,我们可以大概得到如下几个结论:
尽量使用12x5型的配置,此时应该是效果最优的
对于x,如果是脚本级别的,推荐使用0,如果是Web服务型的,可以根据测试结果选择3或5
@jit的形式,在有了attributes以后,可能变为
现在,我们来测试下启用和不启用JIT的时候,Zend/bench.php的差异,首先是不启用(php-dopcache.jit_buffer_size=0Zend/bench.php):
simple0.008
simplecall0.004
simpleucall0.004
simpleudcall0.004
mandel0.035
mandel20.055
ackermann(7)0.020
ary(50000)0.004
ary2(50000)0.003
ary3(2000)0.048
fibo(30)0.084
hash1(50000)0.013
hash2(500)0.010
heapsort(20000)0.027
matrix(20)0.026
nestedloop(12)0.023
sieve(30)0.013
strcat(200000)0.006
------------------------
Total0.387
根据上面的介绍,我们选择opcache.jit=1205,因为bench.php是脚本(php-dopcache.jit_buffer_size=64M-dopcache.jit=1205Zend/bench.php):
simple0.002
simplecall0.001
simpleucall0.001
simpleudcall0.001
mandel0.010
mandel20.011
ackermann(7)0.010
ary(50000)0.003
ary2(50000)0.002
ary3(2000)0.018
fibo(30)0.031
hash1(50000)0.011
hash2(500)0.008
heapsort(20000)0.014
matrix(20)0.015
nestedloop(12)0.011
sieve(30)0.005
strcat(200000)0.004
------------------------
Total0.157
可见,对于Zend/bench.php,相比不开启JIT,开启了以后,耗时降低将近60%,性能提升将近2倍。
对于大家研究学习来说,可以通过opcache.jit_debug来观测JIT后生成的汇编结果,比如对于:
functionsimple(){
$a=0;
for($i=0;$i1000000;$i++)
$a++;
}
我们通过php-dopcache.jit=1205-dopcache.jit_debug=0x01可以看到:
JIT$simple:;(/tmp/1.php)
sub$0x10,%rsp
xor%rdx,%rdx
jmp.L2
add$0x1,%rdx
cmp$0x0,EG(vm_interrupt)
jnz.L4
cmp$0xf4240,%rdx
jl.L1
mov0x10(%r14),%rcx
test%rcx,%rcx
jz.L3
mov$0x1,0x8(%rcx)
mov0x30(%r14),%rax
mov%rax,EG(current_execute_data)
mov0x28(%r14),%edi
test$0x9e0000,%edi
jnzJIT$$leave_function
mov%r14,EG(vm_stack_top)
mov0x30(%r14),%r14
cmp$0x0,EG(exception)
mov(%r14),%r15
jnzJIT$$leave_throw
add$0x20,%r15
add$0x10,%rsp
jmp(%r15)
mov$0x45543818,%r15
jmpJIT$$interrupt_handler
而如果我们采用opcache.jit=1201,我们可以得到如下结果:
JIT$simple:;(/tmp/1.php)
sub$0x10,%rsp
callZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER
add$0x40,%r15
jmp.L2
callZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER
cmp$0x0,EG(exception)
jnzJIT$$exception_handler
cmp$0x0,EG(vm_interrupt)
jnzJIT$$interrupt_handler
callZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER
cmp$0x0,EG(exception)
jnzJIT$$exception_handler
cmp$0x452a0858,%r15d
jnz.L1
add$0x10,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江临安农村商业银行股份有限公司2027届校园招聘笔试参考题库及答案解析
- 2026年湖北省宜昌市公务员人员招聘考试参考试题与答案详解
- 某水泥厂节能降耗规范
- 2026四川内江经开区就业和社会保障服务中心招聘见习人员1人笔试参考题库及答案解析
- 2026山东淄博职业技术大学高层次人才招聘13人(第二批)考试备考题库及答案解析
- 2026年福建省五建建设集团有限公司招聘第二批工作人员9人考试模拟试题及答案解析
- 2026年芜湖智能传感器研究院有限公司专业技术人才招聘部分岗位补招笔试模拟试题及答案解析
- 2026年浙江省台州市公务员人员招聘笔试参考试题与答案详解
- 2026宁电投(石嘴山市)能源发展有限公司秋季招聘30人考试模拟试题及答案解析
- 2026重庆水利电力职业技术学院考核招聘事业单位人员(第二批)8人考试备考试题及答案解析
- 浪潮式发售(全新升级版) (杰夫·沃克)
- 中医红外热像采集与分析技术规范
- 定语从句专项训练50题可打印
- 重复经颅磁刺激治疗与护理
- 火灾与爆炸的预防措施
- 电力工程竣工验收报告及流程
- CFSLM治疗先天性重度上睑下垂的临床体会
- 2025年中国联通校园招聘笔试参考题库含答案解析
- 经导管主动脉瓣置换术围手术期共病诊治中国专家共识
- 钢结构监理实施细则
- 高填深挖路基监控量测施工方案 - 副本
评论
0/150
提交评论