> 首藤さんこんばんは、伊藤と申します。
> ALMに関する卒業研究でOverlay Weaverを使おうと考えています。
>
> mcastのエミュレータに関して何点か質問があります。
>
> ・Overlay Visualizerについてですが、各ノードの色(青、灰、緑(?))は何を表しているものなのでしょうか?
普段は青です。
ルーティングのクエリを送出したノードを一時的に緑にします。
ルーティングの宛先 (target) ID を灰色の丸で表します。
> ・定期的(?)にノード間に走る黒い線は何らかの要求だと思いますが、どのようなものなのでしょうか?
ノード間でメッセージの送受信があったことを表します。
> ・稀にoverlayに参加したノード以外のノードが現れることがあるのですが、これは何なのでしょうか?
上記の、灰色の丸、だと思います。
> ・ルーティングをPastry、Kademliaにしてマルチキャスト配信木を構築した際、全ての子が1つの親に集まるような深さ1の木が構築されてし
> まうのですが、これは上手く動いているのでしょうか?尚、ルーティングをChordにした場合は深さ2以上の木が構成されました。
配信木は Scribe という方式を使ってます。
深さ 1ということは、担当ノードまでの経路長が 1だったということで、
そういうものです。
経路長が比較的長くなる Chord では、経路長が 2以上になった場合もあった、
ということかと想像します。
ノード数がある程度多くならないと、経路は長くなりません。
シナリオを拝見したところ、34ノードしか起動していないので、
そんなものだと思います。
> ・シナリオによって、マルチキャストグループに参加させた後、そのまま放っておくと、勝手に配信木の変更が繰り返されるのですが、放っておくとノードが
> 勝手に離脱、参加を繰り返すようになっているのでしょうか?
ノードの離脱や参加は、シナリオに書かないと起きません。
首藤一幸
> Message-ID: <dd1f97d6-6818-4922...@j9g2000prh.googlegroups.com>
> From: Itou <juku...@yahoo.co.jp>
> Date: Mon, 7 Dec 2009 05:11:43 -0800 (PST)
>> > ・ルーティングをPastry、Kademliaにしてマルチキャスト配信木を構築した際、全ての子が1つの親に集まるような深さ1の木が構築されてし
>> > まうのですが、これは上手く動いているのでしょうか?尚、ルーティングをChordにした場合は深さ2以上の木が構成されました。
>>
>> 配信木は Scribe という方式を使ってます。
>> 深さ 1ということは、担当ノードまでの経路長が 1だったということで、
>> そういうものです。
>> 経路長が比較的長くなる Chord では、経路長が 2以上になった場合もあった、
>> ということかと想像します。
>>
>> ノード数がある程度多くならないと、経路は長くなりません。
>> シナリオを拝見したところ、34ノードしか起動していないので、
>> そんなものだと思います。
>
> ノード数が少ないということで、2000ノード、5000ノードと増やしてみましたが、やはり一つの親に集まってしまっているようです。
[ノード数]
そんなはずはない、と確認しようとしたところ、いくつか気づいたことがあります。
ow.tool.mcastshell.Main (Mcast shell) を
2000, 5000 ノードも立ち上げられました?
どうやって確認しました?
DHT (shell) の方は、スレッドを作らないように改良してきたのですが、
Mcast (shell) はそういう改良をしてきておらず、
けっこうスレッドを作ります。
(ow.mcast.impl.McastImpl 中に new Thread() が何ヶ所かあります。)
手元のマシンでは、数百ノードを起動したところで、こうなりました:
An application instance threw a Throwable:
java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:597)
at ow.mcast.impl.McastImpl.init(McastImpl.java:179)
at ow.mcast.impl.McastImpl.<init>(McastImpl.java:137)
[配信木の形]
高さ 1の木が作られていることは、どうやって確認したでしょうか。
>> > ・シナリオによって、マルチキャストグループに参加させた後、そのまま放っておくと、勝手に配信木の変更が繰り返されるのですが、放っておくとノードが
>> > 勝手に離脱、参加を繰り返すようになっているのでしょうか?
>>
>> ノードの離脱や参加は、シナリオに書かないと起きません。
>
> シナリオに離脱や参加は記述していないのですが、放っておくと木の変更(あるノードが子からいなくなってしまう等)が起こるのですが、何故でしょう
> か?
配信木は、一度作ったら放っておくのではなくて、
・木の作り直し
・親子関係の expire
を行います。
ノードの出入りや、それによって起こる経路表の変化に対応するためです。
経路表が成熟し切る前に配信木を構築したために、
成熟後に作り直した木が違う形になる、ということも起こります。
それを行うスレッドを、以下のように作成しています:
ow.mcast.impl.McastImpl#init() より:
// initialize a Refresher and a NeighborExpirer
if (config.getRefreshInterval() > 0) {
this.refreshingThread = new Thread(new GroupRefresher());
this.refreshingThread.setName("Refresher");
this.refreshingThread.setDaemon(true);
this.refreshingThread.start();
}
if (config.getNeighborExpireCheckInterval() > 0) {
this.expiringThread = new Thread(new NeighborExpirer());
this.expiringThread.setName("NeighborExpirer");
this.expiringThread.setDaemon(true);
this.expiringThread.start();
}
首藤一幸