Condividi tramite


Comprendere la cache del pool di archiviazione

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

Spazi di archiviazione diretta, la tecnologia di virtualizzazione dell'archiviazione di base dietro Azure Stack HCI e Windows Server, offre una cache sul lato server predefinita per ottimizzare le prestazioni di archiviazione riducendo al contempo i costi. Si tratta di una grande cache persistente di lettura e scrittura in tempo reale, configurata automaticamente al momento del deploy. Nella maggior parte dei casi non è necessaria alcuna gestione manuale. Il funzionamento della cache dipende dai tipi di unità presenti.

Tipi di drive e opzioni di distribuzione

Storage Spaces Direct attualmente funziona con quattro tipi di unità:

Tipo di unità Descrizione
PMem PMem si riferisce alla memoria persistente, a un nuovo tipo di archiviazione a bassa latenza e ad alte prestazioni.
NVMe NVMe (Non-Volatile Memory Express) si riferisce alle unità ssd che si trovano direttamente sul bus PCIe. I fattori di forma comuni sono 2,5" U.2, PCIe Add-In-Card (AIC) e M.2. NVMe offre una maggiore velocità di IOPS e throughput di I/O con una latenza inferiore rispetto a qualsiasi altro tipo di unità che supportiamo attualmente, ad eccezione di PMem.
SSD SSD si riferisce a unità ssd, che si connettono tramite SATA o SAS convenzionali.
HDD HDD si riferisce a unità disco rigido magnetiche e rotazionali, che offrono una grande capacità di archiviazione a un costo basso.

Questi possono essere combinati in vari modi, che si raggruppano in due categorie: "all-flash" e "ibridi". Le distribuzioni con tutte le unità HDD non sono supportate.

Annotazioni

Questo articolo illustra le configurazioni della cache con NVMe, SSD e HDD. Per informazioni sull'uso della memoria persistente come cache, vedere Informazioni e distribuzione della memoria persistente.

Possibilità di implementazione all-flash

Le distribuzioni all-flash puntano a ottimizzare le prestazioni di archiviazione e non includono HDD.

Il diagramma mostra le distribuzioni all-flash, tra cui NVMe per la capacità, NVMe per la cache con SSD per la capacità e SSD per la capacità.

Possibilità di distribuzione ibrida

Le distribuzioni ibride mirano a bilanciare le prestazioni e la capacità o a massimizzare la capacità e includere HDD.

Diagramma che mostra le distribuzioni ibride, tra cui NVMe per la cache con unità disco rigido per la capacità, SSD per la cache con unità DISCO rigido per la capacità e NVMe per la cache con HDD più SSD per la capacità.

Annotazioni

La distribuzione ibrida non è supportata nella configurazione a server singolo. Tutte le configurazioni di tipo di archiviazione singolo flat (ad esempio all-NVMe o all-SSD) sono l'unico tipo di archiviazione supportato per un singolo server.

Le unità cache vengono selezionate automaticamente

Nelle distribuzioni con più tipi di unità, Storage Spaces Direct utilizza automaticamente tutte le unità del tipo più veloce per la cache. Le unità rimanenti vengono utilizzate per aumentare la capacità di archiviazione.

Il tipo "più veloce" viene determinato in base alla gerarchia seguente.

Il diagramma mostra i tipi di disco disposti più velocemente per rallentare nell'ordine NVMe, SSD, disco senza etichetta che rappresenta hdd.

Ad esempio, se si dispone di NVMe e SSD, utilizzare NVMe come cache per gli SSD.

Se si dispone di unità SSD e HDD, le unità SSD fungono da cache per i dischi rigidi.

Annotazioni

Le unità cache non contribuiscono alla capacità di archiviazione utilizzabile nel cluster. Tutti i dati archiviati nella cache vengono archiviati anche in un'altra posizione o lo saranno una volta trasferiti. Ciò significa che la capacità totale di archiviazione grezza del cluster è la somma dei soli dischi di capacità.

Quando tutte le unità sono dello stesso tipo, non viene configurata automaticamente alcuna cache. È possibile configurare manualmente le unità con maggiore resistenza per cachare le unità con resistenza inferiore dello stesso tipo. Per sapere come, vedere la sezione Configurazione manuale.

Suggerimento

In alcuni casi, l'uso della cache del pool di archiviazione non ha senso. Ad esempio, nelle distribuzioni all-NVMe o all-SSD, in particolare a una scala molto ridotta, avere unità non dedicate alla cache può migliorare l'efficienza di archiviazione e ottimizzare le prestazioni. Analogamente, piccole distribuzioni remote o succursali possono avere spazio limitato per le unità cache.

Il comportamento della cache viene impostato automaticamente

Il comportamento della cache viene determinato automaticamente in base ai tipi di unità memorizzate nella cache. Quando si effettua la cache per i flash drive (come la cache NVMe per gli SSD), vengono memorizzate solo le operazioni di scrittura. Quando si esegue la memorizzazione nella cache per le unità disco rotanti (come gli SSD per le HDD), sia le letture che le scritture vengono memorizzate nella cache.

Diagramma che confronta la memorizzazione nella cache per all-flash, in cui le scritture vengono memorizzate nella cache e le letture non sono, con ibrido, in cui vengono memorizzate nella cache sia le letture che le scritture.

Memorizzazione nella cache con scrittura esclusiva per implementazioni completamente flash

La memorizzazione nella cache può essere usata in uno scenario all-flash, ad esempio usando NVMe come cache per accelerare le prestazioni delle unità SSD. Nelle distribuzioni all-flash, nella cache vengono salvate solo le scritture. Ciò riduce l'usura delle unità di capacità perché molte operazioni di scrittura e riscrittura possono essere unite nella cache e quindi rilasciate solo secondo le necessità, riducendo il traffico cumulativo verso le unità di capacità ed estenderne la durata. Per questo motivo, è consigliabile selezionare unità di memoria a maggiore resistenza, ottimizzate per la scrittura per la cache. Le unità di archiviazione a grande capacità possono avere ragionevolmente una resistenza di scrittura inferiore.

Poiché le letture non influiscono significativamente sulla durata del flash e poiché le unità SSD offrono universalmente bassa latenza di lettura, le letture non vengono memorizzate nella cache: vengono servite direttamente dalle unità di capacità (tranne quando i dati sono stati scritti così di recente che non sono ancora stati destagati). In questo modo la cache può essere interamente dedicata alle scritture, ottimizzandone l'efficacia.

Ciò comporta caratteristiche di scrittura, ad esempio la latenza di scrittura, dettate dalle unità della cache, mentre le caratteristiche di lettura sono dettate dalle unità di capacità. Entrambi sono coerenti, prevedibili e uniformi.

Funzionalità di cache di lettura/scrittura per le implementazioni ibride

Quando si utilizza la cache per HDD, sia per le letture che per le scritture vengono utilizzate per fornire una latenza paragonabile a quella dei dispositivi flash (spesso 10 volte migliore) per entrambi. La cache di lettura archivia i dati letti recentemente e con frequenza per consentire un accesso rapido e per ridurre al minimo il traffico casuale verso gli HDD. A causa di ritardi di ricerca e rotazione, la latenza e il tempo perso causati dall'accesso casuale a un hdd sono significativi. Le scritture vengono memorizzate nella cache per assorbire i picchi e, come in precedenza, per unire le scritture e riscrivere e ridurre al minimo il traffico cumulativo verso le unità di capacità.

Storage Spaces Direct implementa un algoritmo che derandomizza le scritture prima di eseguirne il de-staging, per emulare un modello di I/O su disco che sembra sequenziale anche quando lo I/O effettivo proveniente dal carico di lavoro (ad esempio le macchine virtuali) è casuale. In questo modo si massimizzano gli IOPS e la velocità effettiva per i dischi rigidi.

Memorizzazione nella cache nelle distribuzioni con NVMe, SSD e HDD

Quando sono presenti unità di tutti e tre i tipi, le unità NVMe forniscono la memorizzazione nella cache sia per le unità SSD che per le unità HDD. Il comportamento è quello descritto in precedenza: solo le scritture vengono memorizzate nella cache per le unità SSD e le letture e le scritture vengono memorizzate nella cache per i dischi RIGIDI. Il carico di memorizzazione nella cache per i dischi RIGIDI viene distribuito uniformemente tra le unità della cache.

Riassunto

Questa tabella riepiloga quali unità sono utilizzate per la memorizzazione nella cache, quali per la capacità e qual è il comportamento della cache per ciascuna possibile configurazione di distribuzione.

Distribuzione Unità cache Unità di memorizzazione ad alta capacità Comportamento della cache (impostazione predefinita)
Tutti gli NVMe Nessuno (facoltativo: configurare manualmente) NVMe Solo scrittura (se configurata)
Tutte le unità SSD Nessuno (facoltativo: configurare manualmente) SSD (unità a stato solido) Solo scrittura (se configurata)
NVMe + SSD NVMe SSD (unità a stato solido) Solo scrittura
NVMe + HDD NVMe disco rigido Lettura e scrittura
SSD + HDD SSD (unità a stato solido) disco rigido Lettura e scrittura
NVMe + SSD + HDD NVMe SSD + HDD Lettura e scrittura per HDD, solo scrittura per SSD

Architettura lato server

La cache viene implementata a livello di unità: le singole unità cache all'interno di un server sono associate a una o più unità di capacità all'interno dello stesso server.

Poiché la cache è al di sotto del resto dello stack di archiviazione definito dal software di Windows, non ha né necessita di alcuna consapevolezza di concetti come Spazi di Archiviazione o tolleranza agli errori. È possibile considerarlo come la creazione di unità "ibride" (parte flash, parte del disco) che vengono quindi presentate al sistema operativo. Come con un'unità ibrida effettiva, lo spostamento in tempo reale dei dati frequenti e rari tra le parti più veloci e lente dei supporti fisici risulta quasi invisibile dall'esterno.

Dato che la resilienza in Spazi di archiviazione diretta è almeno a livello di server (ovvero le copie dei dati vengono sempre scritte in server diversi; al massimo una copia per server), i dati nella cache traggono vantaggio dalla stessa resilienza dei dati non presenti nella cache.

Il diagramma rappresenta tre server uniti tramite un mirroring a tre vie nel livello dello spazio di archiviazione, che accede a un livello cache di unità NVMe, le quali accedono alle unità di capacità non etichettate.

Ad esempio, quando si usa il mirroring a tre vie, tre copie di tutti i dati vengono scritte in server diversi, in cui vengono inseriti nella cache. Indipendentemente dal fatto che vengano successivamente rimosse o meno, esistono sempre tre copie.

Le associazioni delle unità di archiviazione sono dinamiche

L'associazione tra unità di cache e unità di capacità può avere qualsiasi rapporto, da 1:1 a 1:12 e oltre. Regola in modo dinamico ogni volta che le unità vengono aggiunte o rimosse, ad esempio quando si esegue un upgrade o dopo guasti. Ciò significa che è possibile aggiungere unità cache o unità di capacità in modo indipendente, ogni volta che si desidera.

Il diagramma animato mostra due unità cache NVMe mappate dinamicamente ai primi quattro, quindi sei, quindi otto unità di capacità.

È consigliabile rendere il numero di unità di capacità un multiplo del numero di unità della cache, per ottenere simmetria. Ad esempio, se si dispone di 4 unità cache, si riscontrano prestazioni maggiori con 8 unità di capacità (rapporto 1:2) rispetto a 7 o 9.

Gestione dei guasti delle unità di cache

Quando un'unità cache ha esito negativo, tutte le scritture che non sono ancora state destagate vengono perse nel server locale, vale a dire che esistono solo nelle altre copie (in altri server). Proprio come dopo qualsiasi altro guasto di unità, Spazi di archiviazione può e effettua automaticamente il ripristino consultando le copie sopravvissute.

Per un breve periodo, le unità di capacità associate all'unità cache persa appaiono non integre. Dopo l'esecuzione del riassociamento automatico della cache e il completamento automatico del ripristino dei dati, riprendono a essere visualizzati come integri.

Questo scenario è il motivo per cui sono necessarie almeno due unità cache per ogni server per mantenere le prestazioni.

Il diagramma animato mostra due unità cache SSD mappate su sei unità di capacità fino a quando una delle unità cache non viene meno, causando la mappatura di tutte e sei le unità sull'unità cache rimanente.

È quindi possibile sostituire l'unità cache esattamente come qualsiasi altra sostituzione dell'unità.

Annotazioni

Potrebbe essere necessario spegnere per sostituire in modo sicuro l'NVMe che è la scheda Add-In (AIC) o la scheda M.2.

Relazione con altre cache

Esistono diverse altre cache non correlate nello stack di archiviazione software-defined di Windows. Gli esempi includono la cache di write-back di Spazi di archiviazione e la cache di lettura in memoria del Volume Condiviso del Cluster (CSV).

Con Azure Stack HCI, la cache writeback di Spazi di archiviazione non deve essere modificata dal comportamento predefinito. Ad esempio, i parametri come -WriteCacheSize nel cmdlet New-Volume non devono essere usati.

È possibile scegliere di usare o meno la cache CSV. È attivata per impostazione predefinita in Azure Stack HCI, ma non è in conflitto con la cache descritta in questo argomento in alcun modo. In alcuni scenari può offrire utili miglioramenti in termini di prestazioni. Per altre informazioni, vedere Usare la cache di lettura in memoria CSV con Azure Stack HCI.

Configurazione manuale

Per la maggior parte delle distribuzioni, la configurazione manuale non è necessaria. Se necessario, vedere le sezioni seguenti.

Se è necessario apportare modifiche al modello di dispositivo della cache dopo l'installazione, modifica la documentazione dei componenti di supporto del Servizio Integrità, come descritto in Panoramica del Servizio Integrità.

Specificare il modello di unità cache

Nelle distribuzioni in cui tutte le unità sono dello stesso tipo, ad esempio tutte le distribuzioni NVMe o all-SSD, non viene configurata alcuna cache perché Windows non è in grado di distinguere automaticamente le caratteristiche come la resistenza di scrittura tra le unità dello stesso tipo.

Per utilizzare unità ad alta resistenza per memorizzare nella cache unità a durata inferiore dello stesso tipo, è possibile specificare il modello di unità da utilizzare con il parametro -CacheDeviceModel del cmdlet Enable-ClusterS2D. Tutti i dischi di quel modello sono utilizzati per la cache.

Suggerimento

Assicurati che la stringa del modello corrisponda esattamente come appare nell'output di Get-PhysicalDisk.

Esempio

Prima di tutto, ottenere un elenco di dischi fisici:

Get-PhysicalDisk | Group Model -NoElement

Ecco un esempio di output:

Count Name
----- ----
    8 FABRIKAM NVME-1710
   16 CONTOSO NVME-1520

Immettere quindi il comando seguente, specificando il modello di dispositivo della cache:

Enable-ClusterS2D -CacheDeviceModel "FABRIKAM NVME-1710"

È possibile verificare che le unità desiderate vengano usate per la memorizzazione nella cache eseguendo Get-PhysicalDisk in PowerShell e verificando che la relativa proprietà Usage indichi "Journal".

Possibilità di distribuzione manuale

La configurazione manuale consente le seguenti possibilità di distribuzione:

Il diagramma mostra le possibilità di distribuzione, incluse NVMe sia per cache che per capacità, SSD per cache e capacità, e SSD per cache e un mix di SSD e HDD per capacità.

Impostare il comportamento della cache

È possibile eseguire l'override del comportamento predefinito della cache. Ad esempio, è possibile impostarla per mantenere in cache le letture anche in una distribuzione all-flash. Sconsigliamo di modificare il comportamento a meno che non si sia certi che l'impostazione predefinita non sia adatta al carico di lavoro.

Per eseguire l'override del comportamento, usare il cmdlet Set-ClusterStorageSpacesDirect e i relativi parametri -CacheModeSSD e -CacheModeHDD . Il parametro CacheModeSSD imposta il comportamento della cache durante la memorizzazione nella cache per SSD. Il parametro CacheModeHDD imposta il comportamento della cache durante la memorizzazione nella cache per HDD.

È possibile usare Get-ClusterStorageSpacesDirect per verificare che il comportamento sia impostato.

Esempio

Prima di tutto, ottieni le impostazioni di Spazi di archiviazione diretta.

Get-ClusterStorageSpacesDirect

Ecco un esempio di output:

CacheModeHDD : ReadWrite
CacheModeSSD : WriteOnly

Procedere quindi come segue:

Set-ClusterStorageSpacesDirect -CacheModeSSD ReadWrite

Get-ClusterS2D

Ecco un esempio di output:

CacheModeHDD : ReadWrite
CacheModeSSD : ReadWrite

Ridimensionamento della cache

La cache deve essere ridimensionata in modo da contenere il working set (i dati che vengono letti o scritti attivamente in qualsiasi momento) delle applicazioni e dei carichi di lavoro.

Ciò è particolarmente importante nelle distribuzioni ibride con unità disco rigido. Se il working set attivo supera le dimensioni della cache o se il working set attivo si allontana troppo rapidamente, i mancati riscontri nella cache di lettura aumentano e le scritture devono essere destagate in modo più aggressivo, danneggiando le prestazioni complessive.

È possibile usare l'utilità predefinita Performance Monitor (PerfMon.exe) in Windows per controllare la frequenza di mancati riscontri nella cache. In particolare, è possibile confrontare le cache miss al secondo dal contatore del Disco Ibrido di Archiviazione Cluster rispetto alle operazioni di lettura IOPS complessive della distribuzione. Ogni "disco ibrido" corrisponde a un'unità di capacità.

Ad esempio, 2 unità cache associate a 4 unità di capacità generano 4 istanze di oggetti "Disco ibrido" per server.

Monitor di prestazioni.

Non esiste una regola universale, ma se mancano troppe letture, è possibile che la cache sia sottodimensionata ed è consigliabile aggiungere unità cache per espandere la cache. È possibile aggiungere unità cache o unità di capacità in modo indipendente ogni volta che si desidera.

Passaggi successivi

Per altre informazioni di archiviazione, vedere anche: