Archiviazione Hyper-V: livelli di memorizzazione nella cache e implicazioni per la coerenza dei dati

Questo articolo offre una panoramica della memorizzazione nella cache nello stack di archiviazione virtuale e fornisce indicazioni agli sviluppatori e agli amministratori software per assicurarsi che siano soddisfatti i requisiti di coerenza dei dati desiderati.

Si applica a: Windows Server 2012 R2
Numero KB originale: 2801713

Ulteriori informazioni

Per lo meno, i vari livelli di memorizzazione nella cache nel sistema comportano in genere quanto segue:

  • Cache del file system. Per impostazione predefinita, Windows memorizza nella cache i dati dei file letti dai dischi e scritti nei dischi. Ciò implica che le operazioni di lettura leggono i dati dei file da un'area nella memoria di sistema nota come cache dei file di sistema anziché dal disco fisico. Di conseguenza, le operazioni di scrittura scrivono i dati dei file nella cache dei file di sistema anziché nel disco e questo tipo di cache è noto come cache writeback. Le applicazioni possono usare la semantica senza buffer del file system per assicurarsi che le scritture non siano memorizzate nella cache di sistema.
  • Cache delle unità disco. Le unità disco implementano la memorizzazione nella cache a livello di firmware per migliorare le prestazioni delle unità disco. Anche se la memorizzazione nella cache a livello di firmware può migliorare le prestazioni, i dati sul disco possono andare persi prima che vengano scritti sul disco in caso di interruzione dell'alimentazione. Le opzioni per controllare questo comportamento di memorizzazione nella cache fanno parte di interfacce di unità standardizzate, ad esempio SCSI, SATA e ATA. Queste opzioni sono le seguenti:
    1. Usare il meccanismo di controllo per I/O noto come Force Unit Access (FUA). Questo flag specifica che l'unità deve scrivere i dati in un archivio multimediale stabile prima che la segnalazione venga completata. Le applicazioni che devono eseguire questa operazione devono assicurarsi che i dati siano stabili nel problema del disco FUA per assicurarsi che i dati non vadano persi in caso di interruzione dell'alimentazione.

      Le unità disco di classe server (SCSI e Fibre Channel) supportano in genere il flag FUA. Nelle unità commodity (ATA, SATA e USB), FUA potrebbe non essere rispettato. Ciò può potenzialmente lasciare i dati in uno stato incoerente a meno che la cache di scrittura dell'unità non sia disabilitata. Assicurarsi che il sottosistema del disco gestisca FUA correttamente se si dipende da questo meccanismo.

    2. Forza lo scaricamento della cache del disco. Un'applicazione o un sistema che invia uno scaricamento al disco forza il sottosistema del disco a scrivere tutti i dati nella cache nel disco. L'emissione troppo frequente di scaricamenti avrà conseguenze sulle prestazioni perché tutte le informazioni nella cache del disco dovranno essere scritte nel supporto del disco prima che venga restituito lo scaricamento.

    3. Disabilitare la memorizzazione nella cache del disco. È possibile disabilitare la memorizzazione nella cache di scrittura di un disco emettendo il codice di controllo IOCTL_DISK_SET_CACHE_INFORMATION sul disco. Lo stato della cache di scrittura (attivato o disattivato) verrà mantenuto nei riavvii del sistema. L'emissione di questo codice di controllo avrà conseguenze sulle prestazioni molto significative per tutti i meccanismi di I/O emessi sul disco. Queste conseguenze includeranno molto probabilmente una notevole riduzione delle prestazioni. È consigliabile usare attentamente questo codice di controllo prima di distribuirlo.

      Nota

      Se non è possibile disabilitare la memorizzazione nella cache del disco, è consigliabile prendere in considerazione le opzioni 1 e 2.

Pertanto, se l'applicazione o il carico di lavoro è in esecuzione all'interno della macchina virtuale, i vari livelli di memorizzazione nella cache hanno implicazioni di coerenza dei dati.

  • Cache del file system guest. Questo livello può essere ignorato usando la semantica senza buffer del file system, come accennato in precedenza.

  • Cache del disco virtuale guest. L'IDE virtualizzato (emulato o sintetico) o il dispositivo SCSI segnalerà lo stato della cache di scrittura restituito dallo stack inferiore. I dischi virtuali segnaleranno che la cache di scrittura è abilitata e si rifiutano di consentire al guest di disattivare la cache di scrittura. La disabilitazione della cache avrà esito negativo e risponderà sempre che la cache è abilitata. Questo comportamento è necessario per i motivi seguenti:

    • Hyper-V non può presumere che tutte le macchine virtuali in esecuzione nello stesso disco dovranno avere le stesse impostazioni della cache del disco.

    • L'archiviazione sottostante potrebbe avere una cache di scrittura sempre attiva che non può essere disattivata. Ciò è sottolineato dal fatto che il disco virtuale potrebbe essere migrato a un disco diverso nello stesso host (migrazione dell'archiviazione in tempo reale) o a un host diverso (migrazione in tempo reale).

      Poiché le applicazioni non saranno in grado di disattivare la cache del disco, qualsiasi applicazione nel guest che deve assicurarsi dell'integrità dei dati in un'interruzione dell'alimentazione dovrà usare l'opzione 1 o l'opzione 2 per assicurarsi che le scritture ignorano la cache del disco.

  • Cache del file system host. Lo stack di archiviazione Hyper-V usa anche scritture senza buffer per assicurarsi che le scritture dal guest bypassno lo stack del file system host sottostante.

  • Cache del disco host. FUA, se impostato dal guest, viene propagato all'host e allo stack di archiviazione host. Il sistema disco fisico host deve soddisfare almeno uno dei criteri seguenti per garantire l'integrità dei dati del carico di lavoro virtualizzato tramite errori di alimentazione:

    • Il sistema usa dischi di classe server (SCSI, Fibre Channel).
    • Il sistema garantisce che i dischi siano connessi a un adattatore del bus host di memorizzazione nella cache (HBA) alimentato a batteria.
    • Il sistema usa un controller di archiviazione (ad esempio, un sistema RAID) come dispositivo di archiviazione.
    • Il sistema garantisce che l'alimentazione al disco sia protetta da un gruppo di continuità.
    • Il sistema garantisce che la funzionalità di memorizzazione nella cache di scrittura del disco sia disabilitata.