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

我有几台Windows Server 2008 R2机器充当客户机,并连接到同一数据中心的另一台服务器。 我没有访问服务器。 我需要尽量减less客户端和服务器之间的延迟。 他们通过Macromedia Flash(Winsockets)进行通信并交换非常小的命令(20-30字节)。 通常的延迟是200-400微秒,但是从我的经验和一些testing(使用MSnetworking监视器完成)看来,在Flash应用程序中,响应时间往往是几毫秒,至less在这一点上,这不是由于软件。

我怀疑这可能是因为Naglealgorithm或延迟的ACK。 我试图通过registry禁用,但它似乎没有影响Server 2008 R2。 我知道我可以调整MTU和一些其他值与registry:DefaultSendWindow,DefaultReceiveWindow,GlobalMaxTcpWindowSize,TcpWindowSize。 我假设我应该尝试将发送缓冲区设置为0并将缓冲区设置为较大值,这是正确的策略吗?

我有最快的CPU,我可以得到,我禁用网卡的中断审核,还有什么我可以做到最小化延迟? 即使100微秒对我也很重要。

以下是适用于Windows Server 2008 R2的Microsoft性能调优指南文档:

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在操作系统中的行程。

微软已经推出了一系列专门针对低延迟networking的技术,尽pipe其中大部分都是2012年的具体改进,而不是2008 R2:

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

  1. 数据中心桥接

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

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

  4. networking接口卡(NIC)分组

  5. NetworkDirect的

  6. 接收段合并(RSC)

  7. 接收方缩放(RSS)

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

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

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

但是,只有这么多,你才能用软件调整。 只需将您的硬件升级到融合以太网上的Infiniband / RDMA ,您就可以大幅缩短延迟时间,而在Windowsregistry中则无法实现这一点。

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

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

input:TcpAckFrequency

值types:REG_DWORD,数字有效范围:0-255默认值:2
说明:指定在延迟的ACK定时器被忽略之前,未完成的ACK数量。 如果不仔细研究环境,Microsoft不build议更改默认值。

如果将该值设置为1,则每个数据包将立即得到确认,因为只有一个未完成的TCP ACK正好接收到。 0(零)的值是无效的,被视为默认值,2.只有当ACK数字为0时,没有收到数据段,主机不会确认数据。

首先禁用大量的发送卸载,networking堆栈等待发送数据包以填充缓冲区,使用该选项closures发送更多的小包,但有助于速度密集型应用程序。