性能调整 NFS 文件服务器

NFS 模型的服务

以下各节提供有关用于客户端-服务器通信的 Microsoft Services for Network File System (NFS) 模型的信息。 由于 NFS v2 和 NFS v3 仍然是部署最广泛的协议版本,因此除 MaxConcurrentConnectionsPerIp 之外的所有注册表项仅适用于 NFS v2 和 NFS v3。

NFS v4.1 协议不需要调整注册表。

适用于 NFS 的服务模型概述

用于 NFS 的 Microsoft 服务为拥有 Windows 和 UNIX 混合环境的企业提供文件共享解决方案。 此通信模型由客户端计算机和服务器组成。 客户端上的应用程序通过重定向程序 (Rdbss.sys) 和 NFS 微型重定向程序 (Nfsrdr.sys) 请求服务器上的文件。 微型重定向程序使用 NFS 协议通过 TCP/IP 发送请求。 服务器通过 TCP/IP 接收来自客户端的多个请求,并将请求路由到访问存储堆栈的本地文件系统 (Ntfs.sys)。

下图显示了 NFS 的通信模型。

NFS 通信模型

调整 NFS 文件服务器的参数

以下 REG_DWORD 注册表设置可能会影响 NFS 文件服务器的性能:

  • 最佳读取

    HKLM\System\CurrentControlSet\Services\NfsServer\Parameters\OptimalReads
    

    默认值为 0。 此参数确定是针对 FILE_RANDOM_ACCESS 还是FILE_SEQUENTIAL_ONLY打开文件,具体取决于工作负载 I/O 特征。 将此值设置为 1 可强制打开文件以进行FILE_RANDOM_ACCESS。 FILE_RANDOM_ACCESS 会阻止文件系统和缓存管理器进行预取。

    注释

    必须仔细评估此设置,因为它可能会对系统文件缓存增长产生潜在影响。

  • RdWrHandleLifeTime

    HKLM\System\CurrentControlSet\Services\NfsServer\Parameters\RdWrHandleLifeTime
    

    默认值为 5。 此参数控制文件句柄缓存中 NFS 缓存条目的生存期。 该参数引用具有关联的打开的 NTFS 文件句柄的缓存条目。 实际生存期大约等于 RdWrHandleLifeTime 乘以 RdWrThreadSleepTime。 最小值为 1,最大值为 60。

  • RdWrNfsHandleLifeTime

    HKLM\System\CurrentControlSet\Services\NfsServer\Parameters\RdWrNfsHandleLifeTime
    

    默认值为 5。 此参数控制文件句柄缓存中 NFS 缓存条目的生存期。 该参数引用没有关联的打开的 NTFS 文件句柄的缓存条目。 Services for NFS 使用这些高速缓存条目来存储文件的文件属性,而无需保留文件系统的打开句柄。 实际生存期大约等于 RdWrNfsHandleLifeTime 乘以 RdWrThreadSleepTime。 最小值为 1,最大值为 60。

  • RdWrNfsReadHandlesLifeTime

    HKLM\System\CurrentControlSet\Services\NfsServer\Parameters\RdWrNfsReadHandlesLifeTime
    

    默认值为 5。 此参数控制文件句柄缓存中 NFS 读取缓存条目的生命周期。 实际生存期大约等于 RdWrNfsReadHandlesLifeTime 乘以 RdWrThreadSleepTime。 最小值为 1,最大值为 60。

  • RdWrThreadSleepTime

    HKLM\System\CurrentControlSet\Services\NfsServer\Parameters\RdWrThreadSleepTime
    

    默认值为 5。 此参数控制在文件句柄缓存上运行清理线程之前的等待间隔。 该值以刻度为单位,并且是非确定性的。 一个刻度相当于大约 100 纳秒。 最小值为 1,最大值为 60。

  • FileHandleCacheSize(以 MB 为单位)

    HKLM\System\CurrentControlSet\Services\NfsServer\Parameters\FileHandleCacheSizeinMB
    

    默认值为 4。 此参数指定文件句柄缓存条目占用的最大内存。 最小值为 1,最大值为 1*1024*1024*1024 (1073741824)。

  • LockFileHandleCacheInMemory

    HKLM\System\CurrentControlSet\Services\NfsServer\Parameters\LockFileHandleCacheInMemory
    

    默认值为 0。 此参数指定是否在内存中锁定为 FileHandleCacheSizeInMB 指定的缓存大小分配的物理页。 将此值设置为 1 将启用此活动。 页面锁定在内存中(而不是分页到磁盘),这可以提高解析文件句柄的性能,但会减少应用程序可用的内存。

  • MaxIcbNfsReadHandlesCacheSize

    HKLM\System\CurrentControlSet\Services\NfsServer\Parameters\MaxIcbNfsReadHandlesCacheSize
    

    默认值为 64。 此参数指定读取数据缓存的每个卷的最大句柄数。 仅在内存超过 1 GB 的系统上创建读取缓存条目。 最小值为 0,最大值为 0xFFFFFFFF。

  • HandleSigningEnabled

    HKLM\System\CurrentControlSet\Services\NfsServer\Parameters\HandleSigningEnabled
    

    默认值为 1。 此参数控制是否对 NFS File Server 提供的句柄进行加密签名。 将其设置为 0 将禁用句柄签名。

  • RdWrNfsDeferredWritesFlushDelay

    HKLM\System\CurrentControlSet\Services\NfsServer\Parameters\RdWrNfsDeferredWritesFlushDelay
    

    默认值为 60。 此参数是一个软超时,用于控制 NFS V3 UNSTABLE 写入数据缓存的持续时间。 最小值为 1,最大值为 600。 实际生存期大约等于 RdWrNfsDeferredWritesFlushDelay 乘以 RdWrThreadSleepTime。

  • CacheAddFromCreateAndMkDir

    HKLM\System\CurrentControlSet\Services\NfsServer\Parameters\CacheAddFromCreateAndMkDir
    

    默认值为 1 (启用)。 此参数控制在 NFS V2 和 V3 CREATE 和 MKDIR RPC 过程处理程序期间打开的句柄是否保留在文件句柄缓存中。 将此值设置为 0 可禁止在 CREATE 和 MKDIR 代码路径中向高速缓存添加条目。

  • AdditionalDelayedWorkerThreads

    HKLM\SYSTEM\CurrentControlSet\Control\SessionManager\Executive\AdditionalDelayedWorkerThreads
    

    增加为指定工作队列创建的延迟工作线程数。 延迟的工作线程处理不被视为时间关键型的工作项,这些工作项可以在等待工作项时将其内存堆栈分页。 线程数不足会降低工作项的服务速率;值过高会不必要地消耗系统资源。

  • NtfsDisable8dot3NameCreation

    HKLM\System\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameCreation
    

    在 Windows Server 2012、Windows Server 2012 R2 及更高版本的 Windows Server 中,默认值为 2。 在 Windows Server 2012 之前的版本中,默认值为 0。 此参数确定 NTFS 是否在 8dot3 (MSDOS) 命名约定中为长文件名和包含扩展字符集中字符的文件名生成短名称。 如果此条目的值为 0,则文件可以有两个名称:用户指定的名称和 NTFS 生成的短名称。 如果用户指定的名称遵循 8dot3 命名约定,则 NTFS 不会生成短名称。 值 2 表示可以按卷配置此参数。

    注释

    默认情况下,系统卷已启用 8dot3。 默认情况下,Windows Server 2012 和 Windows Server 2012 R2 中的所有其他卷都禁用了 8dot3。 更改此值不会更改文件的内容,但会避免为文件创建短名称属性,这也会更改 NTFS 显示和管理文件的方式。 对于大多数文件服务器,建议的设置为 1 (禁用)。

  • NtfsDisableLastAccessUpdate

    HKLM\System\CurrentControlSet\Control\FileSystem\NtfsDisableLastAccessUpdate
    

    默认值为 1。 此系统全局开关通过禁用上次文件或目录访问的日期和时间戳的更新来减少磁盘 I/O 负载和延迟。

  • MaxConcurrentConnectionsPerIp

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rpcxdr\Parameters\MaxConcurrentConnectionsPerIp
    

    MaxConcurrentConnectionsPerIp 参数的默认值为 16。 您可以将此值增加到最大值 8192,以增加每个 IP 地址的连接数。