Se você ainda não ouviu falar de HHVM nos últimos dois anos, recomendo dar uma olhada no site. Não vou entrar em detalhes aqui. Eu mesmo mencionei o assunto brevemente neste site em 2010.
Mas eu estava curioso: tendo um estoque de PHP-FPM 5.4 com APC ou 5.5 com OpCache ativado, quão mais rápido seria o HHVM 3.1.0? Decidi carregar um site Drupal em uma VM Vagrant e fazer alguns benchmarks. É um Drupal com Memcached configurado, mas com a página de cache do Drupal desativada. Afinal de contas, quero testar o desempenho do PHP (análise de módulos e execução etc.), não servindo páginas em cache. Quero que ele carregue e execute cada módulo, em cada pageload.
O HHVM foi instalado usando o guia Github Wiki, utilizando CentOS 6.5 e o repositório yum por “hop5”. O PHP 5.4.30 foi instalado a partir do repositório IUS, com um conjunto padrão de extensões (gd, intl, xml, pecl/memcache, bcmath). O mesmo vale para o PHP 5.5.15, com opcache habilitado e as mesmas extensões.
Estou executando o meu benchmark usando Apache Bench (ab) desta forma:
$ ab -c 1 -n 100 http://mattias.drupal:81/
Vou fazer 100 pedidos, um de cada vez, para uma máquina virtual local executando o Nginx + PHP-FPM e Nginx + HHVM. Estou fazendo os testes simultaneamente para testar o quão rápido cada configuração pode lidar com os pedidos individuais.
Meu Nginx 1.6 está utilizando sockets para conversar com ambos: PHP-FPM e HHVM. O PHP 5.4 apc.stat da APC está ligado. Para a versão 5.5, usei as configurações OpCache padrão.
Benchmarking PHP-FPM 5.4
$ Ab -c 1 -n 100 http: //mattias.drupal: 81 / ... Tempo necessário para os testes: 163,102 segundos $ Ab -c 1 -n 100 http: //mattias.drupal: 81 / ... Tempo necessário para os testes: 160,255 segundos
Nestas duas execuções consecutivas, a primeira leva 163 segundos, e a segunda leva 160 segundos. Isso dá uma média de 161,5 segundos para 100 pedidos, o que representa 1,615 segundos por solicitação de página em PHP-FPM.
Benchmarking PHP-FPM 5.5
$ Ab -c 1 -n 100 http: //mattias.drupal: 81 / ... Tempo necessário para os testes: 82,343 segundos $ Ab -c 1 -n 100 http: //mattias.drupal: 81 / ... Tempo necessário para os testes: 81,985 segundos
A média é de 82 segundos. Então, temos 0,73 segundos por solicitação de página.
Benchmarking HHVM 3.1
$ Ab -c 1 -n 100 http: //mattias.drupal: 81 / ... Tempo necessário para os testes: 61,431 segundos $ Ab -c 1 -n 100 http: //mattias.drupal: 81 / ... Tempo necessário para os testes: 55,624 segundos
Mais uma vez os testes foram realizados de forma consecutiva, com uma média de 58,5 segundos para 100 pedidos. Isso significa 0,58 segundo por solicitação. E o resultado é 2.7x vezes mais rápido do que o PHP 5.4!
Conclusão
Os números falam por si. Esse é o tempo que leva para 100 pedidos de um site padrão Drupal carregar. Menos segundos será, obviamente, melhor.
- PHP-FPM 5.4: 161,5 segundos para 100 pedidos
- PHP-FPM 5.5: 82 segundos para 100 pedidos
- HHVM 3.1: 58,5 segundos para 100 pedidos
Executando o benchmark PHP-FPM, eu só podia ver um único núcleo na minha máquina de dois cores sendo usado. Isso faz sentido, já que o PHP é single-thread, e eu só estava começando o benchmark um pedido de cada vez. No entanto, quando se inicia a análise comparativa sobre HHVM, eu podia ver os dois núcleos sendo igualmente carregados. Provavelmente porque executar o comando “top” atualiza uma vez por segundo, mas, desde que os pedidos terminem antes de um segundo, haverá a sobreposição nos processos que são visíveis.
Fico feliz em perceber algumas coisas:
- Fazer o HHVM trabalhar com Drupal foi muito simples, demorou 2 minutos (modificar configurações, definir socket etc.).
- Fazer o HHVM rodar no CentOS também foi simples, graças ao repositório hop5. As dependências estavam todas funcionando.
- Mesmo a diferença entre o PHP 5.4 e 5.5 é muito perceptível (desempenho 2x superior).
- A diferença entre o PHP 5.4 e o HHVM é enorme, entre PHP 5.5 e o HHVM está começando a se aproximar.
O futuro é brilhante para o PHP! Quando eu tiver uma chance, vou tentar testar o PHP-NG, um movimento que pretende ser ainda mais rápido do que HHVM.
***
Artigo traduzido pela Redação iMasters com autorização do autor. Publicado originalmente em http://ma.ttias.be/hhvm-versus-php-fpm-5-4-and-5-5-performance-comparison/