:::: MENU ::::

Benchmarks do Symfony com PHP 5.6 PHP7 e HHVM

Fala galera iluminatti, beleza?
Ja vi vários posts sobre benchmarks entre PHP 5.x , HHVM, PHP 7, mas a maioria separados, e achei um bem interessante agora, que roda em um projeto que não é só um Hello World o que torna isso mais “real”.

Então, esperamos pra $#$# o update do PHP 5 para o 7, mesmo assim a versão 5.x teve bastante updates significativos como o Opcode cache que entrou por padrão desde a versão 5.5.x.

O HHVM, do Facebook (a rede social aquela que as tias compartilham imagem com paisem de fundo e frases de auto ajuda) é um compilador em runtime para armazenar grandes aplicações, caras como o Wikipédia usam ele como padrão e dependem totalmente do mesmo.

Desde que a versão funcional do PHP 7.x apareceu, apareceram também um monte de benchmarks que eu chamo de benchmark preguiçoso da zueira sem graça (na verdade inventei essa frase agora) comparando PHP 5.x, HHVM e PHP 7.x. O problema é que a maioria deles, como falei no inicio roda apenas um Hello World ou seja, não da pra tirar base nenhuma disso (no minimo da pra ver que o interpretador em runtime realmente funciona).

A release atual do eZ Platform é um CMS feito todo com o Symfony na versão 2.7.x, ou seja, um pu$# candidato pra um benchmark pois ele tem um código relativamente novo, é grande e bem feito.

Bom então vamos ver como essa aplicação vai se comportar nesses três tipos de variações do interpretador.

Test de instalação

Para o teste foi usado a versão demo da plataforma com o tema e configuração padrão. Por padrão a configuração de produção usa o Symfony Proxy Reverse escrito em PHP.

O proxy suporta renderização ESI e outras funções complexas, por isso pode ter que fazer mais do que somente processar o armazenamento de HTML e um timestamp.

A configuração do servidor são dois servidores virtuais hospedados no UpCloud e conectados com uma rede de 1Gbit. A configuração tem 1 CPU e 1GB de RAM. Isso não é uma dadiva da revolução tecnologica em termos de maquina mas ja da pra usar o Stash Caching e limitar as chamadas de banco.

Belê, o benchmarking foi feito com navegação anônima no front, navegações em links, interações e tudo mais. Ainda foi usado as chamadas de conteudo por RESTful API uma feature do eZ Platform que nos permite pegar o conteudo via API e diminuir nosso bootstrap.

Os caches foram desativados e o processo feito manualmente.

1. Limpar todos os caches e reiniciar o servidor

2. Carregar a página inicial

3. Carregar a página de Top Series

4. Carregar a página de Projects

5. Carregar a página inicial

6. Iniciar os benchmarks

Os testes foram realizados três vezes, e foi feito uma média entre eles.

Memória e tempo de resposta

A maioria dos testes foca em processamento, mas aqui começamos por memória. Os testes foram realizados em modo dev do symfony , não pode ser comparado com produção.

Carregamento de pagina inicial com sem cache algum.

php-hhvm-graph-1

 

O uso de memória entre os picos parece uniforme, HHVM e o PHP 5.6 são praticamente iguais e o PHP 7 usa um pouco menos.

php-hhvm-graph-2

 

Já no tempo de resposta temos que concordar que o PHP 7 fez o que era proposto. Fez um bootstrap muito mais rápido que o restante.

Carregando  a pagina Top Stories

php-hhvm-graph-3

No carregamento da segunda página com dados ja “cacheados” em memória a variação foi muito grande, o PHP 5.6 consumiu em torno de 18MB onde o HHVM consumiu 4.5MB e o PHP 7 em torno de 2MB.

php-hhvm-graph-4

 

No tempo de resposta o PHP 5.6 foi deixado pra trás novamente, e o HHVM e o PHP 7 ficaram bem perto.

Carregando a página Projects

 

php-hhvm-graph-5

 

Mais ou menos como o anterior, o PHP 7 novamente se destacou no pouco uso de memória e já o PHP 5.6 ficou pra trás.

php-hhvm-graph-6

 

Aqui o PHP 7 foi  deixado um pouco pra trás, mas na vida real não chega a ser um problema.

Carregando a página inicial novamente

php-hhvm-graph-7

 

Depois de termos “cacheado” carregamos a página inicial novamente, o consumo em geral vai diminuir ja que temos bastante coisa em cache ainda assim o PHP 7 tem um bom destaque, e o PHP 5.6 acabou consumindo mais que o dobro do HHVM.

php-hhvm-graph-8

 

HHVM foi lento na primeira vez, pois teve de cachear, em seguida se mostrou bem superior a o PHP 5.6 e ficou mais perto do PHP 7.

Requisições completas por segundo

Depois de limparmos os caches rodamos os testes de requisições.

  • Pagina inicial sem o Symfony Proxy (concorrencias, 1, 10, 50)
  • Pagina inicial com Symfony Proxy (concorrencias, 1, 10, 50)
  • API sem o Symfony Proxy (concorrencias, 1, 10, 50)
  • API com o Symfony Proxy (concorrencias, 1, 10, 50)

Página inicial sem o Symfony Proxy

php-hhvm-graph-9

 

A página inicial rodando sem o Symfony reverse proxy . o HHVM e o PHP 7 tem praticamente o mesmo resultado já o PHP 5.6 se mostra bem inferior.

Página inicial com o Symfony Proxy

php-hhvm-graph-10

 

Já com o proxy na página inicial a vantagem do PHP 7 se destaca com clareza, possivelmente um avanço no uso de memória e recursos.

API sem o Symfony Proxy

php-hhvm-graph-12

 

Nas chamadas de API sem o proxy o symfony se manteve consitente. O PHP 5.6 entregou em volta de 30 requisições por segundo, o HHVM em torno de 60 e o PHP 7 ficou aproximadamente 20 requisições a frente do HHVM.

 

API com o Symfony Proxy

php-hhvm-graph-11

 

Ja com o proxy os resutados lembram o da página inicial, com baixa concorrência o PHP 5.6 e o HHVM são parecidos, o HHVM escala um pouco melhor. Ambos ficam bem inferiores em comparação com o PHP 7.

Conclusão

Ambos HHVM e PHP 7 são boas opções pra dar aquela “tunada” na aplicação sem precisar mecher em código. A instalação é simples em um PHP-FPM existente, e uma simples configuração no FastCGI.

O PHP 7 teve uma melhoria significativa tanto sobre o PHP 5.6 e HHVM. Juntamente com o mais alto desempenho que apresenta um uso impressionante de pouca memória. Ele deve ser especialmente útil em aplicações de memória limitada em que os processos individuais consomem uma grande quantidade de RAM. As rápidas recuperações de cache melhora o desempenho.

Ja o HHVM fez um belo trabalho com o PHP 5.6 deixando ele proximo do PHP 7 em alguns aspectos, mas ficou pra traz em certas partes onde precisa administrar cache com o Symfony Proxy por exemplo. A performance do HHVM pode ser aumentada em aproximadamente 20%  com o Repo Authoritative mode, no qual não podemos testar aqui por causa do WholeProgram caching.

 

Galera esse benchmarking foi feito pelo Jani Tarvainen em 28/12/2015, todos os direitos são do cara.

O post original esta aqui

Espero ter ajudado, um grande abraço a todos!