如果您要走高性能的道路,通常您将希望运行尽可能少的其他(计划的)进程,因为它们会干扰您的应用程序。
与经典的UNIX操作系统一样,Linux被设计为以公平的方式同时运行多个应用程序,并试图防止资源匮乏,而您的目标恰恰相反,除了您的应用程序之外,其他所有事物都将挨饿。在操作系统级的简单步骤,改变了不错的应用水平和实时优先级,改变调度或去一个实时内核。
通常对TCP / IP进行调整,以防止连接断开并有效利用可用带宽。为了从非常快速的链接中获得尽可能低的延迟,而不是从某些中间链接受到更多限制的连接中获得最大的带宽,您将调整网络堆栈的调整。
sysctl -a
将显示许多可以调整的内核设置。设置取决于您使用的是IPv4还是IPv6,以及您在应用程序中已经做过但确实感兴趣的事情可能是:
net.ipv4.tcp_window_scaling=1
RFC 1323-支持大于64K的IPV4 TCP窗口大小-高带宽网络通常需要
net.ipv4.tcp_reordering=3
IPV4数据包可以在TCP数据包流中重新排序的最大时间,而无需TCP假设数据包丢失并进入缓慢启动。
net.ipv4.tcp_low_latency=1
旨在优先考虑低延迟而不是较高的吞吐量;设置= 1禁用IPV4 TCP预队列处理
net.ipv4.tcp_sack=0
设置为1将启用对IPV4的选择性确认,这需要启用tcp_timestamps并增加一些数据包开销,如果您没有数据包丢失,则不需要
net.ipv4.tcp_timestamps=0
仅在需要麻袋的情况下建议使用。
net.ipv4.tcp_fastopen=1
启用在打开的SYN数据包中发送数据。
大多数(如果不是全部)在内核源代码中都有更好的记录。
当然,您可以编码原始TCP套接字,并且基本上完全绕过内核TCP / IP堆栈。
高度优化的系统通常在受信任的网络中运行,并且会禁用其本地(iptables)防火墙。