50
An Introduction to An Introduction to Software Software Transactional Transactional Memory Memory 見覚え 見覚え 小林浩一 小林浩一 (koichik) (koichik) あります あります

2008/02 STMの紹介

  • Upload
    koichik

  • View
    1.710

  • Download
    5

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: 2008/02 STMの紹介

An Introduction toAn Introduction to

Software Software TransactionalTransactional

MemoryMemory【【見覚え見覚え】】

小林浩一小林浩一 (koichik) (koichik) 【【ありますあります】】

Page 2: 2008/02 STMの紹介

AgendaAgenda

トランザクショントランザクション

トランザクショナルメモリトランザクショナルメモリ

ソフトウェアトランザクショナルメモリソフトウェアトランザクショナルメモリ

Sun DSTM2Sun DSTM2

Page 3: 2008/02 STMの紹介

トランザクショントランザクション

データベースでお馴染みの概念データベースでお馴染みの概念

重要な性質重要な性質

ACIDACID特性特性

並行性並行性

Page 4: 2008/02 STMの紹介

ACIDACID特性特性

AtomicityAtomicity不可分性不可分性

ConsistencyConsistency完全性完全性

IntegrityIntegrity一貫性一貫性

DurabilityDurability永続性永続性

Page 5: 2008/02 STMの紹介

並行性並行性

直列化可能性直列化可能性 (Serializability)(Serializability)

t1t1 t2t2t1t1

t2t2

t2t2

t1t1どちらかとどちらかと

同じ結果同じ結果

並列実行並列実行 直列実行直列実行 直列実行直列実行

Page 6: 2008/02 STMの紹介

並行性制御並行性制御

悲観的並行性制御悲観的並行性制御 (blocking)(blocking)競合が起きることを前提とする競合が起きることを前提とする

リソースへのアクセスを排他的に行うリソースへのアクセスを排他的に行う

通常通常DBMSDBMSレベルで実現レベルで実現

楽観的並行性制御楽観的並行性制御 (non blocking)(non blocking)競合は滅多に起きないことを前提とする競合は滅多に起きないことを前提とする

競合が起きた場合はいずれかのトランザクションを競合が起きた場合はいずれかのトランザクションをロールバックしてリトライするロールバックしてリトライする

リソースへのアクセスは並行に行うリソースへのアクセスは並行に行う

通常アプリケーションレベルで実現通常アプリケーションレベルで実現

Page 7: 2008/02 STMの紹介

トランザクショントランザクション まとめまとめ

ACIDACID特性特性

並行性並行性

直列化可能性直列化可能性

並行性制御並行性制御

悲観的並行性制御悲観的並行性制御

楽観的並行性制御楽観的並行性制御

Page 8: 2008/02 STMの紹介

AgendaAgenda

トランザクショントランザクション

トランザクショナルメモリトランザクショナルメモリ

ソフトウェアトランザクショナルメモリソフトウェアトランザクショナルメモリ

Sun DSTM2Sun DSTM2

Page 9: 2008/02 STMの紹介

トランザクショナルメモリトランザクショナルメモリ

トランザクションの特性をメモリアクセスに応用トランザクションの特性をメモリアクセスに応用

ACIACI特性特性

揮発性のメモリでは揮発性のメモリではdurabilitydurabilityは不要は不要

並行性並行性

楽観的並行性制御への関心が高い楽観的並行性制御への関心が高い

Page 10: 2008/02 STMの紹介

目的目的

並行性の向上並行性の向上Multi CoreMulti Core・・Many CoreMany Core時代に対応時代に対応

モジュール性の向上モジュール性の向上従来の場合従来の場合

スレッドセーフなモジュールの組み合わせがスレッドセーフなモジュールの組み合わせがスレッドセーフになるとは限らないスレッドセーフになるとは限らない

トランザクショナルメモリの場合トランザクショナルメモリの場合スレッドセーフなモジュールを組み合わせてもスレッドセーフなモジュールを組み合わせてもスレッドセーフスレッドセーフ

操作は合成操作は合成 (compose) (compose) 可能可能

Page 11: 2008/02 STMの紹介

トランザクショナルメモリの現在トランザクショナルメモリの現在

実用段階の手前実用段階の手前

研究・評価段階研究・評価段階

様々な実現方法様々な実現方法

実現位置実現位置

粒度粒度

更新タイミング更新タイミング

競合の検出競合の検出

同期アルゴリズム同期アルゴリズム

Page 12: 2008/02 STMの紹介

実現位置実現位置

ソフトウェアソフトウェア (STM)(STM)ソフトウェアで実現ソフトウェアで実現

ハードウェアハードウェア (HTM)(HTM)ハードウェアで実現ハードウェアで実現

ハイブリッドハイブリッド (HyTM)(HyTM)ソフトとハードで実現ソフトとハードで実現

Page 13: 2008/02 STMの紹介

粒度粒度

トランザクショナルなデータの単位トランザクショナルなデータの単位

ワードレベルワードレベル (word granularity)(word granularity)32bit/64bit32bit/64bitのワード単位のワード単位

HTMHTMに多いに多い

オブジェクトレベルオブジェクトレベル (object granularity)(object granularity)プログラミング言語のオブジェクト単位プログラミング言語のオブジェクト単位

STMSTMに多いに多い

Page 14: 2008/02 STMの紹介

更新タイミング更新タイミング

更新を共有メモリに反映するタイミング更新を共有メモリに反映するタイミング

遅延書込遅延書込 (deferred update)(deferred update)更新時はコピーを作成更新時はコピーを作成

コミット時にまとめて反映コミット時にまとめて反映

直接書込直接書込 (direct update)(direct update)更新時にバックアップを取得更新時にバックアップを取得

ロールバック時に元に戻すロールバック時に元に戻す

Page 15: 2008/02 STMの紹介

競合の検出競合の検出

オープン時オープン時 (detected on open)(detected on open)トランザクション開始時にチェックトランザクション開始時にチェック

トランザクション開始時に使用するデータを列挙トランザクション開始時に使用するデータを列挙

非現実的非現実的

バリデーション時バリデーション時 (detected on validation)(detected on validation)データをリード/ライトする際にチェックデータをリード/ライトする際にチェック

オーバーヘッド大オーバーヘッド大

コミット時コミット時 (detected on commit)(detected on commit)コミットの際にチェックコミットの際にチェック

無駄な処理を行う可能性大無駄な処理を行う可能性大

Page 16: 2008/02 STMの紹介

同期アルゴリズム同期アルゴリズム

同期同期 (blocking(blocking,悲観的,悲観的))非同期非同期 (non blocking(non blocking,楽観的,楽観的))

waitwait--freedomfreedom全てのスレッドが前進全てのスレッドが前進

locklock--freedomfreedom少なくとも一つのスレッドが前進少なくとも一つのスレッドが前進

obstractionobstraction--freedomfreedom他のスレッドと衝突しなければ前進他のスレッドと衝突しなければ前進

衝突は衝突はContention ManagerContention Managerが管理が管理自由度が高くて現実的自由度が高くて現実的

Page 17: 2008/02 STMの紹介

トランザクショナルメモリトランザクショナルメモリ

まとめまとめ

実現方式は様々実現方式は様々

まだまだ研究・評価段階まだまだ研究・評価段階

具体的な説明しにくいのよ具体的な説明しにくいのよ

当面は柔軟性の高い当面は柔軟性の高いSTMSTMで模索で模索

HTMHTMは時期尚早は時期尚早((??))SunSunはは20092009年年((当初は当初は20082008年年))出荷予定の出荷予定の次世代プロセッサ次世代プロセッサ(Rock)(Rock)ででHTMHTMをサポートをサポート

IntelIntelははHardware Accelerated STMHardware Accelerated STMを研究中を研究中

Page 18: 2008/02 STMの紹介

AgendaAgenda

トランザクショントランザクション

トランザクショナルメモリトランザクショナルメモリ

ソフトウェアトランザクショナルメモリソフトウェアトランザクショナルメモリ

Sun DSTM2Sun DSTM2

Page 19: 2008/02 STMの紹介

ソフトウェアトランザクショナルメモリソフトウェアトランザクショナルメモリ

ソフトウェアによるトランザクショナルメモリソフトウェアによるトランザクショナルメモリ

ハードウェア的には通常のメモリアクセスハードウェア的には通常のメモリアクセス

こちらも研究・評価段階こちらも研究・評価段階

Page 20: 2008/02 STMの紹介

実現方法実現方法

言語レベル言語レベル

プログラミング言語及び処理系でプログラミング言語及び処理系でSTMSTMをサポートをサポート

ライブラリレベルライブラリレベル

ライブラリレベルでライブラリレベルでSTMSTMをサポートをサポート

Page 21: 2008/02 STMの紹介

言語レベル言語レベル

主要なキーワード主要なキーワード

atomicatomicretryretryorElseorElse

Page 22: 2008/02 STMの紹介

atomicatomic

トランザクション境界を定義トランザクション境界を定義

atomic

{ if (x == null) {

x = new Foo(); }

}

Page 23: 2008/02 STMの紹介

retry (1)retry (1)

atomic { while (x == null) {

sleep(); }

x.bar(); }

無限ループ無限ループ

問題問題

Page 24: 2008/02 STMの紹介

retry (2)retry (2)

トランザクションをロールバックして再試行トランザクションをロールバックして再試行

atomic { if (x == null) {

retry; }

x.bar(); }

Page 25: 2008/02 STMの紹介

or elseor else

ロールバックした場合の処理ロールバックした場合の処理

retryretryした場合も含むした場合も含む

atomic { return getElement();

} orElse

{ return null;

}

Page 26: 2008/02 STMの紹介

ソフトウェアトランザクショナルメモリソフトウェアトランザクショナルメモリ

まとめまとめ

実現方式は様々実現方式は様々

まだまだ研究・評価段階まだまだ研究・評価段階

具体的な説明しにくいのよ具体的な説明しにくいのよ

キーワードキーワード

atomicatomicretryretryorElseorElse

当面は柔軟性の高いライブラリで模索か?当面は柔軟性の高いライブラリで模索か?

Page 27: 2008/02 STMの紹介

AgendaAgenda

トランザクショントランザクション

トランザクショナルメモリトランザクショナルメモリ

ソフトウェアトランザクショナルメモリソフトウェアトランザクショナルメモリ

Sun DSTM2Sun DSTM2

Page 28: 2008/02 STMの紹介

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実現のためのメカニズムを提供実現のためのメカニズムを提供

様々な実装を選択可能様々な実装を選択可能

Page 29: 2008/02 STMの紹介

コンポーネントコンポーネント (1)(1)アトミックオブジェクトアトミックオブジェクト

トランザクショナルなオブジェクトトランザクショナルなオブジェクト

getter/settergetter/setterを持ったインタフェースを持ったインタフェース実装はファクトリが動的に作成実装はファクトリが動的に作成

@Atomic@Atomicアノテーションを付けるアノテーションを付ける

ファクトリファクトリアトミックインタフェースの実装クラスを動的に生成するアトミックインタフェースの実装クラスを動的に生成する

Apache BCELApache BCELを使用を使用

アダプタアダプタアトミックオブジェクトの振る舞いを提供アトミックオブジェクトの振る舞いを提供

STMSTMを実現するキモを実現するキモ

Page 30: 2008/02 STMの紹介

コンポーネントコンポーネント (2)(2)

コンテンションマネージャコンテンションマネージャ

競合を調停する競合を調停する

スレッドスレッド

java.lang.Threadjava.lang.Threadのサブクラスのサブクラス

トランザクションやコンテキスト情報を管理トランザクションやコンテキスト情報を管理

トランザクショントランザクション

トランザクションの状態を管理トランザクションの状態を管理

Page 31: 2008/02 STMの紹介

アトミックオブジェクトクラスアトミックオブジェクトクラス

トランザクショナルなオブジェクトのトランザクショナルなオブジェクトのインタフェースインタフェース

getter/settergetter/setterメソッドを定義するメソッドを定義する

@Atomic public interface AtomicData {

void setValue(int value); int getValue();

}

Page 32: 2008/02 STMの紹介

ファクトリの生成ファクトリの生成

アトミックオブジェクトとアダプタのアトミックオブジェクトとアダプタのクラスを指定クラスを指定

AtomicFactory<AtomicData> atomicFactory =

new AtomicFactory<AtomicData>( AtomicData.class,

Adapter.class);

Page 33: 2008/02 STMの紹介

アトミックオブジェクトの生成

ファクトリから生成

アトミックインタフェースを実装した動的に生成されたクラスのインスタンス

AtomicData atomicData = atomicFactory.create();

Page 34: 2008/02 STMの紹介

アトミックオブジェクトの操作アトミックオブジェクトの操作

CallableCallable//RunnableRunnableを使用を使用

atomicatomicブロックに相当ブロックに相当

Callable<Integer> readOperation = new Callable<Integer>() {

public Integer call() { return atomicData.getValue();

} };

Page 35: 2008/02 STMの紹介

トランザクショナルに実行トランザクショナルに実行

ThreadThreadを使用を使用

java.lang.Threadjava.lang.Threadのサブクラスのサブクラス

使用する使用するContentionManagerContentionManagerクラスを設定クラスを設定

Thread.setContentionManagerClass( BackoffManager.class);

int value = Thread.doIt(readOperation);

Page 36: 2008/02 STMの紹介

トランザクションのアボートトランザクションのアボート

retryretry相当相当

Thread.getTransaction().abort();

Page 37: 2008/02 STMの紹介

アボート時の操作アボート時の操作

RunnableRunnableををThreadThreadに登録に登録

orElseorElseブロック相当ブロック相当

Thread.onAbort(new Runnable() { public void run() {

... }

});

Page 38: 2008/02 STMの紹介

STMSTMのフレームワークのフレームワーク

アトミックオブジェクトの振る舞いをアトミックオブジェクトの振る舞いをカスタマイズ可能カスタマイズ可能

アダプタアダプタ

コンテンションマネージャコンテンションマネージャ

Page 39: 2008/02 STMの紹介

アダプタアダプタ

アトミックオブジェクトを実現するクラスアトミックオブジェクトを実現するクラス

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??????

Page 40: 2008/02 STMの紹介

ofree.Adapterofree.Adapter

構造構造

<Atomic> AtomicData

AtomicData$ AtomicData$

value

AtomicData$

value

Transaction

state

Locator

new Version

old Version

writer

start

FactoryFactoryがが 生成生成

AtomicAtomic ReferenceReference

Adapter

FactoryFactoryがが 生成生成

Page 41: 2008/02 STMの紹介

ofree.Adapterofree.Adapter

初期状態初期状態

<Atomic> AtomicData

AtomicData$ AtomicData$

value

Transaction

committed

Adapter writer

start

new Version

old Version null

Adapter

Page 42: 2008/02 STMの紹介

ofree.Adapterofree.Adapter リードリード(1)(1)

<Atomic> AtomicData

AtomicData$ AtomicData$

value

Transaction

committed

Adapter writer

start

new Version

old Version null

①①committedcommitted なのでなので

②②newVersionnewVersionを読むを読む

Adapter

Page 43: 2008/02 STMの紹介

ofree.Adapterofree.Adapter

ライトライト<Atomic>

AtomicData

AtomicData$

value

committedLocator writer

start

new Version

old Version null

value

activeLocator writernew

Versionold

Version

②②新しい新しいAdapterAdapterをを 作成して繋ぎ替え作成して繋ぎ替え

①前の値を①前の値を

コピーしてコピーして

新しい値を新しい値を

書き込む書き込む

Adapter

Page 44: 2008/02 STMの紹介

ofree.Adapterofree.Adapter

リードリード(2)(2)<Atomic>

AtomicData

AtomicData$ AtomicData$

value

Transaction

active

Locator writer

start

new Version

old Version

①①activeactive なのでなので

②②oldVersionoldVersionを読むを読む

AtomicData$

value

Adapter

Page 45: 2008/02 STMの紹介

ofree.Adapterofree.Adapter

コミット後コミット後

<Atomic> AtomicData

AtomicData$ AtomicData$

value

Transaction

committed

Locator writer

start

new Version

old Version

①①committedcommitted にするにする

AtomicData$

value

Adapter

Page 46: 2008/02 STMの紹介

コンテンションマネージャコンテンションマネージャ

競合の調整役競合の調整役

競合競合

参照と更新参照と更新

更新と更新更新と更新

調整調整

競合したトランザクションのいずれかを競合したトランザクションのいずれかをアボートさせるアボートさせる

どのトランザクションを選択するか?どのトランザクションを選択するか?

様々なポリシーが考えられる様々なポリシーが考えられる

Page 47: 2008/02 STMの紹介

コンテンションマネージャコンテンションマネージャ

標準の実装標準の実装

BackoffManagerBackoffManagerPriorityManagerPriorityManagerAggressiveManager AggressiveManager EruptionManagerEruptionManagerGreedyManagerGreedyManagerKarmaManagerKarmaManagerKindergartenManagerKindergartenManager

Page 48: 2008/02 STMの紹介

デモデモ

AtomicDataAtomicDataintintの値の値11つつインスタンスをインスタンスを22つ作成つ作成 (A(AととB)B)

atomicatomicブロックブロックAAtoBtoBAAの値の値+1+1→→BBの値の値

atomicatomicブロックブロックBtoABtoABBの値の値+1+1→→AAの値の値

RunnerRunnerAtoBAtoBととBtoABtoAをトランザクショナルに実行をトランザクショナルに実行

atomicatomicな操作の合成な操作の合成

トランザクションをトランザクションを1010回実行回実行

TestTestRunnerRunnerをを22つのスレッドで実行つのスレッドで実行

Page 49: 2008/02 STMの紹介

Sun DSTM2Sun DSTM2

まとめまとめ

DSTM2DSTM2ははSTMSTMのフレームワークのフレームワーク

様々な実現方法を組み込み可能様々な実現方法を組み込み可能

AdapterAdapterContentionManagerContentionManager

標準の標準のAdapterAdapterはは33つつobstractionobstraction--freedom (freedom (楽観的楽観的))two phase lock two phase lock ((悲観的悲観的))stripe (stripe (??????))

Page 50: 2008/02 STMの紹介

参考文献参考文献

Transactional MemoryTransactional MemoryJames R.LarusJames R.LarusRavi RajwarRavi RajwarISBN1ISBN1--598291598291--2424--66