UnixBenchでLinuxサーバのCPU性能を比較する

   2018/07/02

UnixBench

UnixBenchを使うことで、Linux/Unix系サーバのベンチマークを取得することが可能になります。測定できる主な性能はCPUです。

クラウドの登場により、サーバスペックを簡単に変更できるようになりました。ハードウェアレイヤが仮想化されているため、CPUはvCPUと表記されることが多く、クロック数等の明記がないことも多々見受けられます。

IaaSベンダーによっては、明確なクロック数の表記がなく、こっちのほうが高スペックです!と提示されているケースもあります。

CPUスペックの違いを可視化するために、UnixBenchを利用してみます。

UnixBenchとは

UnixBenchとは、Linux/Unix系OSで使われている定番のベンチマークツールです。主にCPUのベンチマークを取るのに使います。

結果の数値は、1990年前後にあった、GeorgeというUNIXシステムの性能を基本として数値化しています。基本的な数値が10なので、結果が1,000であればGeorgeより100倍高速ということができます。

UnixBenchの使い方

CentOS6環境でのUnixBenchの使い方を説明します。

UnixBenchのインストール方法

必要なモジュールをインストールします。

モジュールの準備が整ったら、UnixBenchをダウンロードし、解凍します。

※ダウンロードURLが変更されているようです。

これでUnixBenchを実行する環境が整いました。

UnixBenchの実行方法

実行は、解凍したフォルダへ移動し、Runを実行します。実行時間が結構ながいので、30分ほど気長に待ちましょう。

30分も待てないよ!という方は、各種オプションを利用して時間短縮をしてみましょう。必要に応じて指定すると、効率的にベンチマークを取ることが可能です。

各種オプションは次の通りです。

オプション 内容
-q 不要な出力を抑止します。
-v 実行コマンドなどの詳細情報を出力します。
-i <n> <n>に繰り返し回数を指定します。指定が無い場合は、10回繰り返されます。
-c <n> <n>に計測時のCPUの数を指定します。指定が無い場合は、1コアの場合と、全てのコアの場合が実行されます。
test 実行するテストケースを指定します。

詳細情報を出力しながら、execlのテストを5回繰り返したい場合は次のように指定します。

測定可能なテストケース

標準で実行されるテストケースは次の通りです。個別に実行したい場合は、カッコの中のテスト名を指定します。

Dhrystone 2 using register variables

テストケース : dhry2reg

整数演算処理の性能をベンチマークします。Dhrystoneというベンチマークツールを利用しています。

Double-Precision Whetstone

テストケース : whetstone-double

浮動小数演算処理の性能をベンチマークします。Whetstoneというベンチマークツールを利用しています。

Execl Throughput

テストケース : execl

システムコール処理性能をベンチマークします。execl()というプロセスイメージを置き換えるシステムコールを繰り返します。

File Copy 1024 bufsize 2000 maxblocks

テストケース : fstime

元々はディスクの処理性能を測るものでしたが、メモリやCPUのキャッシュ増大により、ディスク処理性能ではなくOSとCPUの処理性能をみるものになっています。ファイルのコピーを繰り返すテストで、2MByteのファイルを1024Byteごとに処理します。

File Copy 256 bufsize 500 maxblocks

テストケース : fsbuffer

fstimeと同様のテスト内容で、500KByteのファイルを256Byteごとに処理します。

File Copy 4096 bufsize 8000 maxblocks

テストケース : fsdisk

fstimeと同様のテスト内容で、8MByteのファイルを4096Byteごとに処理します。

Pipe Throughput

テストケース : pipe

元々はメモリの処理性能を図るものでしたが、CPUのキャッシュ増大により、メモリ処理性能ではなく、OSとCPUの処理性能を見るためのものになっています。512Byteのデータのパイプ処理を繰り返しスループットをテストします。

Pipe-based Context Switching

テストケース : context1

OSとCPUの処理性能をみます。2つのプロセス間で更新される値をパイプで渡すことで、プロセスのコンテキストスイッチを実行させます。

Process Creation

テストケース : spawn

OSとCPUの処理性能をみます。プロセスのフォークを繰り返します。

Shell Scripts (1 concurrent)

テストケース : shell1

CPUの処理性能をみます。sort、grepなどテキスト処理を繰り返します。

Shell Scripts (8 concurrent)

テストケース : shell8

shell1と同じ処理を、8個並列に実施します。

System Call Overhead

テストケース : syscall

OSとCPUの処理性能をみます。getpid()というシステムコールを繰り返し実行します。

 

UnixBenchの結果の見方

次のような実行結果が表示されます。

マルチコアの場合は、2つの実行結果が表示される

マルチコアの場合は、2つの実行結果が表示されます。1コアの場合と全てのコアの場合です。

1コアのベンチマーク結果のヘッダ

全てのコア(2コア)のベンチマーク結果のヘッダ

コア数をどのように変更して測定しているのか?

「1コアの場合と全コアの場合の測定はどのようにおこなっているのか?」気になって調べてみました。どうやら、ベンチマークするためのシェルをコア数だけ並列稼働させることで測定しているようです。

実際に確認してみたい人は、ターミナルを2つ立ち上げます。1つのターミナルでは、プロセス状況をモニタリングし(ターミナルA)、もうひとつのターミナルで実行(ターミナルB)します。

ターミナルB

ターミナルA

ターミナルAで、/usr/local/src/UnixBench/pgms/pipe を実行している様子が分かると思います。

System Benchmarks Index Scoreの値を確認する

まず確認すべきは最下段の「System Benchmarks Index Score」です。全テストケースの総合点となるので、単純にこの数字を比較することになります。

各テストケースごとに比較したい場合は、各テストケースのINDEXの数値を比較します。

結果を比較する

一つのベンチマーク結果だけでは意味が無いので、基本となる環境でのベンチマーク結果と比較します。

結果をExcelなどで表にして比較すると良いと思います。

AWSとNIFTY Cloudのベンチマーク結果

参考までに、AmazonWebServices(AWS)の「c3.large」と、NIFTY Cloud(ニフティクラウド)の「e-medium」および「medium」のベンチマーク結果を掲載しておきます。全てのサーバタイプのvCPUは、2vCPUで、CentOS6(AWSはAmazonLinux)の初期インストール状態です。実行コマンドは、オプション指定なしです。

1vCPUの測定結果

サーバ 結果数値
AWS/c3.large 414
NIFTY Cloud/e-medium 1,554
NIFTY Cloud/medium 1,788

1vCPU

2vCPUの測定結果

サーバ 結果数値
AWS/c3.large 585
NIFTY Cloud/e-medium 1,534
NIFTY Cloud/medium 3,006

2vCPU

AWSとNIFTY Cloudを比較すると、NIFTY Cloudのほうが4倍程度INDEXスコアが良い結果となりました。

1vCPU、2vCPUのINDEXスコアを見てみると、mediumの場合は、vCPUの分だけスコアが上がっています。

c3.largeとe-mediumはvCPUによって、それほどかわらないスコアになっています。理由はわかりませんが、クロック数とコア数、2つの関係で制限を掛けていたりするのでしょうか?(2コア利用できて、合計周波数が3.0GHzまで等)ご存じの方がいれば教えてください!

まとめ

UnixBenchを利用することで、相対的にCPU性能を可視化することができました。

UnixBenchの特徴をまとめると次のようになります。

  • プラットフォームはLinux
  • オープンソース(OSS)である
  • 主にCPUのベンチマークが可能
  • 結果は、相対的に比較しなければ意味が無い

カタログスペックを鵜呑みにせずに、自分でも実際に確認できるといいですね。

  • このエントリーをはてなブックマークに追加
  • Pocket

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。