Stockage Hyper-V : mise en cache des couches et implications pour la cohérence des données

Cet article fournit une vue d’ensemble de la mise en cache dans la pile de stockage virtuel et fournit des conseils aux développeurs de logiciels et aux administrateurs pour s’assurer que les exigences de cohérence des données souhaitées sont remplies.

S’applique à : Windows Server 2012 R2
Numéro de la base de connaissances d’origine : 2801713

Plus d’informations

Au minimum, les différentes couches de mise en cache dans le système impliquent généralement les éléments suivants :

  • Cache du système de fichiers. Par défaut, Windows met en cache les données de fichier lues à partir des disques et écrites sur les disques. Cela implique que les opérations de lecture lisent les données de fichier à partir d’une zone de la mémoire système appelée cache de fichiers système au lieu du disque physique. En conséquence, les opérations d’écriture écrivent des données de fichier dans le cache de fichiers système plutôt que sur le disque, et ce type de cache est appelé cache d’écriture différée. Les applications peuvent utiliser la sémantique sans débogage du système de fichiers pour s’assurer que les écritures ne sont pas mises en cache dans le cache système.
  • Cache des lecteurs de disque. Les lecteurs de disque implémentent la mise en cache au niveau de la couche du microprogramme pour améliorer les performances des lecteurs de disque. Bien que la mise en cache au niveau de la couche du microprogramme puisse améliorer les performances, les données sur le disque peuvent être perdues avant d’être écrites sur le disque en cas de panne de courant. Les options permettant de contrôler ce comportement de mise en cache font partie des interfaces de lecteur standardisées telles que SCSI, SATA et ATA. Ces options sont les suivantes :
    1. Utilisez le mécanisme de contrôle par E/S appelé Force Unit Access (FUA). Cet indicateur spécifie que le lecteur doit écrire les données dans un stockage multimédia stable avant la fin de la signalisation. Les applications qui doivent effectuer cette opération s’assurent que les données sont stables sur le problème fuA du disque pour s’assurer que les données ne sont pas perdues en cas de panne d’alimentation.

      Les lecteurs de disque de classe serveur (SCSI et Fibre Channel) prennent généralement en charge l’indicateur FUA. Sur les lecteurs de base (ATA, SATA et USB), FUA peut ne pas être respecté. Cela peut potentiellement laisser des données dans un état incohérent, sauf si le cache d’écriture du lecteur est désactivé. Vérifiez que le sous-système de disque gère correctement fua si vous dépendez de ce mécanisme.

    2. Forcer le vidage du cache de disque. Une application ou un système qui envoie un vidage sur le disque force le sous-système de disque à écrire toutes les données de son cache sur le disque. L’émission de vidages trop fréquents aura des conséquences sur les performances, car toutes les informations du cache de disque devront être écrites sur le support de disque avant le retour du vidage.

    3. Désactivez la mise en cache du disque. Vous pouvez désactiver la mise en cache d’écriture d’un disque en émettant le code de contrôle IOCTL_DISK_SET_CACHE_INFORMATION sur le disque. L’état du cache d’écriture (activé ou désactivé) est conservé lors des redémarrages du système. L’émission de ce code de contrôle aura des conséquences très importantes sur les performances pour tous les mécanismes d’E/S émis sur ce disque. Ces conséquences incluent probablement une diminution notable des performances. Vous devez soigneusement envisager d’utiliser ce code de contrôle avant de le déployer.

      Remarque

      Si vous ne pouvez pas désactiver la mise en cache du disque, vous devez envisager les options 1 et 2.

Par conséquent, si l’application ou la charge de travail s’exécute à l’intérieur de la machine virtuelle, les différentes couches de mise en cache ont des implications en matière de cohérence des données.

  • Cache du système de fichiers invité. Cette couche peut être contournée à l’aide de la sémantique non déboguée du système de fichiers, comme mentionné précédemment.

  • Cache de disque virtuel invité. L’IDE virtualisé (émulé ou synthétique) ou l’appareil SCSI signale l’état du cache d’écriture retourné par la pile inférieure. Les disques virtuels signalent que leur cache d’écriture est activé, et ils refusent de laisser l’invité désactiver le cache d’écriture. La désactivation du cache échoue et répond toujours que le cache est activé. Ce comportement est nécessaire pour les raisons suivantes :

    • Hyper-V ne peut pas supposer que toutes les machines virtuelles qui s’exécutent sur le même disque devront avoir les mêmes paramètres de cache de disque.

    • Le stockage sous-jacent peut avoir un cache d’écriture toujours actif qui ne peut pas être désactivé. Cela est souligné par le fait que le disque virtuel peut être migré vers un autre disque sur le même hôte (migration du stockage dynamique) ou vers un autre hôte (migration dynamique).

      Étant donné que les applications ne pourront pas désactiver le cache de disque, toute application de l’invité qui doit s’assurer de l’intégrité des données lors d’une panne d’alimentation devra utiliser l’option 1 ou l’option 2 pour s’assurer que les écritures contournent le cache du disque.

  • Cache du système de fichiers hôte. La pile de stockage Hyper-V utilise également des écritures sans tampon pour s’assurer que les écritures de l’invité contournent la pile du système de fichiers hôte sous-jacente.

  • Cache de disque hôte. Si l’option FUA est définie par l’invité, elle est propagée à l’hôte et à la pile de stockage hôte. Le système de disque physique hôte doit répondre à au moins l’un des critères suivants pour s’assurer de l’intégrité des données de charge de travail virtualisées en cas de panne d’alimentation :

    • Le système utilise des disques de classe serveur (SCSI, Fibre Channel).
    • Le système s’assure que les disques sont connectés à un adaptateur de bus hôte (HBA) de mise en cache avec batterie.
    • Le système utilise un contrôleur de stockage (par exemple, un système RAID) comme périphérique de stockage.
    • Le système s’assure que l’alimentation du disque est protégée par un ondule sans interruption.
    • Le système s’assure que la fonctionnalité de mise en cache en écriture du disque est désactivée.