永続メモリ (PM) テクノロジは、非揮発性メディアへのバイト レベルのアクセスを提供すると同時に、データの格納または取得の待機時間を大幅に短縮します。 システムのメモリと従来のストレージの間に新しい層が作成されます。 永続的なメディアへの高速書き込みに依存するプログラムやスケーリングするプログラムは、PM の恩恵を受けることができます。
この記事の目的は、非揮発性メモリ ライブラリ (NVML) を Visual Studio プロジェクトに統合して使いやすくする方法について説明することです。
手記
永続メモリは、ストレージ クラス メモリ (SCM) とも呼ばれます。
PM と NVML
永続メモリの最初のサポートは、Windows Server 2016 と Windows 10 Anniversary Update (1607) で導入されました。 簡単な概要については、次の 2 つの Channel9 ビデオを参照してください。
- Windows Server 2016 で非揮発性メモリ (NVDIMM-N) をブロック 記憶域として使用する
- Windows Server 2016 で非揮発性メモリ (NVDIMM-N) を Byte-Addressable 記憶域として使用する
開発者が永続的なメモリオファーの利点を活用できるように、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 プロジェクトを開き、"ソリューション エクスプローラー" でプロジェクトの名前を右クリックします。
- 結果のポップアップの下部にあるプロジェクトの設定ウィンドウを開きます。
- [Configuration Properties -> C/C++] に移動し、ヘッダー (C:\NVML\inc) を格納したフォルダーを [追加のインクルード ディレクトリ] フィールドに追加します。
- 次に、[構成プロパティ -> リンカー] に移動し、ライブラリ (C:\NVML\lib) を保存したフォルダーを [追加のライブラリ ディレクトリ] フィールドに追加します。
- 次に、Windows Server 2016 または Windows 10 Anniversary Update のプロジェクトを対象にしていることを確認します。
- [構成プロパティ -> 全般] に移動し、[ターゲット プラットフォーム バージョン] フィールドを "10.0.14393.0" に設定し、
- [Configuration Properties -> C/C++] に移動し、[プリプロセッサ] フィールドに "NTDDI_VERSION=NTDDI_WIN10_RS1;" を追加します。
- コードにヘッダーを含め、必要なライブラリにリンクする
- この時点で、他のヘッダー ファイルと同様に、使用するヘッダー ファイルをコードに含めることができます。 たとえば、libpmem を使用するには、次のようにします。
- "#include <libpmem.h>" と
- "構成プロパティ -> リンカー -> 入力 -> 追加依存関係" に "libpmem.lib" を追加する
この時点で、コード内でライブラリの関数を直接呼び出し、それらを利用する準備が整いました。