25
2025
06
18:53:55

网络主机性能调优背景知识介绍

背景信息

概述

对主机进行合理调优可使性能提升高达 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/




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://www.hqyman.cn/post/11881.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: