43
Intel TSX について サイボウズ・ラボ 20120616() 星野 喬(@starpoz) x86/x64最適化勉強会4

Intel TSX について x86opti

Embed Size (px)

DESCRIPTION

Intel TSX rough survey.

Citation preview

Page 1: Intel TSX について x86opti

Intel  TSX  について

サイボウズ・ラボ  2012-­‐06-­‐16(土)  星野 喬(@starpoz)  

x86/x64最適化勉強会4

Page 2: Intel TSX について x86opti

自己紹介

•  星野 喬(@starpoz)  – サイボウズ・ラボ  

•  昔やってた研究  – データベース,ストレージ,分散アルゴリズム  

•  今の仕事  – Linux  kernel  の  IO  device  driver  書いてます  

•  アセンブラ書いたことありません(ぇ  – CPU  の知識は多少ありますが...  

2

Page 3: Intel TSX について x86opti

発表概要

•  トランザクショナルメモリ  •  Intel  TSX  – HLE  – RTM  – 制約その他  

•  今後の展望  •  まとめと参考文献  

3

Page 4: Intel TSX について x86opti

会場の皆さんに質問

•  並列プログラミングしたことありますか?  – STM/HTM  を使ったことはありますか?  – ロックを使ったことはありますか?  – DB  トランザクション使ったことはありますか?  

•  デッドロックさせたことありますか?

4

Page 5: Intel TSX について x86opti

発表概要

•  トランザクショナルメモリ  •  Intel  TSX  – HLE  – RTM  – 制約その他  

•  今後の展望  •  まとめと参考文献  

5

Page 6: Intel TSX について x86opti

ロックによる並列プログラミングの問題

•  Deadlock  

•  合成不可能

Thread1:      lock  x      lock  y      write  x      write  y      unlock  y      unlock  x

Thread2:      lock  x      lock  y      read  x      read  y      unlock  y      unlock  x

Thread2’:      lock  y      lock  x      read  x      read  y      unlock  x      unlock  y

Function1:      lock  x      read  x      unlock  x

Function2:      lock  x      write  x      unlock  x

Function3:      lock  x      read  x      write  x      unlock  x

Function3’:      Function1      Function2

6

Page 7: Intel TSX について x86opti

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

•  トランザクションを使ってメモリアクセス  – Lock/unlock  をプログラマが書く必要なし  – Deadlock  が起きない(方式による)  – 合成可能  

•  実現方式  – ハードウェア:  HTM  – ソフトウェア:  STM  – たくさんのバリエーションが提案されている  

7

Page 8: Intel TSX について x86opti

トランザクション

•  分けることのできない一連の情報処理単位  

•  ACID  特性  – Atomicity:  トランザクションの実行は全か無のみ  

– Consistency:  常に一貫性のある状態を保つ  

–  IsolaQon:  commit  まで変更は他に見えない  

– Durability:  commit  時に変更は永続的に記録される  

8

Page 9: Intel TSX について x86opti

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

•  1986    TM  のアイデア論文  •  1993    Hardware  TM  という名前で提案  •  1995    SoTware  TM  の提案  •  2005    Haskell  での  STM  実装  •  2007    Clojure  STM  言語レベルのサポート  •  2010    MS  .NET  で  STM  を使えないと判断  •  2013    Intel  TSX  が Haswell  に搭載予定  

Thanks  to  @nishio 9

Page 10: Intel TSX について x86opti

トランザクショナルメモリのインターフェース

•  Atomic  ブロック  – トランザクションにしたいコードを囲むだけ  

•  その他  – abort  命令  – commit  成否を検知する命令  – 明示的に排他対象を指定する方式もある  

10

Thread1:      atomic  {          write  x          write  y      }

Thread2:      atomic  {          read  x          read  y      }

Page 11: Intel TSX について x86opti

Lock  に対する  TM  ってどう思えばいいの?

•  Malloc/free  ßà  Garbage  CollecQon  – GC  でメモリリークフリーなプログラミングができる  – 性能は向上しているがオーバーヘッドはある  

•  Lock/unlock  ßà  TransacQonal  Memory  – TM  で  Lock-­‐free  な並列プログラミングができる  – STM  はオーバーヘッドが...  – HTM  は使える実装や制約が...  

11

Page 12: Intel TSX について x86opti

TM  実現方式の例

12

0  T1  begin  1  T1  write  x  1  2  T1  write  y  1  3  T1  commit  4  T2  begin  5  T2  read  y  6  T2  read  x  7  T2  commit  

0 x

0 y

0 0 0 0 1 1 1 1 1 1 1 1 1 1

T1    writes

T2    writes

x:1 x:1,y:1

T1 T1

T2

T1

T2 T2

tag tag

T1:      write  x  1      write  y  1  

T2:      read  y      read  x  

Run Memory

Page 13: Intel TSX について x86opti

TM  実現方式の例  –cont.

13

0  T1  begin  1  T1  write  x  1  2  T2  begin  3  T2  read  y  4  T1  write  y  1  5  T1  abort  6  T2  read  x  7  T2  commit  

0 x

0 y

0 0 0 0 0 0 0 0 0 0 0 0 0 0

T1    writes

T2    writes

x:1 x:1

x:1,y:1

T1 T1 T1 T1

T2

T2 T2 T2 T2

 tag

 tag

T1:      write  x  1      write  y  1  

T2:      read  y      read  x  

Run Memory

Page 14: Intel TSX について x86opti

TM  実現方式の例  –cont.

•  Read-­‐set/write-­‐set  – 各 trn  が  read/write  した領域  – 同じ領域に自分以外がアクセスしたら  abort  

•  Private  writes  – commit  するまで他の trn  に変更を見せない  – abort  時に変更はなかったことにする  

14

Page 15: Intel TSX について x86opti

PessimisQc  vs  OpQmisQc

•  PessimisQc  

•  OpQmisQc

15

Page 16: Intel TSX について x86opti

PessimisQc  vs  OpQmisQc  –cont.

•  PessimisQc  (悲観的)  – 競合し得る trn  の同時実行を許さない  – 必ず  commit  できる  

•  OpQmisQc  (楽観的)  – 競合し得る trn  の投機的な同時実行を許す  – 競合で commit  できないことがある  – 状況次第で  pessimisQc  よりスケールする  – 競合しやすい trn  だと資源の無駄  

16

Page 17: Intel TSX について x86opti

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

•  2009  年頃までの  TM  の研究まとめ  

•  参考文献  351  個!  

•  図表にして欲しい箇所がたくさん...

17

Page 18: Intel TSX について x86opti

発表概要

•  トランザクショナルメモリ  •  Intel  TSX  – HLE  – RTM  – 制約その他  

•  今後の展望  •  まとめと参考文献  

18

Page 19: Intel TSX について x86opti

Intel  TSX

•  TransacQonal  SynchronizaQon  eXtension  の略  •  2 つのインターフェースを提供  – HLE:  Lock  prefix  の拡張で細粒度の排他を実現  – RTM:  制約はあるが HTM  そのもの  

•  OpQmisQc  な振舞  •  CPU  キャッシュを使って必要なデータを管理  •  キャッシュライン単位での競合検出  

19

Page 20: Intel TSX について x86opti

TSX  のための実装  (TM本  5.1  章を元に想像)

•  Read-­‐set  – キャッシュライン毎の  read  タグ  –  read  したアドレスを保持するバッファ  

•  Write-­‐set  – 論理CPU毎の  Write  buffer  を流用  or  L1/L2  d-­‐cache  を流用  

•  競合検出  – Read-­‐set  に含まれるライン  à  write 要求  – Write-­‐set  に含まれるライン  à  read/write  要求  

20

Page 21: Intel TSX について x86opti

発表概要

•  トランザクショナルメモリ  •  Intel  TSX  – HLE  – RTM  – 制約その他  

•  今後の展望  •  まとめと参考文献  

21

Page 22: Intel TSX について x86opti

HLE

•  Hardware  Lock  Elision  の略  – ロックを無視  

•  命令  – XACQUIRE/XRELEASE  – Lock  prefix  にさらに追加する prefix  – トランザクションにしたいコードを  XACQUIRE と  XRELEASE  で囲む  

22

Page 23: Intel TSX について x86opti

HLE  動作概要

23

投機実行

Write-­‐set  反映,破棄

START

END

XACQUIRE

XRELEASE 競合検出

競合が起きないケース 競合が起きるケース

投機実行

Write-­‐set 破棄

START

END

XACQUIRE XACQUIRE  まで  戻って通常実行

XRELEASE

Page 24: Intel TSX について x86opti

HLE: 動作概要  –cont.

•  実行時の挙動  – XACQUIRE  から  XRELEASE  までのコードは  投機的に実行  

– Write-­‐set  の内容は  commit  されるまで  他の論理  CPU  からは見えない  

•  競合が検出された場合  – Abort  し XACQUIRE以降のメモリ操作が  なかったことになる  

– HLE  なしで再実行:  必ず成功  

24

Page 25: Intel TSX について x86opti

HLE:  メリットとデメリット

•  メリット  – 実際に競合がなければ並列実行可能  

• 細粒度に排他したプログラムに近い性能が期待  

– 既存のコードをほとんど修正なしで使える  • 場合によってはリコンパイルのみ  

•  デメリット  – 競合が頻繁に起きるケースは資源の無駄  

•  XACQUIRE/XRELEASE  をつけるべきではない  

25

Page 26: Intel TSX について x86opti

発表概要

•  トランザクショナルメモリ  •  Intel  TSX  – HLE  – RTM  – 制約その他  

•  今後の展望  •  まとめと参考文献  

26

Page 27: Intel TSX について x86opti

RTM

•  Restricted  TransacQonal  Memory  の略  – 制約つきの  TM  

•  命令  – XBEGIN:  トランザクション開始  – XEND:  トランザクション終了  – XABORT:  明示的に  abort  

27

Page 28: Intel TSX について x86opti

RTM  動作概要

28

投機実行

Write-­‐set  反映,破棄

START

END

XBEGIN

XEND 競合検出  or  XABORT

競合が起きないケース 競合が起きるケース

投機実行

Write-­‐set 破棄

START

END

XBEGIN EAX  に  結果をセット  

Fallback  アドレスに  ジャンプ

通常実行

Page 29: Intel TSX について x86opti

RTM:  動作概要  –cont.

•  実行時の挙動  – XBEGIN  から  XEND  までを投機的に実行  – Write-­‐set  の内容は他CPUから見えない  – XEND  までに競合検出されなければ  commit  

•  競合検出時  – Write-­‐set  を破棄して Fallback  アドレスにジャンプ  – EAX  に  abort  原因をセット  

•  XABORT  時  – 8bit  即値を渡せる(EAX  の一部)

29

Page 30: Intel TSX について x86opti

RTM:  メリットとデメリット

•  メリット  – HTM  なので高速  – TM  のためのキャッシュ操作に伴う  オーバーヘッドのみ  

•  デメリット  – OpQmisQc  なので必ず  commit  できる保証なし  – Retry  しても毎回  abort  するかも知れない  – プログラマ/ライブラリ/OS  が面倒見ないといけない  

30

Page 31: Intel TSX について x86opti

発表概要

•  トランザクショナルメモリ  •  Intel  TSX  – HLE  – HTM  – 制約その他  

•  今後の展望  •  まとめと参考文献  

31

Page 32: Intel TSX について x86opti

トランザクション内で使えるインストラクション

•  Abort  しないもの  –  IP  や一般のレジスタ,ステータスフラグを使う命令  – XMM,  YMM,MXCSR  レジスタを使う命令  

•  Abort  するかも知れないもの  – CPUID,  PAUSE  (これらは絶対  abort)  – SSE/XMM  と  AVX/YMM  を混ぜて使う  –  INT や  SYSENTER  など諸々  

•  詳細はマニュアル参照

32

Page 33: Intel TSX について x86opti

NesQng  (入れ子)

•  HLE  – MAX_HLE_NEST_COUNT  まで入れ子にできる – 同じアドレスに対しては再帰的に使えない  

•  RTM  – MAX_RTM_NEST_COUNT  まで入れ子にできる  – abort  時は最外 trn  の  fallback  アドレスに飛ぶ  

•  組み合わせ  – RTM  の中で  HLE  à  無視される  – HLE  の中で  RTM  à  abort  後  HLE  無視して実行  

33

Page 34: Intel TSX について x86opti

Abort  する条件

•  アクセス競合が検出されたとき  •  特定の命令を実行したとき  •  Nest  限界を越えたとき  •  TM  管理データ用の領域が足りなくなったとき

34

Page 35: Intel TSX について x86opti

実行順序

•  これまでと変わらないので自分でケア  –  fence  命令  

•  XACQUIRE/XBEGIN  後の命令のみ  abort  時にundo  される

35

Page 36: Intel TSX について x86opti

性能を出すための注意

•  長いトランザクションにしない  •  多くの領域にアクセスしない  •  Abort  を引き起こす命令は使わない  •  競合しやすい排他対象に使わない

36

Page 37: Intel TSX について x86opti

言語処理系のサポート

•  C++  標準への提案  – by  Intel  の中の人その他  – atomic  block,  cancel,  例外との組み合わせ  – Undo  できる/ない関数のアノテーション/自動判別  

•  Intel  compiler  は独自命令でサポート  •  GCC  は  4.7 から試験的にサポート  –  -­‐fgnu-­‐tm  オプション  

37

Page 38: Intel TSX について x86opti

発表概要

•  トランザクショナルメモリ  •  Intel  TSX  – HLE  – RTM  – 制約その他  

•  今後の展望  •  まとめと参考文献  

38

Page 39: Intel TSX について x86opti

今後の展望(予測)

•  HLE  は早期に実用できると期待 •  RTM は...(時間かかりそう)

•  言語処理系への採用が進む  – HLE,  RTM  サポート  – STM  のアクセラレータとして  RTM  を使う  

•  将来的には  OS  によるサポートが必要?  – CPUキャッシュ資源を適切に振り分ける  – 競合コントロール  

39

Page 40: Intel TSX について x86opti

発表概要

•  トランザクショナルメモリ  •  Intel  TSX  – HLE  – HTM  – 制約その他  

•  今後の展望  •  まとめと参考文献  

40

Page 41: Intel TSX について x86opti

まとめ

•  トランザクショナルメモリについて  •  Intel  TSX  について  – opQmisQc  な  TM  なので気をつけて  

•  Haswell  の登場を楽しみに待ちましょう  

41

Page 42: Intel TSX について x86opti

参考文献

•  Intel  Architecture  InstrucQon  Set  Extensions  Programming  Reference  

•  TransacQonal  Memory  2nd  EdiQon  •  DraT  SpecificaQon  of  TransacQonal  Language  Constructs  for  C++  

•  ニュース/ブログ記事など  – 主に  @kumagi  さん,Hisa  Ando  さん

42

Page 43: Intel TSX について x86opti

•  おしまい

43