いくつかのテストで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で実行できませんでした。
結果の解釈
もちろん、ベンチマークではパフォーマンスの状況を完全に示すことはできません。 それでも、いくつかの結論を引き出すことができます。
- 各テスト実行の実行時間は平均とそれほど差がなかったため、結果は安定していると見なすことができます。
- 2つの異常な結果があります。Apache+ mod_phpでのmb_stringテストの実行が速すぎることと、nginx + HHVMでの実行が遅すぎることです。 テストを再確認しましたが、何が問題なのかわかりません。
- CLIバージョンの内容、Web HHVMに使用すると、テストの半分で利点が得られます。
- 場合によっては、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)