slide1
Download
Skip this Video
Download Presentation
広域並列分散プログラミングのための高性能デッドロックフリーオーバーレイ

Loading in 2 Seconds...

play fullscreen
1 / 76

広域並列分散プログラミングのための高性能デッドロックフリーオーバーレイ - PowerPoint PPT Presentation


  • 62 Views
  • Uploaded on

広域並列分散プログラミングのための高性能デッドロックフリーオーバーレイ. 田浦研究室 076426 弘中健. 広域環境における並列分散計算. 複数のクラスタで並列計算に使う機会が増加 WAN のバンド幅増加 複数のクラスタを WAN で接続 した環境が普及 Grid5000( フランス ), DAS-3( オランダ ), InTrigger ( 日本 ) 並列分散計算の増加 並列ライブラリを用いたアプリ 組み合わせ最適化問題 モデルチェッキング データインテンシブなアプリ 大量のデータ解析を並列化. WAN. Cluster.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '広域並列分散プログラミングのための高性能デッドロックフリーオーバーレイ' - neve-robbins


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide2
広域環境における並列分散計算
  • 複数のクラスタで並列計算に使う機会が増加
    • WANのバンド幅増加
    • 複数のクラスタをWANで接続した環境が普及
      • Grid5000(フランス), DAS-3(オランダ), InTrigger(日本)
  • 並列分散計算の増加
    • 並列ライブラリを用いたアプリ
      • 組み合わせ最適化問題
      • モデルチェッキング
    • データインテンシブなアプリ
      • 大量のデータ解析を並列化

WAN

Cluster

slide3
広域環境上の並列分散アプリ用通信基盤の要件

NAT/firewall

  • WANの接続性の解決
    • NAT, Firewall
  • スケーラビリティ
    • 接続数を減らす
  • 通信性能の向上
    • WAN/LAN上の

コンテンションを防ぐ

Too many…

Contention!

オーバレイが有効な手法である

slide4
広域環境上オーバレイ
  • アプリ・レベルで独自のネットワークを構築
    • UDP/TCPを用いる
  • エンドホストも通信を転送
    • 直接繋がっていなくても

通信を実現

通信は転送

Cluster

firewall Cluster

slide5
本研究の貢献
  • 広域並列分散計算の通信を効率的に行うオーバレイ
    • 低オーバーヘッドな転送
    • メモリオーバフロー・デッドロックを起こさない
    • 不均一な実ネットワークに自律的に対応するルーティング
  • 大規模なWAN環境で実装・実証した
    • 4~7クラスタ:最大291ノード
    • 集合通信でオーバレイなしより高性能
  • 分散オブジェクト指向プログラミングライブラリ
    • 本発表では省略させて頂きます
    • 目標:提案するオーバレイを通信基盤とした

広域環境における効率的な並列・分散プログラミング環境を提供

slide6
提案オーバレイの応用
  • 並列・分散計算ライブラリ
    • MPI, 分散共有メモリ
  • 並列・分散プログラミング言語/フレームワーク
    • 分散オブジェクト (JavaRMI), ワークフロー(MapReduce, 分散Make)
  • 分散システムの通信基盤
    • 分散ファイルシステム
    • P2Pシステム (DHT, ファイル転送)

Parallel and Distributed Applications

Programming Languages, Libraries,

Frameworks, Middle-wares

Application-level Overlay

LAN/WAN, NAT, firewall, scalability…

slide7
問題説明
  • 序論
  • 問題説明
  • 関連研究
  • 提案手法
  • 実験・評価
  • まとめ
slide8
広域オーバレイ上の通信の問題
  • 広域環境では遅延・バンド幅が不均一
    • 100[us] ~ 100[ms]
    • 10 [Mbps] ~ 10[Gbps]
  • 単純な転送手法では不均一性による問題が発生する
    • 中継ノードのメモリオーバフロー
    • 通信のデッドロック

10 [Gbps]

10 [Mbps]

10 [Gbps]

Narrow Link

slide9
問題1:メモリオーバフロー
  • 中継ノードがバッファのメモリ容量を考えずにパケットを受信するとメモリオーバフローをおこす
    • 中継ノードは有限バッファが必要

src

dst

1Gbps

1Gbps

WAN Link

slide10
問題2:通信のデッドロック
  • パイプライン転送
    • 各ノードは有限バッファが一杯になったら受信をやめる
      • 転送が待たされ、中継ノードを用いてフロー制御
      • 通信がデッドロックしてしまう

packet

buffer

FULL!

src

dst

フロー制御

slide11
通信デッドロックの例
  • 複数の転送が混在する場合:
    • 次に使いたいリンクが別の転送に占有され、転送が待たされる
  • 例:4つの転送
    • Link A → Link B
    • Link B → Link C
    • Link C → Link D
    • Link D → Link A
  • 転送は互いに待ち合う

⇒デッドロック

Link: A

Link: D

Link: C

Link: B

slide12
通信デッドロックの本質
  • リンク間の依存関係に

サイクルが発生

  • デッドロックフリールーティング

が必要

    • リンク間の依存関係に

サイクルが起きないように

使える経路に制約を課す

Link: A

Link: D

Link: B

Link: C

slide13
問題3:局所性を考慮したルーティング
  • 既存のデッドロックフリールーティング手法は実ネットワークの考慮をしない
    • バンド幅・遅延のロスが大きくなってしまう
    • 広域環境のネットワーク情報を考慮した

ルーティングが必要

slide14
関連研究
  • 序論
  • 問題説明
  • 関連研究
  • 提案手法
  • 実験・評価
  • まとめ
slide15
既存の広域オーバレイ
  • 転送時のメモリ、デッドロックを考慮した実装は少ない
  • RON (Resilient Overlay Network) [Andersen et al. ‘01]
    • 全体全でつなぐUDPオーバレイ
    • UDPインターフェイスを提供
      • そもそも通信の信頼性はなく、ユーザ任せ
  • DiskRouter[Kola et al. ‘03]
    • ファイル転送用のオーバレイ
    • バッファの使用率が閾値を超えると受信中断
      • デッドロックの恐れがある
slide16
フロー制御を実装する手法

src

dst

  • UDPオーバレイ + End-Endのみでフロー制御
  • [Kar et al. ’01]
    • 各パケットにACK
    • ACKは経路上リンクの使用状況をpiggyback
  • Spines : [Amir et al. ‘02]
    • 全リンクの混雑情報を定期的に交換
    • 経路上リンクの使用状況を考慮して送信レートを調節
  • 利点:
    • 中継ノードの問題を解消
  • 欠点:
    • オーバーヘッドが大きい:ユーザで「TCPの再実装」
    • パラメータチューニングが困難:1 GigabitEther でも約300[Mbps]

feedback

UDP

UDP

UDP

本研究: TCPを使い、中継ノードを用いたフロー制御

+デッドロックを防ぐ手法

slide17
デッドロックフリールーティング
  • 通信にデッドロックが起きないように使える経路に制約をかす
    • 広域オーバレイに良く適用したものはない
  • 並列コンピュータのインターコネクト
    • 特殊なトポロジーを想定
    • [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]
slide18
提案手法
  • 序論
  • 問題説明
  • 関連研究
  • 提案手法
  • 実験・評価
  • まとめ
slide19
提案手法の概要
  • 基本的な提案
    • TCPでオーバレイを構築
    • デッドロックフリーにする経路制約
    • 経路を計算
  • ネットワーク情報を用いた最適化
    • 局所性を考慮したオーバレイの構築
    • 局所性を考慮したデッドロックフリー制約
    • 転送スループットを考慮した経路計算
slide20
オーバレイの転送方法
  • オーバレイのリンク:
    • TCP接続を使うことでTCPのフロー制御を活用
  • データの分割:
    • 送信されるデータは一定のパケットに分割
  • 信頼性のある通信を実現:
    • srcからdstまでFIFOでパイプライン転送
    • 中継ノードはパケットを落さない
  • 転送方法:
    • バッファに余裕がある限り受信、一杯になったら受信を中断
    • 中継ノードを用いたフロー制御
    • 直接繋いだTCPが実現するスループットを得る

packet

buffer

FULL!

src

dst

TCP

TCP

TCP

up down routing schroeder et al 91
デッドロックフリールーティングUp/Down Routing [Schroeder et al. ‘91]

DOWN

  • ルートノードから幅優先探索
    • 昇順にIDを振る
  • IDによってリンク方向を定義
    • IDが小さいノードの方向
  • エッジのたどり方を定義
    • UP: リンク方向に沿う
    • DOWN:リンク方向に逆らう
  • 経路制約:
    • DOWNからUPは禁止

i

j

i > j

UP

DOWN

0

UP

2

DOWN

UP

1

6

UP

UP

5

DOWN

DOWN

4

3

実ネットワークと独立に決定

DOWN

Down → Up

禁止

slide22
提案手法の概要
  • 基本的な提案
    • TCPでオーバレイを構築
    • デッドロックフリーにする経路制約
    • 経路を計算
  • ネットワーク情報を用いた最適化

ノード間遅延、接続リンクバンド幅情報

    • 局所性を考慮したオーバレイの構築
    • 局所性を考慮したデッドロックフリー制約
    • 転送スループットを考慮した経路計算
slide23
局所性を考慮したオーバレイの構築

[Saito et al. ‘07]

  • 「遠いノードへは回り道しても影響は少ない」
  • 通信性能を維持する様に接続選択
    • 遠いノードとは低い確率
    • 近いノードとは高い確率
  • 各ノードのアルゴリズム
    • すべてのピアを低遅延順にソート
    • [d^k, d^k+1 )の区間でd個のピアを選択し接続
    • ノード数Nに対してNlogNの接続を確立する

小さな影響

大きな影響

低遅延

d

d^2

d^3

up down
Up/Downルーティングの改善
  • 幅優先探索のID付け
    • マルチクラスタ環境で問題
  • UP→DOWNする経路増えてしまう
  • クラスタ内で小さいIDなノード
    • UP方向リンクは高遅延WANリンク
    • UP→DOWNの経路は

WAN経由になってしまう

0

UP

DOWN

1

2

3

5

4

cluster

up down1
提案Up/Downルーティング

0

  • 深さ優先探索のID付け
    • 低遅延のピアを優先的に探索
  • Rationale
    • UP→DOWNの経路を減らす
    • クラスタ内の経路はすべて

UP or DOWNで辿れるようにする

1

3

4

UP

DOWN

5

slide26
デッドロックフリー制約の比較
  • クラスタ内の経路を禁止する制約を削減

0

0

UP

DOWN

DOWN

1

1

2

5

DOWN

3

2

5

4

4

3

cluster

cluster

Locality-aware

DFS-updown

BFS-updown

slide27
ルーティングメトリック
  • 経路のスループットに重点
    • 経路上のリンクバンド幅逆数の和

B1

B2

B3

src

dst

slide28
各ノードの転送手続き(1/2)
  • 各TCP接続に以下を定義
    • 有限な送信バッファ
    • 1 packetの受信バッファ
  • 転送の手続き
    • 受信バッファに1packetに受信
    • 送信バッファに移す
    • 送信バッファが一杯だと

それ以上受信しない

Send buffer

FULL!

Recv buffer

slide29
各ノードの転送手続き(2/2)
  • 複数の転送が混雑した同じリンクに競合
    • 交互にpacketを転送する
  • デッドロックフリールーティング
    • デッドロックが生じることはない
slide30
実験・評価
  • 序論
  • 問題説明
  • 関連研究
  • 提案手法
  • 実験・評価
  • まとめ
deadlock free
Deadlock-freeルーティングのオーバーヘッド
  • Deadlock無考慮の場合とオーバーヘッドを検証
    • ordered-link
    • Up/Down
    • 提案Up/Down
  • シミュレーション
    • 13実クラスタ (515ノード)
    • オーバレイ接続密度を変化
  • 全経路のホップ数
  • 全経路のバンド幅
slide32
全経路のホップ数

Average Hops

Max. Hops

Deadlock無考慮

と差がない

Deadlock無考慮

と差がない

  • 平均ホップ数はほとんど差がない
  • 最長ホップ数でも、提案Up/Downは同等な経路長
slide33
経路バンド幅の最低比率

疎なオーバレイでも高バンド幅

  • 他のdeadlock-free手法は無駄なWAN経路がある
  • 提案手法ではWAN経路を避けるので本来のバンド幅が得られる
deadlock free1
Deadlock-free制約の通信遅延への影響
  • 実環境:7クラスタ

(170ノード)

  • 全経路の遅延を測定
    • 直接通信と比較
    • 接続密度: 9%
  • Deadlock-free制約の検証
    • メトリックは遅延
slide35
直接 vs. オーバレイ遅延分布

Up/Down

はLAN内ペアもWAN経由

提案Up/Down

は直接通信と同等

  • Up/Downは制約のためクラスタ内通信もWANを経由している
slide36
転送スループットの評価
  • 幅広い環境で高スループット出ることを検証
    • 1 Gigabit Ethernet LAN (940 [Mbps])
    • Myrinet 10G LAN (7 [Gbps])
  • メッセージサイズを変化
slide37
転送スループットの評価

GbEクラスタ (940[Mbps])

Myrinetクラスタ (7[Gbps])

  • 数ホップ転送しても直接TCPソケットに近い性能
  • Myrinetに関しては4.5[Gbps]しか得られなかった
slide38
集合通信性能の検証
  • 提案オーバレイを用いて集合通信
    • デッドロックフリー制約でも高性能
  • 集合通信
    • Gather, All-to-All
    • メッセージサイズ・接続密度を変化させて評価
  • 環境
    • LAN: 1-switch (36nodes), 階層的 (177 nodes)
    • WAN: 4 clusters (291 nodes)
gather
集合通信:Gather時間

1-switch クラスタ (36ノード)

  • switchで衝突:
    • Packet-loss
    • TCP再送:
    • 200 [ms] loss
  • 疎なオーバレイ:
    • 衝突を緩和

TCP RTO: 200 [ms]

による時間の開き

ポートで衝突

gather1
集合通信:Gather性能比較

衝突回避に

よる効果

4 クラスタ (291 ノード)

all to all
集合通信:All-to-All
  • 大規模な環境
    • ボトルネックがある
    • 階層的なクラスタ
      • 177ノード
      • MPICH(直接通信)と比較
    • WANで接続された4クラスタ
      • 291ノード

4Gbps

4Gbps

1Gbps

Cluster

Cluster

1Gbps

1Gbps

1Gbps

1Gbps

1Gbps

Cluster

Cluster

all to all1
集合通信:All-to-All性能比較

1 クラスタ (177 ノード)

4 クラスタ (291 ノード)

  • 階層的な大きなクラスタではスイッチでのパケットロスが多くなる
  • マルチクラスタ環境はWANのパケットロスが主要項になる
slide43
まとめ
  • 序論
  • 問題説明
  • 関連研究
  • 提案手法
  • 実験・評価
  • まとめ
slide44
まとめ
  • 広域並列分散計算用オーバレイを提案
    • 不均一な広域環境での転送問題を解決
      • メモリアウト・デッドロックを起こさない
    • 実ネットワークを考慮した

低オーバヘッドルーティング

  • 大規模なWAN環境で実装・実証した
    • 集合通信ではLAN/WAN共により高性能
slide45
今後の課題
  • 別途提案した分散プログラミングライブラリ

の通信基盤として応用

    • 分散オブジェクト指向
    • ノードの動的な参加・脱退に対応
    • 広域環境での並列分散プログラミングを簡潔に
  • 課題:
    • 転送・ルーティングを動的変化に対応させる
slide46
発表文献
  • 投稿中(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件)
gluepy
提案 : gluepy
  • Grid環境用分散オブジェクト指向Pythonプログラミングライブラリ
    • 並列分散計算に必要なノード間通信・協調の記述を容易にする
    • 各計算ノードを”glue”で繋ぎ合わせる目的のライブラリ
    • WANの接続性の問題を隠ぺい
    • 動的にノードが参加・脱退する環境でも汎用言語の拡張で記述できる
  • プログラミングモデル:
    • 分散計算・通信には分散オブジェクトへのRMI

(Remote Method Invocation)

      • メソッド呼び出しという抽象化
    • 動的な計算環境での記述を支援
      • ノード参加記述の支援
      • ノード脱退のセマンティクス
    • 処理系:
      • ピア間で自動的に接続のオーバレイ構築
      • 接続性 (NAT/firewall)の自動的解決
slide50
分散環境でオブジェクト指向

Proc: A

Proc: B

  • 計算の分散
    • メソッド呼び出し
    • RMI (Remote Method Invocation)
    • 非同期RMIで並列計算
  • アプリの記述は自由

a

a.f()

f()

RMI

Proc: A

Proc: B

Proc: B

Proc: B

a

a.f()

a

a.f()

a

a.f()

async.

RMI

f()

f()

f()

slide51
動的な資源への対応

Objects in

computation

  • 参加するプロセス対応
    • 「最初の参照」 問題

Object lookup

    • 参加ノードが既にあるobjectへの参照を得ることが出来る
  • 故障⇒ RMI 例外
    • ユーザは例外処理でrollbackなどを実装することが出来る

lookup

New object on joining node

Exception!

Object on failed node

slide52
自動的オーバレイ構築(1)
  • 接続性解決
    • 自動的にオーバレイ構築
  • TCPオーバレイ
    • 起動時に自動的にピア情報を取得
    • 各ピアは少数のピアと接続を確立
    • 連結グラフを構築

NAT

Global IP

Firewall

Attempt connection

established connections

slide53
自動的オーバレイ構築(2)
  • Firewallクラスタ
    • 自動port-forwarding
    • SSH情報を入力・設定
  • 透過的通信
    • P-P通信はルーティング
      • 動的:AODV [Perkins ‘97]

Firewall

traversal

SSH

#config file

use src_patdst_pat, prot=ssh, user=kenny

P-to-P

communication

programming in gluepy
Programming in gluepy

inherit Remote Object

  • RemoteObject
    • Base classを継承
    • メソッドをRMIに出来る
  • futureを使った非同期RMI
    • 明示的にスレッドは使わない
    • placeholder
      • いずれ結果が格納される
    • 逐次のflowを保ちやすい

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 forallresults

read forallresults

serialobject
SerialObjectの所有権

waiting threads

owner

thread

object

  • SerialObjects
    • 排他制御があるオブジェクト
    • RemoteObjectのsub-class
  • 明示的なロックは不要
  • 各オブジェクトに所有権
    • call ⇒ acquire
    • return ⇒ release
    • メソッドの実行は1スレッドのみ
      • 所有者スレッド
  • 所有者はブロックすると所有権を放棄する
    • e.g: waitall(), 他Serial Objectへの同期呼び出し
    • 他のスレッドが取得可能
    • 再帰呼び出しによるdeadlockを排除する

Th

Th

Th

Th

new

owner

thread

object

Th

Th

Th

block

Give-up

Owner

ship

Th

re-contest

for ownership

object

Th

Th

Th

Th

unblock

serialobject1
SerialObjectにシグナルを送る
  • 非同期イベントへの対応
    • イベントを「シグナル」として表現し、扱う
      • Unix のシグナルセマンティクス
      • Blocking操作がunblockする
  • オブジェクトへのシグナル
    • オブジェクトcontextでblockしているスレッドを1つ強制unblock
      • もしくは、次にblockするスレッド
    • Unblockされたスレッドでイベント処理が可能

object

SIGNAL

Th

unblock

handle

object

Th

serialobjects in gluepy
SerialObjects in gluepy

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:
    • メソッド内で

「ブロックする操作の間」

    • 属性のstateを変える、Non-SerialObjectへの呼び出しなどがatomicに行える
  • 例:分散Queue
    • 空のqueueに対してpop()はblockする
    • add()で追加する
      • 空でなくなったらsignal()

でunblockさせる

Atomic Section

Signal & wake

Block until signal

master worker in gluepy 1 3
例:Master-worker in gluepy (1/3)

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

  • 参加・脱退に対応
  • 動的な参加:
    • 参加イベントを処理する
    • block中にsignalで

Noneを返してunblock

Signal for join

Block &

Handle join

master worker in gluepy 2 3
例: Master-worker in gluepy (2/3)

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)

  • 故障への処理
    • 結果回収で例外
    • 例外を処理し、再投入

Failure

handling

master worker in gluepy 3 3
例: Master-worker in gluepy (3/3)
  • 起動
    • マスタはオブジェクトを公開
    • ワーカは参照を得て

RMIで参加する

Master init

master = Master()

master.register(“master”)

master.run()

Worker init

worker = Worker()

master = RemoteRef(“master”)

master.nodeJoin(worker)

while True:

sleep(1)

lookup on join

slide61
分散環境でオブジェクト指向

Proc: A

Proc: B

  • ABCL [Yonezawa ‘90]

JavaRMI, Manta [Maassen et al. ‘99]

ProActive [Huet et al. ‘04]

  • 分散オブジェクト指向
    • オブジェクトを資源間で分散
  • 計算の分散
    • メソッド呼び出し
    • RMI (Remote Method Invocation)
    • 非同期RMIで並列計算
  • アプリの記述は自由

a

a.f()

f()

RMI

Proc: A

Proc: B

Proc: B

Proc: B

a

a.f()

a

a.f()

a

a.f()

async.

RMI

f()

f()

f()

slide62
Grid上分散オブジェクト指向の課題

Proc: A

Proc: B

Proc: A

Proc: A

  • スレッドの競合
    • 1つのオブジェクトに同時多数RMI
    • Active Objects
      • 1 object = 1 thread
      • デッドロックの懸念:

e.g.: 再帰呼び出し

  • 参加処理の記述
    • どのように参加するか
    • 参加のイベント通知
      • Event –drivenなループではflowが分断される
  • 脱退への対応
    • 透過的な解決は困難

a

a.f()

a.f()

a.f()

f()

f()

f()

race

Active

objects

a

b

b.f()

f()

a.g()

deadlock

the basic programming model
The Basic Programming Model

Proc: A

Proc: B

  • 分散オブジェクト
    • あるプロセスで生成
    • RMIでアクセス
    • Passive Objects
      • 占有スレッドはない
  • スレッド
    • あくまで並列処理のため
    • 同期・非同期RMIは

陰にスレッド生成

  • Future
    • 非同期RMIの返り値
    • placeholder
    • 呼出し中の例外も格納され

リレイズされる

a

Spawn for RMI

a.f()

f()

Proc

a

Spawn for async

F = a.f() async

f()

store in F

slide69
広域環境上オーバレイ

Application-level Overlay

  • 接続性の解決法
    • 複数ホップで通信
  • スケーラビリティ
    • メモリ・stateful firewall

TCP/UDP

Link

firewall Cluster

Cluster

slide70
オーバレイ上の転送
  • オーバレイ上の通信はノード間で転送される
  • 転送のバンド幅が重要になる

buffer

buffer

buffer

src

dst

slide71
安直な転送アルゴリズム
  • 各ノードのアルゴリズム
    • 受信:best effort
    • 送信:best effort
  • 均一な環境:高性能
  • 不均一な環境:バッファがメモリーアウト

buffer

buffer

src

dst

1Gbps

1Gbps

1Gbps

src

dst

1Gbps

1Gbps

WAN Link

slide72
パイプライン転送 (1/2)
  • 複数のTCP接続でリレーする
    • 受信:バッファに余裕があれば
    • 送信:best effort
  • 利点:
    • 単純で低オーバヘッド
    • TCPが実現するスループットを得る
    • メモリ使用量は一定

FULL!

FULL!

src

dst

slide73
パイプライン転送 (2/2)
  • 欠点:通信デッドロック
    • リンクAからリンクBに転送
    • リンクBの転送がブロック

⇒リンクAの転送がブロック

    • リンクAがリンクBを待つ
      • 依存関係:リンクA→リンクB

FULL!

FULL!

Link: A

Link: B

waits…

dijsktra like 1 3
Dijsktra-likeな計算(1/3)
  • 準備
    • R個のrankがあるとする
      • Updownの時:R=2とする
    • 各ノードをR個複製する
      • (node-id, rank-id)を識別子とする
    • 各無方向リンクを2つの有方向リンクとする
      • それぞれの有方向リンクにrankを割り当てる
      • Ordered-link
        • 有方向リンクのペアに無方向リンクのランクを割り当てる
      • Updown
        • Up方向にランク: 0
        • Down方向にランク:1

(nid, R-1)

nid

(nid, 0)

r

r

r

0

1

dijsktra like 2 3
Dijsktra-likeな計算(2/3)
  • 制約
    • (nid, r)のノードはランクr以上のリンクのみ

たどれる

    • (n0, r)がリンクr’を使ってn1に渡る時、

(n1, r’)に到達する

  • 初期条件
    • ノードsrcからスタート
      • (src, 0), … (src, R-1)までの距離を0に初期化

r'

(nid, r’)

(nid, r’)

(nid, 0)

dijsktra like 3 3
Dijsktra-likeな計算(3/3)
  • 計算量
  • Dijkstra: |E| + Vlog|V|
    • フィボナッチヒープを使うとdecrease-key: O(1)
    • レベル数:R
    • |E| = eR
    • |V| = nR
  • eR + (nR) log(nR)
    • 最悪(全対全):R = n
  • 各ソースについて解くが分散計算が

容易に出来る

ad