• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
2008/02 STMの紹介
 

2008/02 STMの紹介

on

  • 1,591 views

2008年2月のJavaEE勉強会発表資料です.

2008年2月のJavaEE勉強会発表資料です.

Statistics

Views

Total Views
1,591
Views on SlideShare
1,590
Embed Views
1

Actions

Likes
1
Downloads
15
Comments
0

1 Embed 1

https://twitter.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    2008/02 STMの紹介 2008/02 STMの紹介 Presentation Transcript

    • An Introduction to Software Transactional Memory【見覚え】 小林浩一 (koichik) 【あります】
    • AgendaトランザクショントランザクショナルメモリソフトウェアトランザクショナルメモリSun DSTM2
    • トランザクションデータベースでお馴染みの概念重要な性質 ACID特性 並行性
    • ACID特性Atomicity 不可分性Consistency 完全性Integrity 一貫性Durability 永続性
    • 並行性直列化可能性 (Serializability) 並列実行 直列実行 直列実行 t1 t2 t1 t2 どちらかと 同じ結果 t2 t1
    • 並行性制御悲観的並行性制御 (blocking) 競合が起きることを前提とする リソースへのアクセスを排他的に行う 通常DBMSレベルで実現楽観的並行性制御 (non blocking) 競合は滅多に起きないことを前提とする 競合が起きた場合はいずれかのトランザクションを ロールバックしてリトライする リソースへのアクセスは並行に行う 通常アプリケーションレベルで実現
    • トランザクション まとめACID特性並行性 直列化可能性並行性制御 悲観的並行性制御 楽観的並行性制御
    • AgendaトランザクショントランザクショナルメモリソフトウェアトランザクショナルメモリSun DSTM2
    • トランザクショナルメモリトランザクションの特性をメモリアクセスに応用 ACI特性 揮発性のメモリではdurabilityは不要 並行性 楽観的並行性制御への関心が高い
    • 目的並行性の向上 Multi Core・Many Core時代に対応モジュール性の向上 従来の場合 スレッドセーフなモジュールの組み合わせが スレッドセーフになるとは限らない トランザクショナルメモリの場合 スレッドセーフなモジュールを組み合わせても スレッドセーフ 操作は合成 (compose) 可能
    • トランザクショナルメモリの現在実用段階の手前研究・評価段階様々な実現方法実現位置粒度更新タイミング競合の検出同期アルゴリズム
    • 実現位置ソフトウェア (STM) ソフトウェアで実現ハードウェア (HTM) ハードウェアで実現ハイブリッド (HyTM) ソフトとハードで実現
    • 粒度トランザクショナルなデータの単位ワードレベル (word granularity) 32bit/64bitのワード単位 HTMに多いオブジェクトレベル (object granularity) プログラミング言語のオブジェクト単位 STMに多い
    • 更新タイミング更新を共有メモリに反映するタイミング遅延書込 (deferred update) 更新時はコピーを作成 コミット時にまとめて反映直接書込 (direct update) 更新時にバックアップを取得 ロールバック時に元に戻す
    • 競合の検出オープン時 (detected on open) トランザクション開始時にチェック トランザクション開始時に使用するデータを列挙 非現実的バリデーション時 (detected on validation) データをリード/ライトする際にチェック オーバーヘッド大コミット時 (detected on commit) コミットの際にチェック 無駄な処理を行う可能性大
    • 同期アルゴリズム同期 (blocking,悲観的)非同期 (non blocking,楽観的) wait-freedom 全てのスレッドが前進 lock-freedom 少なくとも一つのスレッドが前進 obstraction-freedom 他のスレッドと衝突しなければ前進 衝突はContention Managerが管理 自由度が高くて現実的
    • トランザクショナルメモリ まとめ実現方式は様々 まだまだ研究・評価段階 具体的な説明しにくいのよ当面は柔軟性の高いSTMで模索HTMは時期尚早(?) Sunは2009年(当初は2008年)出荷予定の 次世代プロセッサ(Rock)でHTMをサポート IntelはHardware Accelerated STMを研究中
    • AgendaトランザクショントランザクショナルメモリソフトウェアトランザクショナルメモリSun DSTM2
    • ソフトウェアトランザクショナルメモリソフトウェアによるトランザクショナルメモリ ハードウェア的には通常のメモリアクセスこちらも研究・評価段階
    • 実現方法言語レベル プログラミング言語及び処理系でSTMをサポートライブラリレベル ライブラリレベルでSTMをサポート
    • 言語レベル主要なキーワード atomic retry orElse
    • atomicトランザクション境界を定義atomic { if (x == null) { x = new Foo(); }}
    • retry (1)問題atomic { while (x == null) { sleep(); 無限ループ } x.bar();}
    • retry (2)トランザクションをロールバックして再試行atomic { if (x == null) { retry; } x.bar();}
    • or elseロールバックした場合の処理 retryした場合も含むatomic { return getElement();} orElse { return null;}
    • ソフトウェアトランザクショナルメモリ まとめ実現方式は様々 まだまだ研究・評価段階 具体的な説明しにくいのよキーワード atomic retry orElse当面は柔軟性の高いライブラリで模索か?
    • AgendaトランザクショントランザクショナルメモリソフトウェアトランザクショナルメモリSun DSTM2
    • Sun DSTM2Dynamic Software TransactionalMemory 2.0 http://www.sun.com/download/products.xml?id=453fb28eSTMのためのフレームワーク STM実現のためのメカニズムを提供 様々な実装を選択可能
    • コンポーネント (1)アトミックオブジェクト トランザクショナルなオブジェクト getter/setterを持ったインタフェース 実装はファクトリが動的に作成 @Atomicアノテーションを付けるファクトリ アトミックインタフェースの実装クラスを動的に生成する Apache BCELを使用アダプタ アトミックオブジェクトの振る舞いを提供 STMを実現するキモ
    • コンポーネント (2)コンテンションマネージャ 競合を調停するスレッド java.lang.Threadのサブクラス トランザクションやコンテキスト情報を管理トランザクション トランザクションの状態を管理
    • アトミックオブジェクトクラストランザクショナルなオブジェクトのインタフェース getter/setterメソッドを定義する@Atomicpublic interface AtomicData { void setValue(int value); int getValue();}
    • ファクトリの生成アトミックオブジェクトとアダプタのクラスを指定AtomicFactory<AtomicData> atomicFactory = new AtomicFactory<AtomicData>( AtomicData.class, Adapter.class);
    • アトミックオブジェクトの生成ファクトリから生成 アトミックインタフェースを実装した 動的に生成されたクラスのインスタンスAtomicData atomicData = atomicFactory.create();
    • アトミックオブジェクトの操作Callable/Runnableを使用atomicブロックに相当Callable<Integer> readOperation = new Callable<Integer>() { public Integer call() { return atomicData.getValue(); }};
    • トランザクショナルに実行Threadを使用 java.lang.Threadのサブクラス 使用するContentionManagerクラスを設定Thread.setContentionManagerClass( BackoffManager.class);int value = Thread.doIt(readOperation);
    • トランザクションのアボートretry相当Thread.getTransaction().abort();
    • アボート時の操作RunnableをThreadに登録orElseブロック相当Thread.onAbort(new Runnable() { public void run() { ... }});
    • STMのフレームワークアトミックオブジェクトの振る舞いをカスタマイズ可能 アダプタ コンテンションマネージャ
    • アダプタアトミックオブジェクトを実現するクラスDSTM2標準のアダプタ dstm2.factory.ofree.Adapter 同期:non blocking (obstraction-freedom) 粒度:object level 更新:defered update 競合検出:detected on validation dstm2.factory.twophase.Adapter 同期:blocking (synchronize) dstm2.factory.shadow.Adapter ???
    • ofree.Adapter Factoryが 構造 Factoryが 生成 生成 <Atomic> Locator writer TransactionAtomicData state newAtomicData$ Version AtomicData$ value old Adapter start Version AtomicData$ value Atomic Reference
    • ofree.Adapter 初期状態 <Atomic> Adapter writer TransactionAtomicData committed newAtomicData$ Version AtomicData$ value old Adapter start Version null
    • ofree.Adapter ①committed リード(1) なので <Atomic> Adapter writer TransactionAtomicData committed newAtomicData$ Version AtomicData$ value old Adapter start Version ②newVersion null を読む
    • <Atomic> ofree.AdapterAtomicData ライトAtomicData$ Locator writer committed new Version value old Adapter start Version null ①前の値を コピーして 新しい値を Locator writer 書き込む active ②新しいAdapterを new 作成して繋ぎ替え Version value old Version
    • ofree.Adapter ①active リード(2) なので <Atomic> Locator writer TransactionAtomicData active newAtomicData$ Version AtomicData$ value old Adapter start Version AtomicData$ value ②oldVersion を読む
    • ofree.Adapter ①committed コミット後 にする <Atomic> Locator writer TransactionAtomicData committed newAtomicData$ Version AtomicData$ value old Adapter start Version AtomicData$ value
    • コンテンションマネージャ競合の調整役競合 参照と更新 更新と更新調整 競合したトランザクションのいずれかを アボートさせるどのトランザクションを選択するか? 様々なポリシーが考えられる
    • コンテンションマネージャ標準の実装BackoffManagerPriorityManagerAggressiveManagerEruptionManagerGreedyManagerKarmaManagerKindergartenManager
    • デモAtomicData intの値1つ インスタンスを2つ作成 (AとB)atomicブロックAtoB Aの値+1→Bの値atomicブロックBtoA Bの値+1→Aの値Runner AtoBとBtoAをトランザクショナルに実行 atomicな操作の合成 トランザクションを10回実行Test Runnerを2つのスレッドで実行
    • Sun DSTM2 まとめDSTM2はSTMのフレームワーク様々な実現方法を組み込み可能 Adapter ContentionManager標準のAdapterは3つ obstraction-freedom (楽観的) two phase lock (悲観的) stripe (???)
    • 参考文献Transactional Memory James R.Larus Ravi Rajwar ISBN1-598291-24-6