文件服务器的性能优化

应选择适当的硬件来满足预期的文件服务器负载,考虑平均负载、峰值负载、容量、增长计划和响应时间。 硬件瓶颈会限制软件优化的有效性。

客户端的通用调优参数

以下REG_DWORD注册表设置可能会影响与服务器消息块(SMB)文件服务器交互的客户端计算机的性能:

注册表项 注册表路径 违约 有效范围 DESCRIPTION
ConnectionCountPerNetworkInterface HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\ConnectionCountPerNetworkInterface 1 1-16 要与服务器建立的每个非 RSS 接口的连接数上限。
ConnectionCountPerRssNetworkInterface HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\ConnectionCountPerRssNetworkInterface 4 1-16 要与服务器建立的每个 RSS 接口的连接数上限。
ConnectionCountPerRdmaNetworkInterface HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\ConnectionCountPerRdmaNetworkInterface 2 1-16 要与服务器建立的每个 RDMA 接口的连接数上限。
每服务器最大连接数 HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\MaximumConnectionCountPerServer 32 1-64 要与运行 Windows Server 2012 的单个服务器建立的所有接口的连接数上限。
DormantDirectoryTimeout HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\DormantDirectoryTimeout 600 服务器目录句柄通过目录租用保持打开状态的最长时间(以秒为单位)。
文件信息缓存生命周期 HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\FileInfoCacheLifetime 10 文件信息缓存超时期限(以秒为单位)。
DirectoryCacheLifetime1 HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\DirectoryCacheLifetime 10 目录缓存超时(以秒为单位)。
DirectoryCacheEntrySizeMax HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\DirectoryCacheEntrySizeMax 64 KB 目录缓存条目的最大大小(以 KB 为单位)。
FileNotFoundCacheLifetime HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\FileNotFoundCacheLifetime 5 找不到文件缓存超时期限(以秒为单位)。
CacheFileTimeout HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\CacheFileTimeout 10 应用程序关闭文件的最后一个句柄后,重定向程序保留文件缓存数据的时长(以秒为单位)。
DisableBandwidthThrottling HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\DisableBandwidthThrottling 0 将此值设置为 1 会禁用限制,并允许在高延迟网络连接上提高文件传输吞吐量。
DisableLargeMtu HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\DisableLargeMtu SMB 重定向程序每次请求能够传输最大为 1 MB 的负载,这可以提高文件传输速度。 将此注册表值设置为 1 会将请求大小限制为 64 KB。 在应用此设置之前,应评估此设置的影响。 Windows 8 的默认值为 0
RequireSecuritySignature HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\RequireSecuritySignature 0 将此值更改为 1 可对所有 SMB 通信启用 SMB 签名,从而阻止与禁用 SMB 签名的计算机进行 SMB 通信。 SMB 签名虽然会增加 CPU 成本和网络往返次数,但有助于阻止中间人攻击。 如果不需要 SMB 签名,请确保此注册表值在所有客户端和服务器上为 0
FileInfoCacheEntriesMax HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\FileInfoCacheEntriesMax 64 1-65536 确定客户端可缓存的文件元数据量。 增加此值可以减少网络流量,并在访问大量文件时提高性能。
DirectoryCacheEntriesMax HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\DirectoryCacheEntriesMax 16 1-4096 确定客户端可以缓存的目录信息量。 增加此值可以减少网络流量,并在访问大型目录时提高性能。
FileNotFoundCacheEntriesMax HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\FileNotFoundCacheEntriesMax 128 1-65536 确定客户端可以缓存的文件名信息量。 增加该值可以减少网络流量,并在访问大量文件名时提高性能。
MaxCmds HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\MaxCmds 15 限制会话上未完成的请求数。 增加该值可以使用更多内存,但它可以通过启用更深入的请求管道来提高性能。 使用 MaxMpxCt 增加值还可以消除由于大量未完成的长期文件请求(如 FindFirstChangeNotification 调用)而遇到的错误。 此参数不会影响与 SMB 2.0 服务器的连接。
DormantFileLimit HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\DormantFileLimit 1023 指定应用程序关闭文件后,应在共享资源上保持打开的最大文件数。

注释

1 DirectoryCacheLifetime 注册表项控制在缺少目录租约时的目录元数据缓存。

Windows 10 版本 1803 中的已知问题会影响 Windows 10 缓存大型目录的能力。 若要解决此问题,请安装 Windows 10 版本 1809 或更高版本。

若要解决此问题,请将 DirectoryCacheLifetime 设置为 0。 此问题会影响以下版本的 Windows 10:

  • Windows 10 企业版版本 1803
  • 适用于工作站的 Windows 10 专业版版本 1803
  • Windows 10 专业教育版版本 1803
  • Windows 10 专业版版本 1803
  • Windows 10 教育版版本 1803
  • Windows 10 家庭版版本 1803

客户端优化示例

客户端计算机的一般优化参数可以优化计算机以访问远程文件共享,尤其是在某些高延迟网络(例如分支机构、跨数据中心通信、家庭办公室和移动宽带)上。 这些设置在所有计算机上都不是最佳或适当的。 在应用各个设置之前,应评估各个设置的影响。

注册表项 价值 违约
DisableBandwidthThrottling 1 0
FileInfoCacheEntriesMax 32768 64
DirectoryCacheEntriesMax 4096 16
FileNotFoundCacheEntriesMax 32768 128
MaxCmds 32768 15

从 Windows 8 开始,可使用 Set-SmbClientConfigurationSet-SmbServerConfiguration Windows PowerShell cmdlet 配置其中的许多 SMB 设置。 还可以使用 Windows PowerShell 配置仅限注册表的设置,例如:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" RequireSecuritySignature -Value 0 -Force