In this first article about Tuning the Windows 2012 File System, we focus on the Server Message Block (SMB) model for client-server communication, including the SMB 1.0, SMB 2.0 and SMB 3.0 protocols.
SMB Model Overview
The SMB model has two entities: the client and the server.
On the client, applications perform system calls by requesting operations on remote files. These requests are handled by the redirector subsystem (Rdbss.sys) and the SMB miniredirector (Mrxsmb.sys), which translates them into SMB protocol sessions and requests over TCP/IP. In Windows 8, the SMB 3.0 protocol is supported. The Mrxsmb10.sys driver handles legacy SMB traffic, and the Mrxsmb20.sys driver handles SMB 2.0 and SMB 3.0 traffic.
On the server, SMB connections are accepted and SMB requests are processed as local file system operations through the NT file system (NTFS), Resilient File System (ReFS) or the Cluster Shared Volume file system (CSVFS) and the local storage stack. The Srv.sys driver handles legacy SMB traffic, and the Srv2.sys driver handles SMB 2.0 and SMB 3.0 traffic. The Srvnet.sys component implements the interface between networking and the file server for both SMB protocols. File system metadata and content can be cached in memory through the system cache in the kernel (Ntoskrnl.exe) if the file is not opened with the write-through flag set.
SMB Configuration Considerations
You should not enable any services or features that your file server and file clients do not require. These services can include SMB signing, client-side caching, file system minifilters, search service, scheduled tasks, NTFS encryption, NTFS compression, IPSEC, firewall filters, Teredo, SMB encryption, and antivirus features.
You want to make sure that the BIOS and operating system power management modes are set as needed, which might include High Performance mode. Ensure that the latest, most resilient, and fastest storage and networking device drivers are installed.
Copying files is a common operations performed on a file server. The Windows Server operating system has several built-in file copy utilities that you can run in a command shell, including Xcopy and Robocopy. When you use Xcopy, we recommend adding the /q and /k options to your existing parameters, when applicable, to maximize performance. The former option reduces CPU overhead by reducing console output and the latter reduces network traffic. When using Robocopy, the /mt option (in Windows Server 2012 and Windows Server 2008 R2) can significantly improve speed on remote file transfers by using multiple threads when copying multiple small files. We also recommend the /log option to reduce console output by redirecting to NUL device or to a file.
SMB File Servers Tuning Parameters
The following registry tuning parameters can affect the performance of SMB file servers:
The default in Windows Server 2012 is 2 (in previous releases it is 0.) This parameter determines whether NTFS generates a short name in the 8dot3 (MS‑DOS) naming convention for long file names and for file names that contain characters from the extended character set. If the value of this entry is 0, files can have two names: the name that the user specifies and the short name that NTFS generates. If the user-specified name follows the 8dot3 naming convention, NTFS does not generate a short name. A value of 2 means that this parameter can be configured per volume.
- TreatHostAsStableStorage (HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters\(REG_DWORD)
The default is 0. This parameter disables processing write flush commands from clients. If the value of this entry is 1, the server performance and client latency for power-protected servers can improve. Workloads that resemble the NetBench file server benchmark benefit from this behavior. Note that if you have a clustered file server, it is possible that you may experience data loss if the server fails with this setting enabled. Therefore, evaluate it carefully prior to applying it.
- AsynchronousCredits (HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters\(REG_DWORD)
The default is 512. This parameter limits the number of concurrent asynchronous SMB commands that are allowed on a single connection. Some cases (such as when there is a front-end server with a back-end IIS server) require a large amount of concurrency (for file change notification requests, in particular). The value of this entry can be increased to support these cases.
- Smb2CreditsMin and Smb2CreditsMax (HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters\(REG_DWORD)
The defaults are 512 and 8192, respectively. These parameters allow the server to throttle client operation concurrency dynamically within the specified boundaries. Some clients might achieve increased throughput with higher concurrency limits, for example, copying files over high-bandwidth, high-latency links.
- AdditionalCriticalWorkerThreads (HKLM\System\CurrentControlSet\Control\Session Manager\Executive\(REG_DWORD)
The default is 0, which means that no additional critical kernel worker threads are added. This value affects the number of threads that the file system cache uses for read-ahead and write-behind requests. Raising this value can allow for more queued I/O in the storage subsystem, and it can improve I/O performance, particularly on systems with many logical processors and powerful storage hardware.
- MaximumTunnelEntries (HKLM\System\CurrentControlSet\Control\FileSystem\(REG_DWORD)
The default is 1024. Reduce this value to reduce the size of the NTFS tunnel cache. This can significantly improve file deletion performance for directories that contain a large number of files. Note that some applications depend on NTFS tunnel caching.
- MaxThreadsPerQueue (HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters\(REG_DWORD)
The default is 20. Increasing this value raises the number of threads that the file server can use to service concurrent requests. When a large number of active connections need to be serviced, and hardware resources (such as storage bandwidth) are sufficient, increasing the value can improve server scalability, performance, and response times.
- RequireSecuritySignature (HKLM\system\CurrentControlSet\Services\LanmanServer\Parameters\(REG_DWORD)
The default is 0. Changing this value to 1 prevents SMB communication with computers where SMB signing is disabled. In addition, a value of 1 causes SMB signing to be used for all SMB communication. SMB signing can increase CPU cost and network round trips. If SMB signing is not required, ensure that the registry value is 0 on all clients and servers.
- NtfsDisableLastAccessUpdate (HKLM\System\CurrentControlSet\Control\FileSystem\(REG_DWORD)
The default is 1. In versions of Windows earlier than Windows Vista and Windows Server 2008, the default is 0. A value of 0 can reduce performance because the system performs additional storage I/O when files and directories are accessed to update date and time information.
- MaxMpxCt (SMB 1 clients only) (HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters\(REG_DWORD)
The default is 50. This parameter suggests a limit on the maximum number of outstanding requests that an SMB 1 client can send. Increasing the value can use more memory, but it can improve performance for some client applications by enabling a deeper request pipeline. Increasing the value in conjunction with MaxCmds can also eliminate errors that are encountered due to large numbers of outstanding long-term file requests, such as FindFirstChangeNotification calls. This parameter does not affect connections with SMB 2 clients.
There are a number of parameters that are not required in Windows Server 2012:
SMB Server Tuning Example
The following settings can optimize a computer for file server performance in many cases. The settings are not optimal or appropriate on all computers. You should evaluate the impact of individual settings before applying them.
|MaxMpxCt (only applicable to SMB 1 clients)||32768||50|
In our next article we’ll discuss tuning the NFS model in Windows 2012