如何在PHP 8中设置JIT

2024-05-24 23:48
文章标签 设置 php jit

本文主要是介绍如何在PHP 8中设置JIT,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PHP 8在PHP的内核中添加了JIT编译器,可以极大地提高性能。关于对实际Web应用程序的实际影响,需要做一些旁注,这就是为什么我对JIT的性能进行一些基准测试的原因(我也在脚注中列出了所有相关参考资料)。

我还想写一篇有关如何设置JIT的博客文章,因为有很多事情要讨论。

老实说,设置JIT是我见过的配置PHP扩展最混乱的方法之一。幸运的是,有一些可用的配置速记,因此更容易设置。深入了解JIT配置仍然是一件好事,所以在这里说明。

首先,仅在启用opcache的情况下,JIT才有效,这是大多数PHP安装的默认设置,但您应确保opcache.enablephp.ini文件中将其设置为1 。通过在php.ini中指定opcache.jit_buffer_size来启用JIT本身。

请注意,如果您通过命令行运行PHP,则还可以通过-d标志传递这些选项,而不是将它们添加到php.ini

php -dopcache.enable=1 -dopcache.jit_buffer_size=100M

如果不包含此伪指令,那么默认值将设置为0,并且JIT将不会运行。如果要在CLI脚本中测试JIT,则需要使用opcache.enable_cli来启用opcache:

php -dopcache.enable_cli=1 -dopcache.jit_buffer_size=100M

opcache.enableopcache.enable_cli之间的区别是,如果要运行,例如内置的PHP服务器则应该使用前者。如果您实际上正在运行CLI脚本,则需要opcache.enable_cli

在继续之前,让我们确保JIT确实有效,创建一个可通过浏览器或CLI访问的PHP脚本(取决于您测试JIT的位置),并查看以下输出opcache_get_status()

var_dump(opcache_get_status()['jit']);

输出应该是这样的:

array:7 ["enabled" => true"on" => true"kind" => 5"opt_level" => 4"opt_flags" => 6"buffer_size" => 4080"buffer_free" => 0
]

如果enabledon是正确的,那您就对了!

接下来,有几种配置JIT的方法(这是我们讨论配置混乱的地方)。您可以配置JIT运行的时间,应该尝试优化的数量等等。所有这些选项都使用一个配置条目配置:opcache.jit! 它可能看起来像这样:

opcache.enable=1 
opcache.jit=1255

现在,这个数字是什么意思?该RFC列出他们每项的意义。请注意:这不是位掩码,每个数字仅表示一个配置选项。RFC列出了以下选项:

#O-优化级别

0不要JIT
1个最小JIT(调用标准VM处理程序)
2选择性VM处理程序内联
3基于单个函数的静态类型推断的优化JIT
4基于静态类型推断和调用树的优化JIT
5基于静态类型推断和内部过程分析的优化JIT

#T — JIT触发器

0JIT第一次脚本加载时的所有函数
1个首次执行时JIT函数
2在第一个请求时进行概要分析,并在第二个请求时编译热函数
3动态分析并编译热函数
4在文档注释中使用@jit标记编译函数
5跟踪JIT

#R-寄存器分配

0不执行寄存器分配
1个使用本地线性扫描寄存器分配器
2使用全局线性扫描寄存器分配器

#C — CPU特定的优化标志

0没有
1个启用AVX指令生成

一个问题:RFC以相反的顺序列出了这些选项,因此第一个数字代表C值,第二个数字代表值R,依此类推。为什么我不理解为什么根本没有添加四个配置条目,可能是为了更快地配置JIT?

无论如何,内部人员建议将1255作为最佳默认设置,它将最大程度地jitting,使用跟踪JIT,使用全局线性扫描寄存器分配器(无论如何)并启用AVX指令生成。

因此,您的ini设置(或-d标志)应具有以下值:

opcache.enable=1 
opcache.jit_buffer_size=100M
opcache.jit=1255

请记住,这opcache.jit是可选的。如果忽略该属性,则JIT将使用默认值。

您问哪个默认值?那会是opcache.jit=tracing

等等,那不是我们之前看到的奇怪的类似于位掩码的结构吗?没错:在原始RFC通过之后,内部人员意识到,类似于位掩码的选项并不是所有的用户友好选项,因此他们添加了两个别名,这些别名被转换为底层的位掩码。有opcache.jit=tracingopcache.jit=function

两者之间的区别在于,函数JIT仅会尝试在单个函数的范围内优化代码,而跟踪JIT可以查看整个堆栈跟踪以识别和优化热代码。内部人员建议使用跟踪JIT,因为它几乎总是可以提供最佳结果。您可以在我完成的基准测试中了解这些结果。

因此,您实际上需要设置的唯一选项以启用最佳配置来启用JIT是 opcache.jit_buffer_size,但是如果您要明确一点,列出opcache.jit并不是一个坏主意:

opcache.enable=1 
opcache.jit_buffer_size=100M
opcache.jit=tracing

原文 https://stitcher.io/blog/php-8-jit-setup 原创翻译:转载请注明来自lenix的博客,地址https://blog.p2hp.com/archives/7577

这篇关于如何在PHP 8中设置JIT的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/999880

相关文章

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...

MySQL8.0设置redo缓存大小的实现

《MySQL8.0设置redo缓存大小的实现》本文主要在MySQL8.0.30及之后版本中使用innodb_redo_log_capacity参数在线更改redo缓存文件大小,下面就来介绍一下,具有一... mysql 8.0.30及之后版本可以使用innodb_redo_log_capacity参数来更改

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要

电脑密码怎么设置? 一文读懂电脑密码的详细指南

《电脑密码怎么设置?一文读懂电脑密码的详细指南》为了保护个人隐私和数据安全,设置电脑密码显得尤为重要,那么,如何在电脑上设置密码呢?详细请看下文介绍... 设置电脑密码是保护个人隐私、数据安全以及系统安全的重要措施,下面以Windows 11系统为例,跟大家分享一下设置电脑密码的具体办php法。Windo