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)。
テスト名 | 説明 |
---|---|
Dhrystone | 主に整数演算処理の性能を測定する古典的ベンチマークテスト |
Whetstone | 主に浮動小数点演算処理の性能を測定する古典的ベンチマークテスト |
Execl Throughput | execl関数によるプロセス作成を行いその性能を測定する |
File Copy | ファイルのコピー速度を測定する |
Pipe Throughput | プロセス間通信で使われるパイプのスループットを測定する |
Pipe-based Context Switching | プロセス間通信で使われるパイプによるコンテキストスイッチ性能を測定する |
Process Creation | 子プロセスの生成速度を測定する |
Shell Scripts | シェルスクリプトの実行性能を測定する |
System Call Overhead | システムコール実行時のオーバーヘッドを測定する |
Graphical Tests | 2D/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)。
ベンチマーク結果ではシステム情報とともに整数/浮動小数点/メモリ/ストリーム処理の総合スコアが表示され、またベンチマークテストごとの結果もグラフで表示される。