Windows Server 2016 の永続メモリサポートによりストレージ IO が強化される

Table of Contents

Windows Server 2016 の永続メモリサポートによりストレージ IO が強化される

分析最高の IO とは... IO がないことです。Windows Server 2016 には、データ ストレージを IO として扱わないようにすることで、その IO 速度を大幅に向上させるコードがあります。

ストレージクラスメモリ(SCM)を永続的なストレージとして使用します。SCMはメモリバス上にあり、CPUに近いため、電源喪失時にも内容が失われません。NVDIMM-Nタイプのデバイスです。これは、ホストシステムのメモリチャネルにフラッシュDIMMを搭載するか、DIMM上にフラッシュメモリを搭載し、電源喪失時にバックアップするDRAM DIMMを使用することで実現できます。

将来のストレージ クラス メモリ メディアの可能性としては、Intel と Micron の 3D XPoint メモリが挙げられます。

JEDEC は NVDIMM を 3 つのクラスに分類しています。

  • NVDIMM-Nは、停電時にDRAMの内容を保存するためにフラッシュを使用するDRAM/フラッシュハイブリッドメモリモジュールです。
  • NVDIMM-Fは、Diablo/WD(SanDisk)製のオールフラッシュDIMM用です。
  • NVDIMM-Pは、永続メモリ(ブロックアドレス可能)として扱われるフラッシュDIMMです。

JEDEC 準拠の N クラス不揮発性 DIMM (NVDIMM-N) ストレージ クラス メモリ デバイスは、Windows Server 2016 および Windows 10 (バージョン 1607) 以降、ネイティブ ドライバーを使用して Windows でサポートされます。

Windows Server 2016 では、NVDIMM-N デバイスをバイト アドレス指定可能およびブロック アドレス指定可能なストレージとして使用できます。たとえば、SQL Server ログ ファイルを NVDIMM-N に保存し、データベース レコードをディスク上に保存することができます。

ブロック ストレージとしての使用について説明している Microsoft のビデオは次のとおりです。

WS2016_NVDIMM_N_ブロックストレージビデオ

Windows Server 2016 で NVDIMM-N をブロック ストレージとして使用する

NVDIMM_N_デプロイメント

NVDIMM-Nの展開

NVDIMM-NはDDR4 DRAMとバックアップ用のフラッシュメモリをベースとしており、現在のディスクデバイスやSSDデバイスと全く同様にブロックインターフェースを備えています。SCMドライバの上位でファイルの読み取りと書き込みのセマンティクス、その下位でメディアと通信するロードストアのセマンティクスを備えています。Microsoftのテストでは、NVMe SSDは68マイクロ秒のレイテンシで55MBpsの速度を実現できることが分かりました。同じ単純なシングルスレッドタスクをDDR4 NVDIMM-Nでブロックモードでアクセスすると、700MBps、レイテンシ5マイクロ秒という結果が出ました。

NVDIMM_N ブロックモードは、Windows Server 2016 で Microsoft 定義の _DSM 仕様によって有効化され、新しい種類のディスクデバイスとして公開されます。Microsoft の記憶域仮想化テクノロジである記憶域スペースで、ストライピング、ミラーリング、ライトバックキャッシュに使用できます。PowerShell コマンドレットを使用して、NVDIMM-N デバイスに関する情報を照会できます。

ストレージクラスメモリは、バイトアドレス指定を使用することで、さらに高速に駆動できます。2つ目のMicrosoftビデオでは、NVDIMM-Nをバイトアドレス指定モード(DAXモード)で使用する方法について説明しています。DAXはダイレクトアクセスボリュームを指します。ファイルはこれらのボリュームにメモリマップされ、データへのアクセスはブロックモードのソフトウェアスタックを経由せずに行われます。これにより、レイテンシがさらに短縮され、アプリがNVDIMM-Nハードウェア(DAXボリューム)に直接アクセスできるようになります。

Windowsには、この目的のために既にメモリマップドファイルインフラストラクチャが存在します。SCMe対応ファイルシステム(NTFS - DAX)内のDAXボリュームは新しいフラグによって識別され、更新はOSストレージスタックを介さずにNVDIMM-Nに直接書き込まれます。NTFS - DAXはSCMドライバーと通信し、SCMドライバーは従来通りNVDIMM-Nメディアと直接通信します。つまり、DAXアプリ(DirectAccessアプリケーション)は、ロードおよびストアセマンティクスを使用して、NVDIMM-Nメディアのメモリマップド領域に直接アクセスできます。

DAX_アーキテクチャ

Windows Server 2016 DAXアーキテクチャ

IOの検出と対応に依存するフィルタードライバーはIOを認識できず、動作しません。つまり、暗号化フィルターも動作しません。ウイルス対策ソフトは、ファイルがいつ変更されたか(ファイルのクローズ)を認識し、それを検出した時点でスキャンを実行するだけで済むため、引き続き動作します。

DAX ボリュームは、次の 2 つのコマンドのいずれかを使用して作成されます。

-> フォーマット n: /dax /q

-> フォーマット-ボリューム-ドライブ文字 n -IsDAX $true

作成されたファイルにはフラグ値が設定されます。このフラグ値は、ボリュームハンドルまたはファイルハンドルを参照するアプリによって確認できます。当然のことながら、これを実現するには既存のアプリコードを変更し、メモリマッピングベースの読み取り/書き込み(ロード/ストア、またはより高速なWindowsの非テンポラル命令)によるデータアクセスを使用する必要があります。

メリットは、アプリがDDR4メモリの速度で永続ストレージにアクセスできるようになることです。競合の激しいデータ構造におけるコンテキストスイッチが減り、数千ものCPUサイクルがより有用な作業に解放されます。

NVMe SSDに対してシングルスレッドで実行した単純な4Kランダム書き込みテストでは、レイテンシは0.07ミリ秒(70マイクロ秒)、帯域幅は約56MBpsでした。同じテストをブロックモードのNVDIMM-Nで実行すると、レイテンシは0.01ミリ秒(10マイクロ秒)、帯域幅は580MBpsとなり、10倍の速度となりました。

ここで、同じテストをバイト アドレス指定可能なモードで実行すると、結果はさらに 8 倍高速になり、c820ns のレイテンシで 8GBps を超えます。

Microsoftは、開発者がDAXボリュームに対応したアプリを開発できるよう、NVML(不揮発性メモリライブラリ)をWindowsに移植する取り組みを進めています。これはGitHubで管理されているツールセットプロジェクト(http://pmem.io/ 参照)で、現在はLinuxで動作しています。

完全にフラッシュで作られた NVDIMM-N ドライブは、フラッシュ バックアップ付きの DRAM DIMM よりも遅くなることに注意してください。XPoint で作られた NVDIMM-N ドライブはフラッシュ DIMM よりも高速ですが、DRAM DIMM よりは遅くなります。DRAM は XPoint よりも高速です。

もちろん、大量の XPoint NVDIMM-N で重要なディスク ドライブまたは SSD ストレージを置き換え、DRAM をそれほど使用していない場合、システムは高速化しますが、完全な DRAM または DRAM NVDIMM-N システムほど高速ではありません。

このMicrosoftの動画の最後には、さらに詳しい情報が掲載されています。NVDIMM-Nのスーパーチャージによるメリットが期待できるアプリをお持ちの方は、ぜひご覧ください。最高のIOとは、まさにIOがないことです。®

Discover More