数理・計算科学専攻 千葉研究室 08M37315 森田 悟史 指導教員 千葉 滋 教授

Slides:



Advertisements
Similar presentations
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
Advertisements

モバイルエージェントシステムの実装 エージェント移動(状態とコードの一括移送) エージェント移動の特徴 システム構成 エージェントプログラム
IaaS 仮想マシン(VM)をネットワーク経由で提供 負荷に応じてVM数や性能を変更できる ハードウェアの導入・管理・維持コストの削減
Dynamic AOPと その実装手法について
DNASシステム上のアプリケーション起動シーケンスのための基盤であるdsh部分の性能評価
福盛 秀雄, 浜中 征志郎, 菅原 健一, 吉川 潤, 中山 周平 早稲田大学 村岡研究室
AspectScope によるアスペクトとクラスのつながりの視覚化
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
ユーザ毎にカスタマイズ可能な Web アプリケーション用のフレームワークの実装
アスペクト指向プログラミングを用いたIDSオフロード
効率的なJava Dynamic AOPシステムを実現する Just-in-Time weaver
アスペクト指向プログラミングと Dependency Injection の融合
Flyingware : バイトコード変換による 安全なエージェントの実行
サーバ負荷分散におけるOpenFlowを用いた省電力法
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
MPIによる行列積計算 情報論理工学研究室 渡邉伊織 情報論理工学研究室 渡邉伊織です。
J2EEアプリケーションにおける アプリケーションレベルスケジューリング
AOP言語への 織り込みインターフェイスの導入 A Weaving-Interface for AOP Languages
過負荷時の分散ソフトウェアの 性能劣化を改善する スケジューリングの提案
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
暗黙的に型付けされる構造体の Java言語への導入
関心事ごとに視点を切り替えて プログラムを編集できる 統合開発環境の提案と実装
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
アスペクト指向言語による 例外処理の記述方法の改善
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
クラウドにおけるIntel SGXを用いた VMの安全な監視機構
活性化のタイミング制御の実装を分離記述可能な分散動的アスペクト指向言語
通信機構合わせた最適化をおこなう並列化ンパイラ
動的データ依存関係解析を用いた Javaプログラムスライス手法
既存Javaプログラム向け 分散化支援システムの開発
豊富な情報を基にした pointcut を記述できるアスペクト指向言語
Recoveryアドバイスをもつ アスペクト指向システム
東京工業大学 情報理工学研究科 数理・計算科学専攻 千葉研究室 栗田 亮
クラスのインターフェース やその振る舞いに及ぼすアスペクトの影響の解析と可視化
アスペクト指向言語のための 独立性の高いパッケージシステム
アプリケーション依存の先読みが可能なO/Rマッピングツール
バイトコードを単位とするJavaスライスシステムの試作
Intel SGXを用いた仮想マシンの 安全な監視機構
アスペクト指向言語のための 独立性の高いパッケージシステム
J2EEアプリケーションにおける アプリケーションレベルスケジューリング
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
Java における 先進的リフレクション技術
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
マイグレーションを支援する分散集合オブジェクト
静的情報と動的情報を用いた Javaプログラムスライス計算法
分散 Java プログラムのための アスペクト指向言語
Josh : バイトコードレベルでのJava用 Aspect Weaver
統合開発環境によって表現された 言語機構によるコードのモジュール化
同期処理のモジュール化を 可能にする アスペクト指向言語
「マイグレーションを支援する分散集合オブジェクト」
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
VMリダイレクト攻撃を防ぐための 安全なリモート管理機構
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
プログラム分散化のための アスペクト指向言語
統合開発環境のための プログラミング言語拡張 フレームワーク
開発者との対話を活かした 横断的構造の表現
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
IPmigrate:複数ホストに分割されたVMの マイグレーション手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
ソケットの拡張によるJava用分散ミドルウエアの高信頼化
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

数理・計算科学専攻 千葉研究室 08M37315 森田 悟史 指導教員 千葉 滋 教授 分散アスペクトの一貫性の保持と停止時間の短縮を考慮した動的織り込み手法 Coordinated Distributed Dynamic Weaving with Minimum Pause Time 数理・計算科学専攻 千葉研究室 08M37315 森田 悟史 指導教員 千葉 滋 教授

分散動的アスペクト指向を用いた機能追加 プログラムの振る舞いを実行中に変更 例: メッセージ送信プログラムへの暗号機能追加 二つのアスペクトで機能を実現 クライアント側:暗号化 サーバ側:復号 Client Server メッセージ 暗号化 復号 Client Server 暗号文

追加する(織り込む)暗号化アスペクトの例 アドバイス ポイントカット アスペクト public aspect Encrypter { void around (String msg): call(void Client.send(String))&& args(msg) { String cipher = encrypt(msg); // 暗号化 proceed(cipher); // 元のメソッドを呼び出す } 号 復号 class Client { void send (String msg) { … }} ジョインポイント Server 暗号文

研究目的:一貫性を保って織り込む まだあまり注目されていない 片方だけ先に織り込まれると不具合 織り込みにかかる時間が一定ではない While coordinated weaving *may* be important, it is not necessarily required in all cases. (SC 09 notification) 片方だけ先に織り込まれると不具合 両方のアスペクトが必要 織り込みにかかる時間が一定ではない ネットワークスピードの違い 巨大な分散環境 CPU 使用率の違い Java ベース言語のコード変換 Client Server メッセージ 暗号化 解読不可 Client Server 暗号文

実験:一貫性を保つことの重要性 InTrigger で実験 chiba ノードから mirai ノードへ送信 1 ミリ秒に 1 回通信 ネットワークレイテンシは 27 ミリ秒 Java ベース言語の場合 (コード変換あり) 織り込みの瞬間 10 回の暗号化失敗 CaesarJ [‘03 Mezini ら] の場合 (コード変 換なし) 静的に織り込み、動的に有効化 有効化の瞬間 1 回の暗号化失敗 二種類の言語で実験

評価軸:一貫性の保持と速度の両立 素朴に制御すると難しい 素朴な方法:全ノードを停止 安全なところで止めて織り込み 再開 安全なところで止めて織り込み  再開 パフォーマンスの問題 アプリケーションを止めてしまう Client Server メッセージ Client Server 停止 暗号化 復号 Client Server 再開 Client Server 暗号文

提案: two phase weaving 機構 一貫性と速度を両立させる手法 織り込み制御プリミティブを分割 アスペクトの準備 (deploy) と有効化 (activate) に分ける 時間がかかる deploy を非同期的に行い、activate するタイ ミングだけを制御する プリミティブ 説明 deploy ジョインポイントにアドバイスを準備をする 織り込み処理が並列でスタートする (block しない) isDeployed deploy が完了しているか確認する activate アドバイスの呼び出しを可能にする deploy 前の場合、deploy 完了と同時に呼び出し可能になる deploy の状態にかかわらず、activate はすぐ終わる

例: two phase weaving 機構を使った暗号化アスペクトの織り込み deploy 実装した織り込みアルゴリズム それぞれの機能を deploy isDeployed で織り込み終了を確認 受信→送信の順で activate 受信側アスペクトの工夫 織り込み過渡期に対応 Client Server STOP メッセージ 暗号化 復号 Client Server メッセージ deploy isDeployed = true Client Server メッセージ activate Client Server 暗号文 activate

例: two phase weaving 機構を使ったロギングアスペクトの織り込み 実装した織り込みアルゴリズム アプリケーションの同期に合わ せた織り込み 2つのアスペクトを deploy 同期のタイミング確認用 ロギングアスペクト 同期のタイミングに合わせて activate deploy node00 node01 node02 sync activation t = 101 t = 102 t = 103 Do not activate Join point Calculation Data sending

two phase weaving 機構の特徴 向いているアプリケーション 全て織り込まれている or 織り込まれていないことを保証 すればよいもの 途中で状態が変わらない すべてのプリミティブはブロックしない プログラムを止めずに一貫性を保てる 限界 アドバイス側に、両対応などの工夫が必要なこともある アプリケーション自体の機構を利用することで工夫がいらな い場合もある

実証: DandyJ two phase weaving 機構を提供する分散DAOP言語 言語サポートを提供 プリミティブのみだと、織り込み制御の記述が複雑になる 機能と分散処理・織り込み活性化処理が混ざる deploy, activate, isDeployed + 補助プリミティブ Dynamic aspect Remote pointcut Onetime aspect

Dynamic aspect 動的織り込みが可能なアスペクト First-class aspect インスタンス化し、deploy や activate の対象にできる Dynamic aspect は他のコードから織り込みを操作可能 アスペクトでモニタリングを行い activate できる モニタリングアスペクトの実装 モニタリングを分離できる Encrypter enc = new Encrypter (); enc.deploy(); enc.activate(); ... enc.undeploy(); dynamic aspect Encrypter { …. }

Remote pointcut [Nishizawa ら ‘04] 他のノード上のイベントに反応して動く アドバイスが書ける 分散環境でのモニタリングアスペクト が簡単に書ける 織り込みのタイミングを集中管理できる ローカルアドバイスも定義できる local 修飾子 Aspect node00: node00 ... send (); 指定子 ジョインポイント hosts(hostName1, hostName2 ..) hostName1, … 上のジョインポイント hostName(hostName) ホスト名が hostName と一致するジョインポイント

Onetime aspect 一度アドバイスが実行されると 自動的に除去される undeploy を明示的に記述する 必要がない Client Server メッセージ 一度アドバイスが実行されると 自動的に除去される undeploy を明示的に記述する 必要がない モニタリングアスペクトが簡単 に書ける モニタリングアスペクトは将来い らなくなる モニタリング 暗号化 復号 Client Server 暗号文 undeploy Client Server 暗号文

例: DandyJ を用いた暗号化アスペクト public dynamic aspect Encrypter { local void around (String msg): client() && args(msg) { // encrypt the message proceed (msg); }} public abstract dynamic onetime aspect ServerClient { … before (): server() && if (openPort.isDeployed() && server.isDeployed()) { openPort.activate(); server.activate(); } before (): client() && if(server.isActivated() && changePort.isDeployed() && client.isWoven()) { changePort.activate(); client.activate(); }} public dynamic aspect Decrypter { local void around (String msg, Server s): server() && args(msg) && this(s){ if ( /* ポートで場合分け */ ) { // decrypt the message proceed (msg); } else { proceed(msg); }}}

DandyJ の実装 ddjc: JastAdd 版 abc を拡張したコンパイラ アスペクトでコンパイラーを拡張 全体:15万行 追加部分: 約5000行 ddj: プログラム実行と同時に Runtime system が起動 Runtime system が動的織り込みを行う Instrument API で javassist を利用 約3000行

実験: 暗号機能の追加 1ミリ秒に1回メッセージを送信しているアプリに機能追加 3ノードで実験 織り込み方法 chiba:メッセージ送信ノード mirai:メッセージ受信ノード chiba:コントロールノード 織り込み方法 制御なし ブロック Onetime aspect を用いてコントロール コントロールするがモニタリングアスペクトを undeploy しない 実験環境 InTrigger chiba & mirai OS: Debian Chiba CPU: Core2Duo 2.13GHz, メモリ: 4GB Mirai CPU: Xeon 2.33GHz, メモリ: 16GB

実験結果 Onetime aspect で一貫性と速度を両立できた 100 付近で織り込み ブロックによる遅れ 速度× 速度◎ 一貫性○ 一貫性× 時間(ms) Max: 69 Ave: 45.4 Max: 133 Ave: 47.5 時間 (回目) 速度○ 一貫性○ 速度△(約7%) 一貫性○ Max: 71 Ave: 46.6 Max: 75 Ave: 49.6

関連研究 DyReS [‘08 Truyen ら] CaesarJ [‘03 Mezini ら] XML スクリプトで活性化までの流れを記述 遠隔ノードの処理の状況を把握することはできない スクリプトが複雑になりやすい CaesarJ [‘03 Mezini ら] 非活性状態のアスペクトを deploy 命令で活性化 遠隔ノードの処理の進行状況を集中管理できない DJAsCo [‘06 Navarro ら] Remote pointcut を使用できる フックを活性化する処理をアドバイスとして記述できない

まとめ 実験を通して、一貫性の保持が必要なことを示した two phase weaving 機構の提案 DandyJ での実証 deploy と activate を分けることで、一貫性の保持と停止時間の 短縮を両立するアルゴリズムを実現可能にした DandyJ での実証 言語として実装 実験でパフォーマンスを調査 今まで (今後) の活動 論文: ソフトウェア科学会大会’08@筑波大、(ECOOP’10@slovenija) ポスター: PPL’08@仙台、AOSD’09@Charlottesville、(AOSD’10@Saint-Malo) 投稿中 3月