TOPサーバ構築・運用> 変更したDhrystoneベンチマークを1つのドメインUで動作させてみよう
Xenパフォーマンステスト
Xenのパフォーマンステスト 〜どこまで性能がでるの?

第1回:CPUのパフォーマンスチェック
著者:宮本 久仁男   2006/9/27
前のページ  1  2  3
変更したDhrystoneベンチマークを1つのドメインUで動作させてみよう

   最初に実行させると、dhrystoneのプログラムのコンパイルが開始されます。コンパイル〜実行がセットになって、結果がでてきます。以下は1つのドメインUだけでベンチマークを動作させた結果です。
ドメインU上でDhrystoneをコンパイル、実行する
juno:/home/wakatono/dhry_1# make
cc dhrystone.c -o dhrystone
Running dhrystone (Level 1 optimization, without registers)
./dhrystone
Dhrystone(1.1) time for 10000000 passes = 3
This machine benchmarks at 2985074 dhrystones/second
./dhrystone
Dhrystone(1.1) time for 10000000 passes = 3
This machine benchmarks at 2976190 dhrystones/second
./dhrystone
Dhrystone(1.1) time for 10000000 passes = 3
This machine benchmarks at 3048780 dhrystones/second

cc -DREG=register dhrystone.c -o dhrystoneR
Running dhrystone (Level 1 optimization, with registers)
./dhrystoneR
Dhrystone(1.1) time for 10000000 passes = 2
This machine benchmarks at 3448275 dhrystones/second
./dhrystoneR
Dhrystone(1.1) time for 10000000 passes = 2
This machine benchmarks at 3496503 dhrystones/second
./dhrystoneR
Dhrystone(1.1) time for 10000000 passes = 2
This machine benchmarks at 3472222 dhrystones/second

cc -O dhrystone.c -o dhrystoneO
Running dhrystone (Level 2 optimization, without registers)
./dhrystoneO
Dhrystone(1.1) time for 10000000 passes = 2
This machine benchmarks at 4587155 dhrystones/second
./dhrystoneO
Dhrystone(1.1) time for 10000000 passes = 2
This machine benchmarks at 4739336 dhrystones/second
./dhrystoneO
Dhrystone(1.1) time for 10000000 passes = 2
This machine benchmarks at 5000000 dhrystones/second

cc -O -DREG=register dhrystone.c -o dhrystoneRO
Running dhrystone (Level 2 optimization, with registers)
./dhrystoneRO
Dhrystone(1.1) time for 10000000 passes = 2
This machine benchmarks at 4366812 dhrystones/second
./dhrystoneRO
Dhrystone(1.1) time for 10000000 passes = 2
This machine benchmarks at 4975124 dhrystones/second
./dhrystoneRO
Dhrystone(1.1) time for 10000000 passes = 2
This machine benchmarks at 4608294 dhrystones/second

ドメイン0上で動作させてみる
wakatono@kid:~/thinkit/dhry_1$ make
Running dhrystone (Level 1 optimization, without registers)
./dhrystone
Dhrystone(1.1) time for 10000000 passes = 3
This machine benchmarks at 2793296 dhrystones/second
./dhrystone

Dhrystone(1.1) time for 10000000 passes = 3
This machine benchmarks at 2932551 dhrystones/second
./dhrystone
Dhrystone(1.1) time for 10000000 passes = 3
This machine benchmarks at 2967359 dhrystones/second

Running dhrystone (Level 1 optimization, with registers)
./dhrystoneR
Dhrystone(1.1) time for 10000000 passes = 3
This machine benchmarks at 3164556 dhrystones/second
./dhrystoneR
Dhrystone(1.1) time for 10000000 passes = 3
This machine benchmarks at 3225806 dhrystones/second
./dhrystoneR
Dhrystone(1.1) time for 10000000 passes = 3
This machine benchmarks at 3278688 dhrystones/second

Running dhrystone (Level 2 optimization, without registers)
./dhrystoneO
Dhrystone(1.1) time for 10000000 passes = 2
This machine benchmarks at 4464285 dhrystones/second
./dhrystoneO
Dhrystone(1.1) time for 10000000 passes = 2
This machine benchmarks at 4901960 dhrystones/second
./dhrystoneO
Dhrystone(1.1) time for 10000000 passes = 2
This machine benchmarks at 4444444 dhrystones/second

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

./dhrystoneRO
Dhrystone(1.1) time for 10000000 passes = 2
This machine benchmarks at 4587155 dhrystones/second
./dhrystoneRO
Dhrystone(1.1) time for 10000000 passes = 2
This machine benchmarks at 4524886 dhrystones/second


2つのドメインU上で動作させてみる

   次は、1,000万回ループするDhrystoneを2つのドメインで動作させてみましょう。起動のタイミングを同一にするために、atコマンドを用いました。ディレクトリ「/root/dhry_1」に、先のプログラムを展開してあります。

pigeon:~/dhry_1# at 1703 Sep 06
warning: commands will be executed using /bin/sh
at> cd /root/dhry_1
at> make > /tmp/result1
at> <EOT>

   同時にDhrystoneを実行したものの1つでは、結果は以下のようになります。ドメイン0も動作しており、Xen Hypervisorも動作していることもあって、ドメインUだけで性能を使いきれるわけではないため、きれいに半分というわけにはいきませんが、だいたい半分程度のCPU性能になっています。

pigeon:~/dhry_1# cat /tmp/result1
Running dhrystone (Level 1 optimization, without registers)
./dhrystone
Dhrystone(1.1) time for 10000000 passes = 6
This machine benchmarks at 1639344 dhrystones/second
./dhrystone
Dhrystone(1.1) time for 10000000 passes = 6
This machine benchmarks at 1483679 dhrystones/second
./dhrystone
Dhrystone(1.1) time for 10000000 passes = 6
This machine benchmarks at 1443001 dhrystones/second

Running dhrystone (Level 1 optimization, with registers)
./dhrystoneR
Dhrystone(1.1) time for 10000000 passes = 5
This machine benchmarks at 1718213 dhrystones/second
./dhrystoneR
Dhrystone(1.1) time for 10000000 passes = 5
This machine benchmarks at 1709401 dhrystones/second
./dhrystoneR
Dhrystone(1.1) time for 10000000 passes = 5
This machine benchmarks at 1742160 dhrystones/second

Running dhrystone (Level 2 optimization, without registers)
./dhrystoneO
Dhrystone(1.1) time for 10000000 passes = 4
This machine benchmarks at 2267573 dhrystones/second
./dhrystoneO
Dhrystone(1.1) time for 10000000 passes = 4
This machine benchmarks at 2341920 dhrystones/second
./dhrystoneO
Dhrystone(1.1) time for 10000000 passes = 4
This machine benchmarks at 2450980 dhrystones/second

Running dhrystone (Level 2 optimization, with registers)
./dhrystoneRO
Dhrystone(1.1) time for 10000000 passes = 4
This machine benchmarks at 2242152 dhrystones/second
./dhrystoneRO
Dhrystone(1.1) time for 10000000 passes = 4
This machine benchmarks at 2257336 dhrystones/second
./dhrystoneRO
Dhrystone(1.1) time for 10000000 passes = 4
This machine benchmarks at 2262443 dhrystones/second


結果 〜 CPU資源は均等に分割されるようになる&オーバヘッドは小さい

   ドメイン0で動作させたベンチマーク、1つのドメインU上で動作させたベンチマークを比較すると、ドメインUで動作させたほうが「若干ですが」性能が良いように見えます。これはおそらく、ドメイン0で動作させている他のプロセスの影響もあるのでしょう。

   また、複数のドメインUで同時に動作させた場合は、ほとんど同じ値がでています。このベンチマーク実行時に、ドメイン0でドメインUの資源使用状況を取得したのを次に示します。

Xenトップ画面
図1:Xenトップ画面
(画像をクリックすると別ウィンドウに拡大図を表示します)

   ここからは、「同等の負荷をかけた場合、CPU資源はほぼ均等に2つのドメインUに分割されている」ことがわかります。もちろん、負荷のかけ方が変わると、ある時点での負荷のかかり方によってはCPU資源が等分されないということもあります。


まとめ

   以上の検証は、ドメインUでのみ負荷をかけるという形でしたが、今度は2つのドメインUとドメイン0に、同じ負荷をかけてみます。

ドメインUでの実行結果の1つ(抜粋)
Running dhrystone (Level 1 optimization, without registers)
./dhrystone
Dhrystone(1.1) time for 10000000 passes = 10
This machine benchmarks at 941619 dhrystones/second
./dhrystone
Dhrystone(1.1) time for 10000000 passes = 11
This machine benchmarks at 891265 dhrystones/second
./dhrystone
Dhrystone(1.1) time for 10000000 passes = 10
This machine benchmarks at 916590 dhrystones/second

ドメイン0での実行結果(抜粋)
Running dhrystone (Level 1 optimization, without registers)
./dhrystone
Dhrystone(1.1) time for 10000000 passes = 5
This machine benchmarks at 1745200 dhrystones/second
./dhrystone
Dhrystone(1.1) time for 10000000 passes = 5
This machine benchmarks at 1712328 dhrystones/second
./dhrystone
Dhrystone(1.1) time for 10000000 passes = 5
This machine benchmarks at 1700680 dhrystones/second

   同じプログラムを同じタイミングで実行しましたが、ベンチマークの序盤はドメイン0の方が2倍近い性能が出ていることがわかります。このことから、ドメイン0とドメインUでは、ドメイン0の方がCPU資源を多く割り当てられていることがわかります。なお、2つのドメインUでは、Dhrystoneの実行結果(性能)は大差ありませんでした。

   まずはCPUのみに負荷をかけ、性能をダイレクトに計測する、ということで、Dhrystoneを使ってみましたが、負荷は均等にかかっている(=スケジューリングが適切に行われている)ということがわかります。当然ですが、「/proc/cpuinfo」通りの性能がでるわけではない、ということもわかりました。

   また、予想されたことではありますが、ドメイン0はCPU資源を多く割り当てられるため、ドメイン0とドメインUともに同程度の負荷がかかった場合には、ドメインUの性能劣化度合いはドメインUのみに負荷がかかった場合と比べて大きいということもわかりました。

   CPU資源の割り当てという観点からは、管理ドメインであるドメイン0の上では必要以上のプロセスを動作させず、なるべく負荷をかけずに運用するのがベターである、ということが、このことからもわかります。

   次は仮想マシンのディスクI/Oの性能に着目して、どういう振る舞いをするかという点を解説していきます。

前のページ  1  2  3


宮本 久仁男
著者プロフィール
宮本 久仁男
某大手SIerに勤務。OSおよびミドルウェア、アプリケーション開発、インターネットサーバの運用管理、社内技術支援などを経て、現在は動向調査業務に従事する。業務の傍ら、大学にも所属(博士後期課程)し、研究生活を送る。あらゆる分野に興味を持ち、それらについて自学自習で学びつつ、成果をコミュニティにフィードバックしたり、研究/検証テーマを模索したりという日々。Microsoft MVP (Windows - Security)というアワードも受賞しているものの、どこにでもいそうなエンジニア風。


INDEX
第1回:CPUのパフォーマンスチェック
  Xenのパフォーマンスはどうなの?
  CPU性能を見る 〜 そのままでは使えないDhrystone
変更したDhrystoneベンチマークを1つのドメインUで動作させてみよう