NFS 文件服务器的性能优化

NFS 模型服务

以下部分介绍用于客户端-服务器通信的网络文件系统 (NFS) 模型的 Microsoft 服务。 由于 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 communication model

优化 NFS 文件服务器的参数

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

  • OptimalReads

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

    默认值为 0。 此参数根据工作负载 I/O 特征,确定是要为 FILE_RANDOM_ACCESS 还是为 FILE_SEQUENTIAL_ONLY 打开文件。 将此值设置为 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 文件句柄的缓存条目。 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。

  • FileHandleCacheSizeinMB

    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 文件服务器给出的句柄是否经过加密签名。 将其设置为 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 地址的连接数。