我们有一组服务器应用程序,可从设备/工具接收测量数据。消息传输时间目前是我们的主要瓶颈,因此我们有兴趣减少它以改进流程。工具和服务器应用程序之间的通信是通过在Redhat Linux上使用C ++制作的TCP / IP套接字实现的。
是否可以通过更改TCP / IP配置设置或调整tcp内核函数来减少使用硬件的消息传输时间? (我们可以牺牲安全性来提高速度,因为通信是在安全的内部网上进行的)
答案 0 :(得分:5)
根据工作负载的不同,在套接字连接上禁用Nagle's Algorithm可以提供很多帮助。
在处理大量小消息时,我发现这有很大的不同。
从内存来看,我认为C ++的socket选项名为TCP_NODELAY
答案 1 :(得分:2)
正如@Jerry Coffin所提议的,你可以切换到UDP。 UDP是不可靠的协议,这意味着您可能丢失数据包,或者它们可能以错误的顺序到达或被复制。因此,您需要在应用程序级别处理这些情况。由于您可能丢失一些数据(如您在评论中所述),因此无需重传(任何可靠协议中最复杂的部分)。您只需丢弃过时的数据包。使用简单的序列编号就可以了。
是的,您可以使用RTP(它具有序列编号),但您不需要它。对于你的简单案例,RTP看起来有点过分。它还有许多其他功能,主要用于多媒体流媒体。
[编辑]和类似问题here
答案 2 :(得分:1)
在硬件方面尝试Intel Server NICs并确保已启用TCP offload Engine(ToE)。
在延迟和goodput之间做出一个重要的决定,如果你想要以更好的延迟而考虑更好的延迟,可以考虑减少中断合并期。有关详细信息,请参阅英特尔文档,因为它们提供了大量可配置参数。
答案 3 :(得分:0)
如果可以,减少延迟的明显步骤是从TCP切换到UDP。
答案 4 :(得分:-1)
是
Google“TCP框架大小”了解详情。