永続的なメモリの理解とデプロイ

適用対象: Azure Stack HCI、バージョン 22H2 および 21H2。Windows Server 2022、Windows Server 2019、Windows Server 2016、Windows 10

永続メモリ (または PMem) は、電源サイクルをまたいでコンテンツを保持し、最上位層ストレージとして使用できる新しい種類のメモリ テクノロジです。そのため、PMem は "ストレージ クラス メモリ" または SCM と呼ばれる場合もあります。 この記事では、永続メモリのバックグラウンドと、それを Azure Stack HCI および Windows Server に最上位ストレージ層として配置する方法について説明します。

永続メモリとは

永続メモリは、標準 DIMM (メモリ) スロットに収まる不揮発性メディアの一種です。 DRAM よりも低速ですが、SSD や NVMe よりもスループットが優れています。 DRAM と比べて、永続メモリ モジュールははるかに大容量で、GB あたりのコストも低くなります。ただし、NVMe に比べてまだコストは高価です。 予期しない停電、ユーザーによるシャットダウン、システム クラッシュなどでシステム電源がダウンした場合でも、メモリの内容は維持されます。 つまり、永続メモリ モジュールは、超高速で永続的なストレージとして使用できます。

Azure Stack HCI と Windows Server 2019 では、永続メモリをキャッシュまたは容量ドライブとして使用することがサポートされています。 ただし、価格モデルを考えると、永続メモリはキャッシュとして使用するか、メモリ マッピング データ用の少量の専用ストレージとして使用するのが最も効果的です。 ほとんどの場合、永続メモリ ドライブは自動的にキャッシュ ドライブとして使用され、これより低速なドライブは容量ドライブとして使用されます。 キャッシュドライブと容量ドライブを設定する方法の詳細については、「記憶域プール キャッシュについて」とボリュームの計画に関する記事を参照してください。

永続メモリの概念

このセクションでは、I/O のボトルネックを減らしてパフォーマンスを向上するために、Windows Server 環境や Azure Stack HCI 環境に永続メモリを配置する上で理解する必要がある基本的な概念について説明します。

アクセス方法

永続メモリにアクセスするには、2 つの方法があります。 これらは次のとおりです。

  • ブロック アクセス: これは、アプリの互換性のためにストレージのように動作します。 この構成で、データはファイル システムとストレージ スタックを通常どおりに流れます。 この構成は、NTFS や ReFS と組み合わせて使用でき、ほとんどのユース ケースに推奨されます。
  • 直接アクセス (DAX) : これはメモリのように動作して、最低遅延を実現します。 DAX は、NTFS とのみ組み合わせて使用できます。 DAX は、正しく使用しないと、データが失われるおそれがあります。 書き込み時の欠落リスクを軽減するため、DAX はブロック変換テーブル (BTT) をオンにして使用することを強くお勧めします。 詳細については、「DAX の理解と構成」を参照してください。

警告

DAX は Azure Stack HCI 環境ではサポートされていません。 Azure Stack HCI では、BTT をオンに設定したブロック アクセスのみをサポートしています。

リージョン

領域は、1 つ以上の永続メモリ モジュールのセットです。 多くの場合、領域は、スループットを向上させる目的で複数の永続メモリ モジュールが 1 つの論理仮想アドレス空間のようになっているインターリーブ セットとして作成されます。 使用可能な帯域幅を増やすため、隣接する仮想アドレスは複数の永続メモリ モジュールに分散されています。 通常、領域はサーバー プラットフォームの BIOS で作成できます。

PmemDisk

永続メモリをストレージとして使用するには、少なくとも 1 つの PmemDisk を定義する必要があります。これは、仮想マシン (VM) 内で PmemDisk として列挙するホスト上の仮想ハード ディスク (VHD) です。 PmemDisk は、不揮発性メモリの隣接したアドレス範囲であり、ハードディスク パーティションや LUN のように考えることができます。 Windows PowerShell コマンドレットを使用して複数の PmemDisk を作成し、使用可能な生の容量を分割することができます。 各永続メモリ モジュールには、構成メタデータを格納するラベル ストレージ領域 (LSA) が含まれています。

ブロック変換テーブル

ソリッドステート ドライブとは異なり、永続メモリ モジュールでは、電源障害またはシステムの停止の場合に発生するおそれがある "書き込み時の欠落" によってデータが危険にさらされることから保護することはできません。 BTT では、永続メモリ デバイスにアトミック セクター更新セマンティクスを提供し、ブロックに似たセクター書き込みを実質的に可能にすることによって、このリスクが軽減されます。これにより、障害が発生した場合に、アプリで新旧のデータが混ざるのを避けることができます。 ほぼすべてのケースで、BTT をオンにすることを強くお勧めします。 BTT は PmemDisk のプロパティなので、PmemDisk の作成時にオンにする必要があります。

ブロック アクセス モードでは、すべてのデータでブロック セマンティクスが使用されるので、BTT を使用することをお勧めします。 BTT は DAX モードでも役立ちます。これは、アプリケーションのデータ操作ではブロック セマンティクスが使用されなくても、メタデータ操作ではこれが使用されるためです。 すべてのアプリケーション操作で DAX セマンティクスを使用したメモリ マップト ファイルを使用する場合でも、メタデータ操作で書き込み時の欠落が発生するおそれがあります。したがって、そのような場合でも BTT をオンにすることには価値があります。

サポートされるハードウェア

次の表に、Azure Stack HCI と Windows Server でサポートされている永続メモリ ハードウェアを示します。 永続メモリは、記憶域スペース ダイレクトを含めて、Windows Server 2019 で完全にサポートされています。

永続メモリのテクノロジ Windows Server 2016 Azure Stack HCI v20H2 または Windows Server 2019
永続モードの NVDIMM-N サポートされています サポート
アプリ ダイレクト モードの Intel Optane™ DC 永続メモリ サポートされていません サポートされています
メモリ モードの Intel Optane™ DC 永続メモリ サポート サポートされています

Intel Optane DC 永続メモリでは、Memory (揮発性) 動作モードとアプリ ダイレクト (永続) 動作モードの両方がサポートされています。 永続メモリ モジュールをストレージとして使用するには (サーバー ワークロードに対する主なユース ケース)、アプリ ダイレクト モードを使用する必要があります。 メモリ モードでは、永続メモリは基本的に低速な RAM として使用されます。これは通常、サーバー ワークロードのパフォーマンス要件を満たしません。 メモリ モードは DAX (メモリに似たセマンティクスを使用してアクセスできる永続的なストレージ ボリューム) とは異なります。

動作モードは、多くの場合、元のデバイス製造元によって事前構成されています。

注意

アプリ ダイレクト モードで、複数の PmemDisk に分割されている複数の Intel® Optane™ 永続メモリ モジュールを持つシステムを再起動すると、関連する論理ストレージ ディスクの一部またはすべてへのアクセスが失われるおそれがあります。 この問題は、バージョン 1903 よりも前のバージョンの Windows Server 2019 で発生します。

アクセスが失われるのは、永続メモリ モジュールがトレーニングされていないか、システムの起動時にエラーが発生したためです。 このような場合、そのシステムのすべての永続メモリ モジュール上のすべての PmemDisk でエラーが発生します。これには、障害が発生したモジュールに物理的にマップされていないものも含まれます。

すべての PmemDisk に対するアクセスを復元するには、障害が発生したモジュールを交換します。

Windows Server 2019 バージョン 1903 以降のバージョンでモジュールに障害が発生する場合は、影響を受けたモジュールに物理的にマップされている PmemDisk のみにアクセスできなくなり、それ以外への影響はありません。

永続メモリを構成する

Intel Optane 永続メモリを使用している場合は、こちらの手順に従います。 別のベンダーの永続メモリ モジュールを使用している場合は、そのドキュメントを参照してください。

BTT をサポートする PmemDisk を作成するには、New-VHD コマンドレットを使用します。

New-VHD E:\pmemtest.vhdpmem -Fixed -SizeBytes 1GB -AddressAbstractionType BTT

VHD の拡張子は、vhdpmem である必要があります。

BTT が有効になっていない VHD を、Convert-VHD コマンドレットを使用してそれが有効なものに変換すること (またはその逆) もできます。

Convert-VHD .\pmemtest_nobtt.vhdpmem -AddressAbstractionType BTT -DestinationPath pmemtest_btt.vhdpmem

変換後、新しい VHD の名前空間 GUID は元のものと同じになります。 これが原因で、特に両者が同一の VM にアタッチされている場合に、問題が発生することがあります。 変換された VHD に対する新しい名前空間 UUID を作成するには、Set-VHD コマンドレットを使用します。

Set-VHD -ResetDiskIdentifier .\pmemtest_btt.vhdpmem

インターリーブ セットの概要

インターリーブ セットは、通常、サーバー プラットフォームの BIOS で作成することができます。ホスト オペレーティング システムから複数の永続メモリ デバイスが単一のディスクのように見なされ、そのディスクのスループットが向上します。

注意

Windows Server 2016 では、永続メモリ モジュールのインターリーブ セットはサポートされていません。

永続メモリ モジュールは標準 DIMM (メモリ) スロットにあるため、データとプロセッサの距離がより近くなります。 この構成により、待機時間が短縮され、フェッチ パフォーマンスが向上します。 スループットをさらに向上させるには、2 つ以上の永続メモリ モジュールで n ウェイ インターリーブ セットを作成して、読み取りと書き込みの操作をストライピングします。 最も一般的な構成は、2 ウェイまたは 4 ウェイ インターリーブです。

Get-PmemDisk PowerShell コマンドレットを使用して、このような論理ディスクの構成を次のように確認できます。

Get-PmemDisk

DiskNumber Size   HealthStatus AtomicityType CanBeRemoved PhysicalDeviceIds UnsafeShutdownCount
---------- ----   ------------ ------------- ------------ ----------------- -------------------
2          252 GB Healthy      None          True         {20, 120}         0
3          252 GB Healthy      None          True         {1020, 1120}      0

論理 PMem ディスク 2 では物理デバイス Id20 と Id120 が使用され、論理 PMem ディスク 3 では物理デバイス Id1020 と Id1120 が使用されていることを確認できます。

論理ドライブで使用されているインターリーブ セットに関するさらに詳細な情報を取得するには、Get-PmemPhysicalDevice コマンドレットを実行します。

(Get-PmemDisk)[0] | Get-PmemPhysicalDevice

DeviceId DeviceType           HealthStatus OperationalStatus PhysicalLocation FirmwareRevision Persistent memory size Volatile memory size
-------- ----------           ------------ ----------------- ---------------- ---------------- ---------------------- --------------------
20       Intel INVDIMM device Healthy      {Ok}              CPU1_DIMM_C1     102005310        126 GB                 0 GB
120      Intel INVDIMM device Healthy      {Ok}              CPU1_DIMM_F1     102005310        126 GB                 0 GB

インターリーブ セットを構成する

インターリーブ セットを構成するには、Get-PmemUnusedRegion コマンドレットを実行して、そのシステム上の論理永続メモリ ディスクに割り当てられていないすべての永続メモリの領域を確認します。

Get-PmemUnusedRegion

RegionId TotalSizeInBytes DeviceId
-------- ---------------- --------
       1     270582939648 {20, 120}
       3     270582939648 {1020, 1120}

デバイスの種類、場所、正常性、動作状態など、システム内のすべての PMem デバイスの情報を確認するには、Get-PmemPhysicalDevice コマンドレットを実行します。

Get-PmemPhysicalDevice

DeviceId DeviceType           HealthStatus OperationalStatus PhysicalLocation FirmwareRevision Persistent memory size Volatile
                                                                                                                      memory size
-------- ----------           ------------ ----------------- ---------------- ---------------- ---------------------- --------------
1020     Intel INVDIMM device Healthy      {Ok}              CPU2_DIMM_C1     102005310        126 GB                 0 GB
1120     Intel INVDIMM device Healthy      {Ok}              CPU2_DIMM_F1     102005310        126 GB                 0 GB
120      Intel INVDIMM device Healthy      {Ok}              CPU1_DIMM_F1     102005310        126 GB                 0 GB
20       Intel INVDIMM device Healthy      {Ok}              CPU1_DIMM_C1     102005310        126 GB                 0 GB

使用可能な未使用の PMem 領域があるので、新しい永続メモリ ディスクを作成できます。 その未使用の領域を使用し、次のコマンドレットを実行することにより、複数の永続メモリ ディスクを作成できます。

Get-PmemUnusedRegion | New-PmemDisk
Creating new persistent memory disk. This may take a few moments.

これが完了したら、次を実行することにより結果を確認できます。

Get-PmemDisk

DiskNumber Size   HealthStatus AtomicityType CanBeRemoved PhysicalDeviceIds UnsafeShutdownCount
---------- ----   ------------ ------------- ------------ ----------------- -------------------
2          252 GB Healthy      None          True         {20, 120}         0
3          252 GB Healthy      None          True         {1020, 1120}      0

Get-PmemDisk の代わりに Get-PhysicalDisk | Where MediaType -eq SCM を実行しても同様の結果が得られます。 新しく作成された永続メモリ ディスクは、PowerShell および Windows Admin Center に表示されるドライブと 1 対 1 で対応します。

永続メモリを交換する

障害が発生したモジュールを交換する必要がある場合は、その PMem ディスクを再プロビジョニングする必要があります (前に説明した手順を参照してください)。

トラブルシューティングを行うために、Remove-PmemDisk を使用することが必要になる場合があります。 このコマンドレットを実行すると、特定の永続メモリ ディスクが削除されます。 次のコマンドレットを実行することにより、現在の永続メモリ ディスクをすべて削除することもできます。

Get-PmemDisk | Remove-PmemDisk

cmdlet Remove-PmemDisk at command pipeline position 1
Supply values for the following parameters:
DiskNumber: 2

This will remove the persistent memory disk(s) from the system and will result in data loss.
Remove the persistent memory disk(s)?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): Y
Removing the persistent memory disk. This may take a few moments.

重要

永続メモリ ディスクを削除すると、そのディスクのデータは失われます。

必要になる場合があるもう 1 つのコマンドレットは、Initialize-PmemPhysicalDevice です。 このコマンドレットを実行すると、その物理永続メモリ デバイス上のラベル ストレージ領域は初期化され、そのデバイス上の破損したラベル ストレージ情報がクリアされます。

Get-PmemPhysicalDevice | Initialize-PmemPhysicalDevice

This will initialize the label storage area on the physical persistent memory device(s) and will result in data loss.
Initializes the physical persistent memory device(s)?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): A
Initializing the physical persistent memory device. This may take a few moments.
Initializing the physical persistent memory device. This may take a few moments.
Initializing the physical persistent memory device. This may take a few moments.
Initializing the physical persistent memory device. This may take a few moments.

重要

Initialize-PmemPhysicalDevice を実行すると、永続メモリのデータが失われます。 これは、永続メモリ関連の問題を修正するための最後の手段としてのみ使用してください。

Microsoft Ignite 2018 で示された実際の永続メモリの動作

永続メモリのいくつかの利点を、Microsoft Ignite 2018 のこちらのビデオで確認できます。

フォールト トレランスを備えるストレージ システムでは、書き込みの分散コピーが必ず行われます。 このような操作はネットワークを経由するので、バックエンドの書き込みトラフィックが増幅することになります。 このため、IOPS ベンチマークの絶対最大値は通常、読み取りのみを測定することで達成されます。そのストレージ システムで、可能な場合は常にローカル コピーから読み取るように常識的な最適化がなされている場合は特にそのようになります。 記憶域スペース ダイレクトは、そうなるように最適化されています。

読み取り操作のみを使用して測定した場合、クラスターは 13,798,674 IOPS を実現しました。

ビデオをよく見ると、さらに驚くべきなのはその待機時間であることがわかります。 1,370 万を超える IOPS でも、Windows のファイル システムが報告する待機時間は常に 40 µs 未満です。 (これはマイクロ秒の記号で、100 万分の 1 秒を表します)。この速度は、一般的なすべてのフラッシュ ベンダーが誇らしげに宣伝しているものより 1 桁高速です。

また、Windows Server 2019 の記憶域スペース ダイレクトと Intel® Optane™ DC 永続メモリにより、画期的なパフォーマンスが実現されています。 1,370 万を超える IOPS というこの HCI ベンチマークは、予測可能な超低遅延と共に、Microsoft が以前に記録した 670 万 IOPS という業界トップレベルのベンチマークの 2 倍以上の記録です。 さらに、今回は必要なサーバー ノードが 12 にすぎません。これは前回より 25% 少なくなっています。

このテスト ハードウェアは、3 ウェイ ミラーリングの区切られた ReFS ボリューム、12 x Intel® S2600WFT、384 GiB メモリ、2 x 28 コア "CascadeLake"、キャッシュとして 1.5 TB Intel® Optane™ DC 永続メモリ、容量として 32 TB NVMe (4 x 8 TB Intel® DC P4510)、2 x Mellanox ConnectX-4 25 Gbps を使用するように構成された 12 サーバー クラスターでした。

次の表に、完全なパフォーマンス値を示します。

ベンチマーク パフォーマンス
4K 100% ランダム読み取り 1,380 万 IOPS
4K 90/10% ランダム読み取りと書き込み 945 万 IOPS
2 MB シーケンシャル読み取り 549 GB/s スループット

次のステップ

関連情報については、以下もご覧ください。