HHVM2.4基准测试,HHVM性能分析 - 小众知识

HHVM2.4基准测试,HHVM性能分析

2013年01月27日 14:18:05 苏内容
  标签: HHVM
阅读:7328

测试简介:

 HipHop VM(HHVM)是Facebook推出的用来执行PHP代码的虚拟机,它是一个PHP的JIT(Just-In-Time)编译器,同时具有产生快速代码和即时编译的优点。根据Facebook透漏,HHVM在速度方面获得了显著改进,比目前使用的PHP解释器快60%,而使用内存减少90%。

 

测试目的:HHVM虚拟机以Jit方式编译PHP程序后运行的性能,比PHP原生性能是否有提高。主要从三方面进行对比:CPU,IO,MEM性能。

测试环境:

服务器系统: CentOSrelease 6.3 (Final)     CPU: 16核 Intel(R)Xeon(R) CPU E5620  @ 2.40GHz    内存: 16G

          软件环境: HHVM虚拟机版本:HipHopVM 2.4.0
                               PHP版本:PHP 5.3.8
                               NGINX版本:1.4.2

测试策略:

一、单次执行php程序,记录程序完成时间;

1.      Time php test_xx.php                    使用php方式运行

2.      Time hhvm test_xx.php                   使用hhvm方式运行(未开启Jit)

3.      Time hhvm –v “Eval.Jit=true”  test_xx.php  使用hhvm的Jit方式运行

 二、并发执行php程序,记录每分钟运行次数;

Webbench–c 20  –t 60  http://172.30.205.22/test_cpu.php        php方式并发运行

Webbench–c 20  –t 60  http://172.30.205.22:90/test_cpu.php    hhvm方式并发运行

 参数说明:

-c并发20个用户

-t运行60秒

 

测试结果一:(单次运行)

Cpu测试图:

 

Cpu测试表:

PHP

HHVM

HHVM_Jit

real    0m6.557s

real    0m5.346s

real    0m0.437s

user    0m6.533s

user    0m5.301s

user    0m0.404s

sys     0m0.010s

sys     0m0.030s

sys     0m0.026s

CPU操作性能对比

 IO测试图:

 

IO测试表:

PHP

HHVM

HHVM_Jit

real    0m14.041s

real    0m17.149s

real    0m17.319s

user    0m4.517s

user    0m6.275s

user    0m6.598s

sys     0m9.424s

sys     0m10.754s

sys     0m10.611s

IO操作性能对比

 MEM测试图:

 

MEM测试表:

PHP

HHVM

HHVM_Jit

real    0m1.994s

real    0m1.090s

real    0m1.359s

user    0m1.692s

user    0m0.950s

user    0m1.213s

sys     0m0.297s

sys     0m0.133s

sys     0m0.138s

MEM操作性能对比

 测试结果二:(并发运行):

Cpu测试图表:

 

 

 

PHP

HHVM_Jit

63 pages/min

1819 pages/min

 

  IO测试图表:

 

 

PHP

HHVM_Jit

20 pages/min

0 pages/min

不到1,不计数

 MEM测试图表:

 

 

 

PHP

HHVM_Jit

272 pages/min

453 pages/min

 

 

测试结论:

1、  以上CPU数据表明HHVM2.4在对CPU的性能优化上提升明显,HHVM使用Jit方式编译后,执行效率提升30倍;

2、  以上IO数据表明HHVM2.4在磁盘性能上没有起到优化的作用,甚至不如原生PHP的读写效率;

3、  以上MEM数据表明HHVM在内存性能优化方面稍有提升,提升效率将近1倍;

        综上所述HHVM适合CPU密集型程序,而IO和MEM操作频繁的PHP代码并不需要HHVM的支持,HHVM本身还不成熟,很多PHP扩展支持的不是很好。而且在编译PHP过程也需要耗时,并且这种编译型代码会涉及到内存泄露,进程死锁等风险。如果能够在HHVM崩溃时自动转移服务到PHP+NGINX上,有这样的容错方案则可以尝试使用。

 

附录(测试代码):

1、cpu操作密集型代码Test_cpu.php如下:

<?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));

?>

 2、IO操作密集型代码Test_io.php如下:

<?php

for($i =0; $i < 1000; $i++){

   for($j =0;$j < 1000; $j++)

   {

   $h = fopen('./gfiles/'.$i, 'a');

 fwrite($h,’dddddddddddddddddddddddddddddddfffffffffffffffffffffffffffffffff');

        fclose($h);

   }

}

?>

3、MEM操作密集型代码Test_mem.php如下:

<?php

ini_set('memory_limit','1024M');

$arr = array();

for($i = 0; $i < 2000000 ;$i++) {

   $arr[$i] = $i;

}

$arr2 = array();

foreach($arr as $val){

   $arr2[] = $val . $val;

}

?>

扩展阅读