HHVM:パフォーマンステストとJoomla、Bitrix、Wordpressとの互換性

HHVMについてすでに Habréで書いています。 つまり、HHVMはFacebookの仮想マシンであり、コードの翻訳とJITコンパイルのおかげで、PHPを数回高速化できます。 開発者は、PHP 5.4とのほぼ完全な互換性も約束しています。



いくつかのテストでHHVMをネイティブインタープリターと比較し、CMSを実行することも決めました。







試験条件



テストは、プロセッサ2コアCore i5 @ 3.3 GHz、8 GBのRAMの構成の仮想マシンで実行されました。

OS:Ubuntu 12.04 x86_64。

PHP:5.3.10-1ubuntu3.7

Nginx:1.1.19

Apache:2.2.22

HHVM:2.1.0-dev

設定では、実行タイムアウトとmemory_limitが増加し、APCが有効になりました。 追加のチューニングは実行されませんでした。



HHVMは、 指示に従ってソースからインストールされます



ベンチマーク



いくつかのスクリプトが用意され、それぞれ50回実行されました。PHPCLI、HHVM CLI、Apache + mod_php、nginx + php-fpm、nginx + HHVMで10回実行されました。 秒単位の平均実行時間は、表に示されています。 最後の2列は、HHVMを使用した場合の速度の向上を示しています。



CLI HTTP 比較速度の増加
テスト Php Hhvm Apache + mod_php Nginx + php_fpm Nginx + hhvm PHP CLI PHP-FPM
並べる 42,4 17.9 なし 1 40.9 18.9 137.0% 116.7%
bcmath_factorial 3.4 3.0 3.4 3.4 2,8 13.9% 21.5%
curl_multi 8.6 8.4 9.7 9.0 9.7 2.3% -7.0%
domdocument 50,2 51.0 54.3 50.1 50.1 -1.5% 0,0%
のために 60.5 36.9 60.8 61.0 211.2 63.7% -71.1%
ジオイプ 14,4 15.6 14.7 14.9 5,0 -7.8% 198.0%
getid3 46.5 26.9 46.2 45.6 8.5 72.4% 435.5%
mb_strings 22.8 16.8 7.0 22.2 17.0 35.8% 31.0%
md5 36.8 35.7 37.0 37,2 27,2 3.2% 36.7%
プレグ 11.6 10.9 11.6 11.7 10.9 6.1% 7.9%
プライム 4.2 5,6 4.2 4.3 2.5 -24.1% 71.8%
並べ替える 46.3 17.8 なし 1 44.1 17.5 160.1% 151.8%
sqlite 12,4 10.0 12.6 12,2 15,2 23.7% -19.9%
ひも 38.6 37.5 37.8 38,2 36.0 3.0% 6.3%
tcp_client 15.4 13,2 15,5 17.3 13.6 16.9% 27.7%
tcpdf 3.3 2,4 3.4 4.4 1.4 38.7% 215.1%
サムネイル 100.8 94.8 93.7 99.9 94.2 6.3% 6.1%




1-Apacheはasort.phpおよびsort.phpを実行できませんでした-メモリ不足からクラッシュしました



asort -1000万個の要素を持つ文字列の連想配列をソートします

bcmath_factorial-関数bcmulによる数値1000の階乗の計算

curl_multi-インターネットから10ストリームで1 MBの100ファイルをダウンロードします

domdocument-大きなXML( 122,000タグ)の解析-例としてサイトマップag.ruを使用

for -3回、1000回を超える反復でネスト(合計10億回)

geoip - GeoIPに基づいた10万件のIP検索

getid3 - getID3()ライブラリを使用してMP3からID3タグを取得-1万回

mb_strings-戦争と平和の第1巻でmb_strlen、mb_ereg_replace、mb_substr、mb_strpos、mb_strtolowerを1000回使用

md5-100万から1億の数字からのmd5生成

preg -HTMLページで色、タグ、URLのpreg_match_all 16進コードを検索-1000回(例としてメインHabrを使用)

prime-総当たりで200〜100万のすべての素数を取得する

sort-数値インデックスを使用して1000万要素の文字列の配列をソートします

sqlite -sqlite3データベースへの1万件のSELECTクエリ

文字列 -「戦争と平和」の最初の巻でstrlen、str_replace、substr、strpos、strtolowerを1万回使用

tcp_client-ローカルホストへの1万接続、TCP経由で2 MBの読み取り( CHARGEN

tcpdf-マルチページPDFライブラリTCPDFによる生成-10回(example_061.phpを取得)

thumbnail -GD imagecopyresized()を使用した10Kサムネイル画像の作成



Smartyでテストを実行したかったのですが、HHVMで実行できませんでした。



結果の解釈



もちろん、ベンチマークではパフォーマンスの状況を完全に示すことはできません。 それでも、いくつかの結論を引き出すことができます。



  1. 各テスト実行の実行時間は平均とそれほど差がなかったため、結果は安定していると見なすことができます。
  2. 2つの異常な結果があります。Apache+ mod_phpでのmb_stringテストの実行が速すぎることと、nginx + HHVMでの実行が遅すぎることです。 テストを再確認しましたが、何が問題なのかわかりません。
  3. CLIバージョンの内容、Web HHVMに使用すると、テストの半分で利点が得られます。
  4. 場合によっては、HHVMをnginxバックエンドとして(つまり、CLIとしてではなく)使用すると、さらに大きく増加します-JITのアクティブ化によるものと思われます。 getid3およびTCPDFライブラリがどれほど速く動作するかに注目してください。




CMSテスト





ワードプレス



WordpressがHHVM上で実行されるという事実は事前に知られていました 。 1つのファイルでわずかな調整が必要です。



簡単なテスト:メインページを1つのストリームで100回読み込みます。

nginx + HHVM: 4.498秒

Apache + mod_php:9.997 c

Apache + mod_php + APC:6.567 c

nginx + php-fpm + APC:5.460秒



これはページ応答時間のテストであり、複数のスレッドでの負荷テストではないという事実に注意を促します。



BitrixとJoomla



HHVM上のBitrixとJoomlaは起動を拒否し、致命的なエラーを引き起こしました。 Bitrixがローンチする見込みはまったくないと思います。 非推奨の関数とmbstring.func_overloadはそこで使用されます。



インターネットのレビューでは、WorpressがHHVMで実行する最も簡単な方法であることが示されました。 他のCMSおよびフレームワークでは、すべてがそれほどバラ色ではありません。たとえば、Habrに関する最近のトピックでは、 Symfony2は離陸しませんでした



おそらくパフォーマンスが非常に重要な人のために、すぐにHHVMのフレームワークを作成する必要がありますか?



結論



1)HHVMは、いくつかのタスクのパフォーマンスを大幅に向上させます-HHVMを使用して、何かのバックグラウンド処理プロセスを開始することができます。 グローバル変数を使用する場合、HHVMは効果的ではないことに注意してください。



2)現在、HHVMで既存のライブラリ、フレームワーク、CMSを使用することは困難です。 HHVMはパフォーマンスのために研ぎ澄まされており、さまざまな美しいデザインをサポートしていない場合があります。 ただし、将来的には状況が改善されます。 HHVMはより良い言語のサポートを開始し、開発者はコードをHHVMに適合させることに困惑するかもしれません。



3)Wordpressでは、HHVMのパフォーマンスが大幅に向上しました-mod_phpと比較して2倍。



PS テストスクリプト生データ(Excel)



All Articles