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のインストール方法

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

yum install gcc
yum install perl-Time-HiRes

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

cd /usr/local/src
wget https://byte-unixbench.googlecode.com/files/UnixBench5.1.3.tgz
tar xvzf UnixBench5.1.3.tgz

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

wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/byte-unixbench/UnixBench5.1.3.tgz

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

UnixBenchの実行方法

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

cd UnixBench
./Run

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

Run [ -q | -v ] [-i  ] [-c  [-c  ...]] [test ...]

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

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

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

./Run -v -i 5 execl

測定可能なテストケース

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

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の結果の見方

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

========================================================================
 BYTE UNIX Benchmarks (Version 5.1.3) 

 System: localhost.localdomain: GNU/Linux
 OS: GNU/Linux -- 2.6.32-358.el6.x86_64 -- #1 SMP Fri Feb 22 00:31:26 UTC 2013
 Machine: x86_64 (x86_64)
 Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
 CPU 0: Intel(R) Xeon(R) CPU E5-2690 v2 @ 3.00GHz (6000.0 bogomips)
 x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET
 CPU 1: Intel(R) Xeon(R) CPU E5-2690 v2 @ 3.00GHz (6000.0 bogomips)
 x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET
 15:41:47 up 13 min, 1 user, load average: 0.00, 0.00, 0.00; runlevel 3

------------------------------------------------------------------------
Benchmark Run: 木 10月 30 2014 15:41:47 - 16:09:51
2 CPUs in system; running 1 parallel copy of tests 

Dhrystone 2 using register variables 37229876.9 lps (10.0 s, 7 samples)
Double-Precision Whetstone 4000.4 MWIPS (9.9 s, 7 samples)
Execl Throughput 4545.9 lps (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 1150993.4 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 319485.0 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 3288203.3 KBps (30.0 s, 2 samples)
Pipe Throughput 2156689.3 lps (10.0 s, 7 samples)
Pipe-based Context Switching 402949.4 lps (10.0 s, 7 samples)
Process Creation 12315.8 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 7222.7 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 1619.1 lpm (60.0 s, 2 samples)
System Call Overhead 2618668.7 lps (10.0 s, 7 samples) 

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700 37229876.9 3190.2
Double-Precision Whetstone 55 4000.4 727.3
Execl Throughput 43 4545.9 1057.2
File Copy 1024 bufsize 2000 maxblocks 3960 1150993.4 2906.5
File Copy 256 bufsize 500 maxblocks 1655 319485 1930.4
File Copy 4096 bufsize 8000 maxblocks 5800 3288203.3 5669.3
Pipe Throughput 12440 2156689.3 1733.7
Pipe-based Context Switching 4000 402949.4 1007.4
Process Creation 126 12315.8 977.4
Shell Scripts (1 concurrent) 42.4 7222.7 1703.5
Shell Scripts (8 concurrent) 6 1619.1 2698.6
System Call Overhead 15000 2618668.7 1745.8
 ========
System Benchmarks Index Score 1788.2 

------------------------------------------------------------------------
Benchmark Run: 木 10月 30 2014 16:09:51 - 16:37:55
2 CPUs in system; running 2 parallel copies of tests 

Dhrystone 2 using register variables 74460260.1 lps (10.0 s, 7 samples)
Double-Precision Whetstone 7998.5 MWIPS (9.9 s, 7 samples)
Execl Throughput 10344.6 lps (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 1472854.9 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 395038.8 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 4741362.5 KBps (30.0 s, 2 samples)
Pipe Throughput 4307783.4 lps (10.0 s, 7 samples)
Pipe-based Context Switching 813515.8 lps (10.0 s, 7 samples)
Process Creation 28973.8 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 12119.5 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 1557.0 lpm (60.0 s, 2 samples)
System Call Overhead 4200485.6 lps (10.0 s, 7 samples) 

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700 74460260.1 6380.5
Double-Precision Whetstone 55 7998.5 1454.3
Execl Throughput 43 10344.6 2405.7
File Copy 1024 bufsize 2000 maxblocks 3960 1472854.9 3719.3
File Copy 256 bufsize 500 maxblocks 1655 395038.8 2386.9
File Copy 4096 bufsize 8000 maxblocks 5800 4741362.5 8174.8
Pipe Throughput 12440 4307783.4 3462.8
Pipe-based Context Switching 4000 813515.8 2033.8
Process Creation 126 28973.8 2299.5
Shell Scripts (1 concurrent) 42.4 12119.5 2858.4
Shell Scripts (8 concurrent) 6 1557 2595
System Call Overhead 15000 4200485.6 2800.3
 ========
System Benchmarks Index Score 3006.3

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

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

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

2 CPUs in system; running 1 parallel copy of tests

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

2 CPUs in system; running 2 parallel copy of tests

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

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

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

ターミナルB

./Run -i 1 pipe

ターミナルA

watch -n 5 "ps auwxxx|grep UnixBench"
Every 5.0s: ps auwxxx|grep UnixBench Fri Oct 31 18:02:24 2014

root 2218 0.0 0.2 106056 1288 pts/0 S+ 18:02 0:00 sh -c "/usr/local/src/UnixBench/pgms/pipe" 10 2>&1 >> "/usr/local/src
root 2219 91.2 0.0 3920 384 pts/0 R+ 18:02 0:03 /usr/local/src/UnixBench/pgms/pipe 10
root 2223 0.0 0.2 107672 1460 pts/1 S+ 18:02 0:00 watch -n 5 ps auwxxx|grep UnixBench?
root 2224 0.0 0.2 106056 1276 pts/1 S+ 18:02 0:00 sh -c ps auwxxx|grep UnixBench?
root 2226 0.0 0.1 107452 936 pts/1 S+ 18:02 0:00 grep UnixBench

ターミナル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

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

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

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