Concetti e distribuzione della memoria persistente

Si applica a: Azure Stack HCI, versioni 22H2 e 21H2; Windows Server 2022, Windows Server 2019, Windows Server 2016, Windows 10

La memoria persistente (o PMem) è un nuovo tipo di tecnologia di memoria che mantiene il contenuto tramite cicli di alimentazione e può essere usata come risorsa di archiviazione di livello superiore, motivo per cui è possibile che gli utenti facciano riferimento a PMem come "memoria della classe di archiviazione" o SCM. Questo articolo fornisce informazioni di base sulla memoria persistente e spiega come distribuirlo come livello di archiviazione principale in Azure Stack HCI e Windows Server.

Che cos'è la memoria persistente?

La memoria persistente è un tipo di supporto non volatile che si inserisce in uno slot DIMM (memoria) standard. È più lento di DRAM, ma offre una velocità effettiva maggiore rispetto a SSD e NVMe. Rispetto alla DRAM, i moduli di memoria persistente sono dotati di capacità molto più grandi e sono meno costosi per GB, tuttavia sono ancora più costosi rispetto a NVMe. Il contenuto della memoria rimane anche quando l'alimentazione del sistema si arresta in caso di perdita di alimentazione imprevista, arresto dell'utente avviato dall'utente o arresto anomalo del sistema. Ciò significa che è possibile usare moduli di memoria persistente come archiviazione persistente ultra veloce e persistente.

Azure Stack HCI e Windows Server 2019 supportano l'uso della memoria persistente come cache o unità di capacità. Tuttavia, dato il modello di determinazione prezzi, la memoria persistente fornisce il valore più elevato come cache o come piccola quantità di spazio di archiviazione dedicato per i dati di mapping della memoria. Nella maggior parte dei casi, le unità di memoria persistente verranno usate automaticamente come unità cache e qualsiasi valore più lento verrà usato come unità di capacità. Per altre informazioni su come configurare le unità cache e capacità, vedere Informazioni sulla cache del pool di archiviazione e sui volumi di piano.

Concetti relativi alla memoria persistente

Questa sezione descrive i concetti di base che è necessario comprendere per distribuire la memoria persistente negli ambienti Windows Server e Azure Stack HCI per ridurre i colli di bottiglia di I/O e migliorare le prestazioni.

Metodi di accesso

Esistono due metodi per accedere alla memoria persistente. ovvero:

  • Bloccare l'accesso, che funziona come l'archiviazione per la compatibilità delle app. In questa configurazione i dati passano attraverso il file system e gli stack di archiviazione come di consueto. È possibile usare questa configurazione in combinazione con NTFS e ReFS ed è consigliabile per la maggior parte dei casi d'uso.
  • Accesso diretto (DAX), che funziona come la memoria per ottenere la latenza più bassa. È possibile usare DAX solo in combinazione con NTFS. Se non si usa correttamente DAX, è possibile che si verifichi una perdita di dati. È consigliabile usare DAX con La tabella di traduzione bloccata (BTT) attivata per ridurre il rischio di scritture non elaborate. Per altre informazioni, vedere Informazioni e configurazione di DAX.

Avviso

DAX non è supportato in ambienti Azure Stack HCI. Azure Stack HCI supporta solo l'accesso a blocchi, con BTT attivato.

Regioni

Un'area è un set di uno o più moduli di memoria persistente. Le aree vengono spesso create come set interleaved in cui più moduli di memoria persistente vengono visualizzati come un singolo spazio indirizzi virtuale logico per aumentare la velocità effettiva. Per aumentare la larghezza di banda disponibile, gli indirizzi virtuali adiacenti vengono distribuiti in più moduli di memoria persistente. Le aree possono in genere essere create nel BIOS di una piattaforma server.

PmemDisks

Per usare la memoria persistente come risorsa di archiviazione, è necessario definire almeno un pmemDisk, ovvero un disco rigido virtuale (VHD) nell'host che enumera come pmemDisk all'interno di una macchina virtuale.To use persistent memory as storage, you must define at least one PmemDisk, which is a virtual hard disk (VHD) on the host that enumerates as a PmemDisk inside a virtual machine (VM). Un pmemDisk è un intervallo contiguo di memoria non volatile che può essere considerato come una partizione del disco rigido o un LUN. È possibile creare più pmemDisk usando Windows PowerShell cmdlet per suddividere la capacità non elaborata disponibile. Ogni modulo di memoria persistente contiene un'area di archiviazione etichette (LSA) che archivia i metadati di configurazione.

Tabella di conversione a blocchi

A differenza delle unità ssd, i moduli di memoria persistente non proteggono dalle "scritture non eliminate" che possono verificarsi in caso di interruzione dell'alimentazione o interruzione del sistema, mettendo a rischio i dati. BTT riduce questo rischio fornendo semantica di aggiornamento del settore atomico per i dispositivi di memoria persistente, consentendo essenzialmente scritture di settore simili a blocchi in modo che le app possano evitare di combinare dati vecchi e nuovi in uno scenario di errore. È consigliabile attivare BTT in quasi tutti i casi. Poiché BTT è una proprietà di PmemDisk, deve essere attivata al momento della creazione di PmemDisk.

In modalità di accesso a blocchi è consigliabile usare BTT perché tutti i dati usano la semantica del blocco. BTT è utile anche in modalità DAX perché le operazioni sui metadati usano ancora la semantica del blocco, anche se le operazioni sui dati dell'applicazione non lo sono. Anche se tutte le operazioni dell'applicazione usano file mappati alla memoria con semantica DAX, le scritture eliminate potrebbero comunque verificarsi per le operazioni di metadati; pertanto, l'attivazione di BTT è ancora utile.

Hardware supportato

La tabella seguente illustra l'hardware di memoria persistente supportato per Azure Stack HCI e Windows Server. La memoria persistente è completamente supportata in Windows Server 2019, inclusa Spazi di archiviazione diretta.

Tecnologia di memoria persistente Windows Server 2016 Azure Stack HCI v20H2/Windows Server 2019
NVDIMM-N in modalità persistente Supportato Supportato
Intel Optane™ DC Persistent Memory in modalità diretta dell'app Non supportato Supportato
Memoria persistente intel Optane™ DC in modalità memoria Supportato Supportato

Intel Optane DC Persistent Memory supporta le modalità operative Memory (volatile) e App Direct (persistenti). Per usare i moduli di memoria persistente come risorsa di archiviazione, ovvero il caso d'uso principale per i carichi di lavoro del server, è necessario usare la modalità diretta dell'app. La modalità memoria usa essenzialmente la memoria persistente come RAM più lenta, che in genere non soddisfa i requisiti di prestazioni dei carichi di lavoro del server. La modalità di memoria è diversa da DAX, ovvero un volume di archiviazione permanente a cui è possibile accedere usando la semantica simile alla memoria.

La modalità operativa è spesso preconfigurata dal produttore del dispositivo originale.

Nota

Quando si riavvia un sistema con più moduli di memoria persistente Intel® Optane™ in modalità Diretta app divisi in più pmemDisk, si potrebbe perdere l'accesso ad alcuni o a tutti i dischi di archiviazione logici correlati. Questo problema si verifica nelle versioni di Windows Server 2019 precedenti alla versione 1903.

Questa perdita di accesso si verifica perché un modulo di memoria persistente non è sottoposto a training o ha esito negativo all'avvio del sistema. In questo caso, tutti i pmemDisk in qualsiasi modulo di memoria persistente nel sistema hanno esito negativo, inclusi quelli che non eseguono fisicamente il mapping al modulo non riuscito.

Per ripristinare l'accesso a tutti i pmemDisks, sostituire il modulo non riuscito.

Se un modulo non riesce in Windows Server 2019 versione 1903 o versioni successive, si perde l'accesso solo a PmemDisks che esegue fisicamente il mapping al modulo interessato; altri non sono interessati.

Configurare la memoria persistente

Se si usa la memoria persistente Intel Optane, seguire le istruzioni riportate qui. Se si usano moduli di memoria persistente di un altro fornitore, consultare la relativa documentazione.

Per creare un pmemDisk che supporta BTT, usare il New-VHD cmdlet :

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

L'estensione del disco rigido virtuale deve essere "vhdpmem".

È anche possibile convertire un disco rigido virtuale che non dispone di BTT abilitato in un disco rigido virtuale che esegue (e viceversa) usando il Convert-VHD cmdlet :

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

Dopo la conversione, il nuovo disco rigido virtuale avrà lo stesso GUID dello spazio dei nomi di quello originale. Ciò può causare problemi, soprattutto se sono collegati alla stessa macchina virtuale. Per creare un nuovo UUID dello spazio dei nomi per il disco rigido virtuale convertito, usare il Set-VHD cmdlet :

Set-VHD -ResetDiskIdentifier .\pmemtest_btt.vhdpmem

Informazioni sui set interleaved

I set interleaved possono in genere essere creati nel BIOS di una piattaforma server per rendere più dispositivi di memoria persistente come un singolo disco nel sistema operativo host, aumentando la velocità effettiva per tale disco.

Nota

Windows Server 2016 non supporta set interleaved di moduli di memoria persistente.

Tenere presente che un modulo di memoria persistente si trova in uno slot DIMM (memoria) standard, che avvicina i dati al processore. Questa configurazione riduce la latenza e migliora le prestazioni di recupero. Per aumentare ulteriormente la velocità effettiva, due o più moduli di memoria persistente creano un set interleaved n way per eseguire operazioni di lettura/scrittura di striping. Le configurazioni più comuni sono interleaving bidirezionali o a quattro vie.

È possibile usare il Get-PmemDisk cmdlet di PowerShell per esaminare la configurazione di tali dischi logici, come indicato di seguito:

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

È possibile notare che il disco PMem logico 2 usa i dispositivi fisici Id20 e Id120 e il disco PMem logico 3 usa i dispositivi fisici Id1020 e Id1120.

Per recuperare altre informazioni sul set interleaved usato da un'unità logica, eseguire il 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

Configurare set interleaved

Per configurare un set interleaved, eseguire il Get-PmemUnusedRegion cmdlet per esaminare tutte le aree di memoria persistente non assegnate a un disco di memoria persistente logico nel sistema:

Get-PmemUnusedRegion

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

Per visualizzare tutte le informazioni sul dispositivo PMem nel sistema, tra cui tipo di dispositivo, posizione, integrità e stato operativo e così via, eseguire il 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

Poiché è disponibile un'area PMem inutilizzata, è possibile creare nuovi dischi di memoria persistente. È possibile usare l'area inutilizzata per creare più dischi di memoria persistente eseguendo i cmdlet seguenti:

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

Al termine, è possibile visualizzare i risultati eseguendo:

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

Vale la pena notare che è possibile eseguire Get-PhysicalDisk | Where MediaType -eq SCM invece di Get-PmemDisk ottenere gli stessi risultati. Il disco di memoria persistente appena creato corrisponde a uno a uno con le unità visualizzate in PowerShell e in Windows Admin Center.

Sostituire la memoria persistente

Se è necessario sostituire un modulo non riuscito, è necessario effettuare nuovamente il provisioning del disco PMem (fare riferimento ai passaggi descritti in precedenza).

Quando si esegue la risoluzione dei problemi, potrebbe essere necessario usare Remove-PmemDisk. Questo cmdlet rimuove un disco di memoria persistente specifico. È possibile rimuovere tutti i dischi di memoria persistente correnti eseguendo i cmdlet seguenti:

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.

Importante

La rimozione di un disco di memoria persistente causa la perdita di dati su tale disco.

Potrebbe essere necessario un altro cmdlet.Initialize-PmemPhysicalDevice Questo cmdlet inizializza le aree di archiviazione delle etichette nei dispositivi di memoria persistente fisica e può cancellare le informazioni di archiviazione delle etichette danneggiate nei dispositivi.

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.

Importante

Initialize-PmemPhysicalDevice causa la perdita di dati nella memoria persistente. Usarlo solo come ultima risorsa per risolvere i problemi persistenti relativi alla memoria.

Memoria persistente in azione in Microsoft Ignite 2018

Per visualizzare alcuni dei vantaggi della memoria persistente, esaminiamo questo video di Microsoft Ignite 2018.

Qualsiasi sistema di archiviazione che fornisce la tolleranza di errore crea necessariamente copie distribuite di scritture. Tali operazioni devono attraversare la rete e amplificare il traffico di scrittura back-end. Per questo motivo, i numeri di benchmark di IOPS assoluti più grandi vengono in genere ottenuti misurando le letture solo, soprattutto se il sistema di archiviazione ha ottimizzazioni di buon senso per leggere dalla copia locale, quando possibile. Spazi di archiviazione diretta è ottimizzato per farlo.

Se misurato usando solo operazioni di lettura, il cluster ha recapitato 13.798.674 operazioni di I/O al secondo.

Se si watch attentamente il video, si noterà che ciò che è ancora più mascellare è la latenza. Anche a più di 13,7 M di IOPS, il file system in Windows segnala la latenza che è costantemente inferiore a 40 μs! (Questo è il simbolo per i microsecondi, un milionesimo di secondo. Questa velocità è un ordine di grandezza più veloce rispetto a quello che i tipici fornitori all-flash annunciano con orgoglio oggi.

Insieme, Spazi di archiviazione diretta in Windows Server 2019 e memoria persistente Intel® Optane™ DC hanno offerto prestazioni rivoluzionarie. Questo benchmark HCI di oltre 13,7 milioni di operazioni di I/O al secondo, accompagnato da una latenza prevedibile e estremamente bassa, è più del doppio del benchmark leader del settore precedente di 6,7 milioni di operazioni di I/O al secondo. Inoltre, questa volta sono necessari solo 12 nodi del server, ovvero il 25% meno di prima.

L'hardware di test era un cluster a 12 server configurato per l'uso del mirroring a tre vie e dei volumi ReFS delimitati, 12 x Intel® S2600WFT, 384 GiB memoria, 2 x 28 core "CascadeLake", 1,5 TB memoria persistente Intel® Optane™ DC come cache, 32 TB NVMe (4 x 8 TB Intel® DC P4510) come capacità, 2 x Mellanox ConnectX-4 25 Gbps.

La tabella seguente mostra i numeri di prestazioni completi.

Benchmark Prestazioni
Lettura casuale 4K 100% 13,8 milioni di operazioni di I/O al secondo
4K 90/10% di lettura/scrittura casuale 9,45 milioni di operazioni di I/O al secondo
Lettura sequenziale di 2 MB Velocità effettiva di 549 GB/s

Passaggi successivi

Per informazioni correlate, vedere anche: