Freigeben über


Oplocks und Netzwerkumleitungen

Netzwerkumleitungen verwenden opportunistische Sperren (Oplocks), um die Leistung des Dateizugriffs zu optimieren und den Netzwerkdatenverkehr in Clientserverumgebungen zu reduzieren.

Diese Dokumentation ist für Entwickler von Netzwerkumleitungen vorgesehen, obwohl einige Informationen für Entwickler von Clientanwendungen gelten. Weitere Oplock-Dokumentationen zu Clientanwendungen finden Sie in den Windows SDK-Artikeln zu opportunistischen Sperrens.

Übersicht über Oplock

Ein Oplock (opportunistische Sperre) ist eine Sperre, die ein Client auf einer Datei platziert, die sich auf einem Server befindet. In den meisten Fällen fordert ein Client einen Oplock an, damit er Daten lokal zwischenspeichern kann. Netzwerkumleitungen auf Clients mit Remoteservern verwenden Oplocks wie Clientanwendungen auf lokalen Servern. Eine Beschreibung der verschiedenen aktuellen und älteren Oplocks finden Sie unter Typen von Oplocks.

Oplocks ermöglichen Dateiserverclients (z. B. Clients, die die SMB- und SMB2-Protokolle verwenden), die Pufferstrategie für eine bestimmte Datei oder einen Datenstrom auf dynamische Weise zu ändern. Die Verwendung von Oplocks erhöht die Leistung und reduziert die Netzwerknutzung. Um die Netzwerkleistung für Remotedateivorgänge zu erhöhen, kann ein Client Dateidaten lokal puffern, wodurch die Notwendigkeit zum Senden und Empfangen von Netzwerkpaketen reduziert oder eliminiert wird. Zum Beispiel:

  • Ein Client muss möglicherweise keine Informationen in eine Datei auf einem Remoteserver schreiben, wenn der Client weiß, dass kein anderer Prozess auf die Daten zugreift.
  • Ein Client kann Lesedaten aus der Remotedatei puffern, wenn der Client weiß, dass kein anderer Prozess Daten in die Remotedatei schreibt.

Anwendungen und Treiber können Oplocks auch verwenden, um in transparenter Weise auf Dateien zuzugreifen, ohne dass sich dies auf andere Anwendungen auswirkt, die diese Dateien möglicherweise verwenden müssen.

Dateisysteme wie NTFS unterstützen mehrere Datenströme pro Datei. Das System gewährt Oplocks für Datenstrom-Handles, was bedeutet, dass das Oplock für das Öffnen eines Dateidatenstroms gewährt wird und die Operationen für diesen Datenstrom gelten. Mit wenigen Ausnahmen wirken sich Vorgänge für einen Datenstrom nicht auf Oplocks für einen anderen Datenstrom aus. Weitere Informationen finden Sie unter Anfordern und Gewähren von Oplocks.

Denken Sie bei Dateisystemen, die keine alternativen Datenströme unterstützen, z. B. FAT, an „Datei“, wenn im Zusammenhang mit Oplocks der Begriff „Datenstrom“ verwendet wird.

Der Kernel implementiert die Kern-Oplock-Funktionalität des Oplock-Pakets, in erster Linie über FsRtlXxx-Routinen wie FsRtlInitializeOplock. Dateisysteme rufen dieses Paket auf, um die Oplock-Funktionalität in ihrem Dateisystem zu implementieren. Die Oplock-Artikel in diesem Abschnitt beschreiben, wie das NTFS-Dateisystem mit dem Kernel-Oplock-Paket interagiert. Andere Dateisysteme funktionieren ähnlich, obwohl es möglicherweise geringfügige Unterschiede gibt.

Oplock-Schlüssel

Sie können das Stream-Handle einem Oplock-Schlüssel zuordnen, bei dem es sich um einen GUID-Wert handelt, der mehrere Handles identifiziert, die zur gleichen Client-Cache-Ansicht gehören. Es ist korrekter zu sagen, dass der Oplock-Schlüssel der FILE_OBJECT-Struktur zugeordnet ist, auf die sich das Datenstromhandle bezieht. Diese Unterscheidung ist wichtig, wenn Sie ein Handle duplizieren, z. B. mit DuplicateHandle. Jeder der duplizierten Handles bezieht sich auf dieselbe zugrunde liegende FILE_OBJECT-Struktur.

Sie können den Oplock-Schlüssel (für IoCreateFileEx) explizit bereitstellen, bei der Erstellung des Stream-Handles. Wenn Sie bei der Handle-Erstellung keinen Oplock-Schlüssel explizit angeben, wird das System das Handle als mit einem eindeutigen Oplock-Schlüssel versehen behandeln. Dieser eindeutige Schlüssel unterscheidet sich von jedem anderen Schlüssel auf jedem anderen Handle.

Ein Oplock wird unterbrochen, wenn alle folgenden Bedingungen erfüllt sind:

  • Ein Dateivorgang wird auf einem anderen Handle als dem Handle empfangen, für das der Oplock gewährt wurde.
  • Der oplock-Schlüssel, der dem Oplock-Handle zugeordnet ist, unterscheidet sich von dem Schlüssel, der dem Handle des Vorgangs zugeordnet ist.
  • Der Vorgang ist nicht mit dem aktuell gewährten Oplock kompatibel.

Die Oplocks brechen, selbst wenn derselbe Prozess oder Thread den inkompatiblen Vorgang ausführt. Beispielsweise wird ein exklusiver Oplock sofort deaktiviert in folgenden Fällen:

  1. Ein Prozess öffnet einen Datenstrom, für den ein exklusives Oplock gewährt wird.
  2. Dieser Vorgang öffnet denselben Datenstrom erneut, indem ein anderer (oder kein) Oplock-Schlüssel verwendet wird.

Weitere Informationen finden Sie unter Unterbrechen von Oplocks.

Erinnern Sie sich daran, dass Oplock-Schlüssel auf Handles existieren und Sie sie "auf" den Handle setzen, wenn Sie ihn erstellen. Sie können Handles Oplock-Schlüssel zuordnen, auch wenn keine Oplocks gewährt wurden.