tutorial php7 docs performance hhvm

performance - php7 - HHVM pobre desempeño



hhvm vs php7 (3)

Estoy evaluando la compatibilidad y el rendimiento de HipHop-PHP en nuestra base de código, pero obtengo un rendimiento muy pobre cuando lo ejecuto con el servidor web incorporado habilitado.

Tengo el siguiente programa de prueba de ejemplo que calcula una secuencia de Fibonacci.

ex3.php:

function fib($n) { if ($n <= 2) return 1; else return fib($n-1) + fib($n-2); } $n = 36; printf("fib(%d) = %d/n", $n, fib($n, 2));

Cuando ejecuto esto a través de HHVM usando la línea de comandos, obtengo resultados impresionantes:

time hhvm -v"Eval.Jit=true" -f ./ex3.php fib(36) = 14930352 real 0m0.267s user 0m0.248s sys 0m0.020s

Compara esto con PHP estándar:

root@hiphop:/www# time php -f ./ex3.php fib(36) = 14930352 real 0m5.606s user 0m5.600s sys 0m0.000s

Sin embargo, cuando quiero habilitar el servidor web incorporado en HHVM, todas las mejoras de rendimiento se pierden:

hhvm -v"Eval.Jit=true" -m server -p 8000 & time wget -qSO - http://localhost:8000/ex3.php HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 X-Powered-By: HPHP Date: Sat, 27 Jul 2013 14:16:09 GMT Content-Length: 19 fib(36) = 14930352 real 0m5.279s user 0m0.000s sys 0m0.000s

Como puede ver, estoy recibiendo la respuesta de HHVM, pero toma más de 5 segundos procesar esta solicitud. ¿Qué me estoy perdiendo?


Ingeniero de HHVM aquí.

En el modo servidor, HHVM ejecutará las primeras N solicitudes que vea en modo solo para intérprete (es decir, con el JIT apagado).

El valor predeterminado en una compilación optimizada es N = 11, por lo que si tuviera que ejecutar la solicitud 12 veces, la 12a sería mucho más rápida.

Puede sintonizar esto con una opción de configuración, así: -v Eval.JitWarmupRequests=3 . Si lo establece en 0, verá la aceleración de inmediato.

Hay un par de razones para hacer esto.

Primero, evita que los efectos de calentamiento transitorios afecten el código compilado por JIT.

Por ejemplo, es posible que las primeras solicitudes deban llenar valores en APC, lo que hará que el código de la aplicación caiga en diferentes rutas de las rutas de estado estable. De esta manera, no desperdiciamos espacio en compilaciones JIT que solo se utilizarán unas cuantas veces.

En segundo lugar, permite a HHVM recopilar información de perfiles para mejorar la compilación futura.

Si observamos que un cierto valor es un entero el 99% del tiempo, por ejemplo, podemos compilar el código que está optimizado para el caso del entero. Actualmente no tenemos la capacidad de compilar JIT con el perfil habilitado (la parte difícil es desecharlo de manera segura una vez que hayamos terminado con él), por lo que hacemos la recopilación de datos en modo de solo intérprete.


Tengo el mismo problema de rendimiento y obtengo resultados impresionantes solo después de comentar estas líneas en /etc/hhvm/php.ini

;hhvm.log.level = Warning ;hhvm.log.always_log_unhandled_exceptions = true ;hhvm.log.runtime_error_reporting_level = 8191


si HHVM> v3.4 Cambiado Eval.JitWarmupRequests = 0 a Eval.JitProfileInterpRequests = 0

`#!/usr/bin/hhvm -v Eval.Jit=1 -v Eval.JitProfileInterpRequests=0 ./do.php`