Client caching features: Oplock vs. Lease
Opportunistic locks ,or oplock is a client caching mechanism that allows SMB/SMB2 clients to dynamically decide the client-side buffering strategy so the network traffic can be minimized. For example, a client can buffer data for writing locally to reduce network packets if the client is notified there are no other processes accessing data. The same buffering can be done on reading , where data from a remote file is read ahead to reduce the round trips between the client and the server if the client knows that there are no other processes writing data to the file.
In SMB2.1, which is the new SMB2 dialect implemented in Windows 7, Lease is introduced as a new type of client caching mechanism. It offers more flexibility for controlling client caching and thus results in significant performance improvement in high latency network[2].
In this blog, we will analyze the network behavior of oplock in SMB/SMB2 and leasing in SMB2.1. We will compare lease and oplock and discuss the advantages of lease over oplock in certain scenarios.
Oplocks in SMB/SMB2
The following types of oplocks are available in SMB/SMB2.
· Batch Oplock
This oplock allows a client to perform batch operations to repeatedly open, read/write and close the same file without actually closing the file on the server. This oplock is exclusive and cannot be held by two clients at the same time. It provides read, write and handle caching .
· Level II Oplock
This oplock allows multiple clients for reading, but no writing. This oplock can be shared by multiple clients at the same time. It provides read caching only.
· Exclusive Oplock (only in SMB2)
This oplock allows a client to have exclusive access to do arbitrary buffering. It provides read caching and writes caching.
After an oplock is granted to a client, if the server receives another operation that conflicts with the current opLock held by the client, an oplock break notification will be sent to the client. The client should send an acknowledgement for the oplock break to the server before the server can proceed. For example, if a client holds a Level II oplock and another client opens the same file on the server for writing, the level II oplock must be broken and the client caching has to be disabled.
Oplock network traffic:
· A client requests an oplock from a server in
o Flag field of SMB_COM_NT_CREATE_ANDX (SMB)
or
o RequestedOplockLevel field in SMB2_CREATE(SMB2)
· The server grants oplock to the client in
o opLockLevel of SMB_COM_NT_CREATE_ANDX response(SMB)
or
o opLockLevel of SMB2_CREATE response(SMB2)
· The server sends an opLock break to the client, if the condition for oplock break is met.
There is a difference between SMB and SMB2 for how an oplock break is sent to a client
o For SMB, the server sends an oplock break to the client using SMB_LOCK_ANDX. LockType field is the level that the oplock is broken into.
o For SMB2, there is a specific command (SMB2_OPLOCK_BREAK,0x12 ) used to send the oplock break notification to the client.
· The client sends the acknowledgment for the opLock break to the server
SMB and SMB2 clients use different commands to acknowledge oplock breaks.
o For SMB, the client sends an oplock break acknowledgement to the server using SMB_LOCK_ANDX. LockType is the type of oplock client holds.
o For SMB2, the client sends SMB2_OPLOCK_BREAK_ACKNOWLEDGEMENT to the server. OplockType is the type of oplock client holds.
Lease in SMB 2.1 (Windows 7)
In Windows 7, a new caching mechanism named Lease is introduced. It shares the same purpose as an oplock, which allows clients to adjust their buffering policy to increase performance and to reduce network use. Actually, the newly added lease types correspond to the new oplock types introduced in Windows 7 file system [1]. SMB2.1 just gives it a different name to distinguish it from the existing oplock functionality.
The primary types of leases available are:
· Read-caching lease: allows caching reads and can be shared by multiple clients.
· Write-caching lease: allows caching writes and is exclusive to only one client.
· Handle-caching lease: allows caching handles and can be shared by multiple clients .
It is very important to remember that a lease can be a combination of one or more of the leases above. The valid leases Windows 7 can grant are
· R (READ_CACHING)
· RW(READ_CACHING|WRITE_CACHING)
· RH(READ_CACHING|HANDLE_CACHING)
· RWH(READ_CACHING|WRITE_CACHING|HANDLE_CACHING)
SMB2.1 lease network traffic:
· A client requests a lease from a server
o Set RequestedOplockLevel field to SMB2_OPLOCK_LEVEL_LEASE(0xFF) in SMB2_CREATE request .
o Use SMB2_CREATE_REQUEST_LEASE create context in SMB2_CREATE request to indicate the type of lease requested.
· The server grants a lease to the client
o Set opLockLevel field of SMB2_CREATE response to OPLOCK_LEVEL_LEASE to indicate that a lease is granted.
o Use SMB2_CREATE_RESPONSE_LEASE create context in SMB2_CREATE response to indicate the type of lease granted.
· The server sends lease breaks to the client, if a lease break condition is met.
o SMB2_LEASE_BREAK_NOTIFICATION is sent to client. It contains the current lease state and the new lease state the client should change to. This is a different structure than opLock.
· The client sends the acknowledgement for the lease break to the server
o SMB2_LEASE_BREAK_ACKNOWLEDGEMENT is sent to server. It indicates the lease state of client currently holds. This is a different structure than opLock.
Comparison between Lease and Oplock
· Lease in SMB2.1 is based on the new types of oplocks introduced in Window 7 or later file systems. The purposes for Lease and Oplock are the same. But Lease provides greater flexibility for clients to request caching mechanisms. Some new caching levels are added in leasing featuer in Windows 7.
· One of the levels added is RH lease, which allows read caching and handle caching so multiple clients can hold on to cached data even after an application closes the handle. Compared with Level II oplocks, which have to be broken between closing and opening handles, this new lease level offers a big improvement for complex I/O intensive applications.
· Another enhancement of lease over oplock is that SMB2.1 in Windows 7 allows full caching when multiple handles are opened by the same client. This is also a significant improvement over oplock semantics when any additional handle opened by even the same client will break the existing batch oplock and thus disable the client caching. The following is the comparison between oplock and lease for the case of multiple handles opened.
Oplock with multiple handles from the same client
Client Network Server
CreateFile with READ and WRITE --> First handle on the file
<-- Batch oplock granted
ReadFile - ->
<-- read data from file on server
ReadFile…. (From cached data) No network packets
WriteFile… (From cached data) No network packets
CreatFile with READ --> Second handle on the file
No more data caching allowed <-- Batch oplock broken
ReadFile --> File I/O on the server
WriteFile --> File I/O on the server
Lease with multiple handles from the same client
Client Network Server
CreateFile with READ and WRITE --> First handle on the file
<-- Lease granted
ReadFile -->
<-- read data from file on server
ReadFile…. (From cached data) No network packets
WriteFile… (From cached data) No network packets
CreatFile with READ --> Lease is not broken on the second handle
ReadFile (From cached data) No network packets
WriteFile (From cached data) No network packets
From two scenarios above, we can see that oplock doesn’t allow data caching if there are multiple handles opened by the same client; on the other hand, the leasing feature in Windows 7 allows full data caching on multiple handles as long as they are opened by the same client. This client caching enhancement can provide a further performance boost, especially on high latency network.
For more information about client caching improvements in Windows 7, you can review the excellent PDC presentation on the following link [2] and the MS-SMB and MS-SMB2 documents[3][4].
Reference Link:
1. [MSDN-FSBO] Microsoft Corporation, "File System Behavior in the Microsoft Windows Environment", June 2008, https://download.microsoft.com/download/4/3/8/43889780-8d45-4b2e-9d3a-c696a890309f/File%20System%20Behavior%20Overview.pdf .
2. Windows 7: Optimizing Applications for Remote File Services over the WAN https://channel9.msdn.com/pdc2008/ES23/
3. [MS-SMB2]: Server Message Block (SMB) Version 2 Protocol Specification https://msdn.microsoft.com/en-us/library/cc246482(PROT.13).aspx
4. [MS-SMB]: Server Message Block (SMB) Protocol Specification https://msdn.microsoft.com/en-us/library/cc246231(PROT.13).aspx
Comments
Anonymous
May 22, 2009
PingBack from http://microsoft-sharepoint.simplynetdev.com/client-caching-features-oplock-vs-lease/Anonymous
April 20, 2011
The comment has been removedAnonymous
April 20, 2011
The comment has been removed