2007年 9月 21日 金曜日
やっぱり Sun がスキ!
システムサイジングにまつわる話~アムダールの法則~
ある処理を 4CPU で処理した時の時間が 1CPU で処理した時の 1/4 に必ずしもならないことは
皆さんご存知の事実でしょう。
アプリケーションの処理は常にパラレル処理が可能とは限らないからです。つまり、4CPU あっても1CPUしか使えない処理が
アプリケーションに存在するということです。
この影響を簡単なモデル化したものにアムダールの法則というものがありますので少しご紹介
してみましょう。
アプリケーションの処理というのは大きく分けると次の2つのフェーズに分かれます。
1. シリアル実行フェーズ
・ひとつの CPU のみが使用されるフェーズです。例えば、テープからデータをロードするといったような処理になります。
2. パラレル実行フェーズ
・複数の CPU で処理が実行されるフェーズです。CPU 数に比例して性能が向上するような処理です。
このアプリケーションを 1CPU で実行した場合のトータル実行時間は以下の数式で表されます。
T = Ts + Tp (1)
Ts : シリアル実行フェーズの実行時間
Tp : パラレル実行フェーズの実行時間
同じアプリケーションを複数 CPU で実行した場合の実行時間のトータルは以下の数式となります。
ここで、アムダールの法則では、パラレル実行フェーズの実行時間は、CPU数と反比例するという仮定をおいています。
T(N) = Ts + Tp/N (2)
Ts : シリアル実行フェーズの実行時間
Tp : パラレル実行フェーズの実行時間
N : CPU 数
Ts と Tp については通常は不明の値ですが、異なる CPU 数での実行時間は実際にアプリケーションを動かすことで求めることができます。
その実行時間を元に上記 (1),(2) の 2 つの連立方程式を解くことで、Ts、及びTpを求めることができます。
ここでもう一つ前提ですが、CPU 数が変わることでのオーバーヘッドについてはアムダールの法則では考慮しないこととなっています。
それでは、実行時間の仮定をおいた上で、上記連立方程式を解いてみましょう。アプリケーションを 1CPU と 16CPU で実行した時の
処理時間をそれぞれ以下のように仮定します。
T(1) = 100.0
T(16) = 7.1
これを元に上記(1)、(2)の連立方程式を解くと、
Ts = 0.91
Tp = 99.09
となります。これは言い換えると、99 %以上の処理がパラレルに実行されることを意味しており、かなり良い状況であることが分かります。
アムダールの法則による分析は通常、全体の処理時間に占めるパラレル処理される部分の比率を対象とします。その比率は次の数式、
Fp = Tp/(Ts + Tp) (3)
で表され、上記の例の場合は、0.9909 という値となります。
このようにパラレル実行部分の比率が 99 %という比較的良好なものであっても、16CPUにした時の性能向上率は、CPU 数 16 倍
に対して、約 14 倍ということになります。
例えば、ベンチマークなどで CPU 数 2 パターンのデータが得られれば、上記方程式を解くことによって、CPU 数に応じた処理性能を予測する
ことが可能と考えられます。但し、この場合、測定した構成以上の CPU 数での処理性能をこの方式で予測するのは危険です。それは、既知の
構成でのシステム挙動を未知の領域まで適用するということになるからです。上記の例でいうと、1CPU から 16CPU までの性能向上率を元に、
24CPU での性能を予測するということはリスクが高いということです。
最後に、N 個の CPU での性能向上率を S とすると、S = T(1)/T(N) と表すことができます。これを上記 (1), (2), (3) の式を用いて Fp を使う形
に変換すると次のようになります。
S = 1/((1-Fp) + Fp/N)
となります。
これをグラフ化すると以下のようになり、CPU 数が多くなればなるほど、Fp の少しの違いがスケーラビリティに大きく影響してくることが
分かります。
Posted at 04:02午後 9 21, 2007 by Tez in Sun | 投稿されたコメント[0]
投稿されたコメント: