了解和部署持續性記憶體

適用于: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 支援使用持續性記憶體作為快取或容量磁碟機。 不過,根據定價模型,持續性記憶體可提供最大的值做為快取,或作為記憶體對應資料的少量專用儲存體。 在大多數情況下,持續性記憶體磁碟機將會自動用來作為快取磁碟機,而任何較慢的磁碟機將會作為容量磁碟機。 如需有關如何設定快取和容量磁碟機的詳細資訊,請參閱了解存放集區快取規劃磁碟區

持續性記憶體概念

本節說明在 Windows Server 和 Azure Stack HCI 環境中部署持續性記憶體以降低 I/O 瓶頸並改善效能時,您必須了解的基本概念。

存取方法

有兩種方法可以存取持續性記憶體。 其中包括:

  • 區塊存取,以儲存體形式運作,提供應用程式相容性。 在此設定中,資料會照常通過檔案系統和儲存體堆疊。 您可以搭配 NTFS 和 ReFS 使用此設定,並建議用於大部分的使用案例。
  • 直接存取 (DAX),以記憶體形式運作,達到最低的延遲。 您只能將 DAX 與 NTFS 搭配使用。 如果未正確使用 DAX,則可能會遺失資料。 強烈建議您使用 DAX 時連帶開啟區塊轉譯資料表 (BTT),以降低寫入損毀的風險。 若要深入了解,請參閱了解及設定 DAX

警告

Azure Stack HCI 環境不支援 DAX。 Azure Stack HCI 只支援區塊存取,並開啟 BTT。

區域

區域是一組一個或多個持續性記憶體模組。 區域通常會建立為交錯式集合,其中會將多個持續性記憶體模組顯示為單一邏輯虛擬位址空間,以增加輸送量。 為增加可用頻寬,相鄰的虛擬位址會分散到多個持續性記憶體模組。 區域通常可以在伺服器平台的 BIOS 中建立。

PmemDisks

若要使用持續性記憶體作為存放裝置,您必須至少定義一個 PmemDisk,也就是主機上的虛擬硬碟 (VHD),列舉為虛擬機器 (VM) 內的 PmemDisk。 PmemDisk 是一種連續位址範圍的非揮發性記憶體,您可以將其視為硬碟分割區或 LUN。 您可以使用 Windows PowerShell Cmdlet 來建立多個 PmemDisks,用以分割可用的原始容量。 每個持續性記憶體模組都包含標籤儲存體區域 (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 持續性記憶體支援「記憶體」(可變更) 和「應用程式直接」(持續性) 作業模式。 若要使用持續性記憶體模組作為儲存體 (伺服器工作負載的主要使用案例),您必須使用應用程式直接模式。 記憶體模式基本上會使用持續性記憶體作為較慢的 RAM,這通常不符合伺服器工作負載的效能需求。 記憶體模式與 DAX 不同,這是一種持續性的儲存磁片區,可以使用類似記憶體的語意進行存取。

作業模式通常會由原始裝置製造商預先設定。

注意

如果重新啟動的系統具有多個採用應用程式直接模式,且分割成多個 PmemDisks 的 Intel® Optane™ 持續性記憶體模組,您可能會失去部分或所有相關邏輯儲存體磁碟的存取權。 此問題發生於版本在 1903 之前的 Windows Server 2019 版本。

發生這種存取權遺失的原因是持續性記憶體模組未定型,或系統啟動時失敗。 在這種情況下,系統上任何持續性記憶體模組上的所有 PmemDisks 都會失敗,包括未實際對應至失敗模組的 PmemDisks。

若要還原所有 PmemDisks 的存取權,請取代失敗的模組

如果模組在 Windows Server 2019 1903 版或更新版本上失敗,您將無法存取實際對應至受影響模組的 PmemDisks,其他則不受影響。

設定持續性記憶體

如果您使用 Intel Optane 持續性記憶體,請依照此處的指示進行。 如果您使用的是其他廠商的持續性記憶體模組,請參閱其說明文件。

若要建立支援 BTT 的 PmemDisk,請使用 New-VHD Cmdlet:

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

VHD 副檔名必須是 "vhdpmem"。

您也可以將未啟用 BTT 的 VHD 轉換成使用 Convert-VHD Cmdlet (反之亦然):

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

轉換之後,新的 VHD 會與原始 VHD 擁有相同的命名空間 GUID。 這可能會導致問題,特別是當兩者都連接到相同的 VM 時。 若要為轉換的 VHD 建立新命名空間 UUID,請使用 Set-VHD Cmdlet:

Set-VHD -ResetDiskIdentifier .\pmemtest_btt.vhdpmem

了解交錯式集合

交錯式集合通常可在伺服器平台的 BIOS 中建立,讓多個持續性記憶體裝置以單一磁碟的形式存在於主機作業系統上,以增加該磁碟的輸送量。

注意

Windows Server 2016 不支援持續性記憶體模組的交錯式集合。

如同前述,持續性記憶體模組位於標準 DIMM (記憶體) 插槽中,使資料更接近處理器。 此設定可減少延遲並提高擷取效能。 為進一步增加輸送量,兩個以上的持續性記憶體模組會建立 n 向交錯式集合,以進行等量讀取/寫入作業。 最常見的設定是雙向或四向交錯。

您可以使用 Get-PmemDisk PowerShell Cmdlet 來檢查這類邏輯磁碟的設定,如下所示:

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 Cmdlet:

(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 Cmdlet 來檢查系統上所有未指派給邏輯持續性記憶體磁碟的持續性記憶體區域:

Get-PmemUnusedRegion

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

若要查看系統中的所有 PMem 裝置資訊,包括裝置類型、位置、健康情況和運作狀態等等,請執行 Get-PmemPhysicalDevice Cmdlet:

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 區域,因此我們可以建立新的持續性記憶體磁碟。 我們可以藉由執行下列 Cmdlet,使用未使用的區域來建立多個持續性記憶體磁碟:

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-PhysicalDisk | Where MediaType -eq SCM 而不是 Get-PmemDisk 以取得相同的結果。 新建立的持續性記憶體磁碟會對應到 PowerShell 和 Windows Admin Center 中出現的磁碟機。

取代持續性記憶體

如果您必須更換失敗的模組,則必須重新佈建 PMem 磁碟 (請參考我們先前所述的步驟)。

進行疑難排解時,您可能必須使用 Remove-PmemDisk。 此 Cmdlet 會移除特定的持續性記憶體磁碟。 您可以藉由執行下列 Cmdlet 來移除所有目前的持續性記憶體磁碟:

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.

重要

移除持續性記憶體磁碟會導致該磁碟上的資料遺失。

您可能需要的另一個 Cmdlet 是 Initialize-PmemPhysicalDevice。 此 Cmdlet 會初始化實體持續性記憶體裝置上的標籤儲存體區域,並可清除裝置上損毀的標籤儲存體資訊。

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 基準測試數一般是藉由測量讀取來達成,特別是如果儲存體系統具有常識性最佳化,以盡可能從本機複本讀取時。 儲存空間直接存取已最佳化以採取此模式。

使用唯讀作業來測量時,叢集會提供 13798674 IOPS。

如果您仔細觀看影片,延遲可能會讓您感到驚訝。 即使是超過 13.7 M IOPS,Windows 中的檔案系統會回報持續低於 40µs 的報告延遲! (這是微秒單位的符號,即百萬分之一秒。) 這個速度比一般全快閃供應商現今宣傳的速度快上一個量級。

Windows Server 2019 中的儲存空間直接存取和 Intel® Optane™ DC 持續性記憶體一同提供突破性的效能。 這種高於 13.7M IOPS 的 HCI 基準測試,加上可預測且極低的延遲,乃是我們先前領先業界的 6.7M IOPS 基準兩倍以上。 除此之外,這次我們只需要 12 個伺服器節點,比過去少 25%。

測試硬體是 12 部伺服器的叢集,設定為使用三向鏡像和分隔的 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。

下表顯示完整的效能數據。

基準測試 效能
4K 100% 隨機讀取 1380 萬 IOPS
4K 90/10% 隨機讀取/寫入 945 萬 IOPS
2 MB 循序讀取 549 GB/秒的輸送量

後續步驟

如需相關資訊,另請參閱: