待ち行列の計算ツール(M/M/1・M/M/c)
到着率と平均サービス時間、窓口の数を入れると、利用率、平均待ち時間、平均応答時間、待っている数を、待ち行列のM/M/1モデル(窓口が複数ならM/M/c)で計算します。基本情報技術者試験や応用情報技術者試験でおなじみの「ρ/(1−ρ)×平均サービス時間」の計算を確かめられ、利用率が上がると待ち時間がどれだけ急に伸びるかをグラフで見られます。
結果
利用率ρが100%以上なので、到着のペースに処理が追いつかず、待ち行列は限りなく伸びていきます。待ち時間は定まらないため表示しません。到着率を下げるか、平均サービス時間を短くするか、窓口を増やしてください。
- 利用率 ρ
- –
- サービス率 μ
- –
- 待つ確率
- –
- 待っている数 Lq
- –
- 系内の数 L
- –
- 平均待ち時間 Wq
- –
- 平均系内時間(応答時間)W
- –
利用率と待ち時間の関係
到着はランダム(ポアソン到着)、サービス時間は指数分布、先着順(FIFO)、待つ場所に限りがない、十分に時間がたった定常状態という前提で計算しています。
グラフで見る
ほかの入力は今の値のまま、選んだ入力だけを今の値の1/4〜4倍の範囲で変えたときの結果です。赤い点が今の値です。
M/M/1とは: ケンドールの記号と前提
M/M/1は、待ち行列のモデルを「到着の分布/サービス時間の分布/窓口の数」の順に並べるケンドールの記号で表したものです。最初のMは到着がランダムであること(ポアソン到着で、到着の間隔が指数分布に従う)、2番目のMはサービス時間が指数分布に従うこと、最後の1は窓口が1つであることを表します。MはMarkov(マルコフ性)の頭文字で、次の到着やサービスの終わりまでの時間が、それまでに経過した時間に左右されない性質を指します。ほかに、待つ場所に限りがないこと、先に来た順にサービスすること(FIFO)、十分に時間がたって平均が安定した定常状態を考えることを前提にします。銀行の窓口、サーバへの要求、ディスクへの入出力、ルータで送り出しを待つパケットなど、多くの待ちの問題をこのモデルで近似します。
式と試験での計算の手順
まず利用率 ρ = λ × Ts を求めます。λは単位時間あたりに到着する件数、Tsは1件のサービスにかかる平均時間で、ρは窓口が忙しい時間の割合です。次に、平均待ち時間 Wq = ρ/(1 − ρ) × Ts と、平均応答時間(系内時間) W = Wq + Ts = Ts/(1 − ρ) を計算します。行列の長さは、待っている数が Lq = ρ²/(1 − ρ)、サービス中も含めた系内の数が L = ρ/(1 − ρ) です。既定値の λ = 0.05件/秒(1分に3件)、Ts = 10秒では、ρ = 0.5、Wq = 0.5/0.5 × 10 = 10秒、W = 20秒、Lq = 0.5、L = 1 になります。試験の問題も「ρを求める → ρ/(1 − ρ) を掛けて待ち時間を出す → 応答時間ならTsを足す」の順に解けます。
利用率が100%に近づくと待ち時間が急に伸びる
Wq/Ts = ρ/(1 − ρ) なので、利用率が50%のとき待ち時間はサービス時間と同じ1倍ですが、80%では4倍、90%では9倍、95%では19倍になります。分母の 1 − ρ は窓口が空いている時間の割合で、これが0に近づくと、たまたま到着が重なってできた行列を解消する余裕がなくなるからです。グラフの曲線が右端で急に立ち上がるのはこのためで、利用率を80%から90%に上げるだけで、待ち時間は2倍以上(4倍 → 9倍)になります。逆に、利用率90%(Ts = 10秒、Wq = 90秒)の窓口でサービスを1割速くして Ts = 9秒にすると、ρ = 0.81 になり、Wq は約38秒と半分以下に縮みます。そのため、CPU、ディスク、ネットワークの回線、コールセンターなどの設計では、平均の利用率を100%近くまで上げず、ピーク時にも余裕が残るようにします。
リトルの法則で数と時間を結び付ける
リトルの法則は、系内の平均の数L、到着率λ、1件が系内にいる平均時間Wのあいだに L = λW が成り立つという関係で、待っている部分だけを見ても Lq = λWq が成り立ちます。既定値では λ = 0.05件/秒、W = 20秒なので L = 0.05 × 20 = 1件、Lq = 0.05 × 10 = 0.5件となり、ツールの結果と一致します。差の L − Lq = λ × Ts はサービスを受けている平均の数で、窓口が1つなら利用率ρに等しくなります。この法則は到着やサービス時間の分布によらず、安定した系なら成り立つので、M/M/1の前提が成り立たない場合にも使えます。たとえば毎秒100件の要求が届き、1件が平均0.2秒かかるサーバでは、平均20件が同時に処理中です。
窓口が複数のM/M/c: 1列に並ぶほうが速い
窓口がc個あるM/M/cでは、利用率は ρ = λ × Ts/c で、すべての窓口がふさがっていて待つ確率をアーランのC式で求め、平均待ち時間は Wq = 待つ確率 × Ts/(c(1 − ρ)) になります。既定値から到着率を2倍の λ = 0.1件/秒にして窓口を2つにすると、ρ = 0.5 のまま、待つ確率は1/3、Wq ≈ 3.33秒、W ≈ 13.3秒です。同じ到着を2つの窓口に半分ずつ振り分けて別々の行列にすると、それぞれが λ = 0.05件/秒のM/M/1になり、Wq = 10秒、W = 20秒なので、1列に並んで空いた窓口から順に呼ぶほうが待ち時間は3分の1で済みます。別々の行列では、片方の窓口が空いているのに、もう片方に客が並んでいることがあるからです。グラフでも c = 2 にすると、利用率80%での Wq は Ts の約1.78倍(c = 1 では4倍)に下がります。銀行や空港で1列に並ぶ方式や、サーバのスレッドが共通のキューから仕事を取る設計は、この性質を生かしています。
性能評価の問題を解く
- A500件
- B20件
- C0.002件
答えと解説を見る
正解:B. 20件
リトルの法則は、系の中にある平均の数L=到着率λ×1件が系の中にいる平均の時間W、という関係です。毎秒100件が届き、それぞれ0.2秒いるので、平均20件が同時に処理されています。この関係を使うと、必要なスレッドの数やバッファの大きさを見積もれます。例えばメモリの帯域を出し切るのに、同時に未完了の要求がいくつ必要かも、同じ考え方で求められます。
- A急激に長くなる(使用率が上がるほど、増え方が大きくなる)
- B使用率に比例して、少しずつ長くなる
- C使用率が高いほど、待ち時間は短くなる
答えと解説を見る
正解:A. 急激に長くなる(使用率が上がるほど、増え方が大きくなる)
要求が不規則に届く場合、サーバが空いている時間があっても、たまたま要求が重なると待ち行列ができます。使用率が高いほど空いている時間が少なく、できた行列が解消されにくくなるので、待ち時間は使用率をρとして1÷(1−ρ)のような形で急に増えます。例えば使用率50%と90%では待ち時間に何倍もの差が出ます。そのため、応答の速さが大切なシステムでは使用率に余裕を残します。
- A平均が良くても、一部の要求がとても遅いことがあり、多くの部品の応答を待つ処理ではその遅い応答が全体の遅さを決めるから
- B99パーセンタイルの値は、必ず平均より小さいから
- C平均の値は計算できないから
答えと解説を見る
正解:A. 平均が良くても、一部の要求がとても遅いことがあり、多くの部品の応答を待つ処理ではその遅い応答が全体の遅さを決めるから
応答時間の分布は、ほとんどが速く、ごく一部がとても遅い形になりがちです。平均だけを見ると、この遅い部分が隠れます。さらに、1つの画面を表示するのに100個の部品の応答を待つような処理では、どれか1つでも遅ければ全体が遅くなるので、1%の遅い応答が6割以上の利用者に影響します。そのため、遅い側の値(テールレイテンシ)を目標にして管理します。
- A0.8
- B1.25
- C3
答えと解説を見る
正解:A. 0.8
利用率ρは、到着率λと平均サービス時間Tsの積で、窓口が忙しい時間の割合を表します。単位をそろえると4分 = 1/15時間なので、ρ = 12 × 1/15 = 0.8 です。サービス率 μ = 15件/時間を使って、ρ = λ/μ = 12/15 と求めても同じです。
- A20秒
- B45秒
- C60秒
答えと解説を見る
正解:C. 60秒
利用率は ρ = 3件/分 × 15秒 ÷ 60秒 = 0.75 です。平均待ち時間は Wq = ρ/(1 − ρ) × Ts = 0.75/0.25 × 15 = 45秒で、これに処理の時間15秒を足すと、平均応答時間は 45 + 15 = 60秒です。Ts/(1 − ρ) = 15/0.25 = 60秒と求めても同じです。
- A1.125倍
- B2倍
- C2.25倍
答えと解説を見る
正解:C. 2.25倍
Wq = ρ/(1 − ρ) × Ts で、Tsが同じなので ρ/(1 − ρ) の比を求めます。ρ = 0.8 では 0.8/0.2 = 4、ρ = 0.9 では 0.9/0.1 = 9 なので、9 ÷ 4 = 2.25倍です。利用率が1に近づくと 1 − ρ が0に近づくので、利用率のわずかな増加で待ち時間が急に伸びます。
- A方式Aの方が短い。行列が2本に分かれて、1本あたりの到着率が半分になるから
- B方式Bの方が短い。方式Aでは、一方の窓口に行列があっても他方が空いていることがあるから
- Cどちらも同じ。窓口の数と処理の速さが同じなら、行列の作り方によらず平均待ち時間は変わらないから
答えと解説を見る
正解:B. 方式Bの方が短い。方式Aでは、一方の窓口に行列があっても他方が空いていることがあるから
方式Aは、到着率が半分のM/M/1が2つ並んだものとみなせます。方式Bは2つの窓口で1本の行列を共有するM/M/2で、窓口が1つでも空いていれば待たずに処理を受けられます。例えば、平均サービス時間1分、全体の到着率1件/分(利用率0.5)では、方式Aの平均待ち時間は 0.5/(1 − 0.5) × 1 = 1分ですが、方式Bでは約0.33分です。そのため、銀行の窓口やサーバの処理では、1本の行列を複数の窓口で共有する方式がよく使われます。
- A4.0件/秒
- B4.2件/秒
- C5.0件/秒
答えと解説を見る
正解:A. 4.0件/秒
平均応答時間は W = Ts/(1 − ρ) なので、0.2/(1 − ρ) ≤ 1.0 から 1 − ρ ≥ 0.2、つまり ρ ≤ 0.8 です。ρ = λ × Ts なので、λ ≤ 0.8 ÷ 0.2 = 4.0件/秒です。到着率が5.0件/秒では利用率が1になり、行列は限りなく伸びます。
よくある質問
「1時間に30件」のように与えられたとき、到着率λはどう入れますか?
到着率と平均サービス時間の時間の単位をそろえます。1時間に30件到着し、平均サービス時間が1.5分なら、時間の単位を「分」にして λ = 30 ÷ 60 = 0.5、Ts = 1.5 を入れます。ρ = 0.5 × 1.5 = 0.75、Wq = 0.75/0.25 × 1.5 = 4.5分、W = 6分になります。到着の間隔が平均2分と与えられた場合は、その逆数の λ = 1/2 = 0.5件/分です。
待ち時間と応答時間はどう違いますか?
平均待ち時間Wqは、到着してからサービスが始まるまで行列に並んでいる時間です。応答時間(系内時間)Wは、それにサービス時間を足した、到着してから終わるまでの時間で、W = Wq + Ts です。既定値では Wq = 10秒、W = 20秒です。問題文がどちらを聞いているかを確かめ、応答時間ならTsを足すのを忘れないようにしてください。
利用率ρが1以上になるとどうなりますか?
平均すると処理できる量以上に到着するので、行列は時間とともに限りなく伸び、平均の待ち時間は定まりません。ρがちょうど1でも、到着とサービスがランダムにばらつく限り行列は安定しません。このツールでは警告を出して待ち時間を表示しません。窓口を増やす、サービスを速くする、到着を減らすのいずれかで、ρ = λ × Ts/c を1未満にしてください。
M/M/1の前提が成り立たないときはどうなりますか?
サービス時間が一定でばらつきがない場合はM/D/1というモデルになり、Wq = ρ/(2(1 − ρ)) × Ts と、M/M/1のちょうど半分になります。既定値ならWqは10秒から5秒になります。一般のサービス時間(M/G/1)では、ポラチェック・ヒンチンの式 Wq = (1 + Cs²)/2 × ρ/(1 − ρ) × Ts のように、サービス時間のばらつき(変動係数Cs)が大きいほど待ち時間が長くなります。到着がまとまって届く場合も、一般にM/M/1より待ち時間は長くなります。
時間の単位はどう選べばよいですか?
到着率と平均サービス時間を同じ単位で入れれば、どの単位でもかまいません。単位を「分」にしたら、λは1分あたりの件数、Tsは分で入れ、WqとWも分で表示されます。利用率、待つ確率、Lq、Lは単位のない数なので、単位を変えても同じ値です。たとえば既定値と同じ条件を分で入れると λ = 3、Ts = 1/6 ≈ 0.1667 で、ρ = 0.5、Wq ≈ 0.1667分(10秒)になります。