需要超低延迟,如何最小化?

需要超低延迟,如何最小化?

我有几台 Windows Server 2008 R2 计算机,它们充当客户端,并连接到同一数据中心的另一台服务器。我无法访问服务器。我需要尽量减少客户端和服务器之间的延迟。它们通过 Macromedia Flash (Winsockets) 进行通信并交换非常小的命令(20-30 字节)。通常的延迟是 200-400 微秒,但根据我的经验和一些测试(使用 MS Network Monitor 完成),似乎在 Flash 应用程序中,响应时间通常至少为几毫秒,这不是软件造成的。

我怀疑这可能是由于 Nagle 算法或延迟 ACK 造成的。我尝试通过注册表禁用这两者,但这似乎对 Server 2008 R2 没有影响。我知道我可以使用注册表调整 MTU 和其他一些值:DefaultSendWindow、DefaultReceiveWindow、GlobalMaxTcpWindowSize、TcpWindowSize。我假设我应该尝试将发送缓冲区设置为 0,将接收缓冲区设置为较大的值,这是正确的策略吗?

我拥有最快的 CPU,我禁用了网卡的中断调节,我还能做什么来最大限度地减少延迟?即使 100 微秒对我来说也很重要。

答案1

以下是 Microsoft 针对 Windows Server 2008 R2 的性能调优指南文档:

http://download.microsoft.com/download/6/B/2/6B2EBD3A-302E-4553-AC00-9885BBF31E21/Perf-tun-srv-R2.docx

该文档中有 136 页的性能调优指南。

您可能还会从 support.microsoft.com/kb/214397/en-us 获取一些有趣的信息

您也可以尝试禁用 Windows 过滤平台,这通常不推荐,但它可能有助于缩短 I/O 在操作系统中的旅程。

微软还在 Windows 中嵌入了大量专门针对低延迟网络的技术,尽管其中大多数是 2012 年的特定改进,而不是 2008 R2 的改进:

http://technet.microsoft.com/en-us/library/hh831415.aspx

  1. 数据中心桥接

  2. 数据中心传输控制协议 (DCTCP)

  3. 内核模式远程直接内存访问 (kRDMA)

  4. 网络接口卡 (NIC) 组合

  5. 网络直连

  6. 接收段合并 (RSC)

  7. 接收方缩放 (RSS)

  8. 注册输入/输出 (RIO) API 扩展

  9. 传输控制协议 (TCP) 环回优化

  10. 低延迟工作负载管理和运营

但软件调整能做的事情非常有限。只需将硬件升级到融合以太网上的 Infiniband/RDMA,您将获得大幅减少的延迟,这是通过翻转 Windows 注册表中的位永远无法实现的。

最后,这里有一些更直接的东西回答关于延迟 ACK 的问题。我不知道这是否真的是你的问题,但是:

子项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\

条目:TcpAckFrequency

值类型:REG_DWORD,数字 有效范围:0-255 默认值:2
描述:指定在延迟 ACK 计时器被忽略之前未完成的 ACK 数量。Microsoft 不建议在未仔细研究环境的情况下更改默认值。

如果将该值设置为 1,则每个数据包都会立即得到确认,因为只有一个未完成的 TCP ACK,因为刚刚收到一个段。值 0(零)无效,并被视为默认值 2。只有在未收到段且主机不打算确认数据时,ACK 编号才为 0。

答案2

首先禁用大型发送卸载,网络堆栈等待发送数据包以填充缓冲区,关闭该选项后它会发送更多小数据包,但有助于提高速度。

相关内容