MVAは平均値解析に基づいた性能評価ツールである。 目的は、計算機システムを中心に、生産システム、 通信システムなどの性能を予測することにある。
MVA は入出力に、数値計算用フレームワーク「ポコム」を使っている。 MVA が供給するファイルはつぎのとおり。
MVAは、どのようなジョブが、どのようにノードを使用するかを入力とする。 計算機システムを例に挙げると、ジョブとは処理のことである。 例えばデータ・ベースの登録処理であったり、検索処理である。 また、ノードとは、サービスをする所である。 CPUであったり、ディスク、あるいは端末である。
出力はジョブのスループット、応答時間や、ノードの稼働率、系内数である。
MVAは平均値解析に基づいたツールなので、ジョブの到着は、 ポアソン分布に従うとみなされる。 また、ジョブがノードで受けるサービス時間は、指数分布に従うとみなされる。 そして、出力については、スループット、応答時間、稼働率、 系内数のそれぞれの平均値が得られる。
以下に入力モデルの例を示す。 これは小規模な計算機システムの待ち行列網モデルをあらわす。 この計算機システムは、1台のCPU、ディスク、通信モジュール、 3台の端末A、5台の端末Bから構成される。ジョブ、すなわち、 処理は登録処理、検索処理、外部処理の3タイプを考える。
→ → → 外界 通信 CPU ディスク ← ← ← ↓ ↑ ↓ ↑ 端末A 端末B
CPUは、微小なタイム・スライスで、 待っているジョブ全てにすこしづつサービスをする。 このようなタイプのノードはプロセッサ・シェアリング(SHARE)と呼ぶ。
通信とディスクは、待ち行列の先頭にあるジョブからサービスをする。 このようなタイプのノードは、 先入れ先出し(FCFS,First Come First Served)と呼ぶ。
端末Aや端末Bは、 複数のジョブを待ち時間なしでサービスをするノードである。 ジョブは到着したらすぐにサービスをされる。 このようなタイプのノードはディレイ・サーバー(DELAY)と呼ぶ。 複数の端末Aや端末Bを一つ一つをノードにしてもよいが、 同じ種類のノードは一つにまとめたほうが簡単である。 複数のジョブを同時にサービスするので、 稼働率は1を越える場合がある。
登録処理は端末Aで行われ、検索処理は端末Bで行われる。 そしてさらに、これらはCPUとディスクを使用する。 これらのジョブは計算機システムの内部を巡回する。 登録処理は端末の数が3台あるので3個のジョブが巡回することになる。 同様に検索処理は5個となる。 1秒間に何個のジョブを処理できるかをスループットと呼ぶ。 これはMVAの計算で得られる。 このようなジョブを閉じたジョブ(CLOSED)と呼ぶ。
外部処理は、 外界から通信モジュールに1秒あたり平均 0.05 回の割合で到着する。 そしてさらに、CPUとディスクを使用する。 外界には、無限のジョブが待ち状態にあると仮定するので、 計算機システム内に巡回しているジョブ数は不定である。 到着する数が多すぎると、 CPUやディスクで待ち状態になるジョブ数が無限になり、 パンクする場合がある。 しかし、パンクしないかぎり、 スループットは与えられた到着率と等しくなる。 このようなジョブを開いたジョブ(OPEN)と呼ぶ。
以下に、入力ファイルの例 test.txt を示す。 これはエディタで作成する。
Title ------------------- "MVA 例題ファイル" ------------------- Node TypeN [CPU] SHARE [disk] FCFS [通信] FCFS [端末A] DELAY [端末B] DELAY Job TypeJ LoadJ NodeL VisitL ServL (登録処理) CLOSED 3 [CPU] 10.0 0.5 [CPU] 1.0 0.75 [disk] 2.0 2.25 [端末A] 1.0 32.0 [端末A] 4.0 12.5 ; (検索処理) CLOSED 5 [CPU] 8.0 1.7 [CPU] 9.0 0.5 [disk] 5.0 5.4 [端末B] 5.0 42.0 [端末B] 4.0 15.0 ; (外部処理) OPEN 0.05 [CPU] 4.0 1.0 [disk] 3.0 1.0 [通信] 2.0 7.5 ; Solve Print Title Print Node UtilN ResidN Print Job RespJ ThrouJ NodeS UtilS ResidS RespS Output report.txt Print Title Print Node UtilN ResidN Print Job RespJ ThrouJ NodeS UtilS ResidS RespS Output -
; は配列の行末を表す。$ は配列の終わりを表す。 Title,Node,TypeN,Job,TypeJ,LoadJ,NodeL,VisitL,ServL は、 入力変数を示している。
名前 | 説明 |
---|---|
Title | タイトルを記録する。スペースを含む時は ' で囲む。 |
Node | ノードの名前を記録する。 |
TypeN | ノードが SHARE,FCFS,DELAY のどれかを記録する。 |
Job | ジョブの名前を記録する。 |
TypeJ | ジョブが OPEN か CLOSED かを記録する。 |
LoadJ | ジョブが OPEN の時は1秒間に到着するジョブの数を記録し、 ジョブが CLOSED の時は巡回するジョブの数を記録する。 例では端末の数となる。 |
NodeL | ジョブがどのノードを訪問するかを記録する。 |
VisitL | ジョブがそのノードを何回訪問するかを記録する。 |
ServL | ジョブが1回の訪問で、平均どれだけサービスを受けるかを記録する。 |
例えば、登録処理は、CPUを11回訪問し、 そのうち10回は平均 0.5 秒間サービスを受ける。 残りの1回は 0.75 秒間サービスを受ける。 そして、ディスクを2回訪問し平均 2.25 秒間サービスを受ける。 さらに、端末Aを5回訪問し、 そのうち1回は平均 32 秒間サービスを受ける。 残りの4回は12.5 秒間サービスを受ける。
ディスクや通信のように、FCFS のノードでは、 1つのジョブに対して、複数のサービス時間は指定できない。 この制限に注意すること。
Solve は、計算の実行をするコマンドである。 Print は、計算結果を出力するコマンドである。 Output は、出力するファイルを決めている。 最後の行のように、Output - とすると、画面に出力が戻る。 この例ならば、画面と report.txt の両方に結果が出力される。
ここで、出力変数 UtilN,ResidN,RespJ,ThrouJ,NodeS,UtilS,ResidS,RespS について説明する。
名前 | 説明 |
---|---|
UtilN | 各ノードの稼働率を示す。 端末Aのようなディレイ・サーバーは一度に、 複数のジョブをサービスできるので、 稼働率が1を越えることがある。 |
ResidN | 各ノードの平均系内数をしめす。 |
RespJ | ジョブの応答時間を示す。 |
ThrouJ | ジョブのスループットを示す。 |
NodeS | ジョブがどのノードを使うかを示す。 |
UtilS | ジョブについてノードごとに分けた稼働率を示す。 |
ResidS | ジョブについてノードごとに分けた平均系内数を示す。 |
RespS | はジョブについてノードごとに分けた応答時間を示す。 |
以下に出力結果を示す。
Title ------------------- "MVA 例題ファイル" ------------------- Node UtilN ResidN [CPU] 0.6005 1.3635 [disk] 0.6378 1.6312 [通信] 0.7500 3.0000 [端末A] 2.2040 2.2040 [端末B] 3.6687 3.6687 Job RespJ ThrouJ NodeS UtilS ResidS RespS (登録処理) 111.6172 0.0269 [CPU] 0.1545 0.3432 12.7678 [disk] 0.1209 0.4529 16.8493 [端末A] 2.2040 2.2040 82.0000 ; (検索処理) 367.9733 0.0136 [CPU] 0.2459 0.5476 40.3010 [disk] 0.3669 0.7836 57.6723 [端末B] 3.6687 3.6687 270.0000 ; (外部処理) 77.3475 0.0500 [CPU] 0.2000 0.4727 9.4539 [disk] 0.1500 0.3947 7.8936 [通信] 0.7500 3.0000 60.0000 ;
前の章で作成した test.txt を解析する時は、 以下のようにコマンドを使う。
C:\>mva test.txt
ファイルを指定せずに起動すると、変数と関数のコメントを表示する。
C;\>mva
それによって、変数は以下のうちのどれかに分類できることがわかる。
構造 | 型 | ||||
---|---|---|---|---|---|
単純変数 | int | code | real | str | |
ベクトル(vector) | ivec | cvec | rvec | svec | cdef |
固定列行列(matrix) | imat | cmat | rmat | smat | |
可変列行列(jagged) | ijag | cjag | rjag | sjag |
MVA には、以下に示す5種類の行がある。
変数行を書く時は、次の順番を守って変数を並べなければならない。
[単純変数] [ベクトル・固定列行列] [可変列行列]
さらに、ベクトル、固定列行列、可変列行列を複数並べる時は、 行サイズを指定する整数変数が同じものでなければならない。 また、可変列行列を複数並べる時は、 列サイズを示す整数ベクトル変数も等しくなければならない。
変数行の後には、それに応じた量のデータが必要になる。 この行をデータ行と呼ぷ。 データ行での読み込みの順番は、変数行での順序から次のように決る。
順番さえあっていれば、改行や注釈は自由に配置できる。 従って、工夫次第で、読みやすく、 かつページ数が少ないデータ ファイルを書くことができる。
ここで、MVA で使用できるポコム関数についてまとめておく。
名前 | 説明 |
---|---|
Alias | 変数/関数に別名をつけます。日本語も指定できます。
例 Alias N 数 |
Append | 以降の出力を指定されたファイルへ追加書き込みする。- を指定すると標準出力へ書く。 + を指定すると標準エラーへ書く。 |
Clock | 起動した時からの経過時間を表示する。引数の文字列を後ろに表示する。 |
Echo | 文字列の表示。# よりも後ろの文字列も出力される。 |
Format | 変数の出力桁数を変更する。
出力の精度を高くしたり、
画面にたくさんのデータを表示したりするときに使用する。
下2桁が全体の桁数を表し、百の桁が小数点以下の桁数を示す。
浮動小数点で -209 のように負の符号を付けると、3.14e+000 の形式で出力する。
整数で -4 のように負の符号を付けると16進数で出力する。
浮動小数点で0または -1 に指定した時は、必要に応じた精度で表示する。
浮動小数点で -2 または -3 に指定した時は、16進数で表示する。
固定列行列以外の配列で、0に指定した場合は、
単独で表示したときでも要素ごとに改行される。
また、RVEC、RJAG で、-2 に指定した場合も、
単独で表示したときでも要素ごとに改行される。
同時に複数の変数の桁数を変えることができる。
例 Format UtilS 408 ResidS 408 RespS 408 |
List | 変数と関数の一覧を表示する。引数は取らない。 |
Load | 指定されたファイルを読む。- を指定すると標準入力を読む。 |
Output | 以降の出力を指定されたファイルへ書く。 同じ名前のファイルがあるときは上書きされる。 - を指定すると標準出力へ書く。+ を指定すると標準エラーへ書く。 |
変数の表示。複数の変数を同時に指定する時は、 読み込みと同様変数の順番とサイズが合ってなければならない。 | |
PrintCSV | CSVフォーマットに従って変数の値を表示する。 エクセルで読み込むのに使用する。 |
PrintTSV | タブ区切りフォーマットに従って変数の値を表示する。 エクセルで読み込むのに使用する。 |
Range |
整数、浮動小数点、コード型変数の取る値を制限する。
範囲条件の種類として==、!=、>、>=、<、<=が使える。
例 Range N > 0 # N は 1 以上に制限される。また、複数の範囲条件を設定することができる。 例 Range N > 0 <= 10 != 5この場合 N は 1,2,3,4,6,7,8,9,10 に制限される。 (注意! 範囲条件を表す記号の前後に必ず空白を置くこと。) |