トランザクション同期拡張機能( TSX )、またはトランザクション同期拡張機能新命令( TSX-NI ) は、 x86命令セットアーキテクチャ(ISA)の拡張機能で、ハードウェア トランザクション メモリサポートを追加し、ロック エリジョンによってマルチスレッド ソフトウェアの実行を高速化します。さまざまなベンチマークによると、TSX/TSX-NI は特定のワークロードでアプリケーションの実行を約 40% 高速化し、1 秒あたりのデータベース トランザクション(TPS) を 4 ~ 5 倍にすることができます。[ 1 ] [ 2 ] [ 3 ] [ 4 ]
TSX/TSX-NI は、2012 年 2 月にIntelによって文書化され、2013 年 6 月にHaswellマイクロアーキテクチャに基づく一部の Intelマイクロプロセッサでデビューしました。[ 5 ] [ 6 ] [ 7 ] 45xx 未満の Haswell プロセッサ、および R シリーズと K シリーズ (乗算器ロック解除済み) SKU は、TSX/TSX-NI をサポートしていません。[ 8 ] 2014 年 8 月に、Intel は、Haswell、Haswell-E、Haswell-EP、および初期のBroadwell CPUの現在のステッピングにおける TSX/TSX-NI 実装のバグを発表し、その結果、影響を受ける CPU でマイクロコードの更新により TSX/TSX-NI 機能が無効になりました。[ 9 ] [ 10 ]
2016年に、 TSX/TSX-NIがトランザクション障害(ページ障害など)を処理する方法を悪用して、主要なすべてのオペレーティングシステムでカーネルアドレス空間レイアウトランダム化(KASLR)を破るサイドチャネルタイミング攻撃が発見されました。 [ 11 ] 2021年、インテルは発見されたセキュリティ問題への対策として、 SkylakeからCoffee Lakeまでの CPU世代でTSX/TSX-NI機能を無効にするマイクロコードアップデートをリリースしました。[ 12 ]
TSX/TSX-NIはデスクトップクラスのプロセッサではサポートされなくなりましたが、Xeonプロセッサでは引き続きサポートされています(少なくとも第6世代以降の特定のモデルでは)。[ 13 ]
Intel Software Development Emulator の一部として、TSX/TSX-NI エミュレーションのサポートが提供されています。[ 14 ]また、 QEMUフォーク では、TSX/TSX-NI エミュレーションの実験的なサポートも提供されています。[ 15 ]
TSX/TSX-NI は、トランザクション実行用のコード領域を指定するための 2 つのソフトウェア インターフェイスを提供します。ハードウェア ロック エリジョン(HLE) は、TSX/TSX-NI をサポートしていないプロセッサとの下位互換性を持つように設計された命令プレフィックスベースのインターフェイスです。制限付きトランザクション メモリ(RTM) は、プログラマにより高い柔軟性を提供する新しい命令セット インターフェイスです。[ 16 ]
TSX/TSX-NIは、トランザクションコード領域の楽観的実行を可能にします。ハードウェアは、競合するメモリアクセスについて複数のスレッドを監視し、正常に完了できないトランザクションを中止してロールバックします。ソフトウェアが失敗したトランザクションを検出して処理するためのメカニズムが提供されています。[ 16 ]
ハードウェアロック削除 (HLE) は、2 つの新しい命令プレフィックス と を追加しますXACQUIRE。XRELEASEこれらの 2 つのプレフィックスは、既存の/プレフィックス ( / )のオペコードを再利用します。HLE をサポートしないプロセッサでは、/が有効な命令では/プレフィックスは無視されるため、下位互換性が確保されます。[ 17 ]REPNEREPEF2HF3HREPNEREPEXACQUIREXRELEASE
プレフィックスヒントは、明示的なプレフィックスを持つ以下の命令でのみXACQUIRE使用できます: LOCK、、、、、、、、、、、、、、、、、ADDおよび。この命令はプレフィックスなしでも使用できます。ADCANDBTCBTRBTSCMPXCHGCMPXCHG8BDECINCNEGNOTORSBBSUBXORXADDXCHGXCHGLOCK
プレフィックスXRELEASEヒントは、上記の指示と、MOV mem, regおよびMOV mem, imm指示の両方で使用できます。
HLE(高レベル実行)では、ロックへの書き込みをスキップすることでクリティカルセクションの楽観的実行が可能になり、他のスレッドからはロックが解放されているように見えます。トランザクションが失敗した場合、実行はXACQUIREプレフィックス付きの命令から再開されますが、その命令はプレフィックスが存在しないものとして扱われますXACQUIRE。
言い換えれば、トランザクション実行によるロック省略は、可能な限りメモリ・トランザクションを高速パスとして使用し、低速(フォールバック)パスは依然として通常のロックを使用する。
Restricted Transactional Memory (RTM) is an alternative implementation to HLE which gives the programmer the flexibility to specify a fallback code path that is executed when a transaction cannot be successfully executed. Unlike HLE, RTM is not backward compatible with processors that do not support it. For backward compatibility, programs are required to detect support for RTM in the CPU before using the new instructions.
RTMでは、3つの新しい命令、、およびが追加されましたXBEGIN。XENDおよびXABORT命令XBEGINはXEND、トランザクションコード領域の開始と終了を示します。XABORT命令は、トランザクションを明示的に中止します。トランザクションが失敗すると、プロセッサは命令で指定されたフォールバックコードパスにリダイレクトされXBEGIN、中止ステータスがEAXレジスタに返されます。
XTEST命令TSX/TSX-NIには、プロセッサがトランザクション領域を実行中かどうかを返す新しいXTEST命令が用意されています。この命令は、プロセッサがHLE、RTM、またはその両方をサポートしている場合に利用できます。
TSX/TSX-NIサスペンドロードアドレストラッキング(TSXLDTRK)は、トランザクション領域内のコードセクションにおいて、メモリからのトラッキングロードを一時的に無効にできる命令セット拡張機能です。この機能はHLEおよびRTMを拡張するものであり、プロセッサにおけるサポート状況は別途検出する必要があります。
XSUSLDTRKTSXLDTRK では、ロード アドレス トラッキングを一時停止および再開するための2 つの新しい命令が導入されましたXRESLDTRK。トラッキングが一時停止されている間、メモリからのロードはトランザクションの読み取りセットに追加されません。つまり、これらのメモリ位置が一時停止領域外のトランザクションの読み取りまたは書き込みセットに追加されていない限り、他のスレッドによるこれらの位置への書き込みによってトランザクションが中止されることはありません。トランザクション領域内のコードの一部に対してロード アドレス トラッキングを一時停止することで、読み書き競合のために追跡する必要のあるメモリの量を減らし、トランザクションのコミットが成功する確率を高めることができます。
Intel の TSX/TSX-NI 仕様では、トランザクション メモリがプログラマにどのように公開されるかが説明されていますが、実際のトランザクション メモリの実装に関する詳細は伏せられています。[ 18 ] Intel は、開発者マニュアルと最適化マニュアルで、Haswell はキャッシュ ラインの粒度で読み出しセットと書き込みセットの両方を維持し、プロセッサの L1 データ キャッシュ内のアドレスを追跡すると明記しています。[ 19 ] [ 20 ] [ 21 ] [ 22 ] Intel はまた、キャッシュ コヒーレンスプロトコル によってデータ競合が検出されるとも述べています。[ 20 ]
Haswell の L1 データ キャッシュのアソシアティビティは 8 です。これは、この実装では、同じキャッシュ セットにマッピングされる 9 つの異なる場所に書き込むトランザクション実行がアボートされることを意味します。ただし、マイクロ アーキテクチャの実装により、同じセットへのアクセスが少ない場合は、アボートされないことが保証されるわけではありません。さらに、ハイパー スレッディング テクノロジーを備えた CPU 構成では、L1 キャッシュは同じコア上の 2 つのスレッド間で共有されるため、同じコアの兄弟論理プロセッサでの操作によってエビクションが発生する可能性があります。[ 20 ]
独立した調査によると、Haswell のトランザクション メモリは、トランザクション データとレジスタ チェック ポイントにコアごとのキャッシュを使用する遅延更新システムである可能性が最も高い。[ 18 ] つまり、Haswell はキャッシュ ベースのトランザクション メモリ システムを使用する可能性が高い。これは、実装上のリスクがはるかに低い選択肢だからである。一方、Intel のSkylake以降では、このキャッシュ ベースのアプローチをメモリ オーダー バッファ(MOB) と組み合わせて同じ目的で使用する可能性があり、投機的マルチスレッド処理に適したマルチ バージョン トランザクション メモリを提供する可能性もある。[ 23 ]
2014 年 8 月、インテルは Haswell、Haswell-E、Haswell-EP、および初期の Broadwell CPU の TSX/TSX-NI 実装にバグが存在することを発表し、その結果、影響を受ける CPU でマイクロコードの更新により TSX/TSX-NI 機能が無効化されました。[ 9 ] [ 10 ] [ 24 ] このバグは、2014 年 11 月に vPro 対応の Core M-5Y70 Broadwell CPU の F-0 ステッピングで修正されました。 [ 25 ]
このバグは、アテネ国立工科大学電気・コンピュータ工学部での卒業論文中に発見され、報告された。[ 26 ]
2018 年 10 月、インテルは一部のSkylakeプロセッサで発見された TSX/TSX-NI メモリ順序の問題を公表しました。[ 27 ]マイクロコードの更新により、影響を受ける CPU では HLE サポートが無効になり、Intel SGXモードまたはシステム管理モード ( SMM ) 以外で使用される場合は、1 つのパフォーマンス カウンターを犠牲にすることで RTM が緩和されました。システム ソフトウェアは、RTM を実質的に無効にするか、影響を受けるパフォーマンス カウンターを使用しないようにパフォーマンス監視ツールを更新する必要がありました。
2021 年 6 月に Intel は、TSX 非同期アボート (TAA) の脆弱性に対する緩和策として、SkylakeからCoffee LakeおよびWhiskey Lakeまでのさまざまな Xeon および Core プロセッサ モデルで TSX/TSX-NI をさらに無効にするマイクロ コード アップデートを公開しました。以前のメモリ順序付けの問題に対する緩和策は削除されました。 [ 28 ]デフォルトでは、更新されたマイクロ コードでは、プロセッサは RTM のサポートを示すものの、トランザクションは常に中止されます。システム ソフトウェアはこの動作モードを検出し、命令から TSX/TSX-NI のサポートをマスクしてCPUID、アプリケーションによる TSX/TSX-NI の検出を防止できます。システム ソフトウェアは、RTM が完全にアクティブになる「サポートされていないソフトウェア開発モード」を有効にすることもできますが、この場合、RTM の使用は前述の問題の影響を受ける可能性があるため、このモードは本番システムでは有効にしないでください。一部のシステムでは、SGX がアクティブなときに RTM を再度有効にすることはできません。HLE は常に無効です。
2020 年 5 月発行の Intel 64 および IA-32 アーキテクチャ ソフトウェア開発者マニュアル、第 1 巻、第 2.5 章 Intel 命令セット アーキテクチャと削除された機能によると、[ 19 ] HLE は 2019 年以降にリリースされた Intel 製品から削除されています。RTM は削除されたとは文書化されていません。ただし、2020 年にリリースされた Intel 第 10 世代Comet LakeおよびIce Lakeクライアント プロセッサは、HLE と RTM の両方を含め、TSX/TSX-NI をサポートしていません。 [ 29 ] [ 30 ] [ 31 ] [ 32 ] [ 33 ] Comet Lake プロセッサのエンジニアリング バージョンは、TSX/TSX-NI のサポートを保持していました。
2020年10月のIntelアーキテクチャ命令セット拡張プログラミングリファレンス改訂版41 [ 34 ]では、新しいTSXLDTRK命令セット拡張が文書化されました。これは、2023年1月にリリースされたSapphire Rapidsプロセッサに初めて含まれました。
複雑な内部タイミング条件とシステムイベントの下では、インテルTSX/TSX-NI(トランザクション同期拡張機能)命令を使用するソフトウェアは、予測不可能なシステム動作を観測する可能性があります。
プロセッサは、プロセッサの第1レベルデータキャッシュ(L1キャッシュ)で、読み出しセットアドレスと書き込みセットアドレスの両方を追跡します。
「CPUが細かいロックを行う」という仕組みは、L1 (64 B) キャッシュラインにタグ付けすることに基づいており、具体的には512個あります (64 x 512 = 32 KB)。キャッシュラインごとに「ロックタグ」は1つだけです。
{{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)BDM53
1
E-0: X、F-0:、ステータス: 修正済み ERRATA: Intel TSX 命令が利用できません。 1. Intel Core M-5Y70 プロセッサーに適用されます。 Intel TSX は、Intel vPro テクノロジーを搭載した Intel Core M-5Y70 プロセッサーでサポートされています。 Intel TSX は、他のプロセッサー SKU ではサポートされていません。
年 10 月のマイクロコード更新では、Intel TSX の HLE 命令プレフィックスも無効になり、Intel SGX モードまたはシステム管理モード (SMM) で動作しているときにすべての RTM トランザクションが強制的に中止されるようになりました。