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 (eine opportunistische Sperre) ist eine Sperre, die von einem Client auf einer Datei platziert wird, die sich auf einem Server befindet. In den meisten Fällen fordert ein Client einen Oplock an, damit er Daten lokal zwischenspeichern kann. Oplocks werden von Netzwerkumleitungen auf Clients mit Remoteservern und von Clientanwendungen auf lokalen Servern verwendet. 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 ein Oplock für eine bestimmte Öffnung eines Dateidatenstroms gewährt wird und die Vorgänge 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.

Die zentrale Oplock-Funktionalität des Oplock-Pakets wird im Kernel implementiert, 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

Datenstrom-Handles können einem Oplock-Schlüssel zugeordnet werden. Dabei handelt es sich um einen GUID-Wert, der mehrere Handles identifiziert, die zur gleichen Client-Cacheansicht 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 das Handle dupliziert wird, etwa mit DuplicateHandle. Jeder der duplizierten Handles bezieht sich auf dieselbe zugrunde liegende FILE_OBJECT-Struktur.

Der Oplock-Schlüssel kann explizit (für IoCreateFileEx) bereitgestellt werden, wenn das Datenstromhandle erstellt wird. Wenn bei der Handle-Erstellung kein Oplock-Schlüssel explizit angegeben wird, behandelt das System das Handle als eines, dem ein eindeutiger Oplock-Schlüssel zugeordnet ist. Dieser eindeutige Schlüssel unterscheidet sich von jedem anderen Schlüssel auf jedem anderen Handle.

Ein Oplock wird beendet, wenn Folgendes geschieht:

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

Oplocks werden auch unterbrochen, wenn es sich um denselben Prozess oder Thread handelt, der den inkompatiblen Vorgang ausführt. Beispielsweise werden exklusive Oplocks sofort unterbrochen, wenn Folgendes geschieht:

  1. Ein Prozess öffnet einen Datenstrom, für den ein exklusives Oplock gewährt wird.
  2. Dieser Vorgang öffnet dann denselben Datenstrom erneut mit einem anderen (oder keinem) Oplock-Schlüssel.

Weitere Informationen finden Sie unter Unterbrechen von Oplocks.

Denken Sie daran, dass Oplock-Schlüssel auf Handles vorhanden sind und beim Erstellen des Handles „platziert“ werden. Sie können Handles Oplock-Schlüssel zuordnen, auch wenn keine Oplocks gewährt wurden.