50ノードでのファイル配布実験
ローカルで、50ノードのポエニーネットワークを組んでダウンロードとアップロードがうまく動くが試してみました。
結果的には、環境的な問題で中断。
流れ↓
- ポエニーはNo0〜No49
- 各ポエニーの速度はランダムに決定した(設定ファイルを自動で作った)
- 各ポエニーは、s5144.wma(13,207,921 バイト)のダウンロードリストを持つ
- 各ポエニーは、No0〜4の初期ノードを持って起動
- 2秒ごとに1つずつ起動する
- 全て起動した時点で、No0ノードのupフォルダにs5144.wmaをコピー
- 10分ごとにダウンロード状況を確認
ということを試そうと思って、10分ごとにtree |find "s51"とdownフォルダにs5144.wmaがどれだけできているか調べました。
経過時間 | s5144.wmaの個数 |
---|---|
10分 | 3 |
20分 | 7 |
30分 | 13 |
30分後に実験を中断。
はじめのうちは、ファイルを持っているノードが1つしかいないくて、アップローダは最大3つしか起動できないので、あまり負担はありませんでしたが、20分を越えたあたりから、多重ダウンロードが多く発生し始めて、30分後にはWindowsが固まりつつあったので止めました。
その後20分かけて、No49から起動とは逆順にダウンロード状況とネットワークをチェックしながら、消していきました。
全て消し終えて、もう一度s5144.wmaを数えると、21個ありました。
No0〜10のポエニーは1つを除いてダウンロード完了していました。
@ 気づいたこと
消しながらダウンロード状況を見ると、8割りのポエニーで全202ブロック中120ブロック以上ダウンロード完了していました。
これは、ポエニーがダウンロードをファイル全体ではなく、ブロック単位で行っていて、いくつかのブロックがダウンロード完了した時点で一度回線を切断するので、その間に別のポエニーが割り込んで、続きがダウンロードできなくなって・・というパターンをネットワーク全体で行っているのだと思いました。
そして、2次配布は、ファイル全体のダウンロードが完了しない限り行われないため、アップローダの取り合いは長い間続きます。
注釈: 現在、32(2MB)、64(4MB)、128(8MB)・・とDLが成功するたびに、一度にDLするブロックを増やしていき、一度でも失敗すると32に戻しています。
うーむ・・。
一応言い訳を考えると、この実験は、1つのファイル(配布者)に対して、たくさんのダウンロード者がいるというBitTorrentが得意とするパターンで行っていて、ポエニーはたくさんのファイルを配布しているノードがたくさんいるネットワークを想定しているので、このパターンは不得意なのです。
といっても、Winnyでは、回線を切断せずに次のダウンロードリクエストを投げるため、もっとうまく動くはずなので、ここは改善したほうがよさそう。
ネットワークはきれいに作れていました。
検索は、微妙なところで、ダウンロード候補者数は、3〜11とかなりばらつきがありましたが、これも1つのキーだけだと頻繁に上書きが行われるため、ネットワークのつながり方によってかなり違ってくるのだと思います。
@ バグ
50ノードを消していったのですが、うち6ノードが固まっていました。ついでに、Windowsタスクマーネージャーも固まっていたので、なんともいえないのですが、6/50という比、今後スレでもデッドロック報告がかなりあるので、どこかデッドロックする組み合わせがあるように思います。
一応、まずいんじゃないのかと思っている場所はいくつかあるので、とりあえず直してみます。
ポエニーは、8つのタスク(常駐スレッド)と、最大7つのワーカー(ワーカースレッド)がいて、各タスクはエンベデッドOSライクなイベントベースで動いているので、スレッドのサスペンドとレジュームがかなり頻繁が行われ、さらにそれぞれのスレッドが定期的に全てのスレッドを止めて、GCのフルコレクトを行うので、デッドロックの問題はかなり厄介で、見つけるのが困難なバグなのです・・。うぅ。いやだ。