The installation of a filter that is not HTTP-cache-aware causes IIS to completely disable caching, which results in poor performance. ISAPI filters that were written before IIS 6.0 can cause this behavior.
Common Gateway Interface (CGI) requests
For performance reasons, the use of CGI applications to serve requests is not recommended with IIS. Frequently creating and deleting CGI processes involves significant overhead. Better alternatives include using ISAPI application scripts and ASP or ASP.NET scripts. Isolation is available for each of these options.
NTFS File System Setting
The system-global switch NtfsDisableLastAccessUpdate (REG_DWORD) 1 is located under HKLM\System\CurrentControlSet\Control\FileSystem\.
This switch reduces disk I/O load and latencies by disabling date and time stamp updating for the last file or directory access. This key is set to 1 by default. Clean installations of Windows Server 2012, Windows Server 2008 R2, and Windows Server 2008 set this key by default, and you do not need to adjust it. Earlier versions of Windows operating systems did not set this key. If your server is running an earlier version of Windows, or it was upgraded to Windows Server 2012, Windows Server 2008 R2, or Windows Server 2008, you should set this key to 1.
Disabling the updates is effective when you are using large data sets (or many hosts) that contain thousands of directories. We recommend that you use IIS logging instead if you maintain this information only for web administration.
Caution Some applications such as incremental backup utilities rely on this update information, and they do not function correctly without it.
Networking Subsystem Performance Settings for IIS
See Performance Tuning for Networking Subsystem earlier in this guide.
You should select the proper hardware to satisfy the expected file server load, considering average load, peak load, capacity, growth plans, and response times. Hardware bottlenecks limit the effectiveness of software tuning. Choosing and Tuning Server Hardware earlier in this guide provides hardware recommendations. The sections on networking and storage subsystems also apply to file servers.
Server Message Block Model
This section provides information about the Server Message Block (SMB) model for client-server communication, including the SMB 1.0, SMB 2.0 and SMB 3.0 protocols.
The SMB model consists of 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 translate 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.
Figure 12 summarizes the layers that a user request on a client computer must pass through to perform file operations over the network on a remote SMB file server.
Figure 12. Layers on a remote SMB File Server
SMB Configuration Considerations
Do not enable any services or features that your file server and file clients do not require. These might 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.
Ensure 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.
Previous releases of the Windows Server operating system sometimes benefitted from tools that limit the working-set size of the Windows file cache. These tools are not necessary on most servers running Windows 2008 R2 and Windows Server 2012. You should reevaluate your use of such tools.
Tuning Parameters for SMB File Servers
The following registry tuning parameters can affect the performance of SMB file servers:
The default in Windows Server 2012 is 2, and in previous releases it is 0. This parameter determines whether NTFS generates a short name in the 8dot3 (MSDOS) 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.
Note The system volume will have 8dot3 enabled, whereas it is disabled by default in other volumes in Windows Server 2012.
Changing this value does not change the contents of a file, but it avoids the short-name attribute creation for the file, which also changes how NTFS displays and manages the file. For most SMB file servers, the recommended setting is 1 (disabled). For example, you would want to disable the setting if you have a clustered file server.
In Windows Server 2012 and Windows Server 2008 R2, you can disable 8dot3name creation on a per-volume basis without using the global NtfsDisable8dot3NameCreation setting. You can do this with the built-in fsutil tool. For example, to disable 8dot3 name creation on the volume D, run fsutil 8dot3name set d: 1 from a Command Prompt window. You can view Help text by using the command fsutil 8dot3name. If you are disabling a new 8dot3 name creation on a volume that has existing data, consider stripping existing 8dot3 names from the volume. This can also be done with the fsutil tool. For example, to strip existing 8dot3 names on volume D and log the changes made, run fsutil 8dot3name strip /l 8dot3_removal_log.log /s d:\. You can view Help text by typing the command fsutil 8dot3name strip.
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 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.
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.
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.
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.
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 Some applications depend on NTFS tunnel caching.
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.
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.
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)
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.
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.