TL: DR;
Todos os exemplos podem ser baixados do github e executados imediatamente: github.com/xtrime-ru/php8-test
Treinamento
Primeiro vocĂȘ precisa instalar o docker e docker-compose.
Agora vamos criar um arquivo opcache.ini que habilitarĂĄ opcache e JIT em nosso contĂȘiner.
; Extended PHP.ini file to enable JIT.
; ====================================
; Place this file under /usr/local/etc/php/conf.d/
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.jit_buffer_size=32M
opcache.jit=1235
Agora vocĂȘ precisa criar um Dockerfile em sua pasta de trabalho.
A lista de pacotes e extensĂ”es Ă© fornecida como exemplo. VocĂȘ pode excluir essas linhas ou especificar as extensĂ”es necessĂĄrias. AlĂ©m disso, algumas das extensĂ”es populares jĂĄ estĂŁo incluĂdas na imagem de base. Portanto, nĂŁo hĂĄ necessidade de incluir json, xml e muitos outros.
FROM php:8.0-rc-cli
COPY opcache.ini /usr/local/etc/php/conf.d/
RUN apt-get update && apt-get upgrade -y \
&& apt-get install apt-utils -y \
#
#
&& apt-get install git zip vim libzip-dev libgmp-dev libffi-dev libssl-dev -y \
#
#
&& docker-php-ext-install -j$(nproc) sockets zip gmp pcntl bcmath ffi \
#
# pecl , php 8 pecl ,
# && PHP_OPENSSL=yes pecl install ev \
# && docker-php-ext-enable ev \
#
#
&& docker-php-source delete \
&& apt-get autoremove --purge -y && apt-get autoclean -y && apt-get clean -y
O Ășltimo arquivo permanece. Ă docker-compose.yml, que facilita o gerenciamento de contĂȘineres durante o desenvolvimento.
version: '3.5'
services:
php8-test:
build: ./
container_name: php8-test
restart: unless-stopped
volumes:
- ./:/app
working_dir: /app
entrypoint: "php -S 0.0.0.0:8000"
ports:
- "127.0.0.1:8000:8000"
logging:
driver: "json-file"
options:
max-size: "1024k"
max-file: "2"
Agora vocĂȘ pode executar a construção e os testes do contĂȘiner.
- Crie a imagem: docker-compose build
- Execute o contĂȘiner em segundo plano: docker-compose up -d
- Conecte-se ao contĂȘiner: docker exec -it php8-test / bin / bash
- A pasta atual no contĂȘiner Ă© sincronizada com a pasta do projeto. Os arquivos podem ser editados na mĂĄquina local.
- Baixe o arquivo de benchmark: github.com/php/php-src/blob/master/Zend/bench.php
- Execute o banco: php bench.php
- VocĂȘ pode desabilitar jit ou opcache dentro do contĂȘiner aqui: /usr/local/etc/php/conf.d/opcache.ini para ver como o desempenho muda
- Em docker-compose.yml, vocĂȘ pode alterar as diretivas `volumes` e` workdir` para vincular outros diretĂłrios ao contĂȘiner. VocĂȘ tambĂ©m pode alterar o ponto de entrada para executar outro comando quando o contĂȘiner for iniciado. Por exemplo, `php artisan serve` para laravel.
- Todos os arquivos também podem ser visualizados no navegador em http://127.0.0.1:8000/
O entrypoint e as diretivas de portas sĂŁo responsĂĄveis ââpor isso.
Benchmark
Arquivo de referĂȘncia do repositĂłrio php oficial: github.com/php/php-src/blob/master/Zend/bench.php
#########################
# php 7.4.9
# opcache.enable=1
# opcache.enable_cli=0
simple 0.053
simplecall 0.007
simpleucall 0.019
simpleudcall 0.022
mandel 0.182
mandel2 0.220
ackermann(7) 0.038
ary(50000) 0.006
ary2(50000) 0.005
ary3(2000) 0.045
fibo(30) 0.069
hash1(50000) 0.014
hash2(500) 0.008
heapsort(20000) 0.036
matrix(20) 0.034
nestedloop(12) 0.089
sieve(30) 0.014
strcat(200000) 0.006
------------------------
Total 0.867
#########################
# php 7.4.9
# opcache.enable=1
# opcache.enable_cli=1
simple 0.007
simplecall 0.003
simpleucall 0.004
simpleudcall 0.003
mandel 0.088
mandel2 0.113
ackermann(7) 0.036
ary(50000) 0.006
ary2(50000) 0.007
ary3(2000) 0.039
fibo(30) 0.055
hash1(50000) 0.012
hash2(500) 0.008
heapsort(20000) 0.030
matrix(20) 0.029
nestedloop(12) 0.041
sieve(30) 0.011
strcat(200000) 0.007
------------------------
Total 0.499
#########################
# php 8.0-rc
# opcache.enable=1
# opcache.enable_cli=1
# opcache.jit_buffer_size=128M
# opcache.jit=1235
simple 0.002
simplecall 0.001
simpleucall 0.001
simpleudcall 0.001
mandel 0.008
mandel2 0.009
ackermann(7) 0.016
ary(50000) 0.006
ary2(50000) 0.007
ary3(2000) 0.015
fibo(30) 0.030
hash1(50000) 0.016
hash2(500) 0.011
heapsort(20000) 0.014
matrix(20) 0.012
nestedloop(12) 0.010
sieve(30) 0.004
strcat(200000) 0.006
------------------------
Total 0.168
O JIT, Ă© claro, acelera muito as operaçÔes relacionadas Ă CPU. Mas algo mais me surpreendeu. O padrĂŁo do Php Ă© opcache.enable_cli = 0. Se vocĂȘ habilitar esta opção, vocĂȘ pode obter um aumento duplo no benchmark. Pessoalmente, eu nĂŁo sabia que o opcache pode acelerar tanto os comandos cli.
Eu testei vårias vezes em recipientes limpos, bem como pré-limpei o opcache. O resultado é sempre o mesmo: opcache.enable_cli = 1 acelera o benchmark da primeira execução.
A documentação do opcache.enable diz: "Se desativado, o código não serå otimizado e armazenado em cache."
Infelizmente, em scripts cli reais, os resultados apĂłs habilitar opcache.enable_cli e jit podem ser muito diferentes. Em um projeto obtive um ganho de 5% (4,0 seg -> 3,8 seg), e no outro projeto, ao contrĂĄrio, uma desaceleração (0,088 seg -> 0,11 seg). Portanto, vocĂȘ definitivamente deve testar as configuraçÔes em seus prĂłprios projetos.