Förstå och distribuera beständigt minne

Gäller för: Azure Stack HCI, versionerna 22H2 och 21H2; Windows Server 2022, Windows Server 2019, Windows Server 2016, Windows 10

Beständigt minne (eller PMem) är en ny typ av minnesteknik som behåller sitt innehåll via energicykler och kan användas som lagring på den översta nivån, vilket är anledningen till att du kan höra att personer kallar PMem för "lagringsklassminne" eller SCM. Den här artikeln innehåller bakgrundsinformation om beständigt minne och förklarar hur du distribuerar det som den högsta lagringsnivån i Azure Stack HCI och Windows Server.

Vad är beständigt minne?

Beständigt minne är en typ av icke-flyktiga medier som får plats i en standard-DIMM-plats (minne). Det är långsammare än DRAM, men ger högre dataflöde än SSD och NVMe. Jämfört med DRAM finns beständiga minnesmoduler i mycket större kapaciteter och är billigare per GB, men de är fortfarande dyrare än NVMe. Minnesinnehållet finns kvar även när systemkraften går ned i händelse av en oväntad strömavbrott, användarinitierad avstängning eller systemkrasch. Det innebär att du kan använda beständiga minnesmoduler som ultrasnabb och beständig lagring.

Azure Stack HCI och Windows Server 2019 stöder användning av beständigt minne som antingen en cache eller en kapacitetsenhet. Men med tanke på prismodellen ger beständigt minne mest värde som antingen en cache eller som en liten mängd dedikerad lagring för minnesmappningsdata. I de flesta fall används beständiga minnesenheter automatiskt som cacheenheter och allt långsammare används som kapacitetsenheter. Mer information om hur du konfigurerar cache- och kapacitetsenheter finns i Förstå lagringspoolens cacheminne och Planera volymer.

Beständiga minnesbegrepp

I det här avsnittet beskrivs de grundläggande begrepp som du behöver förstå för att distribuera beständigt minne i Windows Server- och Azure Stack HCI-miljöer för att minska I/O-flaskhalsar och förbättra prestanda.

Åtkomstmetoder

Det finns två metoder för att komma åt beständigt minne. De är:

  • Blockera åtkomst, som fungerar som lagring för appkompatibilitet. I den här konfigurationen flödar data genom filsystemet och lagringsstackarna som vanligt. Du kan använda den här konfigurationen i kombination med NTFS och ReFS, och det rekommenderas för de flesta användningsfall.
  • Direkt åtkomst (DAX) som fungerar som minne för att få den lägsta svarstiden. Du kan bara använda DAX i kombination med NTFS. Om du inte använder DAX korrekt finns det risk för dataförlust. Vi rekommenderar starkt att du använder DAX med Block translation table (BTT) aktiverat för att minska risken för sönderrivna skrivningar. Mer information finns i Förstå och konfigurera DAX.

Varning

DAX stöds inte i Azure Stack HCI-miljöer. Azure Stack HCI stöder endast blockåtkomst med BTT aktiverat.

Regioner

En region är en uppsättning av en eller flera beständiga minnesmoduler. Regioner skapas ofta som interfolierade uppsättningar där flera beständiga minnesmoduler visas som ett enda logiskt virtuellt adressutrymme för att öka dataflödet. För att öka den tillgängliga bandbredden sprids angränsande virtuella adresser över flera beständiga minnesmoduler. Regioner kan vanligtvis skapas i en serverplattforms BIOS.

PmemDisks

Om du vill använda beständigt minne som lagring måste du definiera minst en PmemDisk, som är en virtuell hårddisk (VHD) på värden som räknas upp som en PmemDisk i en virtuell dator (VM). En PmemDisk är ett sammanhängande adresserat intervall av icke-flyktigt minne som du kan tänka dig som en hårddiskpartition eller LUN. Du kan skapa flera PmemDisks med hjälp av Windows PowerShell-cmdletar för att dela upp den tillgängliga råkapaciteten. Varje beständig minnesmodul innehåller ett etikettlagringsområde (LSA) som lagrar konfigurationsmetadata.

Blocköversättningstabell

Till skillnad från solid state-enheter skyddar beständiga minnesmoduler inte mot "sönderrivna skrivningar" som kan uppstå vid strömavbrott eller systemfel, vilket äventyrar data. BTT minskar den här risken genom att tillhandahålla atomisk sektoruppdateringssemantik för beständiga minnesenheter, vilket i huvudsak aktiverar blockliknande sektorskrivningar så att appar kan undvika att blanda gamla och nya data i ett felscenario. Vi rekommenderar starkt att du aktiverar BTT i nästan alla fall. Eftersom BTT är en egenskap för PmemDisk måste den aktiveras när PmemDisk skapas.

I läget blockera åtkomst rekommenderar vi att du använder BTT eftersom alla data använder blocksemantik. BTT är också användbart i DAX-läge eftersom metadataåtgärder fortfarande använder blocksemantik, även om programmets dataåtgärder inte gör det. Även om alla programåtgärder använder minnesmappade filer med DAX-semantik kan sönderrivna skrivningar fortfarande inträffa för metadataåtgärderna. därför är det fortfarande värdefullt att aktivera BTT.

Maskinvara som stöds

I följande tabell visas beständig minnesmaskinvara som stöds för Azure Stack HCI och Windows Server. Beständigt minne stöds fullt ut i Windows Server 2019, inklusive Lagringsdirigering.

Teknik för beständigt minne Windows Server 2016 Azure Stack HCI v20H2/Windows Server 2019
NVDIMM-N i beständigt läge Stöds Stöds
Intel Optane™ DC Beständigt minne i appdirigeringsläge Stöds inte Stöds
Intel Optane™ DC Beständigt minne i minnesläge Stöds Stöds

Intel Optane DC Beständigt minne stöder både minnesläge (flyktigt) och appdirigering (beständigt) driftläge. Om du vill använda beständiga minnesmoduler som lagring, vilket är det primära användningsfallet för serverarbetsbelastningar, måste du använda App Direct-läge. Minnesläget använder i princip beständigt minne som långsammare RAM-minne, vilket vanligtvis inte uppfyller prestandakraven för serverarbetsbelastningar. Minnesläget skiljer sig från DAX, som är en beständig lagringsvolym som kan nås med hjälp av minnesliknande semantik.

Driftläget är ofta förkonfigurerat av den ursprungliga enhetstillverkaren.

Anteckning

När du startar om ett system som har flera Intel® Optane-beständiga™ minnesmoduler i App Direct-läge som är indelade i flera PmemDisks kan du förlora åtkomsten till vissa eller alla relaterade logiska lagringsdiskar. Det här problemet uppstår i Windows Server 2019-versioner som är äldre än version 1903.

Den här åtkomstförlusten beror på att en permanent minnesmodul är otränad eller på annat sätt misslyckas när systemet startar. I sådana fall misslyckas alla PmemDisks på alla beständiga minnesmoduler i systemet, inklusive de som inte fysiskt mappar till den misslyckade modulen.

Om du vill återställa åtkomsten till alla PmemDisks ersätter du den misslyckade modulen.

Om en modul misslyckas i Windows Server 2019 version 1903 eller senare versioner förlorar du endast åtkomst till PmemDisks som fysiskt mappar till den berörda modulen. andra påverkas inte.

Konfigurera beständigt minne

Om du använder Intel Optane-beständigt minne följer du anvisningarna här. Om du använder beständiga minnesmoduler från en annan leverantör läser du deras dokumentation.

Om du vill skapa en PmemDisk som stöder BTT använder du cmdleten New-VHD :

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

VHD-tillägget måste vara "vhdpmem".

Du kan också konvertera en virtuell hårddisk som inte har BTT aktiverat till en som gör det (och tvärtom) med hjälp av cmdleten Convert-VHD :

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

Efter konverteringen har den nya virtuella hårddisken samma namnområdes-GUID som den ursprungliga. Det kan leda till problem, särskilt om de båda är kopplade till samma virtuella dator. Om du vill skapa en ny UUID för namnområdet för den konverterade virtuella hårddisken använder du cmdleten Set-VHD :

Set-VHD -ResetDiskIdentifier .\pmemtest_btt.vhdpmem

Förstå interfolierade uppsättningar

Överlagrade uppsättningar kan vanligtvis skapas i en serverplattforms BIOS så att flera beständiga minnesenheter visas som en enda disk för värdoperativsystemet, vilket ökar dataflödet för disken.

Anteckning

Windows Server 2016 stöder inte interfolierade uppsättningar med beständiga minnesmoduler.

Kom ihåg att en beständig minnesmodul finns i en standard-DIMM-plats (minne) som placerar data närmare processorn. Den här konfigurationen minskar svarstiden och förbättrar hämtningsprestanda. För att ytterligare öka dataflödet skapar två eller flera beständiga minnesmoduler en n-vägs interfolierad uppsättning till stripe-läs-/skrivåtgärder. De vanligaste konfigurationerna är dubbelriktad eller fyrvägs interfoliering.

Du kan använda PowerShell-cmdleten Get-PmemDisk för att granska konfigurationen av sådana logiska diskar på följande sätt:

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

Vi kan se att den logiska PMem-disken 2 använder de fysiska enheterna Id20 och Id120, och den logiska PMem-disken 3 använder de fysiska enheterna Id1020 och Id1120.

Om du vill hämta ytterligare information om den interfolierade uppsättningen som en logisk enhet använder kör du cmdleten 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

Konfigurera interfolierade uppsättningar

Om du vill konfigurera en interfolierad uppsättning kör du cmdleten Get-PmemUnusedRegion för att granska alla beständiga minnesregioner som inte är tilldelade till en logisk beständig minnesdisk i systemet:

Get-PmemUnusedRegion

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

Om du vill se all PMem-enhetsinformation i systemet, inklusive enhetstyp, plats, hälsotillstånd och driftstatus och så vidare, kör du cmdleten 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

Eftersom vi har en tillgänglig Oanvänd PMem-region kan vi skapa nya beständiga minnesdiskar. Vi kan använda den oanvända regionen för att skapa flera beständiga minnesdiskar genom att köra följande cmdletar:

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

När detta är klart kan vi se resultatet genom att köra:

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

Det är värt att notera att vi kan köra Get-PhysicalDisk | Where MediaType -eq SCM i stället Get-PmemDisk för att få samma resultat. Den nyligen skapade beständiga minnesdisken motsvarar en-till-en med enheter som visas i PowerShell och i Windows Admin Center.

Ersätta beständigt minne

Om du måste ersätta en misslyckad modul måste du etablera om PMem-disken (se de steg som vi beskrev tidigare).

När du felsöker kan du behöva använda Remove-PmemDisk. Den här cmdleten tar bort en specifik beständig minnesdisk. Vi kan ta bort alla aktuella beständiga minnesdiskar genom att köra följande cmdletar:

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.

Viktigt

Om du tar bort en beständig minnesdisk går det inte att förlora data på disken.

En annan cmdlet som du kan behöva är Initialize-PmemPhysicalDevice. Den här cmdleten initierar etikettlagringsområdena på de fysiska beständiga minnesenheterna och kan rensa skadad etikettlagringsinformation på enheterna.

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.

Viktigt

Initialize-PmemPhysicalDevice orsakar dataförlust i beständigt minne. Använd det bara som en sista utväg för att åtgärda beständiga minnesrelaterade problem.

Beständigt minne i praktiken på Microsoft Ignite 2018

Om du vill se några av fördelarna med beständigt minne kan vi titta på den här videon från Microsoft Ignite 2018.

Alla lagringssystem som ger feltolerans gör nödvändigtvis distribuerade kopior av skrivningar. Sådana åtgärder måste passera nätverket och förstärka skrivningstrafiken i serverdelen. Därför uppnås vanligtvis de absolut största IOPS-benchmark-talen genom att endast läsningar mäts, särskilt om lagringssystemet har optimeringar för sunt förnuft att läsa från den lokala kopian när det är möjligt. Lagringsdirigering är optimerad för att göra det.

När klustret mättes med endast läsåtgärder levererade det 13 798 674 IOPS.

Om du watch videon noga kommer du att märka att det som är ännu mer käftande är svarstiden. Även vid över 13,7 M IOPS rapporterar filsystemet i Windows svarstider som konsekvent är mindre än 40 μs! (Det är symbolen för mikrosekunder, en miljondels sekund.) Denna hastighet är en storleksordning snabbare än vad typiska all-flash leverantörer stolt annonsera idag.

Tillsammans gav Lagringsdirigering i Windows Server 2019 och Intel® Optane™ DC beständigt minne banbrytande prestanda. Detta HCI-riktmärke på över 13,7 miljoner IOPS, tillsammans med förutsägbar och extremt låg svarstid, är mer än dubbelt så stort som vårt tidigare branschledande riktmärke på 6,7 miljoner IOPS. Den här gången behövde vi dessutom bara 12 servernoder – 25 procent färre än tidigare.

Testmaskinvaran var ett 12-serverkluster som konfigurerades för att använda trevägsspegling och avgränsade ReFS-volymer. 12 x Intel® S2600WFT, 384 GiB-minne , 2 x 28 kärnor "CascadeLake", 1,5 TB Intel® Optane™ DC beständigt minne som cache, 32 TB NVMe (4 x 8 TB Intel® DC P4510) som kapacitet, 2 x Mellanox ConnectX-4 25 Gbit/s.

I följande tabell visas de fullständiga prestandanumren.

Benchmark Prestanda
4K 100 % slumpmässig läsning 13,8 miljoner IOPS
4K 90/10 % slumpmässig läsning/skrivning 9,45 miljoner IOPS
Sekventiell läsning på 2 MB Dataflöde på 549 GB/s

Nästa steg

Relaterad information finns i: