76
広広広広広広広広広広広広広広広広広広広広広広広 広広広広広広広広広広広広 広広広広広 076426 広広広

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

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

田浦研究室076426 弘中健

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

広域環境における並列分散計算• 複数のクラスタで並列計算に使う機会が増加

– WAN のバンド幅増加– 複数のクラスタを WAN で接続した環境が普及

• Grid5000( フランス ), DAS-3( オランダ ), InTrigger( 日本 )

• 並列分散計算の増加– 並列ライブラリを用いたアプリ

• 組み合わせ最適化問題• モデルチェッキング

– データインテンシブなアプリ• 大量のデータ解析を並列化

Cluster

WAN

22009/2/10

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

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

• WAN の接続性の解決– NAT, Firewall

• スケーラビリティ– 接続数を減らす

• 通信性能の向上– WAN/LAN 上の

コンテンションを防ぐ

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

NAT/firewall

Contention!

Too many…

32009/2/10

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

広域環境上オーバレイ• アプリ・レベルで独自のネットワークを構築– UDP/TCP を用いる

• エンドホストも通信を転送– 直接繋がっていなくても

通信を実現

firewall Cluster

Cluster

通信は転送

42009/2/10

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

本研究の貢献• 広域並列分散計算の通信を効率的に行うオーバレイ

– 低オーバーヘッドな転送– メモリオーバフロー・デッドロックを起こさない– 不均一な実ネットワークに自律的に対応するルーティング

• 大規模な WAN 環境で実装・実証した– 4 ~ 7 クラスタ:最大 291 ノード– 集合通信でオーバレイなしより高性能

• 分散オブジェクト指向プログラミングライブラリ– 本発表では省略させて頂きます– 目標:提案するオーバレイを通信基盤とした広域環境における効率的な並列・分散プログラミング環境を提供

52009/2/10

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

提案オーバレイの応用• 並列・分散計算ライブラリ

– 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

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

問題説明• 序論• 問題説明• 関連研究• 提案手法• 実験・評価• まとめ

72009/2/10

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

広域オーバレイ上の通信の問題• 広域環境では遅延・バンド幅が不均一

– 100[us] ~ 100[ms]– 10 [Mbps] ~ 10[Gbps]

• 単純な転送手法では不均一性による問題が発生する– 中継ノードのメモリオーバフロー– 通信のデッドロック

Narrow Link

10 [Mbps] 10 [Gbps]10 [Gbps]

82009/2/10

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

問題 1: メモリオーバフロー• 中継ノードがバッファのメモリ容量を考

えずにパケットを受信するとメモリオーバフローをおこす– 中継ノードは有限バッファが必要

dstsrc1Gbps 1Gbps

WAN Link92009/2/10

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

問題 2: 通信のデッドロック• パイプライン転送– 各ノードは有限バッファが一杯になったら受

信をやめる• 転送が待たされ、中継ノードを用いてフロー制御• 通信がデッドロックしてしまう

102009/2/10

dstsrc

packet buffer FULL!

フロー制御

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

通信デッドロックの例• 複数の転送が混在する場合:

– 次に使いたいリンクが別の転送に占有され、転送が待たされる

• 例: 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

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

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

サイクルが発生

• デッドロックフリールーティングが必要– リンク間の依存関係に

サイクルが起きないように使える経路に制約を課す

Link: A

Link: B Link: C

Link: D

122009/2/10

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

問題 3: 局所性を考慮したルーティング

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

ルーティングが必要

132009/2/10

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

関連研究• 序論• 問題説明• 関連研究• 提案手法• 実験・評価• まとめ

142009/2/10

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

既存の広域オーバレイ• 転送時のメモリ、デッドロックを考慮した実装は少な

• RON (Resilient Overlay Network) [Andersen et al. ‘01]

– 全体全でつなぐ UDP オーバレイ– UDP インターフェイスを提供

• そもそも通信の信頼性はなく、ユーザ任せ

• DiskRouter [Kola et al. ‘03]

– ファイル転送用のオーバレイ– バッファの使用率が閾値を超えると受信中断

• デッドロックの恐れがある152009/2/10

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

フロー制御を実装する手法• 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

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

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

• 通信にデッドロックが起きないように使える経路に制約をかす– 広域オーバレイに良く適用したものはない

• 並列コンピュータのインターコネクト– 特殊なトポロジーを想定– [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

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

提案手法• 序論• 問題説明• 関連研究• 提案手法• 実験・評価• まとめ

182009/2/10

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

提案手法の概要• 基本的な提案– TCP でオーバレイを構築– デッドロックフリーにする経路制約– 経路を計算

• ネットワーク情報を用いた最適化– 局所性を考慮したオーバレイの構築– 局所性を考慮したデッドロックフリー制約– 転送スループットを考慮した経路計算

192009/2/10

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

オーバレイの転送方法• オーバレイのリンク:

– TCP 接続を使うことで TCP のフロー制御を活用

• データの分割:– 送信されるデータは一定のパケットに分割

• 信頼性のある通信を実現:– srcから dst まで FIFO でパイプライン転送– 中継ノードはパケットを落さない

• 転送方法:– バッファに余裕がある限り受信、一杯になったら受信を中断– 中継ノードを用いたフロー制御– 直接繋いだ TCP が実現するスループットを得る

dstsrc

packet

TCP TCP TCP

buffer FULL!

202009/2/10

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

デッドロックフリールーティング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

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

提案手法の概要• 基本的な提案– TCP でオーバレイを構築– デッドロックフリーにする経路制約– 経路を計算

• ネットワーク情報を用いた最適化ノード間遅延、接続リンクバンド幅情報– 局所性を考慮したオーバレイの構築– 局所性を考慮したデッドロックフリー制約– 転送スループットを考慮した経路計算

222009/2/10

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

局所性を考慮したオーバレイの構築

[Saito et al. ‘07]• 「遠いノードへは回り道しても影響は少ない」• 通信性能を維持する様に接続選択

– 遠いノードとは低い確率– 近いノードとは高い確率

• 各ノードのアルゴリズム– すべてのピアを低遅延順にソート– [d^k, d^k+1 ) の区間で d個のピアを選択し接続– ノード数 N に対して NlogN の接続を確立する

小さな影

大きな影

低遅延

d d^2 d^3 232009/2/10

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

Up/Down ルーティングの改善• 幅優先探索の ID付け

– マルチクラスタ環境で問題

• UP→DOWN する経路増えてしまう• クラスタ内で小さい ID なノード

– UP方向リンクは高遅延 WAN リンク– UP→DOWN の経路は

WAN 経由になってしまう

 

0

21

3

4

5

cluster

DOWNUP

242009/2/10

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

提案 Up/Down ルーティング• 深さ優先探索の ID付け– 低遅延のピアを優先的に探索

• Rationale– UP→DOWN の経路を減らす– クラスタ内の経路はすべて

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

3

5

1

0

DO

WN

UP

252009/2/10

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

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

0

21

3

4

5

0

51

2

3

4

clusterBFS-updown Locality-aware

DFS-updown

DOWNUP

DOWN

DOWN

cluster262009/2/10

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

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

dstsrcB1 B2 B3

272009/2/10

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

各ノードの転送手続き (1/2)

• 各 TCP 接続に以下を定義– 有限な送信バッファ– 1 packet の受信バッファ

• 転送の手続き– 受信バッファに 1packet に受信– 送信バッファに移す– 送信バッファが一杯だと

それ以上受信しない

Send buffer

Recv buffer

FULL!

282009/2/10

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

各ノードの転送手続き (2/2)

• 複数の転送が混雑した同じリンクに競合– 交互に packet を転送する

• デッドロックフリールーティング– デッドロックが生じることはない

292009/2/10

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

実験・評価• 序論• 問題説明• 関連研究• 提案手法• 実験・評価• まとめ

302009/2/10

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

Deadlock-free ルーティングのオーバーヘッド

• Deadlock無考慮の場合とオーバーヘッドを検証– ordered-link– Up/Down– 提案 Up/Down

• シミュレーション– 13 実クラスタ (515 ノード )– オーバレイ接続密度を変化

• 全経路のホップ数• 全経路のバンド幅

312009/2/10

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

全経路のホップ数

• 平均ホップ数はほとんど差がない• 最長ホップ数でも、提案 Up/Down は同等な経路長

Average Hops Max. Hops

Deadlock 無考慮と差がない

Deadlock 無考慮と差がない

322009/2/10

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

経路バンド幅の最低比率

• 他の deadlock-free 手法は無駄な WAN 経路がある• 提案手法では WAN 経路を避けるので本来のバンド幅が得られる

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

332009/2/10

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

Deadlock-free 制約の通信遅延への影響

• 実環境: 7 クラスタ (170 ノード )

• 全経路の遅延を測定– 直接通信と比較– 接続密度 : 9%

• Deadlock-free 制約の検証– メトリックは遅延

342009/2/10

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

直接 vs. オーバレイ遅延分布

• Up/Down は制約のためクラスタ内通信も WAN を経由している

提案 Up/Downは直接通信と同等

Up/Downは LAN 内ペアも WAN 経由

352009/2/10

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

転送スループットの評価• 幅広い環境で高スループット出ることを検証– 1 Gigabit Ethernet LAN (940 [Mbps])– Myrinet 10G LAN (7 [Gbps])

• メッセージサイズを変化

362009/2/10

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

転送スループットの評価

• 数ホップ転送しても直接 TCP ソケットに近い性能• Myrinet に関しては 4.5[Gbps] しか得られなかった

GbE クラスタ (940[Mbps]) Myrinet クラスタ (7[Gbps])

372009/2/10

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

集合通信性能の検証• 提案オーバレイを用いて集合通信– デッドロックフリー制約でも高性能

• 集合通信– Gather, All-to-All– メッセージサイズ・接続密度を変化させて評価

• 環境– LAN: 1-switch (36 nodes), 階層的 (177 nodes)– WAN: 4 clusters (291 nodes)

382009/2/10

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

集合通信: Gather 時間• switch で衝突 :

• Packet-loss• TCP再送 :• 200 [ms] loss

• 疎なオーバレイ :• 衝突を緩和

TCP RTO: 200 [ms]による時間の開

きポートで衝突

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

392009/2/10

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

集合通信: Gather 性能比較4 クラスタ (291 ノー

ド )衝突回避に

よる効果

402009/2/10

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

Cluster

ClusterCluster

集合通信: All-to-All

• 大規模な環境– ボトルネックがある– 階層的なクラスタ

• 177 ノード• MPICH ( 直接通信 ) と比較

– WAN で接続された 4 クラスタ• 291 ノード

1Gbps

4Gbps

4Gbps

Cluster

1Gbps1Gbps

1Gbps 1Gbps

1Gbps

412009/2/10

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

集合通信: All-to-All 性能比較1 クラスタ (177 ノー

ド )4 クラスタ (291 ノー

ド )

• 階層的な大きなクラスタではスイッチでのパケットロスが多くなる• マルチクラスタ環境は WAN のパケットロスが主要項になる

422009/2/10

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

まとめ• 序論• 問題説明• 関連研究• 提案手法• 実験・評価• まとめ

432009/2/10

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

まとめ• 広域並列分散計算用オーバレイを提案– 不均一な広域環境での転送問題を解決• メモリアウト・デッドロックを起こさない

– 実ネットワークを考慮した低オーバヘッドルーティング

• 大規模な WAN 環境で実装・実証した– 集合通信では LAN/WAN 共により高性能

442009/2/10

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

今後の課題• 別途提案した分散プログラミングライブ

ラリの通信基盤として応用– 分散オブジェクト指向– ノードの動的な参加・脱退に対応– 広域環境での並列分散プログラミングを簡潔

に• 課題:– 転送・ルーティングを動的変化に対応させる

452009/2/10

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

発表文献• 投稿中 (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

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

472009/2/10

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

482009/2/10

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

提案 : gluepy• Grid 環境用分散オブジェクト指向 Python プログラミングライブラリ

– 並列分散計算に必要なノード間通信・協調の記述を容易にする– 各計算ノードを”glue” で繋ぎ合わせる目的のライブラリ– WAN の接続性の問題を隠ぺい– 動的にノードが参加・脱退する環境でも汎用言語の拡張で記述できる

• プログラミングモデル:– 分散計算・通信には分散オブジェクトへの RMI

(Remote Method Invocation)• メソッド呼び出しという抽象化

– 動的な計算環境での記述を支援• ノード参加記述の支援• ノード脱退のセマンティクス

• 処理系:• ピア間で自動的に接続のオーバレイ構築• 接続性 (NAT/firewall) の自動的解決

2009/2/10 49

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

分散環境でオブジェクト指向• 計算の分散– メソッド呼び出し– 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

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

動的な資源への対応• 参加するプロセス対応

– 「最初の参照」 問題Object lookup

– 参加ノードが既にあるobjectへの参照を得ることが出来る

• 故障⇒ RMI 例外– ユーザは例外処理で

rollback などを実装することが出来る

Exception!

Objects in computation

New object on joining node

lookup

Object on failed node

2009/2/10 51

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

自動的オーバレイ構築 (1)

• 接続性解決– 自動的にオーバレイ構築

• TCP オーバレイ– 起動時に自動的にピア情

報を取得– 各ピアは少数のピアと接

続を確立– 連結グラフを構築

NAT

Firewall

Global IP

Attempt connection

established connections

2009/2/10 52

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

自動的オーバレイ構築 (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

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

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

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

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

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

SerialObject にシグナルを送る• 非同期イベントへの対応

– イベントを「シグナル」として表現し、扱う• Unix のシグナルセマンティクス• Blocking操作が unblock する

• オブジェクトへのシグナル– オブジェクト context で block して

いるスレッドを 1 つ強制 unblock• もしくは、次に block するスレッド

– Unblock されたスレッドでイベント処理が可能

Th

object

unblock

SIGNAL

Th

object handle

2009/2/10 56

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

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

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

例: 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

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

例: 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

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

例: 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

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

分散環境でオブジェクト指向• 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

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

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

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

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

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

642009/2/10

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

通信遅延の比率の CDF

652009/2/10

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

All-to-All: オーバレイ構築の比較

662009/2/10

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

672009/2/10

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

100 [Mbps] クラスタ間転送

682009/2/10

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

広域環境上オーバレイ• 接続性の解決法– 複数ホップで通信

• スケーラビリティ– メモリ・ stateful firewall

firewall ClusterCluster

TCP/UDPLink

Application-level Overlay

692009/2/10

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

オーバレイ上の転送• オーバレイ上の通信はノード間で転送さ

れる

• 転送のバンド幅が重要になる

dstsrc

buffer buffer buffer

702009/2/10

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

安直な転送アルゴリズム

dstsrc

buffer buffer

1Gbps

dstsrc

1Gbps 1Gbps

1Gbps 1GbpsWAN Link

• 各ノードのアルゴリズム• 受信: best effort• 送信: best effort

• 均一な環境:高性能• 不均一な環境:バッファがメモリーアウト

712009/2/10

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

パイプライン転送 (1/2)

• 複数の TCP 接続でリレーする– 受信:バッファに余裕があれば– 送信: best effort

• 利点:– 単純で低オーバヘッド– TCP が実現するスループットを得る– メモリ使用量は一定

dstsrc

FULL!FULL!

722009/2/10

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

パイプライン転送 (2/2)

• 欠点:通信デッドロック– リンク Aからリンク B に転送– リンク B の転送がブロック⇒リンク A の転送がブロック

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

FULL!

Link: A Link: B

FULL!

waits…

732009/2/10

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

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

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

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

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

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