トランスレーションルックアサイドバッファ

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

トランスレーションルックアサイドバッファTLB)は、ユーザーのメモリ位置へのアクセスにかかる時間を短縮するために使用されるメモリキャッシュです。[1]これはチップのメモリ管理ユニット(MMU)の一部です。TLBは、仮想メモリから物理メモリへの最近の変換を格納し、アドレス変換キャッシュと呼ぶことができます。TLBはCPUCPUキャッシュの間に存在する可能性があります、CPUキャッシュとメインメモリ間、またはマルチレベルキャッシュの異なるレベル間。デスクトップ、ラップトップ、およびサーバープロセッサの大部分は、メモリ管理ハードウェアに1つ以上のTLBを含み、ページングまたはセグメント化された 仮想メモリを利用するすべてのプロセッサにほぼ常に存在します。

TLBは、連想メモリ(CAM)として実装される場合があります。CAM検索キーは仮想アドレスであり、検索結果は物理アドレスです。要求されたアドレスがTLBに存在する場合、CAM検索はすぐに一致を生成し、取得された物理アドレスを使用してメモリにアクセスできます。これはTLBヒットと呼ばれます。要求されたアドレスがTLBにない場合、それはミスであり、ページウォークと呼ばれるプロセスでページテーブルを検索することによって変換が続行されます。ページウォークは、複数のメモリ位置の内容を読み取り、それらを使用して物理アドレスを計算する必要があるため、プロセッサの速度と比較すると時間がかかります。ページウォークによって物理アドレスが決定された後、仮想アドレスから物理アドレスへのマッピングがTLBに入力されます。たとえば、PowerPC 604には、データのロードとストアのための双方向のセットアソシアティブTLBがあります。[2]一部のプロセッサには、異なる命令およびデータアドレスTLBがあります。

概要

TLBの一般的な動作[3]

TLBには、ページテーブルエントリとセグメントテーブルエントリを含む固定数のスロットがあります。ページテーブルエントリは、仮想アドレスを物理アドレスと中間テーブルアドレスにマップし、セグメントテーブルエントリは、仮想アドレスをセグメントアドレス、中間テーブルアドレス、およびページテーブルアドレスにマップします。仮想メモリは、プロセスから見たメモリ空間です。このスペースは、多くの場合、固定サイズのページ(ページメモリ内)に分割されますが、あまり一般的ではありませんが、可変サイズのセグメント(セグメントメモリ内)に分割されます。通常メインメモリに保存されるページテーブル、仮想ページが物理メモリのどこに保存されているかを追跡します。この方法では、2つのメモリアクセス(1つはページテーブルエントリ用、もう1つはバイト用)を使用してバイトにアクセスします。最初に、ページテーブルでフレーム番号が検索されます。次に、ページオフセット付きのフレーム番号が実際のアドレスを示します。したがって、単純な仮想メモリスキームは、メモリアクセス時間を2倍にする効果があります。したがって、TLBは、ページテーブル方式でメモリ位置にアクセスするのにかかる時間を短縮するために使用されます。TLBはページテーブルのキャッシュであり、ページテーブルの内容のサブセットのみを表します。

物理メモリアドレスを参照すると、TLBは、CPUとCPUキャッシュの間、CPUキャッシュとプライマリストレージメモリの間、またはマルチレベルキャッシュのレベルの間に存在する場合があります。配置によって、キャッシュが物理アドレス指定と仮想アドレス指定のどちらを使用するかが決まります。キャッシュが仮想的にアドレス指定されている場合、要求はCPUからキャッシュに直接送信され、TLBはキャッシュミスの場合にのみアクセスされます。キャッシュが物理的にアドレス指定されている場合、CPUはすべてのメモリ操作でTLBルックアップを実行し、結果の物理アドレスがキャッシュに送信されます。

ハーバードアーキテクチャまたは変更されたハーバードアーキテクチャは、命令とデータ用に別個の仮想アドレス空間またはメモリアクセスハードウェアが存在する場合があります。これにより、アクセスタイプごとに異なるTLB、命令変換ルックアサイドバッファ(ITLB)、およびデータ変換ルックアサイドバッファ(DTLB)が発生する可能性があります。個別のデータおよび命令TLBを使用すると、さまざまな利点が実証されています。[4]

TLBは、高速ルックアップハードウェアキャッシュとして使用できます。この図は、TLBの動作を示しています。TLBの各エントリは、タグと値の2つの部分で構成されています。着信仮想アドレスのタグがTLBのタグと一致する場合、対応する値が返されます。TLBルックアップは通常、命令パイプラインの一部であるため、検索は高速であり、本質的にパフォーマンスの低下はありません。ただし、命令パイプライン内を検索できるようにするには、TLBを小さくする必要があります。

物理的にアドレス指定されたキャッシュの一般的な最適化は、キャッシュアクセスと並行してTLBルックアップを実行することです。仮想メモリを参照するたびに、ハードウェアはTLBをチェックして、ページ番号がそこに保持されているかどうかを確認します。はいの場合、それはTLBヒットであり、翻訳が行われます。フレーム番号が返され、メモリへのアクセスに使用されます。ページ番号がTLBにない場合は、ページテーブルを確認する必要があります。CPUに応じて、これはハードウェアまたはオペレーティングシステムへの割り込みを使用して自動的に実行できます。フレーム番号を取得すると、メモリへのアクセスに使用できます。さらに、ページ番号とフレーム番号をTLBに追加して、次の参照ですぐに見つけられるようにします。TLBがすでにいっぱいになっている場合は、交換する適切なブロックを選択する必要があります。のようなさまざまな交換方法があります使用頻度が最も低い(LRU)、先入れ先出し(FIFO)など。キャッシュとTLBに関連する仮想アドレス指定の詳細については、キャッシュの記事 のアドレス変換のセクションを参照してください。

パフォーマンスへの影響

フローチャート[5]は、トランスレーションルックアサイドバッファの動作を示しています。簡単にするために、ページフォールトルーチンについては触れていません。

CPUは、命令キャッシュミス、データキャッシュミス、またはTLBミスのためにメインメモリにアクセスする必要があります。3番目のケース(最も単純なケース)は、必要な情報自体が実際にキャッシュにあるが、仮想から物理への変換の情報がTLBにない場合です。低速レベルのメモリ階層にアクセスする必要があるため、これらはすべて低速であるため、適切に機能するTLBが重要です。実際、TLBミスは、メインメモリからのロードだけでなく、ページウォークが必要であり、複数のメモリアクセスが必要になるため、命令またはデータキャッシュミスよりもコストがかかる可能性があります。

提供されるフローチャートは、TLBの動作を説明しています。TLBミスの場合、CPUはページテーブルのエントリをチェックします。現在のビットが設定されている場合、ページはメインメモリにあり、プロセッサはページテーブルエントリからフレーム番号を取得して物理アドレスを形成できます。[6]プロセッサは、TLBを更新して、新しいページテーブルエントリを含めます。最後に、現在のビットが設定されていない場合、目的のページはメインメモリになく、ページフォールトが発行されます。次に、ページフォールト割り込みが呼び出され、ページフォールト処理ルーチンが実行されます。

ページワーキングセットがTLBに適合しない場合、 TLBスラッシングが発生し、TLBミスが頻繁に発生します。新しくキャッシュされた各ページは、すぐに再び使用されるページを置き換え、命令のスラッシングとまったく同じ方法でパフォーマンスを低下させます。データキャッシュはありません。TLBスラッシングは、命令キャッシュまたはデータキャッシュのスラッシングが発生していない場合でも発生する可能性があります。これは、これらが異なるサイズのユニットにキャッシュされているためです。命令とデータは小さなブロック(キャッシュライン)にキャッシュされます)、ページ全体ではありませんが、アドレス検索はページレベルで行われます。したがって、コードとデータのワーキングセットがキャッシュに収まる場合でも、ワーキングセットが多くのページに断片化されていると、仮想アドレスのワーキングセットがTLBに収まらず、TLBのスラッシングが発生する可能性があります。したがって、TLBの適切なサイズ設定では、対応する命令とデータキャッシュのサイズだけでなく、これらが複数のページにどのように断片化されているかも考慮する必要があります。

複数のTLB

キャッシュと同様に、TLBには複数のレベルがあります。CPUは、複数のTLBで構築できます(現在は通常構築されています)。たとえば、非常に高速な小さなL1 TLB(完全に関連付けられている可能性があります)や、やや遅い大きなL2TLBなどです。命令TLB(ITLB)およびデータTLB(DTLB)を使用する場合、CPUは3つ(ITLB1、DTLB1、TLB2)または4つのTLBを持つことができます。

たとえば、IntelNehalemマイクロアーキテクチャには、4KiBページで64エントリと2/4MiBページで32エントリの4ウェイセットアソシアティブL1DTLB、4ウェイアソシアティビティを使用した4KiBページで128エントリのL1ITLBがあります。 2/4 MiBページ用の14の完全に関連付けられたエントリ(ITLBの両方の部分が2つのスレッド間で静的に分割されます)[7]および4KiBページ用の統合された512エントリのL2TLB、[8]両方とも4方向の関連付け。[9]

一部のTLBには、小さいページと大きいページに別々のセクションがある場合があります。

TLB-ミス処理

TLBミスを処理するための2つのスキームは、現代のアーキテクチャで一般的に見られます。

  • ハードウェアTLB管理では、CPUは自動的にページテーブルをウォークし(たとえば、x86のCR3レジスタを使用して)、指定された仮想アドレスに有効なページテーブルエントリがあるかどうかを確認します。エントリが存在する場合、そのエントリはTLBに取り込まれ、TLBアクセスが再試行されます。今回はアクセスがヒットし、プログラムは正常に続行できます。CPUがページテーブルに仮想アドレスの有効なエントリを見つけられない場合オペレーティングシステムがページフォールト例外を発生させます。 処理する必要があります。ページフォールトの処理には、通常、要求されたデータを物理メモリに取り込み、ページテーブルエントリを設定してフォールトしている仮想アドレスを正しい物理アドレスにマップし、プログラムを再開することが含まれます。ハードウェア管理のTLBを使用すると、TLBエントリの形式はソフトウェアに表示されず、プログラムの互換性を失うことなくCPUからCPUに変更できます。
  • ソフトウェア管理のTLBでは、TLBミスはTLBミス例外を生成し、オペレーティングシステムコードはページテーブルのウォークとソフトウェアでの変換の実行を担当します。次に、オペレーティングシステムは変換をTLBにロードし、TLBミスの原因となった命令からプログラムを再起動します。ハードウェアTLB管理と同様に、OSがページテーブルで有効な変換を検出しない場合、ページフォールトが発生しているため、OSはそれに応じて処理する必要があります。 ソフトウェア管理のTLBを備えたCPUの命令セットには、TLBの任意のスロットにエントリをロードできるようにする命令があります。TLBエントリの形式は、命令セットアーキテクチャ(ISA)の一部として定義されています。[10]

MIPSアーキテクチャ、ソフトウェア管理のTLBを指定します。[11] SPARC V9アーキテクチャでは、 SPARC V9の実装にMMU、ソフトウェア管理TLBを備えたMMU、またはハードウェア管理TLBを備えたMMUを含めることができません[12]。UltraSPARCアーキテクチャ2005は、ソフトウェア管理を指定します。 TLB。[13]

Itaniumアーキテクチャは、ソフトウェアまたはハードウェアで管理されるTLBを使用するオプションを提供します。[14]

AlphaアーキテクチャのTLBは、オペレーティングシステムではなく、 PALcodeで管理されます。プロセッサのPALcodeは、プロセッサ固有およびオペレーティングシステム固有である可能性があるため、TLB形式や、TLBを制御するための命令を必要とせずに、さまざまなバージョンのPALcodeでさまざまなオペレーティングシステムのさまざまなページテーブル形式を実装できます。 、アーキテクチャによって指定されます。[15]

典型的なTLB

これらはTLBの典型的なパフォーマンスレベルです:[16]

  • サイズ:12ビット–4,096エントリ
  • ヒット時間:0.5 –1クロックサイクル
  • ミスペナルティ:10〜100クロックサイクル
  • ミス率:0.01 – 1%(スパース/グラフアプリケーションの場合は20–40%)

平均実効メモリサイクルレートは次のように定義されます。サイクル、ここでは、メモリの読み取りに必要なサイクル数です。ミス率であり、サイクル単位のヒット時間です。TLBヒットに1クロックサイクル、ミスに30クロックサイクル、メモリ読み取りに30クロックサイクル、ミス率が1%の場合、実効メモリサイクル率は平均(メモリアクセスあたり31.29クロックサイクル)。[17]

アドレス空間スイッチ

アドレス空間スイッチでは、プロセススイッチでは発生するがスレッドスイッチでは発生しないように、仮想から物理へのマッピングが異なるため、一部のTLBエントリが無効になる可能性があります。これに対処する最も簡単な戦略は、TLBを完全にフラッシュすることです。これは、切り替え後、TLBが空になりメモリ参照が失われることを意味します。そのため、処理がフルスピードで実行されるまでにはしばらく時間がかかります。新しいCPUは、エントリの対象となるプロセスをマークするより効果的な戦略を使用します。これは、2番目のプロセスが短時間だけ実行されて最初のプロセスに戻った場合でも、TLBに有効なエントリが残っている可能性があるため、それらをリロードする時間を節約できます。[18]

他の戦略では、コンテキストスイッチでTLBをフラッシュすることを回避します。(a)単一のアドレス空間オペレーティングシステムは、すべてのプロセスに同じ仮想から物理へのマッピングを使用します。(b)一部のCPUにはプロセスIDレジスタがあり、ハードウェアは現在のプロセスIDと一致する場合にのみTLBエントリを使用します。

たとえば、Alpha 21264では、各TLBエントリにアドレススペース番号(ASN)のタグが付けられ、現在のタスクに一致するASNを持つTLBエントリのみが有効と見なされます。Intel Pentium Proの別の例では、レジスタCR4のページグローバルイネーブル(PGE)フラグと、ページディレクトリまたはページテーブルエントリのグローバル(G)フラグを使用して、頻繁に使用されるページが自動的に無効になるのを防ぐことができます。タスクスイッチのTLBまたはレジスタCR3のロード。2010 Westmereマイクロアーキテクチャ以降、 Intel64プロセッサは12ビットのプロセスコンテキスト識別子もサポートしています。(PCID)。これにより、複数の線形アドレス空間のTLBエントリを保持でき、現在のPCIDに一致するものだけがアドレス変換に使用されます。[19] [20]

TLBの選択的フラッシュはソフトウェア管理TLBのオプションですが、一部のハードウェアTLB(たとえば、Intel 80386のTLB)の唯一のオプションは、アドレス空間スイッチでのTLBの完全なフラッシュです。他のハードウェアTLB(たとえば、Intel 80486以降のx86プロセッサのTLB、およびARMプロセッサのTLB)を使用すると、仮想アドレスでインデックス付けされたTLBから個々のエントリをフラッシュできます。

TLBのフラッシュは、プロセスが別のプロセスのメモリページに格納されているデータにアクセスできないようにするために、プロセス間のメモリ分離の重要なセキュリティメカニズムになる可能性があります。Meltdownのセキュリティの脆弱性によって強調されたように、特権オペレーティングシステムのカーネルプロセスとユーザープロセスを切り替えるときは、メモリの分離が特に重要です。カーネルページテーブル分離(KPTI)などの緩和戦略は、パフォーマンスに影響を与えるTLBフラッシュに大きく依存しており、PCIDなどのハードウェア対応の選択的TLBエントリ管理から大きな恩恵を受けます。[21]

仮想化とx86TLB

サーバー統合のための仮想化の出現により、x86アーキテクチャーの仮想化を容易にし、x86ハードウェア上の仮想マシンのパフォーマンスを向上させるために多くの努力が払われてきました。[22] [23]

通常、x86TLBのエントリは特定のアドレス空間に関連付けられていません。それらは暗黙的に現在のアドレス空間を参照します。したがって、コンテキストスイッチなどのアドレス空間に変更があるたびに、TLB全体をフラッシュする必要があります。各TLBエントリをソフトウェアのアドレス空間に関連付けるタグを維持し、TLBルックアップとTLBフラッシュ中にこのタグを比較することは、特にx86 TLBが非常に低い遅延で完全にハードウェアで動作するように設計されているため、非常にコストがかかります。2008年には、IntelNehalem[24]AMDSVM[25]の両方がTLBエントリの一部としてタグを導入し、ルックアップ中にタグをチェックする専用ハードウェアを導入しました。これらは十分に活用されていませんが[更新が必要ですか?]、それは[誰によって?]それは将来[いつ?]、これらのタグは、すべてのTLBエントリが属するアドレス空間を識別します。したがって、コンテキストスイッチによってTLBがフラッシュされることはなく、現在のアドレス空間のタグが新しいタスクのアドレス空間のタグに変更されるだけです。

も参照してください

参照

  1. ^ Arpaci-Dusseau、Remzi H .; Arpaci-Dusseau、Andrea C.(2014)、Operating Systems:Three Easy Pieces [Chapter:Faster Translations(TLBs)] (PDF)、Arpaci-Dusseau Books
  2. ^ S.ピーターソング; マーヴィンデンマン; ジョーチャン(1994)。「PowerPC604RISCマイクロプロセッサ」(PDF)IEEEマイクロ
  3. ^ Silberschatz、Galvin、Gagne、Abraham、Peter B.、Greg(2009)。オペレーティングシステムの概念アメリカ合衆国:John Wiley&Sons。INC。ISBN _ 978-0-470-12872-5{{cite book}}:CS1 maint:複数の名前:著者リスト(リンク
  4. ^ チェン、J。ブラッドリー; ボーグ、アニタ; Jouppi、Norman P.(1992)。「TLBパフォーマンスのシミュレーションベースの研究」。SIGARCHコンピュータアーキテクチャニュース20(2):114–123。土井10.1145/146628.139708
  5. ^ Stallings、William(2014)。オペレーティングシステム:内部および設計原則アメリカ合衆国:ピアソン。ISBN 978-0133805918
  6. ^ ソリヒン、ヤン(2016)。並列マルチコアアーキテクチャの基礎フロリダ州ボカラトン:テイラーアンドフランシスグループ。ISBN 978-0-9841630-0-7
  7. ^ 「Nehalemの内部:Intelの将来のプロセッサとシステム」実世界のテクノロジー。
  8. ^ 「IntelCorei7(Nehalem):AMDによるアーキテクチャ?」トムスハードウェア2008年10月14日2010年11月24日取得
  9. ^ 「Nehalemの内部:Intelの将来のプロセッサとシステム」リアルワールドテクノロジーズ2010年11月24日取得
  10. ^ J.スミスとR.ネア。仮想マシン:システムとプロセスのための多用途のプラットフォーム(コンピュータアーキテクチャと設計におけるモーガンカウフマンシリーズ)。Morgan Kaufmann Publishers Inc.、2005年。
  11. ^ ウェールズ、マット。「MIPSr2000/r3000アーキテクチャ」2008年10月14日にオリジナルからアーカイブされました2008年11月16日取得一致するTLBエントリが見つからない場合、TLBミス例外が発生します
  12. ^ SPARC International、Inc . SPARCアーキテクチャマニュアル、バージョン9PTRプレンティスホール
  13. ^ サンマイクロシステムズUltraSPARCアーキテクチャ2005ドラフトD0.9.2、2008年6月19日。SunMicrosystems。
  14. ^ IA-64カーネルの仮想メモリ>トランスレーションルックアサイドバッファ
  15. ^ CompaqComputerCorporationアルファアーキテクチャハンドブック(PDF)バージョン4。CompaqComputerCorporation。
  16. ^ デイビッド・A・パターソン; ジョンL.ヘネシー(2009)。コンピューターの編成と設計。ハードウェア/ソフトウェアインターフェース。第4版バーリントン、マサチューセッツ01803、米国:モーガンカウフマン出版社。p。503. ISBN 978-0-12-374493-7{{cite book}}:CS1 maint:場所(リンク
  17. ^ 「ページングのトランスレーションルックアサイドバッファ(TLB)」GeeksforGeeks2019年2月26日2021年2月10日取得
  18. ^ ウルリッヒドレッパー(2014年10月9日)。「メモリパート3:仮想メモリ」LWN.net
  19. ^ David Kanter(2010年3月17日)。「ウェストメアが到着」リアルワールドテック2018年1月6日取得
  20. ^ インテルコーポレーション(2017)。「4.10.1プロセスコンテキスト識別子(PCID)」。Intel 64およびIA-32アーキテクチャソフトウェア開発者マニュアル(PDF)3A:システムプログラミングガイド、パート1。
  21. ^ Gil Tene(2018年1月8日)。「PCIDはx86の重要なパフォーマンス/セキュリティ機能になりました」2018年3月23日取得
  22. ^ D. Abramson、J。Jackson、S。Muthrasanallur、G。Neiger、G。Regnier、R。Sankaran、I。Schoinas、R。Uhlig、B。Vembu、およびJ. Wiegert ダイレクトI/O向けのインテルバーチャライゼーションテクノロジー。Intel Technology Journal、10(03):179–192。
  23. ^ アドバンストマイクロデバイス。AMD Secure VirtualMachineArchitectureリファレンスマニュアル。Advanced Micro Devices、2008年。
  24. ^ G. Neiger、A。Santoni、F。Leung、D。Rodgers、およびR.Uhlig。Intel仮想化テクノロジー:効率的なプロセッサー仮想化のためのハードウェアサポート。インテルテクノロジージャーナル、10(3)。
  25. ^ アドバンストマイクロデバイス。AMD Secure VirtualMachineArchitectureリファレンスマニュアル。Advanced Micro Devices、2008年。

外部リンク