閱讀英文

共用方式為


瞭解及部署永續性記憶體

適用於: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),其運作方式就像記憶體一樣,以取得最低的延遲。 您只能搭配NTFS使用DAX。 如果您未正確使用 DAX,可能會遺失數據。 強烈建議您使用 DAX 搭配 區塊轉譯表 (BTT) 開啟,以降低撕裂寫入的風險。 若要深入瞭解,請參閱 了解及設定 DAX

警告

Azure Stack HCI 環境不支援 DAX。 Azure Stack HCI 僅支持封鎖存取,且 BTT 已開啟。

地區

區域是一組一或多個持續性記憶體模組。 區域通常會創建成 交錯組, 其中多個持續性記憶體模組呈現為單一邏輯虛擬位址空間,以增加吞吐量。 為了增加可用的頻寬,相鄰的虛擬位址會分散到多個永續性記憶體模組。 區域通常可以在伺服器平臺的 BIOS 中建立。

PmemDisks

若要使用永續性記憶體作為存儲,您必須定義至少一個 PmemDisk,這是主機上的虛擬硬碟(VHD),會在虛擬機(VM)中列舉為 PmemDisk。 PmemDisk 是連續尋址的非揮發性記憶體範圍,您可以將其視為硬碟磁碟分區或 LUN。 您可以使用 Windows PowerShell Cmdlet 來建立多個 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 Persistent Memory 同時支援 記憶體(易失性)和 App Direct(持久性)作業模式。 若要使用持續性記憶體模組作為記憶體,這是伺服器工作負載的主要使用案例,您必須使用應用程式直接存取模式。 記憶體模式基本上會使用持續性記憶體作為較慢的 RAM,這通常不符合伺服器工作負載的效能需求。 記憶體模式與 DAX 不同,DAX 是一種可以用類似記憶體的語意來存取的永久性儲存體。

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

注意

當您重新啟動一個在 App Direct 模式中包含多個 Intel® Optane™ 永續性記憶體模組且被劃分為多個 PmemDisk 的系統時,您可能會失去部分或全部相關邏輯儲存磁碟的存取權。 此問題發生在早於 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」。

您也可以使用 Convert-VHD cmdlet,將未啟用 BTT 的 VHD 轉換成已啟用 BTT 的 VHD,反之亦然:

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 基準測試數值通常是藉由僅測量讀取操作來達成,特別是如果儲存系統具備合理優化,盡可能從本地副本讀取。 Storage Spaces Direct 已被優化以達成此目的。

使用只讀作業測量時,叢集會傳遞 13,798,674 IOPS。

如果您仔細觀看影片,您會發現更令人驚訝的是延遲。 即使在超過 13.7 M IOPS 的情況下,Windows 中的文件系統顯示延遲持續小於 40 微秒! (這是微秒符號,每秒百萬分之一。這種速度比典型的全閃廠商今天自豪地宣傳的速度要快一些。

Windows Server 2019 中的 Storage Spaces Direct 與 Intel® Optane™ DC 永續性記憶體共同實現突破性的效能。 這項超過 13.7M IOPS 的 HCI 基準測試,具有可預測且極低的延遲,比我們先前領先的 6.7M IOPS 基準測試高出一倍以上。 更重要的是,這次我們只需要12個伺服器節點,比之前少25%。

測試硬體是設定為使用三向鏡像和分隔 ReFS 磁碟區的 12 部伺服器叢集, 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/秒的輸送量

後續步驟

如需相關信息,請參閱: