Windows での永続メモリ プログラミング - NVML 統合
永続メモリ (PM) テクノロジは、非揮発性メディアへのバイト レベルのアクセスを提供すると同時に、データの格納または取得の待機時間を大幅に短縮します。 システムのメモリと従来のストレージの間に新しい層が作成されます。 永続的なメディアへの高速書き込みによって依存またはスケーリングされるプログラムは、PM の恩恵を受けることができます。
この記事の目的は、非揮発性メモリ ライブラリ (NVML) を Visual Studio プロジェクトに簡単に統合する方法について説明することです。
注意
永続メモリは、ストレージ クラス メモリ (SCM) とも呼ばれます。
PM と NVML
永続メモリの最初のサポートは、Windows Server 2016 と Windows 10 Anniversary Update (1607) で導入されました。 簡単な概要については、次の 2 つの Channel9 ビデオをチェックします。
- Using Non-volatile Memory (NVDIMM-N) as Block Storage in Windows Server 2016 (Windows Server 2016 で非揮発性メモリ (NVDIMM-N) をブロック記憶域として使用する)
- Using Non-volatile Memory (NVDIMM-N) as Byte-Addressable Storage in Windows Server 2016 (Windows Server 2016 で非揮発性メモリ (NVDIMM-N) をバイト単位のアクセスが可能な記憶域として使用する)
開発者が永続的なメモリ オファーの利点を活用できるように、Microsoft は非揮発性メモリ ライブラリ (NVML) を Windows に導入する取り組みにも貢献しています。 このライブラリには、アプリケーションを永続メモリ対応にするためのさまざまなツールが用意されています。 たとえば、PM 対応のキー値ストアを簡単に作成して、非常に高速な検索とストアを実現できるコードが含まれています。 サンプルを含む NVML の詳細については、 NVM ライブラリを参照してください。
NVML を Visual Studio プロジェクトに統合する
- NVML ライブラリ のファイルとヘッダーをダウンロードする
- NVML は GitHub で管理されています。 ソースを自分でコンパイルすることも、NVML バージョン 1.2 - Windows Technical Preview から直接コンパイル済みバイナリをダウンロードすることもできます。
ライブラリ ファイルとヘッダーを、選択したディレクトリ ("C:\NVML\lib" や "C:\NVML\inc" など) にそれぞれ配置します。
次のようにプロジェクトを構成します。
- Visual Studio プロジェクトを開き、"ソリューション エクスプローラー" でプロジェクトの名前を右クリックします。
- 結果のポップアップの下部にあるプロジェクトの設定ウィンドウを開きます。
- [構成プロパティ -> C/C++] に移動し、ヘッダー (C:\NVML\inc) を格納したフォルダーを [追加のインクルード ディレクトリ] フィールドに追加します。
- 次に、[構成プロパティ -> リンカー] に移動し、ライブラリを格納したフォルダー (C:\NVML\lib) を [追加のライブラリ ディレクトリ] フィールドに追加します。
- 次に、Windows Server 2016または Anniversary Update のプロジェクトをターゲットWindows 10確認します。
- [構成プロパティ -> 全般] に移動し、[ターゲット プラットフォーム バージョン] フィールドを "10.0.14393.0" に設定し、
- [構成プロパティ -> C/C++] に移動し、"プリプロセッサ" フィールドに "NTDDI_VERSION=NTDDI_WIN10_RS1;" を追加します。
- コードにヘッダーを含め、必要なライブラリにリンクする
- この時点で、他のヘッダー ファイルと同様に、使用するヘッダー ファイルをコードに含めることができます。 たとえば、libpmem を使用するには、次のようにします。
- "#include <libpmem.h>" を追加し、
- "構成プロパティ - リンカー - 入力 ->>> 追加の依存関係" に "libpmem.lib" を追加する
この時点で、コード内でライブラリの関数を直接呼び出し、それらを利用する準備ができました。