Habilitando a compilação JIT (Just In Time) para o PHP8 no Ubuntu

Publicado por leandro peçanha scardua em 22/06/2022

[ Hits: 2.526 ]

Blog: https://leandropecanhascardua.github.io/

 


Habilitando a compilação JIT (Just In Time) para o PHP8 no Ubuntu



O recurso Just In Time foi adicionado à versão 8 do PHP lançada em 2020 e promete ganhos interessantes de performance.

Esse recurso pode ser entendido como uma evolução do OPCache (que já existe) e que permite guardar um trecho de código já processado em memória compartilhada, eliminando alguns passos de processamento para melhorar a performance.

O Just In time, porém, é um passo além: ele permite guardar um trecho já processado diretamente em código binário nativo para a máquina, eliminando momentaneamente o interpretador para turbinar a aplicação!

É claro que não são todas as aplicações que vão se beneficiar deste recurso, mas isso já é uma outra história.

Na instalação padrão do PHP esse recurso vem desabilitado (até o momento da escrita desta dica). Então vamos verificar como está a configuração do ambiente primeiro.

Verificar se JIT está habilitado

Primeiramente, vamos criar um script auxiliar para explorar as configurações do ambiente. Abra seu editor de textos favorito e digite o seguinte código:

<?php
phpinfo();
?>

Salve com o nome "teste.php".

Nosso teste será com o servidor interno do PHP executado pela linha de comando, mas os passos serão os mesmos para o Apache, o que mudará será apenas o arquivo de configuração php.ini.

Vamos então rodar o servidor na porta 9000 na mesma pasta onde está o arquivo teste.php:

php -S localhost:9000

Agora verificamos a configuração acessando http://localhost:9000/teste.php no navegador:
Podemos ver que estamos usando o arquivo /etc/php/8.0/cli/php.ini olhando o item "Loaded Configuration File". É esse arquivo que vamos modificar.

Agora vamos verificar se o recurso JIT está ou não habilitado. Descemos a página até encontrar o item "JIT" na seção "Zend OPcache".
Como podemos ver, está desabilitado.

Modificando o arquivo de configuração php.ini

Primeiramente vamos verificar algumas configurações relacionadas ao opcache:

grep zend_extension /etc/php/8.0/apache2/php.ini

;zend_extension=opcache

grep opcache.enable /etc/php/8.0/apache2/php.ini

;opcache.enable=1
;opcache.enable_cli=1
;opcache.enable_file_override=0

Como podemos ver as linhas estão comentadas, o que significa que o recurso está desabilitado. Pode ser que a linha opcache.enable esteja com valor (opcache.enable=0). Neste caso modifique para o valor 1 e salve o conteúdo.

Precisamos adicionar as seguintes linhas ao final do arquivo:

opcache.jit_buffer_size=100M
opcache.jit=1235
opcache.jit_debug=1

Pode acontecer de o recurso JIT não ser habilitado por causa de incompatibilidade com outro plugin ou extensão. Veríamos uma mensagem como a seguinte:

php -S localhost:9000
Cannot load Zend OPcache - it was already loaded
[Sun Jun 5 23:06:44 2022] PHP Warning: JIT is incompatible with third party extensions that override zend_execute_ex(). JIT disabled. in Unknown on line 0

Warning: JIT is incompatible with third party extensions that override zend_execute_ex(). JIT disabled. in Unknown on line 0
[Sun Jun 5 23:06:44 2022] PHP 8.0.17 Development Server (http://localhost:9000) started


No meu caso, a incompatibilidade foi com a extensão XDebug, usada durante o desenvolvimento para finalidades de depuração. Será necessário desabilitar essa extensão. Normalmente as extensões são instaladas num diretório conf.d junto ao arquivo php.ini. No meu caso seria /etc/php/8.0/cli/conf.d/. Para facilitar já temos um arquivo com o nome da extensão:

cat /etc/php/8.0/cli/conf.d/20-xdebug.ini

zend_extension=xdebug.so
xdebug.mode = debug

Como podemos ver, a extensão está habilitada. Vamos desabilitar apenas setando o valor "Off".

cat /etc/php/8.0/cli/conf.d/20-xdebug.ini

zend_extension=xdebug.so
;xdebug.mode = debug
xdebug.mode=Off

A partir daqui o recurso já está configurado e operacional se todas as extensões incompatíveis estiverem desabilitadas.

Para testar, precisamos reiniciar o nosso servidor de linha comando (rodar novamente) e se estivermos configurando o Apache precisamos reiniciar o servidor.

sudo systemctl restart apache2

Agora acessamos novamente http://localhost:9000/teste.php para verificar o status:


Conclusão

Embora a nova versão do PHP tenha trazido novidades interessantes para o quesito performance,pelo menos no momento atual elas não vêm configuradas por padrão, sendo necessário proceder à modificação dos arquivos do sistema.

O ganho pode não ser perceptível para todos os tipos de aplicação. Aquelas de uso mais intensivo de CPU podem apresentar melhores resultados.

Eu usei nesta dica o servidor interno do PHP disponível pela linha de comando, mas as modificações serão as mesmas para o servidor Apache (não testei usando NGinx ou outros servidores http).

Outras dicas deste autor

Obtendo lista dos repositórios de pacotes em sistemas derivados do Debian

Referenciando linhas anteriores em um arquivo csv usando Pandas

Habilitando Som no Linux Mint via script

Colocar dispositivo móvel Samsung em modo Download pela linha de comando

Leitura recomendada

Bloqueando PortScanners com IPTABLES

Antispam no Zimbra

Implementando suporte a tradução com GetText + Google Translate API

tmux: melhorando a experiência com o terminal

Ligando o NumLock na abertura do KDE

  

Comentários
[1] Comentário enviado por maurixnovatrento em 09/07/2022 - 13:43h


Dica útil.

___________________________________________________________
Conhecimento não se Leva para o Túmulo.
https://github.com/mxnt10



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts