我有几台Windows 2008 R2机器,它们充当客户端并连接到同一数据中心中的另一台服务器。我没有进入服务器的权限。我需要尽量减少客户机和服务器之间的延迟。它们通过Macromedia Flash (Winsockets)进行通信,并交换非常小的命令(20-30字节)。通常的延迟时间是200-400微秒,但根据我的经验和一些测试(使用Monitor完成),在Flash应用程序中,响应时间通常至少是几毫秒,这不是软件造成的。
我怀疑这可能是因为Nagle算法或延迟ACK。我尝试通过注册表禁用这两者,但它似乎对服务器2008 R2没有影响。我知道我可以用注册表来调整MTU和其他一些值: DefaultSendWindow、DefaultReceiveWindow、GlobalMaxTcpWindowSize、TcpWindowSize。我假设我应该尝试将发送缓冲区设置为0,将接收缓冲区设置为大值,这是正确的策略吗?
我有最快的CPU,我禁用了网卡的中断调节,我还能做些什么来减少延迟呢?即使100微秒对我来说也很重要。
发布于 2014-12-06 01:09:28
下面是微软的Windows 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在操作系统中的行程。
此外,微软还推出了一系列专门面向低延迟网络的技术,但这些技术大多是2012年的具体改进,而不是2008年的R2:
http://technet.microsoft.com/en-us/library/hh831415.aspx
但只有这么多,你才能做软件调整。只需将您的硬件升级到基于汇聚以太网的Infiniband/RDMA,就可以大大减少延迟,而通过翻转Windows注册表中的位,这些延迟是无法实现的。
最后,这里有一些更直接的回答你关于延迟ACK的问题。我不知道这是不是你的问题,但是:
子项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\条目: TcpAckFrequency值类型: REG_DWORD,数字有效范围: 0-255默认值:2 描述:指定在忽略延迟的计时器之前未执行的ACK数。如果不仔细研究环境,Microsoft不建议更改默认值。如果将值设置为1,则会立即确认每个数据包,因为仅接收到一个未处理的TCP ACK作为段。0(0)的值无效,并被视为默认值2。ACK编号为0的唯一时间是当未接收到一个段时,并且主机不会确认数据。
发布于 2014-12-05 23:59:01
从禁用大型发送卸载开始,网络堆栈等待发送数据包来填充缓冲区,并选择关闭它发送更多小数据包,但有助于加快应用程序的速度。
https://serverfault.com/questions/649575
复制相似问题