Upload
koichik
View
1.710
Download
5
Embed Size (px)
DESCRIPTION
2008年2月のJavaEE勉強会発表資料です.
Citation preview
An Introduction toAn Introduction to
Software Software TransactionalTransactional
MemoryMemory【【見覚え見覚え】】
小林浩一小林浩一 (koichik) (koichik) 【【ありますあります】】
AgendaAgenda
トランザクショントランザクション
トランザクショナルメモリトランザクショナルメモリ
ソフトウェアトランザクショナルメモリソフトウェアトランザクショナルメモリ
Sun DSTM2Sun DSTM2
トランザクショントランザクション
データベースでお馴染みの概念データベースでお馴染みの概念
重要な性質重要な性質
ACIDACID特性特性
並行性並行性
ACIDACID特性特性
AtomicityAtomicity不可分性不可分性
ConsistencyConsistency完全性完全性
IntegrityIntegrity一貫性一貫性
DurabilityDurability永続性永続性
並行性並行性
直列化可能性直列化可能性 (Serializability)(Serializability)
t1t1 t2t2t1t1
t2t2
t2t2
t1t1どちらかとどちらかと
同じ結果同じ結果
並列実行並列実行 直列実行直列実行 直列実行直列実行
並行性制御並行性制御
悲観的並行性制御悲観的並行性制御 (blocking)(blocking)競合が起きることを前提とする競合が起きることを前提とする
リソースへのアクセスを排他的に行うリソースへのアクセスを排他的に行う
通常通常DBMSDBMSレベルで実現レベルで実現
楽観的並行性制御楽観的並行性制御 (non blocking)(non blocking)競合は滅多に起きないことを前提とする競合は滅多に起きないことを前提とする
競合が起きた場合はいずれかのトランザクションを競合が起きた場合はいずれかのトランザクションをロールバックしてリトライするロールバックしてリトライする
リソースへのアクセスは並行に行うリソースへのアクセスは並行に行う
通常アプリケーションレベルで実現通常アプリケーションレベルで実現
トランザクショントランザクション まとめまとめ
ACIDACID特性特性
並行性並行性
直列化可能性直列化可能性
並行性制御並行性制御
悲観的並行性制御悲観的並行性制御
楽観的並行性制御楽観的並行性制御
AgendaAgenda
トランザクショントランザクション
トランザクショナルメモリトランザクショナルメモリ
ソフトウェアトランザクショナルメモリソフトウェアトランザクショナルメモリ
Sun DSTM2Sun DSTM2
トランザクショナルメモリトランザクショナルメモリ
トランザクションの特性をメモリアクセスに応用トランザクションの特性をメモリアクセスに応用
ACIACI特性特性
揮発性のメモリでは揮発性のメモリではdurabilitydurabilityは不要は不要
並行性並行性
楽観的並行性制御への関心が高い楽観的並行性制御への関心が高い
目的目的
並行性の向上並行性の向上Multi CoreMulti Core・・Many CoreMany Core時代に対応時代に対応
モジュール性の向上モジュール性の向上従来の場合従来の場合
スレッドセーフなモジュールの組み合わせがスレッドセーフなモジュールの組み合わせがスレッドセーフになるとは限らないスレッドセーフになるとは限らない
トランザクショナルメモリの場合トランザクショナルメモリの場合スレッドセーフなモジュールを組み合わせてもスレッドセーフなモジュールを組み合わせてもスレッドセーフスレッドセーフ
操作は合成操作は合成 (compose) (compose) 可能可能
トランザクショナルメモリの現在トランザクショナルメモリの現在
実用段階の手前実用段階の手前
研究・評価段階研究・評価段階
様々な実現方法様々な実現方法
実現位置実現位置
粒度粒度
更新タイミング更新タイミング
競合の検出競合の検出
同期アルゴリズム同期アルゴリズム
実現位置実現位置
ソフトウェアソフトウェア (STM)(STM)ソフトウェアで実現ソフトウェアで実現
ハードウェアハードウェア (HTM)(HTM)ハードウェアで実現ハードウェアで実現
ハイブリッドハイブリッド (HyTM)(HyTM)ソフトとハードで実現ソフトとハードで実現
粒度粒度
トランザクショナルなデータの単位トランザクショナルなデータの単位
ワードレベルワードレベル (word granularity)(word granularity)32bit/64bit32bit/64bitのワード単位のワード単位
HTMHTMに多いに多い
オブジェクトレベルオブジェクトレベル (object granularity)(object granularity)プログラミング言語のオブジェクト単位プログラミング言語のオブジェクト単位
STMSTMに多いに多い
更新タイミング更新タイミング
更新を共有メモリに反映するタイミング更新を共有メモリに反映するタイミング
遅延書込遅延書込 (deferred update)(deferred update)更新時はコピーを作成更新時はコピーを作成
コミット時にまとめて反映コミット時にまとめて反映
直接書込直接書込 (direct update)(direct update)更新時にバックアップを取得更新時にバックアップを取得
ロールバック時に元に戻すロールバック時に元に戻す
競合の検出競合の検出
オープン時オープン時 (detected on open)(detected on open)トランザクション開始時にチェックトランザクション開始時にチェック
トランザクション開始時に使用するデータを列挙トランザクション開始時に使用するデータを列挙
非現実的非現実的
バリデーション時バリデーション時 (detected on validation)(detected on validation)データをリード/ライトする際にチェックデータをリード/ライトする際にチェック
オーバーヘッド大オーバーヘッド大
コミット時コミット時 (detected on commit)(detected on commit)コミットの際にチェックコミットの際にチェック
無駄な処理を行う可能性大無駄な処理を行う可能性大
同期アルゴリズム同期アルゴリズム
同期同期 (blocking(blocking,悲観的,悲観的))非同期非同期 (non blocking(non blocking,楽観的,楽観的))
waitwait--freedomfreedom全てのスレッドが前進全てのスレッドが前進
locklock--freedomfreedom少なくとも一つのスレッドが前進少なくとも一つのスレッドが前進
obstractionobstraction--freedomfreedom他のスレッドと衝突しなければ前進他のスレッドと衝突しなければ前進
衝突は衝突はContention ManagerContention Managerが管理が管理自由度が高くて現実的自由度が高くて現実的
トランザクショナルメモリトランザクショナルメモリ
まとめまとめ
実現方式は様々実現方式は様々
まだまだ研究・評価段階まだまだ研究・評価段階
具体的な説明しにくいのよ具体的な説明しにくいのよ
当面は柔軟性の高い当面は柔軟性の高いSTMSTMで模索で模索
HTMHTMは時期尚早は時期尚早((??))SunSunはは20092009年年((当初は当初は20082008年年))出荷予定の出荷予定の次世代プロセッサ次世代プロセッサ(Rock)(Rock)ででHTMHTMをサポートをサポート
IntelIntelははHardware Accelerated STMHardware Accelerated STMを研究中を研究中
AgendaAgenda
トランザクショントランザクション
トランザクショナルメモリトランザクショナルメモリ
ソフトウェアトランザクショナルメモリソフトウェアトランザクショナルメモリ
Sun DSTM2Sun DSTM2
ソフトウェアトランザクショナルメモリソフトウェアトランザクショナルメモリ
ソフトウェアによるトランザクショナルメモリソフトウェアによるトランザクショナルメモリ
ハードウェア的には通常のメモリアクセスハードウェア的には通常のメモリアクセス
こちらも研究・評価段階こちらも研究・評価段階
実現方法実現方法
言語レベル言語レベル
プログラミング言語及び処理系でプログラミング言語及び処理系でSTMSTMをサポートをサポート
ライブラリレベルライブラリレベル
ライブラリレベルでライブラリレベルでSTMSTMをサポートをサポート
言語レベル言語レベル
主要なキーワード主要なキーワード
atomicatomicretryretryorElseorElse
atomicatomic
トランザクション境界を定義トランザクション境界を定義
atomic
{ if (x == null) {
x = new Foo(); }
}
retry (1)retry (1)
atomic { while (x == null) {
sleep(); }
x.bar(); }
無限ループ無限ループ
問題問題
retry (2)retry (2)
トランザクションをロールバックして再試行トランザクションをロールバックして再試行
atomic { if (x == null) {
retry; }
x.bar(); }
or elseor else
ロールバックした場合の処理ロールバックした場合の処理
retryretryした場合も含むした場合も含む
atomic { return getElement();
} orElse
{ return null;
}
ソフトウェアトランザクショナルメモリソフトウェアトランザクショナルメモリ
まとめまとめ
実現方式は様々実現方式は様々
まだまだ研究・評価段階まだまだ研究・評価段階
具体的な説明しにくいのよ具体的な説明しにくいのよ
キーワードキーワード
atomicatomicretryretryorElseorElse
当面は柔軟性の高いライブラリで模索か?当面は柔軟性の高いライブラリで模索か?
AgendaAgenda
トランザクショントランザクション
トランザクショナルメモリトランザクショナルメモリ
ソフトウェアトランザクショナルメモリソフトウェアトランザクショナルメモリ
Sun DSTM2Sun DSTM2
Sun DSTM2Sun DSTM2Dynamic Software Transactional Dynamic Software Transactional Memory 2.0Memory 2.0http://www.sun.com/download/products.xml?id=453fb28ehttp://www.sun.com/download/products.xml?id=453fb28e
STMSTMのためののためのフレームワークフレームワークSTMSTM実現のためのメカニズムを提供実現のためのメカニズムを提供
様々な実装を選択可能様々な実装を選択可能
コンポーネントコンポーネント (1)(1)アトミックオブジェクトアトミックオブジェクト
トランザクショナルなオブジェクトトランザクショナルなオブジェクト
getter/settergetter/setterを持ったインタフェースを持ったインタフェース実装はファクトリが動的に作成実装はファクトリが動的に作成
@Atomic@Atomicアノテーションを付けるアノテーションを付ける
ファクトリファクトリアトミックインタフェースの実装クラスを動的に生成するアトミックインタフェースの実装クラスを動的に生成する
Apache BCELApache BCELを使用を使用
アダプタアダプタアトミックオブジェクトの振る舞いを提供アトミックオブジェクトの振る舞いを提供
STMSTMを実現するキモを実現するキモ
コンポーネントコンポーネント (2)(2)
コンテンションマネージャコンテンションマネージャ
競合を調停する競合を調停する
スレッドスレッド
java.lang.Threadjava.lang.Threadのサブクラスのサブクラス
トランザクションやコンテキスト情報を管理トランザクションやコンテキスト情報を管理
トランザクショントランザクション
トランザクションの状態を管理トランザクションの状態を管理
アトミックオブジェクトクラスアトミックオブジェクトクラス
トランザクショナルなオブジェクトのトランザクショナルなオブジェクトのインタフェースインタフェース
getter/settergetter/setterメソッドを定義するメソッドを定義する
@Atomic public interface AtomicData {
void setValue(int value); int getValue();
}
ファクトリの生成ファクトリの生成
アトミックオブジェクトとアダプタのアトミックオブジェクトとアダプタのクラスを指定クラスを指定
AtomicFactory<AtomicData> atomicFactory =
new AtomicFactory<AtomicData>( AtomicData.class,
Adapter.class);
アトミックオブジェクトの生成
ファクトリから生成
アトミックインタフェースを実装した動的に生成されたクラスのインスタンス
AtomicData atomicData = atomicFactory.create();
アトミックオブジェクトの操作アトミックオブジェクトの操作
CallableCallable//RunnableRunnableを使用を使用
atomicatomicブロックに相当ブロックに相当
Callable<Integer> readOperation = new Callable<Integer>() {
public Integer call() { return atomicData.getValue();
} };
トランザクショナルに実行トランザクショナルに実行
ThreadThreadを使用を使用
java.lang.Threadjava.lang.Threadのサブクラスのサブクラス
使用する使用するContentionManagerContentionManagerクラスを設定クラスを設定
Thread.setContentionManagerClass( BackoffManager.class);
int value = Thread.doIt(readOperation);
トランザクションのアボートトランザクションのアボート
retryretry相当相当
Thread.getTransaction().abort();
アボート時の操作アボート時の操作
RunnableRunnableををThreadThreadに登録に登録
orElseorElseブロック相当ブロック相当
Thread.onAbort(new Runnable() { public void run() {
... }
});
STMSTMのフレームワークのフレームワーク
アトミックオブジェクトの振る舞いをアトミックオブジェクトの振る舞いをカスタマイズ可能カスタマイズ可能
アダプタアダプタ
コンテンションマネージャコンテンションマネージャ
アダプタアダプタ
アトミックオブジェクトを実現するクラスアトミックオブジェクトを実現するクラス
DSTM2DSTM2標準のアダプタ標準のアダプタdstm2.factory.ofree.Adapterdstm2.factory.ofree.Adapter
同期:同期:non blocking (obstractionnon blocking (obstraction--freedom)freedom)粒度:粒度:object levelobject level更新:更新:defered updatedefered update競合検出:競合検出:detected on validationdetected on validation
dstm2.factory.twophase.Adapterdstm2.factory.twophase.Adapter同期:同期:blocking (synchronize)blocking (synchronize)
dstm2.factory.shadow.Adapterdstm2.factory.shadow.Adapter??????
ofree.Adapterofree.Adapter
構造構造
<Atomic> AtomicData
AtomicData$ AtomicData$
value
AtomicData$
value
Transaction
state
Locator
new Version
old Version
writer
start
FactoryFactoryがが 生成生成
AtomicAtomic ReferenceReference
Adapter
FactoryFactoryがが 生成生成
ofree.Adapterofree.Adapter
初期状態初期状態
<Atomic> AtomicData
AtomicData$ AtomicData$
value
Transaction
committed
Adapter writer
start
new Version
old Version null
Adapter
ofree.Adapterofree.Adapter リードリード(1)(1)
<Atomic> AtomicData
AtomicData$ AtomicData$
value
Transaction
committed
Adapter writer
start
new Version
old Version null
①①committedcommitted なのでなので
②②newVersionnewVersionを読むを読む
Adapter
ofree.Adapterofree.Adapter
ライトライト<Atomic>
AtomicData
AtomicData$
value
committedLocator writer
start
new Version
old Version null
value
activeLocator writernew
Versionold
Version
②②新しい新しいAdapterAdapterをを 作成して繋ぎ替え作成して繋ぎ替え
①前の値を①前の値を
コピーしてコピーして
新しい値を新しい値を
書き込む書き込む
Adapter
ofree.Adapterofree.Adapter
リードリード(2)(2)<Atomic>
AtomicData
AtomicData$ AtomicData$
value
Transaction
active
Locator writer
start
new Version
old Version
①①activeactive なのでなので
②②oldVersionoldVersionを読むを読む
AtomicData$
value
Adapter
ofree.Adapterofree.Adapter
コミット後コミット後
<Atomic> AtomicData
AtomicData$ AtomicData$
value
Transaction
committed
Locator writer
start
new Version
old Version
①①committedcommitted にするにする
AtomicData$
value
Adapter
コンテンションマネージャコンテンションマネージャ
競合の調整役競合の調整役
競合競合
参照と更新参照と更新
更新と更新更新と更新
調整調整
競合したトランザクションのいずれかを競合したトランザクションのいずれかをアボートさせるアボートさせる
どのトランザクションを選択するか?どのトランザクションを選択するか?
様々なポリシーが考えられる様々なポリシーが考えられる
コンテンションマネージャコンテンションマネージャ
標準の実装標準の実装
BackoffManagerBackoffManagerPriorityManagerPriorityManagerAggressiveManager AggressiveManager EruptionManagerEruptionManagerGreedyManagerGreedyManagerKarmaManagerKarmaManagerKindergartenManagerKindergartenManager
デモデモ
AtomicDataAtomicDataintintの値の値11つつインスタンスをインスタンスを22つ作成つ作成 (A(AととB)B)
atomicatomicブロックブロックAAtoBtoBAAの値の値+1+1→→BBの値の値
atomicatomicブロックブロックBtoABtoABBの値の値+1+1→→AAの値の値
RunnerRunnerAtoBAtoBととBtoABtoAをトランザクショナルに実行をトランザクショナルに実行
atomicatomicな操作の合成な操作の合成
トランザクションをトランザクションを1010回実行回実行
TestTestRunnerRunnerをを22つのスレッドで実行つのスレッドで実行
Sun DSTM2Sun DSTM2
まとめまとめ
DSTM2DSTM2ははSTMSTMのフレームワークのフレームワーク
様々な実現方法を組み込み可能様々な実現方法を組み込み可能
AdapterAdapterContentionManagerContentionManager
標準の標準のAdapterAdapterはは33つつobstractionobstraction--freedom (freedom (楽観的楽観的))two phase lock two phase lock ((悲観的悲観的))stripe (stripe (??????))
参考文献参考文献
Transactional MemoryTransactional MemoryJames R.LarusJames R.LarusRavi RajwarRavi RajwarISBN1ISBN1--598291598291--2424--66