Les développeurs de stockage peuvent découvrir ce qui apparaît en tant qu’altération des données sur les écritures d’e/s

Cet article décrit la corruption des données lors de l’e/s si le pilote de stockage lit les pages plusieurs fois dans un Manor successif sur le support de stockage.

Version du produit d’origine :   Writer de page modifié
Numéro de la base de connaissances initiale :   2713398

Résumé

Le writer de page modifié (mentionné dans cet article en tant que MPW) est l’un des deux threads de travail système qui font partie du gestionnaire de mémoire. Ces threads de travail sont autorisés à s’exécuter sous plusieurs conditions. L’une de ces conditions est la Flush All pages demande, qui est envoyée lorsque le système prépare l’arrêt ou la mise en veille prolongée.

Le writer de page modifié analyse toutes les pages incorrectes qui sont sauvegardées dans le fichier d’échange et suivies par le gestionnaire de mémoire. Cette analyse des pages physiques est un processus agnostique. Dans les systèmes cohérents de cache, le matériel et les logiciels fonctionnent ensemble pour garantir que les données modifiées sont écrites dans le fichier d’échange de manière opportune et sans impact afin de préserver l’intégrité des données.

Informations supplémentaires

Le matériel du microprocesseur mettra à jour les structures de données spécialisées gérées par les pages du gestionnaire de mémoire qui ont été écrites. Ces structures de données spécialisées, appelées entrées de table de pages (PTE), sont mises à jour pour refléter la page comme étant impropre et non encore écrites pour la sauvegarde (le bit d’impureté des PTE est effacé par le gestionnaire de mémoire).

Les conditions pouvant libérer le thread MPW sont les suivantes : demandes du responsable du jeu de travail si les listes mises à zéro et en attente sont inférieures à un seuil pour libérer des pages ; Une flush all pages demande est reçue ou le nombre de pages disponibles se trouve en dessous d’un seuil.

Le MPW analyse la base de données de numéro de trame de page (PFN) à la recherche de pages sur les listes de pages modifiées qui sont contiguës au traitement par lots des e/s. Dans les versions antérieures à Vista, il s’agissait généralement d’e/s au format 64 k. Dans Vista et les versions ultérieures, il s’agit généralement de 1 Mo de pages.

Une IRP est allouée et une MDL décrivant les pages est créée et envoyée à la pile de stockage pour être écrite dans le fichier de la page de sauvegarde. Une fois l’e/s terminée, les pages sont placées à la fin de la liste d’attente s’il n’y a aucune autre référence à la page (refcount = = 0).

Les pilotes de stockage écrits pour émuler certains types de RAID sont susceptibles de voir ce qui apparaît sous la forme d’une altération de la mémoire tampon. Cette apparence est due au fait que le MPW ne bloque pas les autres processeurs de l’exécution d’un thread dans le système ou empêche la modification des pages sélectionnées pour cette e/s de pagination en cours d’écriture sur le disque. Une fois que le MPW a créé et émis l’IRP vers la pile de stockage, tout thread en cours d’exécution dans le système peut modifier cette page à tout moment. Le matériel garantit que la page est de nouveau marquée comme étant modifiée et que le MPW s’assure que la page modifiée est de nouveau envoyée au fichier d’échange ultérieurement lorsque le MPW est de nouveau réveillée pour répéter les étapes décrites.

Programme de pilotes miniport du HBA de stockage le matériel permettant de lire les pages de mémoire tampon source et de les écrire sur le support de stockage via DMA. Dans RAID-1, en guise d’exemple, il faut effectuer les e/s deux fois sur différentes paires de support de stockage et écrire plusieurs fois pour les e/s d’écriture sur le matériel de stockage. Il s’agit de la méthode la plus efficace pour effectuer cette opération. La supervision est de supposer que cette mémoire tampon ne changera pas au fil du temps. Il n’existe aucune protection en écriture de page permettant de protéger la page de mémoire de l’écriture pendant que l’e/s est en vol. La page est verrouillée en mémoire afin qu’elle ne puisse pas être libérée pendant que l’e/s est active, mais que les attributs en lecture/écriture de la page ne sont pas modifiés.

Voici un exemple plus concret : un développeur écrit un pilote de miniport de mise en miroir RAID 1. StorPort envoie une demande d’e/s à un intervalle de temps T1, le miniport indique à une opération d’écriture sur l’adaptateur HBA qui émettrait des lectures DMA dans la mémoire tampon source pour écrire les pages de données dans le stockage de sauvegarde et Pendant cette séquence DMA e/s. Si le pilote lance ensuite une autre e/s en fonction de la même MDL, et utilise la mémoire tampon du système source ultérieurement, disons T2, cette e/s peut contenir des données différentes et, par exemple, dans un jeu de miroirs RAID-1 par exemple ; Le deuxième lecteur contiendra les mêmes données que le premier.

Les pilotes les plus sensibles sont les implémentations de miniport RAID qui améliorent les performances en utilisant plusieurs fois le tampon source pour augmenter les performances par seconde et la latence des e/s les plus basses par rapport à la copie de la mémoire tampon en interne et utiliser cette copie plusieurs fois de suite lors du traitement des e/s..