Upload
neve-robbins
View
27
Download
0
Embed Size (px)
DESCRIPTION
広域並列分散プログラミングのための高性能デッドロックフリーオーバーレイ. 田浦研究室 076426 弘中健. 広域環境における並列分散計算. 複数のクラスタで並列計算に使う機会が増加 WAN のバンド幅増加 複数のクラスタを WAN で接続 した環境が普及 Grid5000( フランス ), DAS-3( オランダ ), InTrigger ( 日本 ) 並列分散計算の増加 並列ライブラリを用いたアプリ 組み合わせ最適化問題 モデルチェッキング データインテンシブなアプリ 大量のデータ解析を並列化. WAN. Cluster. - PowerPoint PPT Presentation
Citation preview
広域並列分散プログラミングのための高性能デッドロックフリーオーバーレイ
田浦研究室076426 弘中健
広域環境における並列分散計算• 複数のクラスタで並列計算に使う機会が増加
– WAN のバンド幅増加– 複数のクラスタを WAN で接続した環境が普及
• Grid5000( フランス ), DAS-3( オランダ ), InTrigger( 日本 )
• 並列分散計算の増加– 並列ライブラリを用いたアプリ
• 組み合わせ最適化問題• モデルチェッキング
– データインテンシブなアプリ• 大量のデータ解析を並列化
Cluster
WAN
22009/2/10
広域環境上の並列分散アプリ用通信基盤の要件
• WAN の接続性の解決– NAT, Firewall
• スケーラビリティ– 接続数を減らす
• 通信性能の向上– WAN/LAN 上の
コンテンションを防ぐ
オーバレイが有効な手法である
NAT/firewall
Contention!
Too many…
32009/2/10
広域環境上オーバレイ• アプリ・レベルで独自のネットワークを構築– UDP/TCP を用いる
• エンドホストも通信を転送– 直接繋がっていなくても
通信を実現
firewall Cluster
Cluster
通信は転送
42009/2/10
本研究の貢献• 広域並列分散計算の通信を効率的に行うオーバレイ
– 低オーバーヘッドな転送– メモリオーバフロー・デッドロックを起こさない– 不均一な実ネットワークに自律的に対応するルーティング
• 大規模な WAN 環境で実装・実証した– 4 ~ 7 クラスタ:最大 291 ノード– 集合通信でオーバレイなしより高性能
• 分散オブジェクト指向プログラミングライブラリ– 本発表では省略させて頂きます– 目標:提案するオーバレイを通信基盤とした広域環境における効率的な並列・分散プログラミング環境を提供
52009/2/10
提案オーバレイの応用• 並列・分散計算ライブラリ
– MPI, 分散共有メモリ• 並列・分散プログラミング言語 / フレームワーク
– 分散オブジェクト (JavaRMI), ワークフロー (MapReduce, 分散 Make)
• 分散システムの通信基盤– 分散ファイルシステム– P2P システム (DHT, ファイル転送 )
LAN/WAN, NAT, firewall, scalability…
Application-level Overlay
Parallel and Distributed Applications
Programming Languages, Libraries, Frameworks, Middle-wares
62009/2/10
問題説明• 序論• 問題説明• 関連研究• 提案手法• 実験・評価• まとめ
72009/2/10
広域オーバレイ上の通信の問題• 広域環境では遅延・バンド幅が不均一
– 100[us] ~ 100[ms]– 10 [Mbps] ~ 10[Gbps]
• 単純な転送手法では不均一性による問題が発生する– 中継ノードのメモリオーバフロー– 通信のデッドロック
Narrow Link
10 [Mbps] 10 [Gbps]10 [Gbps]
82009/2/10
問題 1: メモリオーバフロー• 中継ノードがバッファのメモリ容量を考
えずにパケットを受信するとメモリオーバフローをおこす– 中継ノードは有限バッファが必要
dstsrc1Gbps 1Gbps
WAN Link92009/2/10
問題 2: 通信のデッドロック• パイプライン転送– 各ノードは有限バッファが一杯になったら受
信をやめる• 転送が待たされ、中継ノードを用いてフロー制御• 通信がデッドロックしてしまう
102009/2/10
dstsrc
packet buffer FULL!
フロー制御
通信デッドロックの例• 複数の転送が混在する場合:
– 次に使いたいリンクが別の転送に占有され、転送が待たされる
• 例: 4 つの転送– Link A → Link B– Link B → Link C– Link C → Link D– Link D → Link A
• 転送は互いに待ち合う⇒ デッドロック
Link: A
Link: B Link: C
Link: D
112009/2/10
通信デッドロックの本質• リンク間の依存関係に
サイクルが発生
• デッドロックフリールーティングが必要– リンク間の依存関係に
サイクルが起きないように使える経路に制約を課す
Link: A
Link: B Link: C
Link: D
122009/2/10
問題 3: 局所性を考慮したルーティング
• 既存のデッドロックフリールーティング手法は実ネットワークの考慮をしない– バンド幅・遅延のロスが大きくなってしまう– 広域環境のネットワーク情報を考慮した
ルーティングが必要
132009/2/10
関連研究• 序論• 問題説明• 関連研究• 提案手法• 実験・評価• まとめ
142009/2/10
既存の広域オーバレイ• 転送時のメモリ、デッドロックを考慮した実装は少な
い
• RON (Resilient Overlay Network) [Andersen et al. ‘01]
– 全体全でつなぐ UDP オーバレイ– UDP インターフェイスを提供
• そもそも通信の信頼性はなく、ユーザ任せ
• DiskRouter [Kola et al. ‘03]
– ファイル転送用のオーバレイ– バッファの使用率が閾値を超えると受信中断
• デッドロックの恐れがある152009/2/10
フロー制御を実装する手法• UDP オーバレイ + End-End のみでフロー制御
• [Kar et al. ’01]– 各パケットに ACK– ACK は経路上リンクの使用状況を piggyback
• Spines : [Amir et al. ‘02]
– 全リンクの混雑情報を定期的に交換– 経路上リンクの使用状況を考慮して送信レートを調節
• 利点:– 中継ノードの問題を解消
• 欠点:– オーバーヘッドが大きい:ユーザで「TCP の再実装」– パラメータチューニングが困難: 1 Gigabit Ether でも約 300[Mbps]本研究: TCP を使い、中継ノードを用いたフロー制御
+ デッドロックを防ぐ手法
feedback
UDP UDPUDP
src dst
162009/2/10
デッドロックフリールーティング
• 通信にデッドロックが起きないように使える経路に制約をかす– 広域オーバレイに良く適用したものはない
• 並列コンピュータのインターコネクト– 特殊なトポロジーを想定– [Antonio et al. ’94]– [Dally et al. ’87, ‘93]
• 一般なグラフに適用可:– 実ネットワークは未考慮– 実ネットワークにそぐわない経路の制約– Up/Down Routing [Schroeder et al. ‘91]– Ordered-link Routing [Chiu et al. ‘02]– L-Turn Routing [Koibuchi et al. ‘01]
172009/2/10
提案手法• 序論• 問題説明• 関連研究• 提案手法• 実験・評価• まとめ
182009/2/10
提案手法の概要• 基本的な提案– TCP でオーバレイを構築– デッドロックフリーにする経路制約– 経路を計算
• ネットワーク情報を用いた最適化– 局所性を考慮したオーバレイの構築– 局所性を考慮したデッドロックフリー制約– 転送スループットを考慮した経路計算
192009/2/10
オーバレイの転送方法• オーバレイのリンク:
– TCP 接続を使うことで TCP のフロー制御を活用
• データの分割:– 送信されるデータは一定のパケットに分割
• 信頼性のある通信を実現:– srcから dst まで FIFO でパイプライン転送– 中継ノードはパケットを落さない
• 転送方法:– バッファに余裕がある限り受信、一杯になったら受信を中断– 中継ノードを用いたフロー制御– 直接繋いだ TCP が実現するスループットを得る
dstsrc
packet
TCP TCP TCP
buffer FULL!
202009/2/10
デッドロックフリールーティングUp/Down Routing [Schroeder et al. ‘91]
0
2
1
3 4
56
• ルートノードから幅優先探索– 昇順に ID を振る
• ID によってリンク方向を定義– ID が小さいノードの方向
• エッジのたどり方を定義– UP: リンク方向に沿う– DOWN: リンク方向に逆らう
• 経路制約:– DOWN から UP は禁止
ji i > jUP
DOWN
DOWN
UP
UP
Down → Up 禁止
DOWN
UP
DOWN
UP
DOWN
DOWN
実ネットワークと独立に決定
212009/2/10
提案手法の概要• 基本的な提案– TCP でオーバレイを構築– デッドロックフリーにする経路制約– 経路を計算
• ネットワーク情報を用いた最適化ノード間遅延、接続リンクバンド幅情報– 局所性を考慮したオーバレイの構築– 局所性を考慮したデッドロックフリー制約– 転送スループットを考慮した経路計算
222009/2/10
局所性を考慮したオーバレイの構築
[Saito et al. ‘07]• 「遠いノードへは回り道しても影響は少ない」• 通信性能を維持する様に接続選択
– 遠いノードとは低い確率– 近いノードとは高い確率
• 各ノードのアルゴリズム– すべてのピアを低遅延順にソート– [d^k, d^k+1 ) の区間で d個のピアを選択し接続– ノード数 N に対して NlogN の接続を確立する
小さな影
響
大きな影
響
低遅延
d d^2 d^3 232009/2/10
Up/Down ルーティングの改善• 幅優先探索の ID付け
– マルチクラスタ環境で問題
• UP→DOWN する経路増えてしまう• クラスタ内で小さい ID なノード
– UP方向リンクは高遅延 WAN リンク– UP→DOWN の経路は
WAN 経由になってしまう
0
21
3
4
5
cluster
DOWNUP
242009/2/10
提案 Up/Down ルーティング• 深さ優先探索の ID付け– 低遅延のピアを優先的に探索
• Rationale– UP→DOWN の経路を減らす– クラスタ内の経路はすべて
UP or DOWN で辿れるようにする 4
3
5
1
0
DO
WN
UP
252009/2/10
デッドロックフリー制約の比較• クラスタ内の経路を禁止する制約を削減
0
21
3
4
5
0
51
2
3
4
clusterBFS-updown Locality-aware
DFS-updown
DOWNUP
DOWN
DOWN
cluster262009/2/10
ルーティングメトリック• 経路のスループットに重点– 経路上のリンクバンド幅逆数の和
dstsrcB1 B2 B3
272009/2/10
各ノードの転送手続き (1/2)
• 各 TCP 接続に以下を定義– 有限な送信バッファ– 1 packet の受信バッファ
• 転送の手続き– 受信バッファに 1packet に受信– 送信バッファに移す– 送信バッファが一杯だと
それ以上受信しない
Send buffer
Recv buffer
FULL!
282009/2/10
各ノードの転送手続き (2/2)
• 複数の転送が混雑した同じリンクに競合– 交互に packet を転送する
• デッドロックフリールーティング– デッドロックが生じることはない
292009/2/10
実験・評価• 序論• 問題説明• 関連研究• 提案手法• 実験・評価• まとめ
302009/2/10
Deadlock-free ルーティングのオーバーヘッド
• Deadlock無考慮の場合とオーバーヘッドを検証– ordered-link– Up/Down– 提案 Up/Down
• シミュレーション– 13 実クラスタ (515 ノード )– オーバレイ接続密度を変化
• 全経路のホップ数• 全経路のバンド幅
312009/2/10
全経路のホップ数
• 平均ホップ数はほとんど差がない• 最長ホップ数でも、提案 Up/Down は同等な経路長
Average Hops Max. Hops
Deadlock 無考慮と差がない
Deadlock 無考慮と差がない
322009/2/10
経路バンド幅の最低比率
• 他の deadlock-free 手法は無駄な WAN 経路がある• 提案手法では WAN 経路を避けるので本来のバンド幅が得られる
疎なオーバレイでも高バンド幅
332009/2/10
Deadlock-free 制約の通信遅延への影響
• 実環境: 7 クラスタ (170 ノード )
• 全経路の遅延を測定– 直接通信と比較– 接続密度 : 9%
• Deadlock-free 制約の検証– メトリックは遅延
342009/2/10
直接 vs. オーバレイ遅延分布
• Up/Down は制約のためクラスタ内通信も WAN を経由している
提案 Up/Downは直接通信と同等
Up/Downは LAN 内ペアも WAN 経由
352009/2/10
転送スループットの評価• 幅広い環境で高スループット出ることを検証– 1 Gigabit Ethernet LAN (940 [Mbps])– Myrinet 10G LAN (7 [Gbps])
• メッセージサイズを変化
362009/2/10
転送スループットの評価
• 数ホップ転送しても直接 TCP ソケットに近い性能• Myrinet に関しては 4.5[Gbps] しか得られなかった
GbE クラスタ (940[Mbps]) Myrinet クラスタ (7[Gbps])
372009/2/10
集合通信性能の検証• 提案オーバレイを用いて集合通信– デッドロックフリー制約でも高性能
• 集合通信– Gather, All-to-All– メッセージサイズ・接続密度を変化させて評価
• 環境– LAN: 1-switch (36 nodes), 階層的 (177 nodes)– WAN: 4 clusters (291 nodes)
382009/2/10
集合通信: Gather 時間• switch で衝突 :
• Packet-loss• TCP再送 :• 200 [ms] loss
• 疎なオーバレイ :• 衝突を緩和
TCP RTO: 200 [ms]による時間の開
きポートで衝突
1-switch クラスタ (36 ノード )
392009/2/10
集合通信: Gather 性能比較4 クラスタ (291 ノー
ド )衝突回避に
よる効果
402009/2/10
Cluster
ClusterCluster
集合通信: All-to-All
• 大規模な環境– ボトルネックがある– 階層的なクラスタ
• 177 ノード• MPICH ( 直接通信 ) と比較
– WAN で接続された 4 クラスタ• 291 ノード
1Gbps
4Gbps
4Gbps
Cluster
1Gbps1Gbps
1Gbps 1Gbps
1Gbps
412009/2/10
集合通信: All-to-All 性能比較1 クラスタ (177 ノー
ド )4 クラスタ (291 ノー
ド )
• 階層的な大きなクラスタではスイッチでのパケットロスが多くなる• マルチクラスタ環境は WAN のパケットロスが主要項になる
422009/2/10
まとめ• 序論• 問題説明• 関連研究• 提案手法• 実験・評価• まとめ
432009/2/10
まとめ• 広域並列分散計算用オーバレイを提案– 不均一な広域環境での転送問題を解決• メモリアウト・デッドロックを起こさない
– 実ネットワークを考慮した低オーバヘッドルーティング
• 大規模な WAN 環境で実装・実証した– 集合通信では LAN/WAN 共により高性能
442009/2/10
今後の課題• 別途提案した分散プログラミングライブ
ラリの通信基盤として応用– 分散オブジェクト指向– ノードの動的な参加・脱退に対応– 広域環境での並列分散プログラミングを簡潔
に• 課題:– 転送・ルーティングを動的変化に対応させる
452009/2/10
発表文献• 投稿中 (1 件 )
– High Performance Wide-area Overlay using Deadlock-free Routing. High Performance Distributed Computing(HPDC), 2009
• 論文誌 (2 件 )– 複雑なグリッド環境で柔軟なプログラミングを実現するフレームワーク.情報処理学会論文誌:コ
ンピューティングシステム.Vol.1 No.2 (ACS 23), pp.157-168, 2008年8月.– A Low-stretch Object Migration Scheme for Wide-area Environments. IPSJ Transactions on Programming.
Vol.48 No.SIG 12 (PRO 34), pp.28-40, August 2007.• 査読付学会 (2 件 )
– gluepy : A Simple Distributed Python Framework for Complex Grid Environments. At 21st Annual International Workshop on Languages and Compilers for Parallel Computing (LCPC2008). LNCS Vol.5335, pp.249-263, July 2008.
– 複雑なグリッド環境で柔軟なプログラミングを実現するフレームワーク.先端的計算基盤シンポジウム (SACSIS 2008),pp.349-358,筑波,2008年5月.
• 研究会 (2 件 )– 広域TCPオーバレイにおけるデッドロックフリールーティング . 情報処理学会研究報告OS-109
(SWoPP 2008),pp.9-15,佐賀,2008年8月.– 揮発性資源上での並列分散計算を支援するオブジェクト指向ライブラリ . 情報処理学会研究報告
OS-106 (SWoPP 2007),pp.71-78,旭川,2007年8月.• その他査読なし学会 (4 件 ), ポスタ (3 件 )
462009/2/10
472009/2/10
482009/2/10
提案 : gluepy• Grid 環境用分散オブジェクト指向 Python プログラミングライブラリ
– 並列分散計算に必要なノード間通信・協調の記述を容易にする– 各計算ノードを”glue” で繋ぎ合わせる目的のライブラリ– WAN の接続性の問題を隠ぺい– 動的にノードが参加・脱退する環境でも汎用言語の拡張で記述できる
• プログラミングモデル:– 分散計算・通信には分散オブジェクトへの RMI
(Remote Method Invocation)• メソッド呼び出しという抽象化
– 動的な計算環境での記述を支援• ノード参加記述の支援• ノード脱退のセマンティクス
• 処理系:• ピア間で自動的に接続のオーバレイ構築• 接続性 (NAT/firewall) の自動的解決
2009/2/10 49
分散環境でオブジェクト指向• 計算の分散– メソッド呼び出し– RMI (Remote Method
Invocation)– 非同期 RMI で並列計算
• アプリの記述は自由
2009/2/10
a
f()
Proc: A Proc: B
a.f()
RMI
a
f()
Proc: A Proc: B
a.f()
async.RMI
a
f()
Proc: B
a.f() a
f()
Proc: B
a.f()
50
動的な資源への対応• 参加するプロセス対応
– 「最初の参照」 問題Object lookup
– 参加ノードが既にあるobjectへの参照を得ることが出来る
• 故障⇒ RMI 例外– ユーザは例外処理で
rollback などを実装することが出来る
Exception!
Objects in computation
New object on joining node
lookup
Object on failed node
2009/2/10 51
自動的オーバレイ構築 (1)
• 接続性解決– 自動的にオーバレイ構築
• TCP オーバレイ– 起動時に自動的にピア情
報を取得– 各ピアは少数のピアと接
続を確立– 連結グラフを構築
NAT
Firewall
Global IP
Attempt connection
established connections
2009/2/10 52
自動的オーバレイ構築 (2)
• Firewall クラスタ– 自動 port-forwarding– SSH 情報を入力・設定
• 透過的通信– P-P 通信はルーティン
グ• 動的: AODV [Perkins
‘97]
SSH
Firewalltraversal
P-to-Pcommunication
2009/2/10
#config fileuse src_pat dst_pat, prot=ssh, user=kenny
53
Programming in gluepy• RemoteObject
– Base class を継承– メソッドを RMI に出来る
• future を使った非同期 RMI– 明示的にスレッドは使わな
い– placeholder
• いずれ結果が格納される– 逐次の flow を保ちやすい
2009/2/10
class Peer(RemoteObject): def run(self, arg): # work here… return result
futures = [] for p in peers: f = p.run.future(arg) futures.append(f) waitall(futures)
for f in futures: print f.get()
async. RMI run() on all
wait for all results
read for all results
inherit Remote Object
54
SerialObject の所有権• SerialObjects
– 排他制御があるオブジェクト– RemoteObject の sub-class
• 明示的なロックは不要• 各オブジェクトに所有権
– call acquire⇒– return release⇒– メソッドの実行は 1 スレッドのみ
• 所有者スレッド
• 所有者はブロックすると所有権を放棄する– e.g: waitall(), 他 Serial Objectへの同期呼び出し
– 他のスレッドが取得可能– 再帰呼び出しによる deadlock を排除す
る
ThTh Th Th
object ownerthread
Th
Th Th Th
object
newownerthread
Give-upOwner
ship
block
Th Th Th Th
object
unblock
re-contestfor ownership
waiting threads
2009/2/10 55
SerialObject にシグナルを送る• 非同期イベントへの対応
– イベントを「シグナル」として表現し、扱う• Unix のシグナルセマンティクス• Blocking操作が unblock する
• オブジェクトへのシグナル– オブジェクト context で block して
いるスレッドを 1 つ強制 unblock• もしくは、次に block するスレッド
– Unblock されたスレッドでイベント処理が可能
Th
object
unblock
SIGNAL
Th
object handle
2009/2/10 56
SerialObjects in gluepy
• Atomic Section:– メソッド内で
「ブロックする操作の間」– 属性の state を変える、 Non-
SerialObjectへの呼び出しなどが atomic に行える
• 例:分散 Queue– 空の queue に対して pop() は
block する– add() で追加する
• 空でなくなったら signal()で unblock させる
2009/2/10
class DistQueue(SerialObject): def __init__(self): self.queue = []
def add(self, x): self.queue.append(x) if len(self.queue) == 1: self.signal()
def pop(self): while len(self.queue) == 0:
wait([])
x = self.queue.pop(0) return x
Atomic Section
Signal & wake
Block until signal
57
例: Master-worker in gluepy (1/3)
• 参加・脱退に対応
• 動的な参加:– 参加イベントを処理す
る– block 中に signal で
None を返して unblock
2009/2/10
class Master(SerialObject): ...
def nodeJoin(self , node): self.nodes.append(node) self.signal()
def run (self): assigned = {} while True: while len(self.nodes)>0 and
len(self.jobs)>0: ASYNC. RMIS TO IDLE WORKERS
readys = wait(futures) if readys == None: continue
for f in readys: HANDLE RESULTS
Signal for join
Block &Handle join
58
例: Master-worker in gluepy (2/3)
• 故障への処理– 結果回収で例外– 例外を処理し、再投入
2009/2/10
for f in readys: node, job = assigned.pop(f) try: print ”done:”, f.get() self.nodes.append(node) except RemoteException, e: self.jobs.append(job)
Failurehandling
59
例: Master-worker in gluepy (3/3)
• 起動– マスタはオブジェクト
を公開– ワーカは参照を得て
RMI で参加する
2009/2/10
worker = Worker()
master = RemoteRef(“master”)
master.nodeJoin(worker)
while True: sleep(1)
master = Master()
master.register(“master”)
master.run()
lookup on join
Worker init
Master init
60
分散環境でオブジェクト指向• ABCL [Yonezawa ‘90]
JavaRMI, Manta [Maassen et al. ‘99]ProActive [Huet et al. ‘04]
• 分散オブジェクト指向– オブジェクトを資源間で分散
• 計算の分散– メソッド呼び出し– RMI (Remote Method
Invocation)– 非同期 RMI で並列計算
• アプリの記述は自由2009/2/10
a
f()
Proc: A Proc: B
a.f()
RMI
a
f()
Proc: A Proc: B
a.f()
async.RMI
a
f()
Proc: B
a.f() a
f()
Proc: B
a.f()
61
Grid 上分散オブジェクト指向の課題• スレッドの競合
– 1 つのオブジェクトに同時多数 RMI
– Active Objects• 1 object = 1 thread• デッドロックの懸念:
e.g.: 再帰呼び出し
• 参加処理の記述– どのように参加するか– 参加のイベント通知
• Event –driven なループでは flowが分断される
• 脱退への対応– 透過的な解決は困難
2009/2/10
b
f()
deadlock
ab.f()
a.g()
a
Proc: A Proc: B
a.f()
Proc: A
a.f()
Proc: A
a.f()
f()f()f()race
Activeobjects
62
The Basic Programming Model• 分散オブジェクト
– あるプロセスで生成– RMI でアクセス– Passive Objects
• 占有スレッドはない
• スレッド– あくまで並列処理のため– 同期・非同期 RMI は陰にスレッド生成
• Future– 非同期 RMI の返り値– placeholder – 呼出し中の例外も格納され
リレイズされる
2009/2/10
a
f()
Proc: A Proc: B
a.f() Spawn for
RMI
a
f()
Proc
Spawn for async
store in F
F = a.f() async
63
642009/2/10
通信遅延の比率の CDF
652009/2/10
All-to-All: オーバレイ構築の比較
662009/2/10
672009/2/10
100 [Mbps] クラスタ間転送
682009/2/10
広域環境上オーバレイ• 接続性の解決法– 複数ホップで通信
• スケーラビリティ– メモリ・ stateful firewall
firewall ClusterCluster
TCP/UDPLink
Application-level Overlay
692009/2/10
オーバレイ上の転送• オーバレイ上の通信はノード間で転送さ
れる
• 転送のバンド幅が重要になる
dstsrc
buffer buffer buffer
702009/2/10
安直な転送アルゴリズム
dstsrc
buffer buffer
1Gbps
dstsrc
1Gbps 1Gbps
1Gbps 1GbpsWAN Link
• 各ノードのアルゴリズム• 受信: best effort• 送信: best effort
• 均一な環境:高性能• 不均一な環境:バッファがメモリーアウト
712009/2/10
パイプライン転送 (1/2)
• 複数の TCP 接続でリレーする– 受信:バッファに余裕があれば– 送信: best effort
• 利点:– 単純で低オーバヘッド– TCP が実現するスループットを得る– メモリ使用量は一定
dstsrc
FULL!FULL!
722009/2/10
パイプライン転送 (2/2)
• 欠点:通信デッドロック– リンク Aからリンク B に転送– リンク B の転送がブロック⇒リンク A の転送がブロック
– リンク A がリンク B を待つ • 依存関係:リンク A→ リンク B
FULL!
Link: A Link: B
FULL!
waits…
732009/2/10
Dijsktra-like な計算 (1/3)• 準備
– R個の rank があるとする• Updown の時: R=2 とする
– 各ノードを R個複製する• (node-id, rank-id) を識別子とす
る– 各無方向リンクを 2 つの有方
向リンクとする• それぞれの有方向リンクに
rank を割り当てる• Ordered-link
– 有方向リンクのペアに無方向リンクのランクを割り当てる
• Updown– Up方向にランク : 0– Down方向にランク: 1
(nid, 0)
(nid, R-1)
nid
r r
r
0
1
742009/2/10
Dijsktra-like な計算 (2/3)
• 制約– (nid, r) のノードはラン
ク r以上のリンクのみたどれる
– (n0, r) がリンク r’ を使って n1 に渡る時、(n1, r’) に到達する
• 初期条件– ノード srcからスタート
• (src, 0), … (src, R-1) までの距離を 0 に初期化
(nid, r’)(nid, r’)
r'
(nid, 0)
752009/2/10
Dijsktra-like な計算 (3/3)
• 計算量• Dijkstra: |E| + Vlog|V|– フィボナッチヒープを使うと decrease-key: O(1)– レベル数 :R– |E| = eR– |V| = nR
• eR + (nR) log(nR)– 最悪 ( 全対全 ):R = n
• 各ソースについて解くが分散計算が容易に出来る
762009/2/10