Cómo configurar JIT en PHP 8

PHP

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.

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
Información! La diferencia entre las opciones 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
*Nota: Consulta el siguiente enlace para obtener más información acerca del estilo de asignación de registro liner-scan por escaneo de líneas.

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
*Nota: VM hace referencia a la máquina virtual de Zend, Zend VM.

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.


Avatar de Edu Lazaro

Edu Lázaro: Ingeniero técnico en informática, actualmente trabajo como desarrollador web y programador de videojuegos.

👋 Hola! Soy Edu, me encanta crear cosas y he redactado esta guía. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirla en Twitter 😊

Si quieres conocer mis proyectos, sígueme en Twitter.

1 comentario en “Cómo configurar JIT en PHP 8

  1. 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?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

“- Hey, Doc. No tenemos suficiente carretera para ir a 140/h km. - ¿Carretera? A donde vamos, no necesitaremos carreteras.”