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のフルコレクトを行うので、デッドロックの問題はかなり厄介で、見つけるのが困難なバグなのです・・。うぅ。いやだ。