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.
Les redirecteurs de réseau utilisent des verrous opportunistes (oplocks) pour optimiser les performances d’accès aux fichiers et réduire le trafic réseau dans les environnements client-serveur.
Cette documentation est destinée aux développeurs de redirecteurs de réseau, bien que certaines informations s’appliquent aux développeurs d’applications clientes. Pour plus de documentation sur les oplocks liés aux applications clientes, veuillez consulter la section Opportunistic Locks des articles du Windows SDK.
Vue d’ensemble d’Oplock
Un verrou oplock (verrou opportuniste) est un verrou qu’un client place sur un fichier qui réside sur un serveur. Dans la plupart des cas, un client demande un oplock pour pouvoir mettre en cache des données localement. Les redirecteurs réseau sur les clients avec des serveurs distants font appel à des oplocks, tout comme les applications clientes sur des serveurs locaux. Veuillez consulter la section Types of oplocks pour une description des différents oplocks actuels et hérités.
Les oplocks permettent aux clients de serveur de fichiers (tels que les clients utilisant les protocoles SMB et SMB2) de modifier dynamiquement la stratégie de mise en mémoire tampon pour un fichier donné ou un segment de manière cohérente. L’utilisation des oplocks améliore les performances et réduit l’utilisation du réseau. Pour améliorer les performances réseau des opérations de fichiers à distance, un client peut mettre en mémoire tampon les données de fichiers localement, ce qui réduit ou élimine la nécessité d’envoyer et de recevoir des paquets réseau. Par exemple :
- Un client peut ne pas avoir à écrire des informations dans un fichier sur un serveur distant si le client sait qu’aucun autre processus n’accède aux données.
- Un client peut mettre en mémoire tampon des données de lecture anticipée à partir du fichier distant si le client sait qu’aucun autre processus n’écrit des données dans le fichier distant.
Les applications et les pilotes peuvent également utiliser des oplocks pour accéder aux fichiers de manière transparente sans affecter les autres applications qui pourraient avoir besoin d’utiliser ces fichiers.
Les systèmes de fichiers comme NTFS prennent en charge plusieurs flux de données par fichier. Le système accorde des oplocks sur des descripteurs de flux, ce qui signifie que le système accorde l’oplock pour une ouverture donnée d’un flux de fichier et que les opérations s’appliquent à ce flux. À quelques exceptions près, les opérations sur un segment n’affectent pas les oplocks sur un autre segment. Pour plus d’informations, consultez la section Demande et octroi d’oplocks.
Pour les systèmes de fichiers qui ne prennent pas en charge les flux de données alternatifs, tels que FAT, considérez « fichier » lorsque les discussions sur les oplocks se réfèrent à « segment ».
Le noyau implémente la fonctionnalité d’oplock principale du package oplock, principalement par le biais de routines FsRtlXxx telles que FsRtlInitializeOplock. Les systèmes de fichiers appellent ce package pour implémenter la fonctionnalité des oplocks dans leur système de fichiers. Les articles sur les oplocks dans cette section décrivent comment le système de fichiers NTFS interagit avec le package d’oplocks du noyau. D’autres systèmes de fichiers fonctionnent de manière similaire, bien qu’il puisse y avoir des différences mineures.
Clés d’oplock
Vous pouvez associer le descripteur de flux à une clé oplock, qui est une valeur GUID identifiant plusieurs descripteurs appartenant à la même vue du cache client. Il est plus exact de dire que la clé d’oplock est associée à la structure FILE_OBJECT à laquelle le handle de segment fait référence. Cette distinction est importante lorsque vous dupliquez le handle, par exemple avec DuplicateHandle. Chacun des handles dupliqués se réfère à la même structure FILE_OBJECT sous-jacente.
Vous pouvez fournir explicitement la clé oplock (à IoCreateFileEx) lorsque vous créez le handle de flux. Si vous ne spécifiez pas explicitement de clé oplock lors de la création du handle, le système traite le handle comme ayant une clé oplock unique associée. Cette clé unique diffère de toute autre clé sur tout autre handle.
Un blocage d’oplock s'interrompt lorsque toutes les conditions suivantes sont remplies :
- Une opération de fichier est reçue sur un handle autre que celui sur lequel l’oplock a été accordé.
- La clé oplock associée à la poignée de l’oplock diffère de celle associée à la poignée de l’opération.
- L’opération n’est pas compatible avec l’oplock actuellement accordé.
L’oplock s’interrompt même si le même processus ou thread effectue l’opération incompatible. Par exemple, un oplock exclusif s’interrompt immédiatement quand :
- Un processus ouvre un segment pour lequel un oplock exclusif est accordé.
- Ce même processus ouvre à nouveau le même flux à l’aide d’une clé oplock différente (ou non).
Pour plus d’informations, consultez la section Rompre les oplocks.
N’oubliez pas que les clés oplock existent sur les poignées et que vous les mettez sur la poignée lorsque vous la créez. Vous pouvez associer un handle à une clé d’oplock même si aucun oplock n’est accordé.