CPUやメモリなどのシステム性能を比較するベンチマークツール

 最近のサーバーではネットワークやストレージの性能が最重要視され、CPUやメモリの性能についてはあまり重視されない傾向がある。とはいえ、CPUやメモリの処理能力が重要となる場合もまだ一定数ある。今回はそのような用途に向け、CPUやメモリ、システム全体の処理能力を調査するためのベンチマークツールを紹介する。

 前回はネットワークやストレージの性能を調査するためのベンチマークツールを紹介した。ネットワークやストレージの性能はWebサーバーやデータベースサーバーなどにおいてその処理能力に直結するため注目されやすいが、重い処理を実行するようなアプリケーションサーバーなどCPUやメモリの処理能力が必要となる例も少なくない。

 CPUの処理能力は同じマイクロアーキテクチャのものであれば動作周波数でだいたいの比較ができるが、これが異なる場合は動作周波数による単純な比較はできない。また、CPUの実装によっては整数演算は高速だが浮動小数点演算は遅い、といった違いが発生する場合もある。そのため、サーバーのCPUやメモリの処理能力を分かりやすい形で比較するためのベンチマークテストツールがいくつか公開されている。

 今回はこのようなCPUやメモリ関連のベンチマークツールのうち、UNIX/Linux分野で広く使われている「UnixBench」および「SysBench」、そしてマルチプラットフォーム対応の「Geekbench」というツールを紹介する。また、さまざまなベンチマークテストを簡単に実行できる総合ベンチマークテストツール「Phoronix Test Suite」についても紹介する。

広く使われている総合ベンチマークツール「UnixBench」

 LinuxやUNIX系システムでのベンチマークに広く使われているベンチマークツールの1つにUnixBenchがある。UnixBenchは「Byte」という米国のコンピュータ雑誌によって配布されたベンチマークテストツールを原型としており、さまざまな開発者の手を経て現在はGoogle Code上での配布が行われている。

 UnixBenchはその名称からも分かるとおりUNIX系システムの性能を調査するためのツールで、CPUやRAM、ディスクなどを対象とする複数のテストから構成されている(表1)。

表1 UnixBenchで実行されるテスト
テスト名説明
Dhrystone主に整数演算処理の性能を測定する古典的ベンチマークテスト
Whetstone主に浮動小数点演算処理の性能を測定する古典的ベンチマークテスト
Execl Throughputexecl関数によるプロセス作成を行いその性能を測定する
File Copyファイルのコピー速度を測定する
Pipe Throughputプロセス間通信で使われるパイプのスループットを測定する
Pipe-based Context Switchingプロセス間通信で使われるパイプによるコンテキストスイッチ性能を測定する
Process Creation子プロセスの生成速度を測定する
Shell Scriptsシェルスクリプトの実行性能を測定する
System Call Overheadシステムコール実行時のオーバーヘッドを測定する
Graphical Tests2D/3Dグラフィック性能を測定する

 このうちCPUの性能を単純に測定できるのがDhrystoneおよびWhetstoneテストで、それぞれ整数演算および浮動小数点演算の性能を測定するものとなっている。また、そのほかのベンチマークテストについては一般的なアプリケーションにおける処理を模したものになっており、システム全体の処理能力を数値化するものになっている。

UnixBenchのインストールと実行

 UnixBenchのバイナリは公開されていないため、テストを実行するには自分でコンパイルを行う必要がある。コンパイルにはmakeやGCCなどのコンパイルビルドツールに加え、PerlのTime::HiResモジュールが必要だ。このモジュールはRed Hat Enterprise Linux(RHEL)互換環境の場合、「perl-Time-HiRes」パッケージに含まれているので、これをインストールすれば良い。

# yum install perl-Time-HiRes

 コンパイル環境が整ったら、ダウンロードページからソースコードをダウンロードして適当なディレクトリに展開する。続いて含まれる「Run」スクリプトを実行するとソースコードのコンパイルが行われ、完了するとそのままベンチマークテストが開始される。

$ wget https://byte-unixbench.googlecode.com/files/UnixBench5.1.3.tgz
$ tar xvzf UnixBench5.1.3.tgz
$ cd UnixBench
$ ./Run

 なお、複数のCPUコアが利用できる環境の場合、デフォルトでは1コアのみを使ったテストとすべてのコアを使ったテストが順に実行され、それぞれの結果が表示される。ベンチマーク結果は次のように実際に測定された測定値と、「基準値(BASELINE)」をベースとした「INDEX」という2つの指標で表示される。

Benchmark Run: 火  9月 03 2013 19:06:39 - 19:34:57
8 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       28266174.8 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     3453.5 MWIPS (10.0 s, 7 samples)
Execl Throughput                               1983.7 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        778108.1 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          209168.9 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1821783.7 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1435975.0 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 139263.8 lps   (10.0 s, 7 samples)
Process Creation                               8869.6 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   3587.6 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   2748.4 lpm   (60.0 s, 2 samples)
System Call Overhead                        2012557.4 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   28266174.8   2422.1
Double-Precision Whetstone                       55.0       3453.5    627.9
Execl Throughput                                 43.0       1983.7    461.3
File Copy 1024 bufsize 2000 maxblocks          3960.0     778108.1   1964.9
File Copy 256 bufsize 500 maxblocks            1655.0     209168.9   1263.9
File Copy 4096 bufsize 8000 maxblocks          5800.0    1821783.7   3141.0
Pipe Throughput                               12440.0    1435975.0   1154.3
Pipe-based Context Switching                   4000.0     139263.8    348.2
Process Creation                                126.0       8869.6    703.9
Shell Scripts (1 concurrent)                     42.4       3587.6    846.1
Shell Scripts (8 concurrent)                      6.0       2748.4   4580.7
System Call Overhead                          15000.0    2012557.4   1341.7
                                                                   ========
System Benchmarks Index Score                                        1189.8

------------------------------------------------------------------------
Benchmark Run: 火  9月 03 2013 19:34:57 - 20:03:31
8 CPUs in system; running 8 parallel copies of tests

Dhrystone 2 using register variables      120382149.3 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                    20131.4 MWIPS (10.4 s, 7 samples)
Execl Throughput                              19576.4 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        740641.2 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          191338.5 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1997163.2 KBps  (30.0 s, 2 samples)
Pipe Throughput                             5978166.2 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                1270613.0 lps   (10.0 s, 7 samples)
Process Creation                              65958.7 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                  23816.1 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   3149.8 lpm   (60.1 s, 2 samples)
System Call Overhead                        8150789.0 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0  120382149.3  10315.5
Double-Precision Whetstone                       55.0      20131.4   3660.3
Execl Throughput                                 43.0      19576.4   4552.6
File Copy 1024 bufsize 2000 maxblocks          3960.0     740641.2   1870.3
File Copy 256 bufsize 500 maxblocks            1655.0     191338.5   1156.1
File Copy 4096 bufsize 8000 maxblocks          5800.0    1997163.2   3443.4
Pipe Throughput                               12440.0    5978166.2   4805.6
Pipe-based Context Switching                   4000.0    1270613.0   3176.5
Process Creation                                126.0      65958.7   5234.8
Shell Scripts (1 concurrent)                     42.4      23816.1   5617.0
Shell Scripts (8 concurrent)                      6.0       3149.8   5249.6
System Call Overhead                          15000.0    8150789.0   5433.9
                                                                   ========
System Benchmarks Index Score                                        3992.2

 それぞれのスコアやINDEX値については単体で意味のあるものではないが、複数のマシンを比較する際には有用だ。

マルチプラットフォーム対応の総合ベンチマークツール「Geekbench」

 GeekbenchはPrimate Labsが開発するマルチプラットフォーム対応の総合ベンチマークツールだ。商用だが、WindowsおよびMac OS X、Linux、そしてAndroidやiOSでも利用できるのが特徴だ。また、Geekbench BrowserというWebサイトに結果をアップロードでき、ベンチマーク結果を容易に比較できる。ただし、無料版ではLinux環境では32ビット版しか利用できないなど、一部機能に制限がある。

 また、Geekbenchは現在バージョン2系とバージョン3系がリリースされているが、環境によってはバージョン3系は実行できない。Geekbench 3系はglibc 2.14もしくは2.15を必要とするが、Linuxディストリビューションによってはこれよりも古いバージョンのglibcを採用しているためだ。たとえば、RHEL 6系で提供されているglibcのバージョンは2.12であるため、RHEL 6およびその互換ディストリビューションでは現状Geekbench 3を実行できない。そのため、以下ではGeekbench 2系について説明を行っている。

Geekbenchのダウンロードとインストール

 GeekbenchのLinux版はPrimate Labsのダウンロードページからダウンロードできる。提供されているのは32ビットおよび64ビット版のバイナリで、tar+gzip形式でアーカイブ化されている。ダウンロードしたアーカイブを適当なディレクトリに展開するとdistというディレクトリが作成され、その中の「Geekbench-<バージョン番号>-Linux」というディレクトリ内にGeekbenchのバイナリが格納される。

$ tar xvzf Geekbench-2.4.3-Linux.tar.gz
dist/Geekbench-2.4.3-Linux/
dist/Geekbench-2.4.3-Linux/geekbench_x86_32
dist/Geekbench-2.4.3-Linux/geekbench_x86_64
dist/Geekbench-2.4.3-Linux/geekbench
dist/Geekbench-2.4.3-Linux/geekbench.plar

 ここには32ビット版の「geekbench_x86_32」と64ビット版の「geekbench_x86_64」という2つのバイナリがあるが、64ビット版は有料のユーザー登録が必要だ。32ビット版については、登録をせずとも「tryout mode」で実行できる。この場合一部制限はあるが、基本的なベンチマークテストはすべて実行可能だ。

 なお、64ビット環境で32ビット版のGeekbenchを実行する場合、次のようなメッセージが表示されて実行できない場合がある。

$ cd dist/Geekbench-2.4.3-Linux/
$ ./geekbench
-bash: ./geekbench: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイル やディレクトリはありません

 この場合、glibcやlibstdc++といったライブラリの32ビット版が不足している可能性がある。RHELもしくはその互換環境であれば、次のようにglibc.i686およびlibstdc++.i686パッケージをインストールすれば良い。

# yum install glibc.i686 libstdc++.i686

 また、DebianやUbuntu環境の場合はia32-libsパッケージをインストールすれば良い。

# apt-get install ia32-libs

Geekbenchの実行と結果の確認

 ライセンス登録無しでGeekbenchを実行すると、前述のとおりベンチマークテストは「tryout mode」で実行される。tryout modeではベンチマーク結果が必ずprimatelabsのサーバーに送信され、Webブラウザ経由でそのサーバーにアクセスして結果を確認するという形になる。

$ ./geekbench
Geekbench 2.4.3 Tryout : http://www.primatelabs.com/geekbench/

Geekbench is in tryout mode.
 
 
Uploading results to the Geekbench Browser. This could take a minute or two
depending on the speed of your internet connection.

Upload succeeded. Visit the following link and view your results online:

  http://browser.primatelabs.com/geekbench2/2282442

Visit the following link and add this result to your profile:

  http://browser.primatelabs.com/geekbench2/claim/2282442?key=598334

 ベンチマークテスト結果は、表示されるURL(この例の場合、「http://browser.primatelabs.com/geekbench2/2282442」)にアクセスすることで確認できる(図1)。

図1 Geekbenchによるベンチマークテスト結果
図1 Geekbenchによるベンチマークテスト結果

 ベンチマーク結果ではシステム情報とともに整数/浮動小数点/メモリ/ストリーム処理の総合スコアが表示され、またベンチマークテストごとの結果もグラフで表示される。