BEAR Blog

Because everything is a resource.

PHP Hello Worldコールグラフ(2011)

| Comments

Hello Worldベンチマーク

去年のHello Worldコールグラフに続いて再度HelloWorldグラフをとりました。

グラフをとるためにリファレンスにしたHelloWorldベンチマークのサイトは前回とは違い、SolarPHPというフレームワークのリードDeveloperのPaul M Jones氏のphp-framework-benchmarksというプロジェクトです。

SolarPHP自体はYiiのようにミニマムオーバーヘッドを特別アピールしているフレームワークではありませんが、Paul M Jones氏は数年前から定期的にこのような発表を行っていて、PHPでこの種のベンチマークに最も熱心に取り組んでる人だと思います。 Symfony2.0のリードコミッターのFabien氏もこのプロジェクトをforkしてSymfony2.0を加えています。

HelloWorldアプリのスペック

基準となるHelloWorldアプリは以下のようなものです。

  • 最小限のアプリ(フルアプリケーションでない)
  • 通常のconfig
  • アクションコードなし
  • ビューレイアウトもビューヘルパーもなし
  • スタティックなテキスト
  • ページキャッシュなし
  • データーベースなし

アプリケーションロジックを含まないが「HelloWorldに徹底的にカスタマイズしたされたものでもない」、ごく標準的仕様のミニマムアプリです。

このアプリのベンチマークにはどういう意味があるのでしょうか。また比較にはどういう点に注意が必要でしょうか。スライドから抜粋して紹介します。

ベンチマーク結果の比較

同じフレームワークでの比較

継続的ベンチマーキング、新しいアーキテクチャの採用には実行コストが伴う、その利点/コスト分析として。新旧バージョンでの比較統計。

違うフレームワークでの比較

他システムとの応答比較、アーキテクチャコスト比較等。速度比較をする場合は同じような”スタイル/クラス”(PHP5/デザインパターン/front,pageコントローラ/ビューの分離など)で比べるべきです。つまりCIとKohana、Cake/Lithium/Solar/Symfony/Yii/Zendで比較するのが妥当です。

以上は特にフレームワーク開発者にとって重要です。同じクラス/スタイルのアーキテクチャで同程度の機能で極端な速度さがあればそれは設計や実装に見直す点が有るという事に繋がるでしょう。

Webサイトは高度になり表現方法も多様化しています。1つのページを表示したあと、様々な”ページの断片”が用意されるようなGmailのようなページではそのつぶつぶのような断片的JSONの発行にそれぞれこのミニマムオーバーヘッドコストがかかってます。実行コストを最小化しつつ豊富な機能を実装するような技術的試みが続けられてると思います。12

結果を過大評価しない

スライドの中では「最も遅いフレームワークでも充分早い」と言っています。フレームワークの選定基準には様々な判断材料がありますが、この種のベンチ結果は重要でないことは前回記事のリファレンスのphp-markでも言っていますし、このプロジェクトでも言っています。Do not interpret the numbers alone http://code.google.com/p/phpmark/。この数字を過大評価してフレームワークを選定したり批評したりするのは適切ではないでしょう。

「フレームワーク対決」の結果などではなく 、開発や対策など特定の目的を持ったときに意味のある数字だと思いますがどうでしょうか。

ベンチマーク結果

スライドで紹介されてる結果です。

WARNING: ベンチマークはミスリードさせる可能性があります

フレームワークのスケール

アーキテクチャの似たフレームワーク同士では結果が似たような速度の傾向があります。
DBアクセスを含めたアプリで比較してるcakephperさんの記事と合わせて見ると一層興味深いのではないでしょうか。

ベンチマーク結果の利用

基本的にアプリケーションロジックが取り除かれたこのコードが性能の上限です。キャンペーンや有名サイトでの紹介など一時的高負荷が予想されるときの負荷対策の基準になりえます。3

XHGUI

コールグラフはXHGUIというツールを利用しました。xhprofをフォークしたプロファイリングツールで結果保存にDBを利用し、複数回のプロファイリングを管理できます。

apacheを毎回リスタートさせ、以下のコマンドラインで出た結果のうち良いものをグラフ描画用に使用しています。

ab -c 10 -t 10 http://examplle.com/helloWorld/

XHGUI - ヒストリー画面

XHGUI - プロファイル詳細画面

Hello Worldコールグラフ

本題のコールグラフです。コール数の少ない順に表示しています。
※クリックすると別画面で開きますが画像はとても大きいのに注意してください。

アーキテクチャの似通ったフレームワークはやはり似通ったグラフの大きさとcall数になってますが、Yiiだけ特別です。特筆すべきはCakePHPの前回調査(v1.2)と今回(v1.3)の違いでコール数が1/10以下になっています。4

Yii1.1.5 / 269 calls / 4853x6728 px

Kohaa3.0.9 / 365 calls / 3240x3451 px

CodeIgniter 2.0 / 447 calls / 3515x3250px

Lithium 0.9.9 / 732 calls / 5839x6856 px

SolarPHP 1.1.1 / 1,174 calls / 3228x5477 px

CakePHP 1.3.10 / 1,177 calls / 4767x5982 px

Symfony2 pr4 / 1,274 calls / 4595x7373 px

symfony1.4.8 / Calls 1,661 / 5837x5280 px

Zend Framework 1.11.9 / 1,799 calls / 7324x6819 px

  1. そういう意味でSymfony2のベンチ結果に注目していました []
  2. 前回の記事でのCakePHPやsymfonyはこの点にまったく配慮がなかったのですが、今回大きく改良しています。 []
  3. 高負荷のトップサイトなどでデータソースをRDBから他のキャッシュ向けストレージで利用する場合は、データベースの速度はあまり問題にならないでしょう。 []
  4. 前回が大すぎですね []