背景信息
概述
对主机进行合理调优可使性能提升高达 100 倍。
以下是具体原因。
TCP 缓冲区大小设置
TCP 使用所谓的“拥塞窗口”(Congestion Window,简称 CWND)来确定一次可以发送多少个数据包。拥塞窗口越大,吞吐量就越高。TCP 的“慢启动(slow start)”和“拥塞避免(congestion avoidance)”算法决定了拥塞窗口的大小。最大拥塞窗口与内核为每个套接字分配的缓冲区空间大小有关。对于每个套接字,缓冲区大小都有一个默认值,在打开套接字之前,程序可以通过系统库调用更改该值。此外,内核还规定了最大缓冲区大小。套接字的发送端和接收端的缓冲区大小都可以进行调整。
为了获得最大吞吐量,关键是要为所使用的链路设置最佳的 TCP 发送和接收套接字缓冲区大小。如果缓冲区太小,TCP 拥塞窗口将无法完全打开。如果接收端缓冲区太大,TCP 流量控制就会失效,发送端可能会使接收端不堪重负,从而导致 TCP 窗口关闭。如果发送主机比接收主机速度快,就很可能出现这种情况。只要有足够的额外内存,发送端窗口过大通常不会有问题;但要注意,每个 TCP 套接字即使是短连接也有可能请求这么多的内存,这很容易耗尽系统资源。
最佳缓冲区大小是链路带宽与延迟乘积的两倍(另见实用的带宽延迟积计算器):
缓冲区大小 = 2 × 带宽 × 延迟
即:
buffer size = 2 * bandwidth * delay
可以使用 ping 程序来获取延迟(即RTT)。确定端到端容量(即路径中最慢一跳的带宽)则比较棘手,可能需要你多方询问来了解路径中各个网络的容量。由于 ping 给出的是往返时间(Round-Trip Time,简称 RTT),因此可以使用以下公式代替上述公式:
缓冲区大小 = 带宽 × 往返时间
即:
buffer size = bandwidth * RTT
例如,如果 ping 时间为 50 毫秒(即RTT为0.05秒),且端到端网络全部由 1G 或 10G 以太网组成,那么 TCP 缓冲区大小应该为:
0.05 sec * (1 Gbit / 8 bits) = 6.25 MBytes.
过去,为了获得全带宽,用户需要为所使用的网络路径指定缓冲区大小,并且应用程序程序员必须使用 BSD 系统的 setsockopt()
调用中的 SO_SNDBUF
和 SO_RCVBUF
选项来分别设置发送端和接收端的缓冲区大小。幸运的是,现在 Linux、FreeBSD、Windows 和 Mac OSX 都支持 TCP 自动调优,因此你不必再担心设置默认缓冲区大小的问题。
TCP 自动调优
从 2005 年发布的 Linux 2.6、Mac OSX 10.5、Windows Vista 和 FreeBSD 7.0 开始,发送端和接收端都支持自动调优,无需再为每条路径手动设置 TCP 发送和接收缓冲区。不过,对于许多高速网络路径来说,最大缓冲区大小仍然太小,必须按照各操作系统相关页面的说明进行增大。
FreeBSD(https://fasterdata.es.net/host-tuning/freebsd/) Linux(https://fasterdata.es.net/host-tuning/linux/) MacOSX(https://fasterdata.es.net/host-tuning/osx/) 微软 Windows(https://fasterdata.es.net/host-tuning/ms-windows/)
TCP 自动调优上限
调整 Linux 默认的最大 TCP 缓冲区大小,可使自动调优算法能够扩大发送和接收窗口,从而充分利用长路径上的可用带宽。不同的操作系统对这一设置的反应不同,请参考各操作系统的特定资源获取相关建议。
下图展示了在往返时间为 75 毫秒的路径上,两台 Linux 服务器增加最大 TCP 缓冲区大小所产生的影响。该值从 32MB 调整到 64MB 后,吞吐量几乎提高了一倍。
ESnet 建议为该值设置合理的默认值,通常在 32MB 到 128MB 之间。在 100 毫秒的路径上实现 10Gbps 单流传输,在无网络丢包的情况下,需要 120MB 的缓冲区。如果期望更高的速度或更长的传输距离,则需要更大的缓冲区。如果打算使用并行流,则应适当减小缓冲区大小,以免耗尽内存。
TCP 拥塞避免算法
多年来,TCP Reno 拥塞避免算法一直是所有 TCP 实现中的默认算法。然而,随着网络速度越来越快,很明显 Reno 算法在高带宽延迟积网络中无法很好地扩展。为了解决这个问题,人们开发了许多新的拥塞避免算法,包括 CUBIC、HTCP 和 BBR。大多数 Linux 发行版默认使用 CUBIC 算法,该算法自 2006 年发布的内核 2.6.19 起成为默认算法。更多详细信息可参考:http://en.wikipedia.org/wiki/TCP_congestion_avoidance_algorithm 。
Src
https://fasterdata.es.net/host-tuning/background/
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://www.hqyman.cn/post/11881.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~