M/G/1待ち行列で見る、平均処理時間が同じでも待ち時間が変わる理由

二つの淡い磁器のリングに、長さの揃った柱と短い柱に一つだけ長い柱が混ざる配置を並べた抽象アート

処理の平均が10ミリ秒なら、平均して1秒に100件を扱える。ところが、そこへ同じ頻度で仕事を送っても、毎回ほぼ同じ時間で終わる場合と、ときどき長い処理が混ざる場合では、順番を待つ時間が変わります。平均の速さだけでは、待ち行列の様子を決めきれないためです。

この違いを扱えるのがM/G/1待ち行列です。ここでは到着頻度と平均処理時間を固定し、処理時間のばらつきだけを変えます。実機の性能を予測する前に、何を測って比較すべきかを整理するための数理モデルです。

簡単にまとめると?

  • M/G/1はランダムな到着と、さまざまな処理時間の分布を扱う1台の待ち行列です。先着順などの条件を置くと、平均待ちには処理時間の「二乗の平均」が効きます。
  • 到着80件/秒、平均処理10ミリ秒なら、平均待ちは処理時間が一定のとき20ミリ秒、指数分布なら40ミリ秒。短い処理と長い処理を混ぜた今回の例では65ミリ秒になります。
  • 長い処理は件数の割合以上にサーバーの時間を占めます。平均処理時間に加え、ばらつきや長い処理の割合を確認することが、待ちの原因を切り分ける手掛かりになります。

M/G/1のGは、処理時間の分布を限定しないという意味

M/G/1の最初のMは、到着をポアソン過程で表すことを示します。単位時間当たりの到着率をλとし、到着間隔は独立な指数分布に従います。Gはgeneralの頭文字で、処理時間を指数分布に限定しないという意味です。最後の1は処理担当が1台であることを表します。

ここでは到着順に、一つずつ、途中で割り込まずに処理する方式を考えます。個々の処理時間Sは同じ分布から独立に決まり、到着とも独立。待つ場所は十分にあり、途中離脱や受付拒否は起きないとします。M/G/1という略号だけで処理順まで決まるわけではないため、この前提が必要です。

平均処理時間をm=E[S]とすると、利用率はρ=λmです。以下ではρ<1の定常状態、つまり長く観察したときの統計的な状態を扱います。処理時間の二乗の平均も有限であることを前提にします。

平均待ちを決める「二乗の平均」

Pollaczek–Khinchine(ポラチェク–ヒンチン)の公式は、処理を始めるまでの平均待ち時間Wqを次のように表します。ここでE[ ]は平均を取る記号です。

Wq=λ E[S²] ÷ {2(1−ρ)}

E[S²]は、一件ずつの処理時間を二乗してから平均した値です。平均処理時間を二乗したm²とは異なります。関係はE[S²]=Var(S)+m²で、Var(S)は平均からの散らばりを表す分散です。

λとmを固定すると、利用率ρと分母は変わりません。その条件で分散が大きくなるほど、平均待ちは増えます。処理そのものも含む到着から完了までの平均時間はWq+mであり、二つを混ぜないことが大切です。

平均10ミリ秒、利用率80%で三つを比べる

到着率を80件/秒、平均処理時間を10ミリ秒にそろえます。利用率はすべて80%です。一つ目は毎回10ミリ秒で終わる一定時間の処理。二つ目は平均10ミリ秒の指数分布。三つ目は各仕事が独立に90%の確率で5ミリ秒、10%の確率で55ミリ秒になる処理です。

三つ目の平均は0.9×5+0.1×55=10ミリ秒ですが、二乗の平均は0.9×5²+0.1×55²=325ミリ秒²です。「10件に必ず1件長い」という規則的な並びではなく、それぞれの処理時間が独立に決まる例です。

処理時間の分布 E[S²] 平均待ち Wq 処理を含む平均
毎回10 ms 100 ms² 20 ms 30 ms
平均10 msの指数分布 200 ms² 40 ms 50 ms
90%が5 ms、10%が55 ms 325 ms² 65 ms 75 ms
到着率80件毎秒、平均処理時間10ミリ秒、利用率80パーセントを固定したM/G/1モデル。処理時間が一定なら平均待ち20ミリ秒、指数分布なら40ミリ秒、90パーセントが5ミリ秒で10パーセントが55ミリ秒なら65ミリ秒。
QS独自計算。到着率と平均処理時間を固定し、処理時間の分布だけを変更。棒は処理を始めるまでの平均待ちで、処理そのものの10ミリ秒は含みません。

混合した例の待ちは一定時間の例の3.25倍です。処理担当を遅くしたわけでも、仕事の到着を増やしたわけでもありません。また、毎回10ミリ秒にそろえても平均待ちはゼロになりません。到着がランダムなので、短い間隔で仕事が続けて届くことがあるためです。

少ない長時間処理が、なぜ後ろの仕事に効くのか

処理中のサーバーをランダムな時刻に観察すると、長い処理の途中に当たりやすくなります。今回の混合例では55ミリ秒の仕事は件数の10%ですが、処理に使う時間の割合は0.1×55÷10=55%です。件数で少数でも、サーバーの忙しい時間の半分以上を占めます。

処理中であることを条件に、その仕事が終わるまでの残り時間を平均すると、E[S²]÷(2m)になります。混合例では16.25ミリ秒、一定10ミリ秒なら5ミリ秒です。単純に「平均処理時間の半分」とすると、長い仕事に出会いやすい効果を落としてしまいます。

新しい仕事の待ちには、この残り時間に加え、すでに前で順番を待つ仕事の処理も加わります。到着がポアソン過程で、現在の状態を先読みしないという条件の下では、到着時の観察と時間平均を結び付けられます。この仕組みが、公式に二乗の平均と混雑の係数1/(1−ρ)が現れる背景です。

性能を比較するときは、どの時間を測るかをそろえる

例えば同じ平均10ミリ秒の処理系を二つ比べるなら、受付から完了までの時間だけでなく、実際に処理担当を占有した時間を分けて集計します。その平均、二乗の平均、長い処理の頻度を見れば、「平均は同じだが長時間の処理が混ざる」という違いを捉えられます。

ただし、受付から完了までの応答時間をそのままSとして式へ入れると、すでに発生している待ちを処理時間として数えてしまいます。割り込み、並列処理、優先順位、複数段の待ちがある環境では、どこを1台の処理担当とみなすのかを先に定める必要があります。

また、長い処理を別系統へ移す判断には、その系統の容量や到着の変化も関わります。今回の式だけから最適な分割方法は決まりません。二乗の平均は少数の大きな値に影響されやすいため、短い測定で長い処理を取り逃がすと、待ちを小さく見積もることもあります。

分散の効果と、モデルの限界を分ける

この比較が示すのは、同じポアソン到着、同じ平均処理時間、同じ先着順の1台という条件で、処理時間の分散が平均待ちを変えることです。到着が集中する、処理時間同士が相関する、有限の待機場所で仕事を捨てる、といった条件では、そのままの計算にはなりません。

平均待ち20ミリ秒という結果も、どの仕事も20ミリ秒以内に処理を始められるという保証ではありません。最大値や99パーセンタイルには、別の分布の評価が必要です。平均の速さを比較した後に、処理時間の散らばりと測定条件を確かめる。その一段が、同じ利用率なのに待ちが違う理由を見つける助けになります。

出典