An Introduction to     Software   Transactional      Memory【見覚え】   小林浩一 (koichik) 【あります】
AgendaトランザクショントランザクショナルメモリソフトウェアトランザクショナルメモリSun DSTM2
トランザクションデータベースでお馴染みの概念重要な性質 ACID特性 並行性
ACID特性Atomicity  不可分性Consistency  完全性Integrity  一貫性Durability  永続性
並行性直列化可能性 (Serializability) 並列実行            直列実行      直列実行                   t1       t2 t1    t2            どちらかと        ...
並行性制御悲観的並行性制御 (blocking) 競合が起きることを前提とする リソースへのアクセスを排他的に行う 通常DBMSレベルで実現楽観的並行性制御 (non blocking) 競合は滅多に起きないことを前提とする   競合が起きた場...
トランザクション            まとめACID特性並行性 直列化可能性並行性制御 悲観的並行性制御 楽観的並行性制御
AgendaトランザクショントランザクショナルメモリソフトウェアトランザクショナルメモリSun DSTM2
トランザクショナルメモリトランザクションの特性をメモリアクセスに応用 ACI特性  揮発性のメモリではdurabilityは不要 並行性  楽観的並行性制御への関心が高い
目的並行性の向上 Multi Core・Many Core時代に対応モジュール性の向上 従来の場合  スレッドセーフなモジュールの組み合わせが  スレッドセーフになるとは限らない トランザクショナルメモリの場合  スレッドセーフなモジュールを組...
トランザクショナルメモリの現在実用段階の手前研究・評価段階様々な実現方法実現位置粒度更新タイミング競合の検出同期アルゴリズム
実現位置ソフトウェア (STM) ソフトウェアで実現ハードウェア (HTM) ハードウェアで実現ハイブリッド (HyTM) ソフトとハードで実現
粒度トランザクショナルなデータの単位ワードレベル (word granularity) 32bit/64bitのワード単位 HTMに多いオブジェクトレベル (object granularity) プログラミング言語のオブジェクト単位 STMに多い
更新タイミング更新を共有メモリに反映するタイミング遅延書込 (deferred update) 更新時はコピーを作成 コミット時にまとめて反映直接書込 (direct update) 更新時にバックアップを取得 ロールバック時に元に戻す
競合の検出オープン時 (detected on open)  トランザクション開始時にチェック    トランザクション開始時に使用するデータを列挙  非現実的バリデーション時 (detected on validation)  データをリード/...
同期アルゴリズム同期 (blocking,悲観的)非同期 (non blocking,楽観的) wait-freedom   全てのスレッドが前進 lock-freedom   少なくとも一つのスレッドが前進 obstraction-freed...
トランザクショナルメモリ          まとめ実現方式は様々 まだまだ研究・評価段階 具体的な説明しにくいのよ当面は柔軟性の高いSTMで模索HTMは時期尚早(?) Sunは2009年(当初は2008年)出荷予定の 次世代プロセッサ(Rock...
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アノテーションを付けるファクトリ アトミックインタフェースの実装ク...
コンポーネント (2)コンテンションマネージャ 競合を調停するスレッド java.lang.Threadのサブクラス トランザクションやコンテキスト情報を管理トランザクション トランザクションの状態を管理
アトミックオブジェクトクラストランザクショナルなオブジェクトのインタフェース getter/setterメソッドを定義する@Atomicpublic interface AtomicData {  void setValue(int value...
ファクトリの生成アトミックオブジェクトとアダプタのクラスを指定AtomicFactory<AtomicData>  atomicFactory =    new AtomicFactory<AtomicData>(      AtomicDat...
アトミックオブジェクトの生成ファクトリから生成 アトミックインタフェースを実装した 動的に生成されたクラスのインスタンスAtomicData atomicData =  atomicFactory.create();
アトミックオブジェクトの操作Callable/Runnableを使用atomicブロックに相当Callable<Integer> readOperation =   new Callable<Integer>() {     public In...
トランザクショナルに実行Threadを使用 java.lang.Threadのサブクラス 使用するContentionManagerクラスを設定Thread.setContentionManagerClass(  BackoffManager....
トランザクションのアボート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 ...
ofree.Adapter              Factoryが                           構造                               Factoryが                生成 ...
ofree.Adapter                         初期状態 <Atomic>               Adapter   writer    TransactionAtomicData               ...
ofree.Adapter                   ①committed                         リード(1)                         なので <Atomic>            ...
<Atomic>             ofree.AdapterAtomicData                           ライトAtomicData$            Locator   writer         ...
ofree.Adapter                       ①active                         リード(2)                           なので <Atomic>         ...
ofree.Adapter                    ①committed                         コミット後                           にする <Atomic>          ...
コンテンションマネージャ競合の調整役競合 参照と更新 更新と更新調整 競合したトランザクションのいずれかを アボートさせるどのトランザクションを選択するか? 様々なポリシーが考えられる
コンテンションマネージャ標準の実装BackoffManagerPriorityManagerAggressiveManagerEruptionManagerGreedyManagerKarmaManagerKindergartenManager
デモAtomicData  intの値1つ  インスタンスを2つ作成 (AとB)atomicブロックAtoB  Aの値+1→Bの値atomicブロックBtoA  Bの値+1→Aの値Runner  AtoBとBtoAをトランザクショナルに実行  ...
Sun DSTM2              まとめDSTM2はSTMのフレームワーク様々な実現方法を組み込み可能 Adapter ContentionManager標準のAdapterは3つ obstraction-freedom (楽観的)...
参考文献Transactional Memory James R.Larus Ravi Rajwar ISBN1-598291-24-6
Upcoming SlideShare
Loading in …5
×

2008/02 STMの紹介

2,070 views

Published on

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

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,070
On SlideShare
0
From Embeds
0
Number of Embeds
25
Actions
Shares
0
Downloads
16
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

2008/02 STMの紹介

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

×