Junto con el núcleo de PHP 8 se ha integrado finalmente un compilador JIT para PHP que mejora el tiempo de ejecución de los scripts, aunque por ahora las mejoras se restringen a ciertos escenarios. En este tutorial vamos a ver cómo activar y cómo configurar JIT para que puedas utilizarlo con tus aplicaciones o con tus scripts.
Contenidos
Activa la extensión OPCache
Antes de ponernos manos a la obra, es importante decir que JIT solamente funcionará si la extensión OPcache de PHP está activada.
La extensión OPcache suele activarse automáticamente cuando instalas PHP. Sin embargo, es recomendable que compruebes si la extensión está realmente activada en el archivo de configuración php.ini
. Si no sabes en dónde está el archivo php.ini
, consulta la siguiente guía, en la que explico cómo encontrar el archivo php.ini.
Una vez hayas encontrado el archivo php.ini
, edítalo y asegúrate de que la opción opcache.enable
tiene asignado el valor 1
, ya que si tiene asignado el valor 0
no funcionará:
opcache.enable = 1
También puedes activar la extensión al vuelo si usas PHP mediante la línea de comandos mediante el flag -d
:
php -d opcache.enable=1
Si vas a usar JIT en un script CLI de línea de comandos, tendrás que usar el flag -d
con el siguiente valor par activar la extensión OPcache:
php -d opcache.enable_cli=1
opcache.enable
y opcache.enable_cli
es que la primera opción está destinada a la ejecución de PHP en un entorno de servidor, mientras que la segunda está destinada a su uso en scripts CLI, ya que podríamos querer establecer una configuración diferente para cada caso.Cómo activar JIT
Par activar JIT, debes editar el archivo php.ini y especificar algún valor para la opción opcache.jit_buffer_size
. En caso de que la opción no esté presente, agrégala al archivo:
opcache.jit_buffer_size = 64M
Hemos establecido el valor de 64M
, pero puedes usar lo que creas oportuno en base a los requerimientos de tu script o de tu aplicación.
Alternativamente, si vas a usar PHP mediante la línea de comandos, también puedes activar la extensión mediante el flag -d
:
php -d opcache.enable=1 -d opcache.jit_buffer_size=64M
Si tu intención es la de usar JIT en algún script CLI, también puedes activar JIT del siguiente modo:
php -d opcache.enable_cli=1 -d opcache.jit_buffer_size=64M
Cómo testear JIT
JIT ya debería estar activado y listo para funcionar. Sin embargo, vamos a asegurarnos de que todo está en orden creando un pequeño script que podamos ejecutar desde la terminal de desde el navegador. En el script vamos a usar el comando opcache_get_status
para luego comprobar su salida:
$estado = opcache_get_status();
var_dump($resultado['jit']);
Lo que hemos hecho es obtener el estado actual de la extensión OPcache. Sabrás si OPcache está usando JIT mediante la opción enabled
. Si el valor de la opción enabled
es true
, significa que el compilador JIT está activado:
array:7 [
"enabled" => true
"on" => true
"kind" => 5
"opt_level" => 4
"opt_flags" => 6
"buffer_size" => 4080
"buffer_free" => 0
]
Cómo configurar JIT
A continuación vamos a ver cómo configurar JIT. Entre otros factores, podemos configurar cuándo funcionará JIT y el nivel de optimización que deberá aplicar. Para configurar JIT tendremos que abrir el archivo php.ini
y agregar o modificar el valor de la opción opcache.jit
, que por defecto tendrá el siguiente valor:
opcache.jit = 1235
JIT se configura mediante una única opción y mediante un único valor. El valor 1235
del ejemplo anterior no representa un número entero, sino una serie de dígitos que sirven para configurar JIT. Cada dígito representa un valor de una de las opciones de configuración. Además, alternativamente, también acepta los valores tracing
y function
, que en realidad se traducen a sus respectivos valores numéricos:
tracing
: JIT intentará identificar y optimizar todo el código. Es la opción recomendable.function
: JIT intentará identificar y optimizar el código en el ámbito de determinadas funciones.
Entrando en detalle, vamos a ver todos los posibles valores numéricos de los dígitos de la opción opcache.jit
, de izquierda a derecha. El primer dígito se corresponde con la opción C
, el segundo con la opción R
, el tercero con la opción T
y el cuarto con la opción O
:
C: Opciones de optimización de la CPU
Existen dos posibles valores para esta opción:
Valor | Significado |
---|---|
0 | Nada |
1 | Activar generación de instrucciones AVG |
R: Opciones de asignación de registro
Existen tres posibles valores para esta opción:
Valor | Significado |
---|---|
0 | Do realizar ninguna asignación de registro |
1 | Usar asignación de registro por escaneo de líneas local |
2 | Usar asignación de registro por escaneo de líneas global |
T: Opciones de activación (Trigger) de JIT
Existen cinco posibles valores para esta opción:
Valor | Significado |
---|---|
0 | Usar JIT con todas las funciones durante la carga del primer script |
1 | Usar JIT con todas las funciones en la primera ejecución |
2 | Realizar comprobaciones en la primera petición y compilar los puntos calientes en la segunda petición |
3 | Realizar las comprobaciones al vuelo y compilar los puntos calientes |
4 | Compilar funciones que incluyan la etiqueta @jit en su bloque de documentación php-doc |
O: Opciones de optimización
Existen cinco seis posibles valores para esta opción:
Valor | Significado |
---|---|
0 | No usar JIT |
1 | Uso mínimo de JIT mediante la llamada a los manejadores VM estándar |
2 | Handler en línea VM selectivo |
3 | Optimizar JIT en base a la inferencia de tipos estáticos de cada función individual |
4 | Optimizar JIT en base a la inferencia de tipos estáticos del árbol de ejecución |
5 | Optimizar JIT en base a la inferencia de tipos estáticos y análisis de procedimientos internos |
Puedes encontrar todas las opciones de configuración en este enlace, que también puedes ver a continuación,
Configuración recomendada
Según la recomendación oficial, el valor más optimo para la opción de configuración opcache.jit
del archivo php.ini
es el valor 1255
, que aplicará el compilado JIT siempre que sea posible, usando asignación de registro por escaneo de líneas local y también la generación de instrucciones AVX.
Estos son los valores finales recomendados que deberías incluir en tu archivo php.ini
:
opcache.enable = 1 opcache.jit_buffer_size = 64M opcache.jit = 1255
Mediante le opción opción opcache.jit_buffer_size
hemos establecido un tamaño de 64M
para el buffer, aunque un valor más recomendable podría ser de 100M
.
Si no asignas un valor a la opción opcache.jit
, se asignará un valor por defecto. Si omites la opción, el valor de la opción será tracing
.
Esto ha sido todo.
Buenas tarde Edu Lázaro espero que estés bien.
Yo tengo una sola pregunta con respecto al JIT u Opcache y es la siguiente: Los códigos que supuestamente se están guardando en cache tu sabría en que ruta de archivo se estarían guardando?