如何调整TCP以实现高性能单向传输?

时间:2011-02-28 22:41:47

标签: windows performance networking tcp

我的(网络)客户端每200毫秒向我的服务器发送50到100 KB的数据包。最多有300个客户。 Server不向客户端发送任何内容服务器(专用)和客户端在LAN中。如何调整TCP配置以获得更好的性能? Windows Server 2003或2008上的服务器,Windows 2000及更高版本上的客户端。

e.g。 TCP窗口大小。更改此参数有帮助吗?还要别的吗?任何特殊的插座选项?

[编辑]:实际上在不同的模式下,数据包最多可达5MB

3 个答案:

答案 0 :(得分:5)

几年前,我对1700个数据点进行了研究。结论是,您可以做的最好的事情是在接收器处配置一个巨大的套接字接收缓冲区(例如512k)。对侦听套接字执行此操作,因此它将由接受的套接字继承,因此它们在握手时已经设置好。这反过来允许在握手期间协商TCP窗口缩放,这允许客户端知道窗口大小> 64K。巨大的窗口大小基本上允许客户端以最大可能的速率进行传输,仅受拥塞避免而不是封闭的接收窗口。

答案 1 :(得分:1)

什么操作系统? IPv4还是v6? 为什么这么大的转储;为什么不能分解?

假设一个稳定,稳定,低带宽:延迟产品,您可以调整机上大小,初始窗口大小,mtu(取决于数据,IP版本和模式[tcp / udp])。

你也可以循环或平衡输入,这样你就可以减少来自nic的中断时间..绑定也是一个选项。

5MB /包/?这是一个相当糟糕的设计..我认为它会导致很多段重传,并且在序列重建/重传(接受等待时间等)中使用了很多内核/堆栈内存。

(甚至可能吗?)

答案 2 :(得分:1)

由于所有客户端都在局域网中,您可以尝试启用“巨型帧”(需要为此运行netsh命令,需要谷歌获取精确命令,但有很多方法)。

在应用程序层,您可以使用TransmitFile,它是Windows sendfile的等效版本,在Windows Server 2003下运行良好(在“非服务器”下人为限速),但这不是问题。您)。请注意,如果您动态生成数据,则可以使用内存映射文件。

至于调整参数,增加发送缓冲区可能不会给你带来任何好处,但增加 receive 缓冲区可能在某些情况下有所帮助,因为它减少了接收应用程序丢弃数据包的可能性不能足够快地处理传入的数据。更大的TCP窗口大小(注册表设置)可能会有所帮助,因为这允许发送方在必须阻止之前发送更多数据,直到ACK到达。

延迟程序的工作集配额可能值得考虑,它不需要任何费用而且可能是一个优势,因为内核需要在发送时锁定页面。被允许锁定更多页面可能会使事情变得更快(或者可能不会,但它也不会受到伤害,无论如何默认值都非常低)。