From takebayashi.shinya @ nttcom.co.jp Thu Jun 14 17:15:54 2007 From: takebayashi.shinya @ nttcom.co.jp (Shinya TAKEBAYASHI) Date: Thu, 14 Jun 2007 17:15:54 +0900 Subject: [Ultramonkey-l7-develop 29] Re: =?iso-2022-jp?b?V2VpZ2h0ZWQgUm91bmRSb2JpbiAbJEI1IUc9REkbKEI=?= =?iso-2022-jp?b?GyRCMkMlUSVDJUEbKEI=?= In-Reply-To: <20070612084644.A7D972DC7A0@mail.valinux.co.jp> References: <20070601101940.A1AB.KONDO.HIDEAKI@oss.ntt.co.jp> <20070612084644.A7D972DC7A0@mail.valinux.co.jp> Message-ID: 黒澤 様 竹林です. お疲れ様です. 返信が遅れ,すみません. アドバイスありがとうございます. gcd を使った方式で,実装してみます. ----------------------------------------------------------- NTT コムウェア株式会社 プロジェクト管理統括部 OSS 推進部門 OSS 適用担当 竹林 信哉(たけばやし しんや) 〒261-0023 千葉市美浜区中瀬 1-6 NTT 幕張ビル 21F En TEL: 043-211-2452 (+383-8054) E-mail: takebayashi.shinya @ nttcom.co.jp GPG ID: 70298B55 GPG FP: 98C3 25CF 8201 4881 9328 5C91 CBFA DCFC 7029 8B55 ----------------------------------------------------------- *** KUROSAWA Takahiro wrote in message <20070612084644.A7D972DC7A0 @ mail.valinux.co.jp > *** Subject: [Ultramonkey-l7-develop 28] Re: Weighted RoundRobin 機能 追加パッチ *** Date: 2007/06/12 17:46:44 > 黒澤です. > > On Sun, 03 Jun 2007 02:08:12 +0900 > Shinya TAKEBAYASHI wrote: > > > > 1:1:2や5:5:10に設定された場合の動作は、リアルサーバの > > > 1台目->2台目->3台目->3台目->1台目->2台目・・・という > > > ような感じでバランシングされるものと思います。 > > > > そうですね,そうでないとラウンドロビンになりませんよね・・・. > > > > http://primeserver.fujitsu.com/ipcom/catalog/data/1/3.html > > > > の「静的な重み付きラウンドロビン」を参考に,アルゴリズムを > > 再考してみます. > > LVS の WRR アルゴリズム (net/ipv4/ipvs/ip_vs_wrr.c) からひっぱっ > てくれば実装できそうですが,ソースをそのまま使ってしまうとコピー > ライトとライセンスの問題が出てきますね. > > LVS でやっているのは,だいたいこんな感じみたいです: > > (1) 各リアルサーバに指定された weight の最大公約数 (gcd と表記) と > weight の最大値 (max_weight と表記) を調べておく. > 最大公約数の計算にはユークリッドの互除法というものを使っているよ うです. > 計算方法自体は簡単です. > > (2) 整数 x を用意し,それに max_weight を代入. > > (3) リアルサーバのスケジュール時に,リアルサーバの weight が x 以上 の > ものだけを round-robin で一周だけスケジュールする. > > (4) 一周スケジュールしたら x から gcd を引く (x -= gcd). > x > 0 なら (3) へ.x <= 0 なら (2) へ. > > > 例えば,リアルサーバが rs_a, rs_b, rs_c, rs_d の 4 台構成で, > weight がそれぞれ 24, 12, 18, 30 の場合,gcd = 6, max_weight = 30 > となるので,それぞれの周回でスケジュールされるのは, > > 1 周目: x = 30 / rs_d > 2 周目: x = 24 / rs_a, rs_d > 3 周目: x = 18 / rs_a, rs_c, rs_d > 4 周目: x = 12 / rs_a, rs_b, rs_c, rs_d > 5 周目: x = 6 / rs_a, rs_b, rs_c, rs_d > > 6 周目: x = 30 / (一周目と同じ) > ... > > となります.5 周スケジュールして,各リアルサーバがスケジュールされる 回数は, > rs_a : rs_b : rs_c : rs_d = 4 : 2 : 3 : 5 = 24 : 12 : 18 : 30 となり ます. > > _______________________________________________ > Ultramonkey-l7-develop mailing list > Ultramonkey-l7-develop @ lists.sourceforge.jp > http://lists.sourceforge.jp/mailman/listinfo/ultramonkey-l7-develop >