HHVM(HipHop Virtual Machine)を試してみる

Facebookが開発したPHPを超高速で実行する仮想マシン HipHop VM | A-Listers
を読んで、おぉ、、そんな事になってるのね、なんて思った次第です。
 
思い返せば、何年前か忘れましたが、@yandoがアレンジしてくれて、
APC開発者のFacebookのエンジニアが会社に遊びにきてくれたのでした。
あの頃は英語なんて全然話せなかったから、聞きたい事あったのに切ない思いをしました。
#隣で@hyoshiokがガツガツ質問してて、俺も、、なんて思ったものです。
APCによるハイパフォーマンスの実現 / Facebook,inc Brian Shire氏
 
んま、そんな前振りはどうでもイイのですが、PHPでVM?へぇー的な感じで、
Getting WordPress running on HHVM | HipHop for PHPでなんていうブログ記事があったもので、
それじゃ、まぁ、やってみますかねぇ的な。いつものようにVirtualBox上のUbuntuで。
#PHP勉強してWordPressのプラグインの1つや2つ作ってやろうと思い始めて
#軽く4年くらい経ってる気がするって話もあったりして。。
 
 
■ HipHop VMのインストール
/etc/apt/sources.list に deb http://dl.hiphop-php.com/ubuntu precise main を追加して

# apt-get update
# apt-get install hiphop-php
Reading package lists... Done
Building dependency tree
Reading state information... Done
~略~
Setting up hiphop-php (1.201212.0) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place

 
■ WordPressインストール

# cd /var/www/
# wget 'http://wordpress.org/latest.tar.gz'
--2013-01-16 11:54:57--  http://wordpress.org/latest.tar.gz
~略~
2013-01-16 11:55:01 (1.70 MB/s) - `latest.tar.gz' saved [5009441]
# tar -zxf latest.tar.gz
# mv wordpress wp
# cd wp/
# ls -l
-rw-r--r-- 1 www-data www-data   395 Jan  9  2012 index.php
-rw-r--r-- 1 www-data www-data 19929 May  6  2012 license.txt
-rw-r--r-- 1 www-data www-data  9175 Nov 30 09:57 readme.html
-rw-r--r-- 1 www-data www-data  4663 Nov 18 00:11 wp-activate.php
~略~

でもって、

case-insensitive constants are simply not supported by HipHop
ケースセンシティブじゃない定数はHipHopではサポートされないので、、、

ってのでwp-includes/wp-db.phpを↓こうしなさいと。

  20 #define( 'OBJECT', 'OBJECT', true );
  21 define( 'OBJECT', 'OBJECT' );
  22 define( 'Object', 'OBJECT' );
  23 define( 'object', 'OBJECT' );

他にもチョイチョイあったみたいなのですが、いつくか更新かかってTweakしなくて
良くなったみたいな感じです。
 
 
■ HipHop用の設定
ココ、前提知識が全く無い人的な観点だとイキナリ何スカ?って感じですが、、
Facebook’s HipHop Also a PHP Webserver – Slashdotによると、

It’s also not just a runtime, it’s also a new webserver

あー、そうなんすねっていう。んでもって設定はマルっとコピペしましたが、
↓この辺の設定がはいっちょります。
・Webサーバーのポートの設定
・Just In Timeなコンパイルだぜ
・ロギング
・ApacheみたいにVirtualHostでRewriteルールが~とか
・静的ファイルの~とか

Server {
  Port = 80
  SourceRoot = /var/www/
}

Eval {
  Jit = true
}
Log {
  Level = Error
  UseLogFile = true
  File = /var/log/hhvm/error.log
  Access {
    * {
      File = /var/log/hhvm/access.log
      Format = %h %l %u %t "%r" %>s %b
    }
  }
}

VirtualHost {
  * {
    Pattern = .*
    RewriteRules {
      dirindex {
        pattern = ^/(.*)/$
        to = $1/index.php
        qsa = true
      }
    }
  }
}

StaticFile {
  FilesMatch {
    * {
      pattern = .*.(dll|exe)
      headers {
        * = Content-Disposition: attachment
      }
    }
  }
  Extensions {
    css = text/css
    gif = image/gif
    html = text/html
    jpe = image/jpeg
    jpeg = image/jpeg
    jpg = image/jpeg
    png = image/png
    tif = image/tiff
    tiff = image/tiff
    txt = text/plain
  }
}

 
■ HHVMのプロセスを起動
極度のめんどくさがり屋な為、ユーザーがrootとかになってますが、、
何かログファイルが開けないぜ的に怒られたので、、
(プロセスは上がっちゃってたのでKillしましたが…)

# /usr/bin/hhvm --mode daemon --user root --config /etc/hhvm.hdf
Cannot open log file: /var/log/hhvm/error.log

ディレクトリ作ってもっかい起動すると、

# /usr/bin/hhvm --mode daemon --user root --config /etc/hhvm.hdf
# ps -ef | grep hhvm | grep -v grep
root     22831     1  0 12:26 ?        00:00:00 /usr/bin/hhvm --mode daemon --user root --config /etc/hhvm.hdf

起動出来たみたいッス!
 
 
■ WordPressの設定
データベースの設定を入れて、

# mv wp-config-sample.php wp-config.php
# vim wp-config.php
 17 // ** MySQL settings - You can get this info from your web host ** //
 18 /** The name of the database for WordPress */
 19 define('DB_NAME', 'wp');
 20
 21 /** MySQL database username */
 22 define('DB_USER', 'root');
 23
 24 /** MySQL database password */
 25 define('DB_PASSWORD', 'pass');

データベース作っておきます。

# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 1564
Server version: 5.5.28-0ubuntu0.12.04.3 (Ubuntu)
~略~
mysql> create database wp;
Query OK, 1 row affected (0.00 sec)

 
画面から設定する感じで、

 
それっぽく表示出来てるみたいです。

 
HipHop VMのaccess.logログもきてる感じです。

# tail -f /var/log/hhvm/access.log
127.0.0.1 - - [16/Jan/2013:13:42:53 +0900] "GET /wp/wp-admin/load-styles.php?c=0&dir=ltr&load=wp-admin,buttons,customize-controls,wp-color-picker&ver=3.5 HTTP/1.1" 200 31294
127.0.0.1 - - [16/Jan/2013:13:42:53 +0900] "GET /wp/wp-admin/load-scripts.php?c=0&load[]=customize-base,customize-controls,underscore,backbone,media-models,wp-plupload,jquery-ui-core,jquery-ui-widget,jquery-ui-mouse,j&load[]=query-ui-draggable,jquery-ui-slider,jquery-touch-punch,iris,wp-color-picker&ver=3.5 HTTP/1.1" 200 44792
127.0.0.1 - - [16/Jan/2013:13:42:53 +0900] "GET /wp/wp-admin/load-scripts.php?c=0&load[]=jquery,json2,plupload,plupload-html5,plupload-flash,plupload-silverlight,plupload-html4&ver=3.5 HTTP/1.1" 200 53777
127.0.0.1 - - [16/Jan/2013:13:42:54 +0900] "POST /wp/ HTTP/1.1" 200 3040
127.0.0.1 - - [16/Jan/2013:13:42:54 +0900] "GET /wp/wp-content/themes/twentytwelve/style.css?ver=3.5 HTTP/1.1" 200 35292
127.0.0.1 - - [16/Jan/2013:13:42:54 +0900] "GET /wp/wp-includes/js/json2.min.js?ver=2011-02-23 HTTP/1.1" 200 3377
127.0.0.1 - - [16/Jan/2013:13:42:54 +0900] "GET /wp/wp-includes/js/customize-base.min.js?ver=3.5 HTTP/1.1" 200 6852
127.0.0.1 - - [16/Jan/2013:13:42:54 +0900] "GET /wp/wp-includes/js/customize-preview.min.js?ver=3.5 HTTP/1.1" 200 1947
127.0.0.1 - - [16/Jan/2013:13:42:54 +0900] "GET /wp/wp-content/themes/twentytwelve/js/theme-customizer.js?ver=20120827 HTTP/1.1" 200 1002
127.0.0.1 - - [16/Jan/2013:13:42:54 +0900] "GET /wp/wp-content/themes/twentytwelve/js/navigation.js?ver=1.0 HTTP/1.1" 200 863
127.0.0.1 - - [16/Jan/2013:13:46:03 +0900] "GET /wp/wp-admin/customize.php HTTP/1.1" 200 4280
127.0.0.1 - - [16/Jan/2013:13:46:03 +0900] "POST /wp/ HTTP/1.1" 200 3040

 
めでたしめでたし。
 
 
■ んで、、、
ちょ、おま、コレのベンチマークとらないでどーすんねん?って話かと思いますが、
昼休みの時間が終わってしまったため、本日はココまで…mm
 

CakePHP2 実践入門 (WEB+DB PRESS plus)
安藤 祐介 岸田 健一郎 新原 雅司 市川 快 渡辺 一宏 鈴木 則夫
技術評論社
売り上げランキング: 9,655

コメント

  1. […] HHVM(HipHop Virtual Machine)を試してみる | shinodogg.com […]

  2. […] HHVM(HipHop Virtual Machine)を試してみる | shinodogg.com […]

タイトルとURLをコピーしました