Xenのパフォーマンステスト 〜どこまで性能がでるの? 1

CPU性能を見る 〜 そのままでは使えないDhrystone

CPU性能を見る 〜 そのままでは使えないDhrystone

   Xen自体は高性能な実装といわれますが、どの程度の性能がでるものなのでしょうか。筆者自身はベンチマークマニアというわけではないのですが、まずはCPU性能を見るということで、昔から使われているDhrystone 2.1を使ってみましょう。

   ベンチマークソフトには、以下のURLから取得できるDhrystoneベンチマークプログラムを用いました。



   なおこのプログラムを使うためには、システムにコンパイラがインストールされている必要があります。

Dhrystoneプログラムを展開 〜 コンパイルする

   ZIPファイルを展開すると、dhrys.1/dhrys2/dhrys3/dhrys4という4つのファイルが作成されます。これらのファイル は、shar(シェルアーカイバ)と呼ばれるしくみでまとめられているため、dhrys.1から順序よく「シェルスクリプト」として実行する必要がありま す。

   具体的には、以下のような感じで実行することで、コンパイルからベンチマーク実行が可能な環境が作成されます。

Dhrystoneの展開(sharファイルを展開する)

juno:/home/wakatono/tmp/dhrys# sh dhrys.1
shar: Extracting "Makefile" (1009 characters)
shar: Extracting "dhrystone.c" (27341 characters)
shar: End of shell archive.
juno:/home/wakatono/tmp/dhrys# sh dhrys.2
shar: Will not over-write existing file "Makefile"
shar: Extracting "RATIONALE" (18793 characters)
shar: Extracting "README" (2308 characters)
shar: Extracting "README.RER" (4419 characters)
shar: Extracting "clarify.doc" (3195 characters)
shar: Extracting "pure2_1.dif" (3590 characters)
shar: Extracting "submit.frm" (170 characters)
shar: End of shell archive.
juno:/home/wakatono/tmp/dhrys# sh dhrys.3
shar: extracting 'dhry.h' (18533 characters)
shar: extracting 'dhry.p' (37108 characters)
juno:/home/wakatono/tmp/dhrys# sh dhrys.4
shar: extracting 'dhry_1.c' (11857 characters)
shar: extracting 'dhry_2.c' (5273 characters)
shar: extracting 'dhry_c.dif' (4354 characters)

   あとはmakeコマンドを実行することで、dhrystoneの結果が得られます。ただ、このソースコードをそのまま使うと、以下のような結果がでてしまい、何の役にも立ちません。

Running dhrystone (Level 1 optimization, without registers)
./dhrystone
Dhrystone(1.1) time for 50000 passes = 0
This machine benchmarks at 5000000 dhrystones/second
./dhrystone
Dhrystone(1.1) time for 50000 passes = 0
This machine benchmarks at 2500000 dhrystones/second
./dhrystone
Dhrystone(1.1) time for 50000 passes = 0
This machine benchmarks at 5000000 dhrystones/second

Running dhrystone (Level 1 optimization, with registers)
./dhrystoneR
Dhrystone(1.1) time for 50000 passes = 0
This machine benchmarks at 5000000 dhrystones/second
./dhrystoneR
Dhrystone(1.1) time for 50000 passes = 0
This machine benchmarks at 2500000 dhrystones/second
./dhrystoneR
Dhrystone(1.1) time for 50000 passes = 0
This machine benchmarks at 5000000 dhrystones/second

Running dhrystone (Level 2 optimization, without registers)
./dhrystoneO
Dhrystone(1.1) time for 50000 passes = 0
This machine benchmarks at 5000000 dhrystones/second
./dhrystoneO
Dhrystone(1.1) time for 50000 passes = 0
This machine benchmarks at 5000000 dhrystones/second
./dhrystoneO
Dhrystone(1.1) time for 50000 passes = 0
This machine benchmarks at 5000000 dhrystones/second

Running dhrystone (Level 2 optimization, with registers)
./dhrystoneRO
Dhrystone(1.1) time for 50000 passes = 0
This machine benchmarks at 5000000 dhrystones/second
./dhrystoneRO
Dhrystone(1.1) time for 50000 passes = 0
This machine benchmarks at 5000000 dhrystones/second
./dhrystoneRO
Dhrystone(1.1) time for 50000 passes = 0
This machine benchmarks at 5000000 dhrystones/second

   これは、Dhrystoneで定義された処理を50,000回実行するのにどの程度の時間がかかった、というのを表現しているのですが、1秒未満 (Dhrystone 1.1を50,000回実行するのにかかった時間は0秒となっている)で実行されてしまっており、ベンチマークとして有意とはいい がたい結果となっています。

Dhrystone 2.1を修正する 〜 ループ回数を1,000万回に

   先のような結果では検証とは言い難く、Dhrystoneの処理回数を変更し、実行しなおす必要があります。まずは、200倍ほどして1,000万 回のループを実行するようにdhrystone.cを修正しました。具体的には、dhrystone.cの387行目に以下のような記述があるので、この 行の「50000」を「10000000」に変更しましょう。

#define LOOPS   50000    ⁄* Use this for slow or 16 bit machines *⁄

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る