【レポート】

Apache 2.0 + Kernel 2.6 + Pentium 4でマルチスレッド性能をはかる

5 静的・動的コンテンツの処理能力による新旧プラットフォームの傾向

    鶴田展之  [2004/05/18]

    静的コンテンツへのリクエスト

    Apacheをインストールすると、自動的に次のような動作確認用のドキュメントがDocumentRootディレクトリに置かれる。

    Apacheの動作確認用のドキュメント

    このドキュメントは1,456バイトのHTMLファイルだ。まずはこの小さなドキュメントへのリクエストをabから発行し、性能を測ってみよう。次のように、合計10,000回のリクエストを並列度100で発行してみた。

    $ ab -n 10000 -c 100 http://www.qnote.prv/

    abはテスト結果から様々な統計情報を出力してくれるが、性能を測る指標としては、1秒間に処理したリクエストの数を表す「Requests per second」の値を見るとよい。それぞれ10回試行し、中間の値をとった結果は以下のようになった。

     table-1 : 静的ドキュメントへのリクエスト 10,000回、並列度100

    カーネル 2.4.26 2.6.5
    Hyperthreading 無効 有効 無効 有効
    Apache 1.3.29 737.84 824.47 758.38 827.81
    2.0.49 1344.27 1684.35 1399.97 1721.76
    graph-1 : 静的ドキュメントへのリクエスト 10,000回、並列度100

    Apache 1.3とApache 2.0の性能差は明らかで、Apache 2.0が旧バージョンの概ね2倍強の処理性能を発揮している。また、HTによる性能の向上も顕著だ。SMPカーネルを使用した場合、シングルプロセッサ用のカーネルに比べて、Apache 1.3で10%程度、Apache 2.0では25%も高速になるという結果が出た。

    Apacheのバージョン間やHTの有効・無効の差と比べると、カーネル2.4とカーネル2.6の差は予想したほど大きくは表れなかったが、全てのテストでカーネル2.6がカーネル2.4の速度をわずかずつ上回った。

    動的コンテンツへのリクエスト

    静的コンテンツへのリクエストでは、10,000回、並列度100で実行しても、プロセッサの最大使用率は75%程度にしかならない。サーバサイドでスクリプトを実行する動的なコンテンツを使って、もう少しプロセッサに負荷をかけてみよう。動的コンテンツの実現方法にはCGIやJava Servletなど様々なものがあるが、今回は「PHP」のバージョン4.3.6を使ってみた。PHPはApache 1.3、Apache 2.0ともにDSOモジュールとしてロードされる設定とし、PHPスクリプトは、GETメソッドで与えられた指示回数だけ、srand()関数、rand()関数を使って繰り返し乱数を生成するものとした。

    rand.php

    <?php
    $j=$_GET["j"];
    for ($i=0; $i<=$j; $i++) {
    srand();
    rand();
    }
    ?>

    abからこのスクリプトに対するリクエストを、10,000回、並列度130で送ってみる。GETメソッドで与える繰り返し回数は1,000回とした。

    $ ab -n 10000 -c 130 http://www.qnote.prv/rand.php?j=1000

    各環境でのテストを10回ずつ行い、中間の値をとった結果は以下のようになった。

    table-2 : 動的ドキュメント(PHPスクリプト)へのリクエスト 10,000回、並列度130

    カーネル 2.4.26 2.6.5
    Hyperthreading 無効 有効 無効 有効
    Apache 1.3.29 116.43 108.93 108.29 116.87
    2.0.49 111.79 103.74 105.76 122.43
    graph-2 : 動的ドキュメント(PHPスクリプト)へのリクエスト 10,000回、並列度130

    まず、カーネル2.6でHTを有効にした場合以外は、総じてApache 1.3がApache 2.0を上回った。ただ、これはPHP4がもともとApache 1.3を前提プラットフォームとしていることを考えれば、至極当然の結果でもある。PHPの多くのライブラリは未だスレッドセーフでなく、Apache 2.0上での運用は推奨されていない。HTを有効にしたカーネル2.4で、性能が向上するどころか低下してしまっているのも、PHPがマルチスレッド環境を考慮してプログラミングされていないためだろう。つまりこの結果は、HTにしてもApache 2.0にしても、それに適したマルチスレッドなアプリケーション実行環境が用意されなければ、本来の性能を発揮できないということの表れと考えられる。PHP5へのメジャーバージョンアップを控え、Web用スクリプト言語のスタンダードとして、PHPが今後このあたりをどう改善していくかにも注目したいところだ。なお、唯一カーネル2.6でHTを有効にした場合だけは性能の向上が見られるが、これは、プロセッサへの負荷が高い処理におけるカーネル2.6の強さが出たと考えることができるのではないだろうか。

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン