了解和部署持續性記憶體

適用于: Azure Stack HCI、版本 20H2;Windows伺服器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 完全支援持續性記憶體,包括儲存空間 Direct。

持續性記憶體技術 Windows Server 2016 Azure Stack HCI v20H2/Windows Server 2019
持續模式中 的 nvdimm-n 支援 支援
Intel Optane ™ 應用程式直接模式中的 DC 持續性記憶體 不支援 支援
Intel Optane ™ 記憶體模式中的 DC 持續性記憶體 支援 支援

Intel Optane DC 持續性記憶體支援 記憶體 (volatile) 和 應用程式直接 (持續) 作業模式。 若要使用持續性記憶體模組作為儲存體(伺服器工作負載的主要使用案例),您必須使用應用程式直接模式。 記憶體模式基本上使用持續性記憶體作為較慢的 RAM,通常不符合伺服器工作負載的效能需求。 記憶體模式與 DAX 不同,它是一種持續性的儲存磁片區,可以使用類似記憶體的語義來存取。

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

注意

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

因為持續性記憶體模組未定型或系統啟動時失敗,所以會發生這種存取遺失的情況。 在這種情況下,系統上任何持續性記憶體模組上的所有 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。

如果您密切觀賞影片,您會發現還有更多 jaw 的延遲。 即使是超過 13.7 M IOPS,Windows 中的檔案系統會回報持續低於40μs 的報告延遲! (是微秒的符號,第一次百萬分之一秒。 ) 這種速度比一般全快閃廠商極光榮立即公告的速度更快。

儲存空間直接在 Windows Server 2019 和 Intel ® Optane ™ DC 持續性記憶體中,提供突破性的效能。 這種高於 13.7 M IOPS 的 HCI 基準測試(伴隨著可預測且極低的延遲)比我們先前領先業界的 6.7 M IOPS 基準更多。 更多,這次只需要12個伺服器節點的 — 25% 以上。

測試硬體是一種12部伺服器的叢集,其設定為使用三向鏡像和分隔的 ReFS 磁片區、 12 x intel ® S2600WFT、 384 GiB memory、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% 隨機讀取 13800000 IOPS
4K 90/10% 隨機讀取/寫入 9450000 IOPS
2 MB 連續讀取 549 GB/秒的輸送量

後續步驟

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