ラスティングメモリプログラミング

プログラミングラスティングメモリ
2013年6月、私はインターフェイス不揮発性メモリ(NVM)での将来について書きました。どのSNIA NVMは、技術ワークグループ(TWGプログラミング説明 )NVMのプログラミングモデルが開発されています。過去4年間で、仕様を公開し、予測されるように、プログラミングモデルは、フォローアップの多くの焦点となっています。オペレーティングシステムファイルがメモリにマッピングされるようにプログラミングモデルは、仕様NVM.PM.FILEに記載されているように、PMがあってもよいです。この記事では、オペレーティングシステムの持続的なメモリ・プログラミング・モデルを実現する方法について説明しますどのような作業が行われている、と私たちが直面している課題。
背景永続メモリ
PMと同じストレージクラスメモリ用語は、ロード/ストアのメモリアクセス特性に対処バイトが、永続性を持っています。この記事では、PMがNVDIMMsと呼ばれる非のDIMMのクラスを作成するには、システム・メモリ・バス、例えばDRAM DIMMに掛けに関するものです。
どのような更なる持続的なメモリを説明するためには、ソフトウェアのようなだけNVDIMMs議論は、同じメモリアクセスへのアクセスを可能にすると述べました。メモリセマンティクス、例えばCPUキャッシュの一貫性、DMAダイレクト・メモリ・アクセスの他のデバイスのすべての利点を提供するバッファラインサイズ、バイトアドレッシングCANにアクセスします。これらのセマンティクスを提供するために、CPUが十分に合理的でなければならない遅延デバイスは、CPUの命令へのアクセスをブロックします。低速のため、ブロック単位でアクセスする必要があるのNAND型フラッシュメモリなどの持続性、及び、コンテキストスイッチに十分な長さの時間を必要とする場合。ハードウェアのアクセス時間は、マイクロ秒単位、ナノ秒単位でPMをミリ秒で、NANDフラッシュSSDであるのが典型的です。ハードウェアのメディアの種類に応じて、NVDIMMは少ないDRAMより高速化するかもしれないが、彼のスピードは速さに匹敵します。
NAND FlashコンテンツがDRAMを返すようにするとき今、市場にいくつかのNVDIMM製品、媒体として使用ランタイムDRAM、コンテンツが自動的に再びパワーアップ、パワーダウン時にNANDフラッシュにバックアップされます。これらの製品は、DRAMの性能を提供するが、DRAMと比較して、DIMMのそれぞれは、各Gの小容量、高消費特性を提供するために、データを格納するために追加的な構成要素とバッテリーを必要と 3D XPoint技術の不揮発性媒体は、2015年のように、新興国、インテルとマイクロンの共同研究開発、DRAMよりも高い能力による。耐久性、容量と消費:Tは、各CPUの帯域幅に達し、持続的なメモリフロンティアは、多くの注目を集めました。
ラスティングメモリプログラミングモデル
どのようにアクセスするアプリケーションが持続されているメモリの?そして、メモリの異なるアプリケーションが特定の方法および内容は、永続的な接続を指定必要が揮発性;ない揮発性メモリのように永続的なメモリは、彼は、アプリケーションが彼を見つけることができるように、地域と同じファイル名をする必要がある、匿名です。アプリケーションは、持続性メモリ制御権限にアクセスする必要があります。SNIA TWGは、オペレーティングシステムは、標準のファイルの命名セマンティクスが持続メモリ、権限、およびメモリマッピングを提供し使用することができますので、モデルのプログラミングを推奨しました。
現在、LinuxとWindowsを含むオペレーティングシステムの様々なこのモデルによってサポートされています。
ラスティングメモリプログラミング

DAX
アダプタ図1に示した持続的なメモリ・ファイル・システムは、ページキャッシュシステムを経由せず、永続メモリに直接アクセスすることができます。このような特性は、DAXと呼ばれています。ラスティングメモリプログラミングモデルとDAXのプロパティは、永続的なメモリファイルはMMAP()またはのMapViewOfFileを()関数は、メモリにマップされた同様の兆候で使用することができます示唆しています。図1は、このタイプの右端のビューを形成します。アプリケーションのロード/ストア命令によって、持続性メモリへのダイレクトアクセス。持続性は、カーネルモードとユーザーモードに切り替えることなく、メディアに直接アクセスすることができます。
永続ストレージ
Linuxシステムは、(MSYNCを使用することができます)、またはにfsync()データの永続性を確保するために、Windowsが(FlushViewOfFileを介してデータの永続性を確保することができます)とFlushFileBuffers()。これらの呼び出しは、メモリゲートを作成し、この時点より前のデータは、すべての永続メモリに永続的となっています。歴史的に、メモリゲート・オペレーティング・システムは、ページキャッシュ内のダーティページを検索する必要があり、それらはディスクにフラッシュ。持続性メモリのためにページキャッシュを使用せずに、オペレーティング・システムは、唯一の持続メモリにフラッシュされる変更のCPUのキャッシュにする必要があります。2:
ラスティングメモリプログラミング
図2に示す持続的なドメインの点線インチ このレベルのアーキテクチャ、いずれかのDIMMの点線部分のデータ、またはどのようにライト要求キューWPQメモリコントローラ。データへの十分な力を持っているために、メモリのニーズを持続どちらのリターンは、ボックスは永続的なメディアにフラッシュ破線。この機能は、すでにこの特性とNVDIMMを持って、非同期DRAMブラシと呼ばれています。
X86アーキテクチャは、データがまだCPUのキャッシュに可能性があるため、単純に、データの永続性を保証するものではありません格納された命令を実行する、電源障害後、データが失われます。追加の命令の必要性は、データの永続性を確保光りました。次の表は、彼らがどのように機能するかを説明します。
インテルのCPUのキャッシュは、ドメイン部分を持続し得ることはありません理由を図2及び表1は、混乱することができます。図中の破線のボックス内のCPUのキャッシュ2を含む、技術的に実現可能。
永続的なドメイン拡張子を含めたx86 CPUのキャッシュの問題は、彼が電力を供給するために、実際の容量よりもはるかに多くの電力を必要とする、非常に大きなキャッシュです。プラットフォームは電池を必要とする。この手段。この時、バッテリーを使用してサーバーがサポートする永続メモリは現実的ではありません。しかし、ハードウェア・ベンダーのために、もちろん、それは、その商品でバッテリーが含まれていてもよいです。これは、リフレッシュコマンドを読み出しバッファ表1に記載スキップすることができますが、唯一の唯一の永続的と見なされることが目に見えるグローバルメモリバリアに保存されているので、SFENCE命令がまだ必要であり、これはSFENCEが確保されています。
アプリケーションベンダー計画は、同様のバッテリーを使用するので、すべてのプラットフォーム上で、今後の期待が持続的なドメインにCPUのキャッシュを含めると、そのブラシは、CPUをスキップする場合、BIOSは、オペレーティングシステムに通知することができるように、ACPIにプロパティを追加します。これは最適な方法と同様のMSYNC呼び出しでオペレーティングシステムを可能にします。
永続的なユーザ空間ドメイン点滅
WBINVD例外を、インテルのCPUのユーザーモードの命令モードは、以下の表1をサポートしています。使用CLWB(CLFLUSHOTまたはCLFLUSH)ユーザーとサポートの一時ストレージモードを使用した書き込みキャッシュラインブラシ。
ラスティングメモリプログラミング
これは、カーネルを経由せず、持続性メモリにフラッシュユーザ空間、最適化されたフラッシュと呼ばれるこの機能を可能にします。これは、それぞれの選択この機能に対応するためのオペレーティングシステムおよびハードウェア・プラットフォームに依存します。CPUのサポートにもかかわらず、唯一のアプリケーションのために、オペレーティングシステム、言ったときに最適化されたフラッシュの安全な使用。ファイルシステムのメタデータの変更がMSYNCが点滅必要な場合、オペレーティングシステムは、この制御点を必要とします。
現在の実装がサポートするセキュアなユーザ空間ブラシは絶えず進化です。DAXは、フラッシュ最適化された無条件のサポートを含むWindowsのNTFSファイルシステムによって提供されます。Windowsは永続的な記憶を維持するためのコマンドと同様のCLWB + SFENCEデータの永続性を使用しています。Linuxはext4ので、XFSは、DAXをサポートし、関係なく、ユーザ空間のセキュリティを光りました。一時的な解決策として、Linuxは、デバイス-DAXを提供するアプリケーションは、永続的なメモリデバイスを開くメモリにマップ、耐久性を確保するために、ユーザ空間を書くためにブラシを使用することができます。
Libpmemライブラリは、関数が最適化されたフラッシュが安全であることをアプリケーションに通知します提供します。プログラマが強く特定し、ユーザ空間を書くためにブラシを使用するlibpmemを使用することをお勧めします。LibpmemはブラシSFENCEを書いて、電池検出プラットフォームを用いた場合にも使用されているだけでコール命令に呼び出します。このライブラリは、以下に詳細に説明します。
メモリ挑戦をスティング
、メモリ内のデータ構造の変更のアトミック性の問題が発生した場合。これは、他のスレッドの半分はデータ構造にアクセスしたときにのみデータへの変更をテストしますか?通常、ロック、マルチスレッドプログラミングのデータ構造を保護します。また、時にはハードウェアでアトミック命令を確実にするために使用されます。本論文では、また、このスレッドを変更するための別のスレッドを見て、変更がコミットされている原子の可視性、となっています。
ラスティングメモリプログラミング
Libpmemobjライブラリは、安全性を確保するためにオフにトランザクションの保証を提供します。それは揮発性であるため、電源が故障する前にメモリを持続では、何の問題の書き込み、メモリの状態を中断しません。しかし、持続性メモリは、ステータスの一部は、ブラシの後に続いていることを理解すべきです。インテルは8バイトのストレージは、アトミックの故障を保証するために使用しました。8バイトを超えるには、データの一貫性を保証することはできません。
その他の課題:管理スペース。フィールドはファイルとして永続的なメモリであるため、ファイルシステムは、このスペースを管理することができますが、アプリケーションがメモリにマップされたら、何が起こるかは、アプリケーションファイルに完全に依存します。そして、同様のmalloc関数割り当てメモリは揮発性である、再起動の方法は、持続的なメモリ再接続権を提供していない場合、障害が発生したときにデータの整合性を確保するために、任意の手順を終了していません。メモリプログラミングを持続しても、スペースの割り当ての問題に焦点を当てが必要です。
住所の独立は別の課題です。それは同じアドレスにマッピングされた内側の持続を達成することは技術的には可能ですが、が、他の項目は非現実的であるマップのサイズを変更するとき。アドレス空間配置のランダム化機能は、オペレーティングシステムライブラリ、およびランダムファイルマッピングアドレスを調整します。アドレス永続メモリ内のデータ構造は、ポインタを使用して別のデータ構造を参照すること独立した手段は、ファイルが別のアドレスにマッピングされている場合でも、ポインタは、いくつかの方法で使用されなければなりません。ポインタ相対ではなく絶対的なポインタ、またはデータ構造は、持続性メモリに常駐アプリケーションにオブジェクトIDのいくつかのタイプを使用してを使用して、例えばこれを達成するいくつかの方法、マッピング後の再配置ポインタがあります。
NVMライブラリー
インテルは、マニュアルはhttp://pmem.ioから見ることができ、GitHubのオープンソース、オープンソースライセンスBSDにpmdkライブラリを開発しました。
libpmem:基本ライブラリは、
このライブラリは、比較的単純な、比較的小さい検出CPU命令を含む、最高のコピー指示範囲のサポートを書くためにブラシを使用しています。
libpmemobj:サポートサービス
Libpmemblkとlibpmemlog:特定のユーザーの場合はサポート
永続揮発性メモリ使用:Libmemkind
の概要
成熟し、完全なプログラミングモデルを追加しました2013年のアイデアを。Pmdkライブラリは、永続的なメモリプログラミングを提供するために開発されました。GitHubの上のライブラリオープンソースhttps://github.com/pmem

https://www.snia.org/pm-summit2019
https://www.snia.org/pm-summit2017

おすすめ

転載: blog.51cto.com/yanzongshuai/2485052