HipHop-PHPをビルドして実行する



ほぼ3週間前 Facebookからの新しいプロジェクトが発表されました 。 HipHop-PHPと呼ばれます。

一般の人々にとって、ソースコード 1日前に入手可能になりました



HipHopは、Facebookのパフォーマンスを向上させるために作成されました。 PHPコードをC ++コードに変換し、g ++でコンパイルします。 HipHopはオープンソースライセンスで利用できます。



この記事では、ソースからHipHopをビルドする方法とその使用方法について説明します。





組立工程



1.リポジトリを複製する



$ git clone git://github.com/facebook/hiphop-php



2.必要なライブラリをインストールします



http://wiki.github.com/facebook/hiphop-php/building-and-installingにリストされている必要なライブラリをインストールします 。 最小バージョンに注意してください。



備考:

  1. TBB(スレッドビルディングブロック)の場合、最小バージョンは2.2ですが、これは記述されていません
  2. 開発者からのパッチでlibcurlおよびlibeventを再構築する必要があります

    struct evhttp_requestにext_methodという名前のメンバーがありません 」というメッセージが表示された場合-libeventにパッチを適用していないことを意味します
  3. また、 Google Perftoolsをインストールする必要がありました


3. libmbflライブラリをインストールします



$ cd hiphop-php

$ gitサブモジュールの初期化

$ gitサブモジュールの更新



4.環境変数を設定する



$ export HPHP_HOME = `pwd`

$ export HPHP_LIB = `pwd` / bin



5.組み立ての前に



HipHopはcmakeを使用してビルドします。 ソーススクリプトでは、一部のライブラリがスキップされました。

これを修正するには、パッチをインストールします。



$ curl sparcs.kaist.ac.kr/~tinuviel/hiphop/cmake-missing-library.diff | パッチ-p1



6. 32ビットシステムを使用している場合



HipHopはもともと64ビットアーキテクチャで作成されました。 32ビットを使用している場合は、パッチをインストールする必要があります。



$ curl sparcs.kaist.ac.kr/~tinuviel/hiphop/src-util-hash-long-long.diff | パッチ-p1

$ curl sparcs.kaist.ac.kr/~tinuviel/hiphop/src-cpp-base-ssize_t.diff | パッチ-p1

$ curl sparcs.kaist.ac.kr/~tinuviel/hiphop/src-lib-format-string.diff | パッチ-p1



7.組み立て



$ cmake。



エラーがなければ、



$ make



Debian、Ubuntu、およびその他のアドオン



ここではインストールプロセスについて詳しく説明しますが、32ビットシステムのパッチを忘れないでください。



打ち上げ



内容を含むsrc / hphpフォルダーにindex.phpファイルを作成します

  1. < php
  2. echo 'Hello HipHop' ;
  3. >


コンパイルして実行:

  $ time ./hphp index.php --keep-tempdir = 1 --log = 3
 hphpを実行しています...
一時ディレクトリ/ tmp / hphp_71TLF1を作成しています...
入力の解析...
 ./index.phpの解析...
入力の解析には0'00 "(6 ms)(null)かかりました
事前最適化...
事前最適化には0'00 "(0 ms)(null)かかりました
型の推論...
型の推測には0'00 "(0 ms)(null)かかりました
最適化後...
最適化後は0'00 "(0 ms)(null)かかりました
 CPPファイルの作成...
 CPPファイルの作成には0'00 "(213ミリ秒)(ヌル)かかりました
 CPPファイルのコンパイルとリンク...

 CPPファイルのコンパイルとリンクに1'30 "(90733 ms)(null)かかりました
実行ファイル/ tmp / hphp_71TLF1 / program --file index.php ...
 / tmp / hphp_71TLF1に保存されたHello HipHopallファイル...
 hphpの実行には1'31 "(91747 ms)(ヌル)かかりました

実際の1分31.791秒
ユーザー1m21.157s
 sys 0m6.500s


/ tmp / hphp_71TLF1フォルダーには、かなり興味深いコンテンツが含まれています。

  $ ls -l / tmp / hphp_71TLF1 /
合計25152
 -rw-r-r-- 1 20673 2月21日12:19 CMakeCache.txt
 drwxr-xr-x 6 4096 Feb 21 12:21 CMakeFiles
 -rw-r-r-- 1 1558 Feb 21 12:19 cmake_install.cmake
 -rw-r-r-- 1 2518 2月21日12:19 CMakeLists.txt
 -rw-r-r-- 1 18343 2月21日12:19 Makefile
 drwxr-xr-x 2 4096 Feb 21 12:19 php
 -rwxr-xr-x 1 25653366 2月21日12:21プログラム
 drwxr-xr-x 2 4096 Feb 21 12:19 sys
 $ ls -l / tmp / hphp_71TLF1 / php
合計12
 -rw-r-r-- 1 783 Feb 21 12:19 index.cpp
 -rw-r-r-- 1 415 Feb 21 12:19 index.fw.h
 -rw-r-r-- 1 475 Feb 21 12:19 index.h


ファイル/tmp/hphp_71TLF1/index.cの内容:



  1. #include <php / index.h>
  2. #include <cpp / ext / ext.h>
  3. 名前空間 HPHP {
  4. /////////////////////////////////////////////////// /////////////////////////////
  5. / *序文が始まります* /
  6. / *序文仕上げ* /
  7. バリアントpm_php $ index_php bool incOnce / * = false * / 、LVariableTable *変数/ * = NULL * / {
  8. FUNCTION_INJECTION run_init :: index。Php ;
  9. {
  10. DECLARE_GLOBAL_VARIABLES g ;
  11. bool alreadyRun = g- > run_pm_php $ index_php ;
  12. if alreadyRun { if incOnce trueを 返す ; }
  13. else alreadyRun = true ;
  14. if variables variables = g ;
  15. }
  16. DECLARE_GLOBAL_VARIABLES g ;
  17. LVariableTable * gVariables __attribute__ __unused__ = get_variable_table ;
  18. print "Hello HipHop" ;
  19. trueを 返し ます
  20. } / *関数* /
  21. /////////////////////////////////////////////////// /////////////////////////////
  22. }




その結果、コンパイルされたプログラムは最大25メガバイトかかります

ただし、コンソールモードに加えて、Webサービスモードで起動できます。



/ tmp / hphp_71TLF1 / program -m server -p 8080



localhostで挨拶を見る:8080 / index.php



更新する 性能評価



構成



プロセッサー: 2xIntel®Pentium®Dual CPU T2370 @ 1.73GHz

オペレーティングシステム: Debian GNU / Linux squeeze / sid

Apache / 2.2.14(Debian)とmodphp

PHP 5.2.12-2とSuhosin-Patch 0.9.7(cli)(ビルド:2010年1月11日17:30:06)

gccバージョン4.4.3 20100108(プレリリース)(Debian 4.4.2-9)



テスト番号1。 「額に」



habratopic 「C ++パフォーマンスvs. Java vs. PHP vs. Python 額テスト



 $ time php test.php 
回答:39

実際の0m32.308s
ユーザー0m32.258s
 sys 0m0.012s

 $ time / tmp / hphp_4C67mv / program --file test.php
回答:39

実際の1分6.683秒
ユーザー1m6.376s
 sys 0m0.168s

 $ g ++ test.cpp 
 $ time ./a.out 
回答:39

実数0m1.758s
ユーザー0m1.744s
 sys 0m0.000s


テスト番号2。 Apacheベンチマーク



test.php:

  <?php
    for($ i = 0; $ i <1000; $ i ++)
       echo var_dump($ _ SERVER);
 ?> 




WebサービスモードでHipHopを開始する:

  $ ./program -m server -p 8080
 $ ab -n 1000 -c 5 http://127.0.0.1:8080/test.php

同時実行レベル:5
テストにかかった時間:67.019秒
完全なリクエスト:1000
失敗したリクエスト:0
書き込みエラー:0
転送された合計:1166084000バイト
転送されるHTML:1166000000バイト
 1秒あたりのリクエスト:14.92 [#/秒](平均)
リクエストあたりの時間:335.096 [ms](平均)
リクエストあたりの時間:67.019 [ms](平均、すべての同時リクエスト全体)
転送速度:16991.44 [Kバイト/秒]受信

接続時間(ミリ秒)
              最小平均[+/- sd]最大中央値
接続:0 0 0.1 0 2
処理:124335 56.5 340 477
待機中:120 329 56.2 335 467
合計:124335 56.5 341 477 




Apacheとmodphpを使用して標準のPHPを実行する:

 $ ab -n 1000 -c 5 http://127.0.0.1:80/test.php
 ...
同時実行レベル:5
テストにかかった時間:27.180秒
完全なリクエスト:1000
失敗したリクエスト:0
書き込みエラー:0
転送された合計:1139183000バイト
転送されるHTML:1139000000バイト
 1秒あたりのリクエスト:36.79 [#/ sec](平均)
リクエストあたりの時間:135.901 [ms](平均)
リクエストあたりの時間:27.180 [ms](平均、すべての同時リクエスト全体)
転送速度:40929.90 [キロバイト/秒]受信

接続時間(ミリ秒)
              最小平均[+/- sd]最大中央値
接続:0 0 0.5 0 11
処理:52 136 32.2 137 216
待機中:0 3 1.5 3 17
合計:52136 32.2 137216


テスト番号3。 フラクタルベンチマーク



言語 時間 相対速度
C gcc-4.4.3 0.05秒 1.00 x
ヒップホップ 0.18秒 3.60 x
Python 2.51 2.35秒 47.00 x
PHP 5.2.12 3.08秒 61.60 x




結論(個人的な意見)



2つのテストで、標準のPHPのほぼ2倍遅いことがわかりました。 ただし、これは最初のバージョンにすぎないことを忘れないでください。 HipHop自体のビルドプロセスは非常に難しく、そのためインストールはまったくありません。 PHPアプリケーションをC ++に変換する可能性を理解するためにのみインストールできます。 HipHopの明らかなマイナス点は、PostgreSQL(これまではMySQLのみ)のサポートの欠如と、既存のPHPモジュールを接続する機能の欠如です。 このプロジェクトがまだ先にあることを願っています。



以上です。 HipHopのリリースの詳細については、 こちらをご覧ください



GitHubには2つの興味深い分岐点もあります。

  1. http://github.com/h4ck3rm1k3/hiphop-php/-debパッケージを構築するためのアドオンが含まれています
  2. http://github.com/sanxiyn/hiphop-php/tree/32bit-32ビットバージョンのインストール済みパッチが含まれています




All Articles