我有几台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性能调优指南文档:
该文档中有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
数据中心桥接
数据中心传输控制协议(DCTCP)
内核模式远程直接内存访问(kRDMA)
networking接口卡(NIC)分组
NetworkDirect的
接收段合并(RSC)
接收方缩放(RSS)
注册input/输出(RIO)API扩展
传输控制协议(TCP)环回优化
低延迟工作负载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发送更多的小包,但有助于速度密集型应用程序。