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
Importante
Azure Stack HCI is now part of Azure Local. La ridenominazione della documentazione del prodotto è in corso. Tuttavia, le versioni precedenti di Azure Stack HCI, ad esempio 22H2 continueranno a fare riferimento ad Azure Stack HCI e non rifletteranno la modifica del nome. Altre informazioni.
La memoria persistente (o PMem) è un nuovo tipo di tecnologia di memoria che conserva 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 generali 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 rispetto alla DRAM, ma offre una velocità effettiva superiore rispetto a SSD e NVMe. Rispetto alle DRAM, i moduli di memoria persistente sono dotati di capacità molto più grandi e sono meno costosi per GB, ma sono comunque 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 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 massimo valore 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 elemento 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 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. Sono:
- 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 BTT (Block Translation Table) attivata per attenuare il rischio di scritture strappate. 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.
Aree
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 di indirizzi virtuale logico per aumentare la velocità effettiva. Per aumentare la larghezza di banda disponibile, gli indirizzi virtuali adiacenti vengono distribuiti tra 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 considerata come una partizione del disco rigido o un LUN. È possibile creare più pmemDisk usando i cmdlet di Windows PowerShell 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 traduzione a blocchi
A differenza delle unità ssd, i moduli di memoria persistente non proteggono dalle "scritture strappate" che possono verificarsi in caso di interruzione dell'alimentazione o interruzione del sistema, mettendo a rischio i dati. BTT riduce questo rischio fornendo una semantica di aggiornamento del settore atomico per i dispositivi di memoria persistente, consentendo essenzialmente scritture di settori simili a blocchi in modo che le app possano evitare di combinare dati obsoleti 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 dei blocchi. 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 strappate potrebbero comunque verificarsi per le operazioni sui metadati; pertanto, attivare BTT è ancora prezioso.
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 persis modalità tenda | Supportata | Supportata |
Memoria persistente intel Optane™ DC in modalità diretta dell'app | Non supportato | Supportato |
Memoria persistente intel Optane™ DC in modalità memoria | Supportata | Supportata |
Intel Optane DC Persistent Memory supporta sia le modalità operative Memory (volatile) che App Direct (persistent). Per usare 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à App Direct. 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 è distinta 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 originale del dispositivo.
Nota
Quando si riavvia un sistema che dispone di più moduli di memoria persistente Intel® Optane™ in modalità App Direct 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 non riesce in caso contrario all'avvio del sistema. In questo caso, tutti i pmemDisks 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 VHD deve essere "vhdpmem".
È anche possibile convertire un disco rigido virtuale che non dispone di BTT abilitato in uno 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 risiede 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 l'interleaving bidirezionale 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 unità visualizzate in PowerShell e in Windows Admin Center.
Sostituire la memoria persistente
Se è necessario sostituire un modulo non riuscito, è necessario eseguire nuovamente il provisioning del disco PMem (vedere i 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.
Un altro cmdlet che potrebbe essere necessario è 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 relativi alla memoria persistente.
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 delle operazioni di I/O al secondo assoluti vengono in genere ottenuti misurando solo le letture, soprattutto se il sistema di archiviazione dispone di ottimizzazioni di buon senso da 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 guarda attentamente il video, si noterà che ciò che è ancora più mascellare è la latenza. Anche con più di 13,7 M di I/O al secondo, il file system in Windows segnala una latenza 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 nella 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, è superiore al doppio del benchmark precedente leader del settore di 6,7 milioni di operazioni di I/O al secondo. Inoltre, questa volta era necessario solo 12 nodi del server, 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 di 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.
Nella tabella seguente vengono illustrati 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 ulteriori informazioni, vedere anche: