Partager via


Contrôle d’état de mise en mémoire tampon

RDBSS fournit un gestionnaire de mise en mémoire tampon, un mécanisme permettant de fournir la cohérence du cache distribué conjointement avec les différents mini-redirecteurs réseau. Ce service est encapsulé dans le gestionnaire de mise en mémoire tampon dans RDBSS qui traite les demandes de modification de l’état de mise en mémoire tampon. Le gestionnaire de mise en mémoire tampon dans RDBSS suit et lance des actions sur toutes les demandes d’état de mise en mémoire tampon de modification générées par les différents mini redirecteurs réseau ainsi que par RDBSS.

Il existe plusieurs composants courants dans l’implémentation de la cohérence du cache dans un mini-redirecteur réseau classique :

  • Modifications apportées à la création et à l’ouverture de routines de fichiers.

    Dans ce chemin, le type de demande de mise en mémoire tampon est déterminé et la requête appropriée est adressée au serveur. Au retour du mini-redirecteur réseau, et éventuellement du serveur, l’état de mise en mémoire tampon associé au fcb est mis à jour en fonction du résultat de l’appel de création ou d’appel ouvert.

  • Modifications pour recevoir un code d’indication pour gérer les notifications d’état de mise en mémoire tampon des modifications à partir du serveur.

    Si une telle demande est détectée, le mécanisme local de coordination des états de mise en mémoire tampon doit être déclenché.

  • Mécanisme permettant de modifier l’état de mise en mémoire tampon implémentée dans le cadre de RDBSS. Toute demande d’état de mise en mémoire tampon de modification doit identifier la structure SRV_OPEN à laquelle la demande s’applique.

La quantité d’effort de calcul nécessaire à l’identification de la structure SRV_OPEN dépend du protocole et des détails du mini-redirecteur réseau. Dans le protocole SMB, les verrous opportunistes (oplocks) fournissent l’infrastructure nécessaire à la cohérence du cache. Dans l’implémentation du protocole SMB dans Windows, les API d’ID multiplex fournies par RDBSS sont utilisées. Le serveur peut choisir l’ID multiplex utilisé pour identifier un fichier ouvert sur le serveur. Les ID multiplex sont relatifs à l’NET_ROOT (partage) sur lequel ils sont ouverts. Ainsi, chaque demande d’état de mise en mémoire tampon de modification est identifiée par deux clés : NetRootKey et SrvOpenKey, qui doivent être traduites en NET_ROOT et SRV_OPEN structure appropriées, respectivement. Pour assurer une meilleure intégration avec le mécanisme d’acquisition/mise en production des ressources et pour éviter la duplication de cet effort dans les différents mini redirecteurs réseau, le RDBSS fournit ce service.

Il existe deux routines fournies dans RDBSS pour indiquer les changements d’état de mise en mémoire tampon dans les structures SRV_OPEN :

Notez que les associations de clés sont irréversibles et dureront la durée de vie de la structure SRV_OPEN associée.

Les mini-redirecteurs réseau qui ont besoin d’un mécanisme auxiliaire pour établir le mappage des ID multiplex à la structure SRV_OPEN peuvent utiliser RxIndicateChangeOfBufferingState, tandis que les mini-redirecteurs réseau qui n’ont pas besoin de cette assistance peuvent utiliser RxIndicateChangeOfBufferingStateForSrvOpen.

Le gestionnaire de mise en mémoire tampon dans RDBSS traite ces demandes en différentes étapes. Il gère les requêtes reçues des différents mini-redirecteurs réseau sous-jacents dans l’une des plusieurs listes.

  • La liste Dispatcher contient toutes les requêtes pour lesquelles le mappage approprié à une structure de SRV_OPEN n’a pas été établi.

  • La liste des gestionnaires contient toutes les demandes pour lesquelles le mappage approprié a été établi, mais n’a pas encore été traitée.

  • LastChanceHandlerList contient toutes les demandes pour lesquelles le traitement initial a échoué. Cela se produit généralement lorsque le fcb a été acquis en mode partagé au moment de la réception de la demande d’état de mise en mémoire tampon de modification. Dans ce cas, la demande d’arrêt d’oplock ne peut être traitée que par un thread worker retardé.

Le traitement de la demande de modification de l’état de mise en mémoire tampon dans un pilote de mini-redirecteur réseau est lié au protocole d’acquisition et de mise en production FCB. Cela permet de garantir des délais d’exécution plus courts.

RDBSS fournit les routines suivantes pour gérer l’état de mise en mémoire tampon qui peut être utilisé par les pilotes de mini-redirecteur réseau :

Routine Description

RxChangeBufferingState

Cette routine est appelée pour traiter une demande de modification d’état de mise en mémoire tampon.

RxIndicateChangeOfBufferingState

Cette routine est appelée pour inscrire une demande de modification de l’état de mise en mémoire tampon (par exemple, une indication d’arrêt d’oplock) en vue d’un traitement ultérieur.

RxIndicateChangeOfBufferingStateForsrvOpen

Cette routine est appelée pour inscrire une demande de modification de l’état de mise en mémoire tampon (par exemple, une indication d’arrêt d’oplock) en vue d’un traitement ultérieur.