この記事は、インテル® デベロッパー・ゾーンに掲載されている「Intel® 64 and IA-32 Architectures Optimization Reference Manual」 (https://software.intel.com/sites/default/files/managed/9e/bc/64-ia-32-architectures-optimization-manual.pdf) ドキュメント番号: 248966-041 April 2019 で追加された「Chapter 11 Intel® Optane™ DC Persistent Memory」の日本語参考訳です。
第 11 章 インテル® Optane™ DC パーシステント・メモリー
Cascade Lake✝ をベースとするインテル® Xeon® スケーラブル・プロセッサー製品は、インテル® Optane™ DC パーシステント・メモリー・モジュールをサポートします。インテル® Optane™ DC パーシステント・メモリー・モジュールは、DRAM と比較して大きな容量を持ち、かつ永続的 (システムの電源を落としても内容が保持されます) です。しかし、DRAM DIMM よりもレイテンシーが長く、帯域幅は低くなります。
11.1 Memory モードと App Direct モード
インテル® Optane™ DC パーシステント・メモリー・モジュール DIMM は、2 つの異なるモードで使用できます。
11.1.1 Memory モード
Memory モードでは、メモリーは不揮発性メモリーとして動作します。これは、オペレーティング・システムとアプリケーションからは透過です。ソフトウェアは変更を加えることなく、大容量メモリーの恩恵を受けることができます。システム上の DRAM メモリーは、メモリー側のキャッシュとして使用されます。これが意図することは、ソフトウェアがインテル® Optane™ DC パーシステント・メモリー・モジュール層の「インメモリー」データ容量を活用しながら、DRAM 層のレイテンシーを維持することです。
Memory モードでは、リブート後にインテル® Optane™ DC パーシステント・メモリー・モジュール上のデータにアクセスできなくなります。デバイス自体は不揮発性であるため、これは電源投入前に破棄されるキーによってデータを暗号化することで実装されます。ソケット上の DRAM メモリーは、インテル® Optane™ DC パーシステント・メモリー・モジュールのダイレクトマップ・キャッシュとして使用されます。これは、プロセッサーのキャッシュとは異なり、キャッシュに LRU ポリシーが適用されないことを意味します。インテル® Optane™ DC パーシステント・メモリー・モジュールのキャッシュラインは、常に DRAM から同じキャッシュラインを排出します。オペレーティング・システムは、DRAM キャッシュから排出すべきではないデータを保持するページと競合しないページのアドレスを使用することによって、Memory モードを最適化できます。例えば、ページテーブルを常に DRAM に保持することは有益です。ワーキングセットの大きさはパフォーマンスを決定付けます。アプリケーションのワーキングセットが DRAM に収まる場合、パフォーマンスはインテル® Optane™ DC パーシステント・メモリー・モジュールのレイテンシーと帯域幅の影響をそれほど受けません。
11.1.2 App Direct モード
App Direct モードではメモリーはデバイスとして扱われ、ファイルシステムとしてフォーマットできます。1 つの選択肢は、インテル® Optane™ DC パーシステント・メモリー・モジュールを超高速ブロックデバイスである、「App Direct ストレージ」と呼ばれるファイルシステムとして使用することです。これには、ソフトウェアに変更を加えることなく、I/O 集約型のアプリケーションがインテル® Optane™ DC パーシステント・メモリー・モジュールの恩恵を受けられる利点があります。しかしこれは、App Direct 高速ストレージとしてデバイスを使用しますが、永続的なメモリーとしては使用していません。それとは対照的に、パーシステント・メモリーとして使用するためアプリケーションを書き換えることには、大きな利点があります。「App Direct ストレージ」との大きな違いは、データをキャッシュライン単位でアクセスできることです。データをデバイスからロードまたはストアするためプロセッサーのロードやストア命令が実行され、いったんページがプロセスに割り当てられると OS との対話は必要ありません。App Direct モードはパーシステント・メモリーを実装します。オペレーティング・システムは、RAM としてパーシステント・メモリーにアクセスするのではなく、「dax」と呼ばれる特殊なフラグを持ってマウントされたファイルシステムとしてアクセスします。「dax」フラグは、「App Direct モード」 (dax 付きでマウント) と「App Direct モードのストレージ」 (dax なしでマウント) を区別するために使用されます。dax 付きでマウントすると、次のような利点があります。
パーシステント・メモリーがアプリケーションの仮想アドレス空間にマッピングされると、読み書きはプロセッサーのロードおよびストア命令で行えるようになります。これには、App Direct ストレージモードに対し、次にような利点があります。
- システムコールを呼び出す必要がありません。
- ページ単位 (例えば 4KB) で転送する代わりに、キャッシュライン単位 (64B) で転送されます。
- メモリーの内容はパーシステント・メモリーと DRAM 間で転送する必要がなく、データのコピーは 1 つのみ存在します。
- アクセスは同期的です。
パーシステント・メモリーは、ファイルシステムを介してアクセスできるため、オペレーティング・システムや従来の OS メモリー監視ツールは、システムに存在する DRAM のみを報告することに注意してください。2 つのメモリープールは互いに異なり、ソフトウェアがデータを DRAM と NVDIMM のいずれに配置するか完全に制御できることで App Diect モードは差別化されます。最適なパフォーマンスを得るため、ソフトウェアはコピーを作成するか再構築することによって、レイテンシーに敏感なデータ構造を DRAM に配置できます。例としてインデックス・データ構造が上げられます。インデックス・データ構造は通常ランダムアクセスされますが、再起動後に再構築できます。
✝開発コード名