将文件复制到 Windows 2000 域控制器时网络性能下降

文章翻译 文章翻译
文章编号: 321098 - 查看本文应用于的产品
本文的发布号曾为 CHS321098
重要说明:本文包含有关修改注册表的信息。修改注册表之前,一定要备份注册表,并且一定要知道在发生问题时如何还原注册表。有关如何备份、还原和编辑注册表的信息,请单击下面的文章编号,查看 Microsoft 知识库中的文章:
256986 Description of the Microsoft Windows Registry(Microsoft Windows 注册表说明)
展开全部 | 关闭全部

症状

当您将文件从基于 Windows 2000 或基于 Microsoft Windows XP 的客户机复制到基于 Windows 2000 的域控制器上的网络共享时,网络性能比您将相同的文件复制到基于 Windows 2000 的成员服务器时要低。复制许多小文件时可能会注意到此问题;而复制少数大文件时可能不会注意到此问题。仅当您使用 Microsoft Windows 资源管理器复制文件,或者当 Windows 资源管理器窗口打开并且连接到目标服务器时,才会发生此问题。不过,如果使用 Xcopy.exe 复制文件,而且所有的 Windows 资源管理器窗口都是关闭的,则不会遇到此问题。

原因

出现此问题的原因是服务器信息块 (SMB) 将操作写入基于 Windows 2000 的域控制器时,在文件复制之间可能遇到多达 200 毫秒的延迟。

如果查看跟踪记录,您会注意到当客户端向服务器发送 SMB 通知更改命令时,如果该命令中的 FID 项与目标文件夹的 FID 项匹配,则会发生延迟。Windows 资源管理器将"通知更改"请求公布到网络共享上,后者要求对于由 Windows 资源管理器右窗格中显示的文件夹内容的任何更改都要对其发送通知。域控制器在收到"通知更改"请求时不立即响应;它在 200 毫秒内不发送数据包。之后,它发送一个简单的传输控制协议 (TCP) 确认 (ACK) 数据包,文件操作恢复正常。

此行为是两个核心 Windows 2000 联网组件,TCP 延迟确认 (TCP delayed ACKs) 和域控制器的线程优先级之间交互的结果。线程优先级允许域控制器正确地安排目录服务和帐户管理操作的优先级,让它们在某些 SMB 活动(比如响应"通知更改"请求)之前执行。

解决方案

警告:"注册表编辑器"使用不当可造成严重问题,这些问题可能需要重新安装操作系统。Microsoft 不保证能够解决因为"注册表编辑器"使用不当而产生的问题。使用"注册表编辑器"需要您自担风险。

在考虑此问题的时候,应注意它只有在非常特殊的情况下才会发生;仅当客户端使用 Windows 资源管理器将大量文件复制到基于 Windows 2000 的域控制器时才会发生此问题。更改延迟 ACK 计时器的值可以防止某些症状的发生;不过,如果修改核心 TCP/IP 值,将来可能会遇到意外的结果。因此,Microsoft 建议您在修改计时器之前考虑使用其他方法。其他解决方法包括:将文件共享移到成员服务器,或使用另一工具(如 Xcopy 或 Robocopy,它们是 Windows 2000 Resource Kit 的一部分)将大量文件复制到域控制器。

在基于 Windows 2000 的域控制器上,您可以编辑 TcpDelAckTicks 注册表值,调整 TCP delayed ACK 计时器。如果您将 TCP delayed ACK 计时器更改为较小的值,服务器将以更短的间隔更频繁地发送 ACK 数据包。

注意,在高延迟、高饱和的区段中,来自域控制器的 ACK 数据包的净增长可能会给网络带来额外的压力。为了确保更改的 TCP delayed ACK 计时器值不会导致其他瓶颈,应充分地测试该值。

如果网络能够处理额外的 ACK 数据包,请对 Windows 2000 Service Pack 2 (SP2) 应用以下 Service Pack 3 (SP3) 之前的修补程序,以便能够修改延迟 ACK (Delayed ACK) 计时器的值:

311833 The TcpDelAckTicks Registry Value Has No Effects on Ack Timeouts(TcpDelAckTicks 注册表值对 ACK 超时无效)
应用此修补程序后,请使用以下过程添加以下注册表值,该值指定 Delayed ACK 计时器的自定义参数:
  1. 启动"注册表编辑器"(Regedt32.exe)。
  2. 在注册表中查找并单击以下键值,其中 Adapter GUID 是连接到客户端的网络适配器的全局唯一标识符 (GUID):
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\Adapter GUID
  3. 编辑菜单中单击添加值,然后添加以下注册表值:
    值名称:TcpDelAckTicks
    数据类型:REG_DWORD
    值数据:您可以将该值设置为 0 到 6 之间的值。默认设置为 2(200 毫秒)。
  4. 退出"注册表编辑器"。
  5. 重新启动 Windows,以使此更改生效。
此注册表值指定用于各个接口基础上的延迟 ACK 计时器的 100 毫秒间隔的数量。默认情况下,延迟 ACK 计时器值为 200 毫秒。如果将 TcpDelAckTicks 值设置为 0,则禁用延迟确认。此设置使计算机在每收到一个数据包时都立即发送一个 ACK 数据包。

备注:适配器特定的值在每个适配器的子键值下列出。确保将 TcpDelAckTicks 值添加到以下注册表键中:
HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\Adapter GUID
不要将该值添加到以下注册表键中:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters

状态

Microsoft 已经确认这是在本文开头列出的 Microsoft 产品中存在的问题。

更多信息

在网络跟踪记录中,您可以看到客户端发送"SMB:C NT transact - Notify Change"数据包。基于 Windows 2000 的域控制器在 200 毫秒后将一个 ACK 数据包发送回客户端。客户端收到 ACK 数据包后,开始下一个 SMB 操作并复制下一个文件。

备注:如果您使用的是网络监视器,则使用以下筛选器能够更好地看到延迟:
SMB:Command == 0xA0 (NT transact)
结合以下显示选项使用此筛选器:
时间:前一帧之后的秒数 (x)
通过查看以下 SMB 帧属性,可以确定响应请求和回答:
SMB:多路 ID (MID)
"延迟确认"功能基于 RFC 1122。TCP 使用延迟 ACK 减少在网络上发送的数据包数。Microsoft TCP/IP 堆栈采用常见的方法实现延迟 ACK。当 TCP 在连接上收到数据时,仅当满足下列条件之一时,堆栈才返回 ACK:
  • 条件 1:没有为收到的前一段 (segment) 发送 ACK。
  • 条件 2:对于该连接收到了一个段,但在 200 毫秒(默认值)内没有其他段到达。
通常,在连接上每隔一个收到的 TCP 段发送一个 ACK,直到延迟 ACK 计时器(200 毫秒)期满。您可以使用本文的"解决方法"一节中描述的过程调整延迟 ACK 计时器,添加 TcpDelAckTicks 注册表值(该值是 Windows 2000 中新增加的值)。

备注:注意,如果更改 TcpDelAckTicks 注册表值,将来可能会遇到意外的结果。因此,Microsoft 建议您在修改计时器之前考虑使用其他方法。

如果前一个数据包已得到确认,而域控制器让"通知更改"请求响应排队等待一段时间(有时会超过 200 毫秒),这时就会发生延迟。因为默认 ACK 计时器一直读到 200 毫秒,所以在收到来自客户端的"通知更改"请求后 200 毫秒时出现 TCP ACK 数据包。由于客户端在继续下一个 SMB 操作之前会等待服务器响应,因此在服务器的延迟 ACK 计时器到达它的阈值前这段时间内会发生延迟。如果您执行网络跟踪,您会注意到不是每个来自客户端的"通知更改"请求都会经历延迟。

没有经历延迟的"通知更改"请求紧跟在另一个没有确认的数据包之后。因此,此确认在域控制器的确认系统中不延迟,因为满足本节开头描述的第 1 个条件。对于确实经历延迟的"通知更改"请求,前面的数据包都已得到确认;因此,域控制器直到延迟 ACK 计时器(默认值为 200 毫秒)期满时才回应,因为这时会触发本节中描述的第 2 个条件。

您不能修改域控制器的线程优先级,因此必须将 TCP 延迟 ACK 计时器的值更改为较小的值,以防止发生本文的"症状"一节中描述的症状。执行此操作后,服务器将以更短的间隔更频繁地发送 ACK 值。

有关 TcpDelAckTicks 注册表值的更多信息,请参考位于以下 Microsoft Web 站点中的白皮书:
Microsoft Windows 2000 TCP/IP Implementation Details(Microsoft Windows 2000 TCP/IP 实现细节)
有关其他信息,请单击下面的文章编号,查看 Microsoft 知识库中的文章:
321169 在将文件从 Windows XP 复制到 Windows 2000 域控制器时 SMB 性能下降

属性

文章编号: 321098 - 最后修改: 2003年8月19日 - 修订: 1.2
这篇文章中的信息适用于:
  • Microsoft Windows 2000 Service Pack 2
  • Microsoft Windows 2000 Service Pack 3
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Advanced Server
关键字:?
kbprb KB321098
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com