Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article décrit l’altération des données sur les E/S si le pilote de stockage lit (e/S en écriture) les pages plusieurs fois dans un manoir successif vers le support de stockage.
Version du produit d’origine : Enregistreur de pages modifié
Numéro de base de connaissances d’origine : 2713398
Résumé
L’enregistreur de pages 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 dans diverses conditions. L’une de ces conditions est la Flush All pages requête, qui est envoyée lorsque le système prépare l’arrêt ou la mise en veille prolongée.
L’enregistreur de pages modifié analyse toutes les pages sales qui sont sauvegardées et suivies par le gestionnaire de mémoire. Cette analyse des pages physiques est indépendante du processus. Dans les systèmes cohérents du cache, le matériel et le logiciel fonctionnent ensemble pour garantir que les données modifiées sont écrites dans le fichier de pagination en temps voulu et sans impact pour maintenir l’intégrité des données.
Plus d’informations
Le matériel de microprocesseur met à jour les structures de données spécialisées gérées par les pages du gestionnaire de mémoire dans lesquelles elles 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 sale et non encore écrite dans le stockage de stockage (le bit sale PTE est effacé par le gestionnaire de mémoire).
Les conditions qui peuvent libérer le thread MPW sont les suivantes : les demandes du gestionnaire du jeu de travail si les listes zéro et de secours sont inférieures à un seuil pour libérer des pages ; Une flush all pages demande est reçue ou le nombre de pages disponibles est inférieur à un seuil.
MpW analyse la base de données PFN (Page Frame Number) à la recherche de pages sur les listes de pages modifiées qui sont contiguës autant que possible pour le traitement par lot d’E/S. Dans le pré-Vista, c’était généralement en 64 000 E/S de taille. Dans Vista et versions ultérieures, il s’agit généralement d’une valeur de 1 Mo de pages.
Un IRP est alloué et un MDL décrivant les pages est créé et envoyé à la pile de stockage pour être écrit dans le fichier de page de stockage. Une fois les E/S terminées, les pages sont placées à la fin de la liste de secours s’il n’existe aucune autre référence à la page (refcount == 0).
Les pilotes de stockage écrits pour émuler des types de raid sélectionnés sont susceptibles de voir ce qui apparaît comme une altération de la mémoire tampon. Cette apparence est due au fait que le MPW ne bloque pas d’autres processeurs d’exécuter un thread dans le système ou empêche la modification de pages sélectionnées pour cet E/S de pagination en cours d’écriture sur disque. Une fois que le MPW a créé et émet l’IRP sur la pile de stockage, tout thread en cours d’exécution dans le système peut modifier cette page à tout moment. Le matériel s’assure que la page est alors marquée de nouveau sale et que le MPW s’assure que la page sale est de nouveau envoyée au fichier de page parfois plus tard lorsque le MPW est de nouveau réveillé pour répéter les étapes décrites.
Les pilotes miniport HBA de stockage programment le matériel pour lire les pages de mémoire tampon source et les écrire dans le support de stockage via DMA. Dans RAID-1 comme exemple, vous devez effectuer les E/S deux fois sur différentes paires de supports de stockage et écrire plusieurs fois pour l’E/S d’écriture dans le matériel de stockage. C’est la façon la plus efficace de le faire. La surveillance consiste à supposer que cette mémoire tampon ne changera pas au fil du temps. Il n’existe aucune prévention de l’écriture de page pour protéger la page mémoire de l’écriture pendant que les E/S sont en vol. La page est verrouillée en mémoire afin qu’elle ne puisse pas être libérée pendant que les E/S sont actives, mais les attributs R/W de la page ne sont pas modifiés.
Voici un exemple plus réel : un développeur écrit un pilote miniport RAID 1 Mirroring. StorPort envoie une requête d’E/S au délai T1, le miniport indique une opération d’écriture à l’adaptateur HBA qui émettrait une lecture DMA sur la mémoire tampon source pour écrire les pages de données dans le stockage et pendant cette séquence DMA d’E/S, la page peut être modifiée à nouveau. Si le pilote lance ensuite une autre E/S basée sur le même MDL et utilise la mémoire tampon du système source ultérieurement, par exemple, cette E/S peut contenir des données différentes et, par conséquent, dans un jeu de miroir Raid-1 ; Le deuxième lecteur contient des données différentes de la première.
Les pilotes les plus sensibles sont des implémentations RAID Miniport qui améliorent les performances à l’aide de la mémoire tampon source plusieurs fois pour augmenter les E/S par seconde et réduire la latence d’E/S par rapport à la copie interne de la mémoire tampon et utiliser cette copie plusieurs fois par succession au cours du traitement des E/S.