法則一覧

第112条性能

キングマンの公式

サーバの稼働率が 100% に近づくほど、仕事がその前で待つ時間は急に伸びる。到着と処理のばらつきは、その伸びをさらに大きくする。

J. F. C. Kingman

心得

誰かが答えを待つところには、余裕を残す

どうするか

レイテンシが問題になるもの(サービス、共有のビルドランナー、オンコール担当)には、飽和より下に稼働率の上限を決める。サーバが一台、担当が一人ならかなり下に置き、代わりの利く担当が何人もいるプールなら、もっと満杯に近づけて回してよい。上限を超えたら容量を足すか負荷を捨てる。レイテンシが跳ねてからでは遅い。ばらつきも減らす。仕事を小さく揃えれば、同じ負荷でも待ちは短くなる。上限は、答えが遅くなる損と遊ばせる容量の費用を比べて決め、待ちの安いところでは上げる。

なぜ起きるか

単一サーバの待ち行列 (G/G/1) の平均待ち時間について、Kingman の近似式は E(Wq) ≈ (ρ/(1−ρ)) · ((ca² + cs²)/2) · τ となる。ρ は稼働率、ca と cs は到着間隔と処理時間の変動係数、τ は平均処理時間だ。三つの因子の頭文字から VUT 式とも呼ばれる。効いてくるのは稼働率の項で、ρ/(1−ρ) は 80% で 4、90% で 9、95% で 19 になる。ほかが同じなら、90% から 95% に上げるだけで待ち時間はほぼ倍になる。この倍率も式そのものも、サーバが一台の場合の話だ。複数のサーバが一つの待ち行列を分け合うなら、もっと高い稼働率まで待ちは短いままで、そこから伸び始める。ばらつきの項は掛け算で効くので、到着の偏りや仕事の大きさの不揃いは、どの負荷でも待ちを長くする。この近似はおおむね正確で、飽和に近い系ほどよく合う。リトルの法則は L = λW を言うだけで、W がなぜ伸びるかは言わない。キングマンの公式はその伸びがどこから来るかを示す。同じ計算はおそらく人にも当てはまり、予定が埋まりきったチームでは新しい依頼がどれも待たされがちになる。これはモデルからの推論で、Kingman が測ったものではない。

実際にあったこと

2026年2月、DNSimple は権威 DNS サーバ erldns のバージョン10を紹介した。スケジューラの稼働率が 90% を超えると、サーバは仕事を受け付ける速さを落とす。記事はなぜ 100% を目指さないのかと問い、キングマンの公式で答えている。待ち行列のレイテンシは稼働率に対して双曲線的に伸びるので、上限を 90% に置くのはレイテンシの崖から距離を取るための意図的なトレードオフだという。

記録を読む

当てはまらなくなるとき

余裕にも金がかかる:余らせた容量は、使われなくても費用がかかる。だから予算を持つ側は稼働率を上げようとし、それが正しいことも多い。Google の SRE 本は "Efficient use of resources is important any time a service cares about money." と書き、容量の確保がサービスの総費用を大きく左右すると見ている。答えが遅くなっても損が小さいところでは、詰めて回して浮いたお金をもっと大事な仕事に回せる。

出典

J. F. C. Kingman『The single server queue in heavy traffic』(Mathematical Proceedings of the Cambridge Philosophical Society, 1961)。単一サーバの待ち行列の平均待ち時間について、重負荷での近似を示した出典。Beyer, Jones, Petoff & Murphy 編『Site Reliability Engineering』(O'Reilly, 2016) の Introduction の「Efficiency and Performance」。カウンターの、資源を効率よく使えという圧力の出典。

原典を読む

引用するとき

Hammurabi『第112条 キングマンの公式』 https://kanywst.github.io/hammurabi/ja/laws/kingmans-formula/

BibTeX
@misc{hammurabi-kingmans-formula,
  title  = {キングマンの公式},
  author = {{Hammurabi contributors}},
  note   = {Hammurabi, § 112},
  url    = {https://kanywst.github.io/hammurabi/ja/laws/kingmans-formula/}
}

本文は CC BY-SA 4.0 です。Hammurabi の名前と記事へのリンクを添えてください。

XBlueskyはてブLinkedIn

コラムで読む

関連する法則

GitHub で誤りを指摘する