TCP 以及基于 TCP 的变种数十年来一直遭受非常差的性能困扰,我们认为由于 TCP 家族底层根本性的架构缺陷,没有什么希望能够取得持续的高性能,比如硬连接的包级别的事件来控制反应。我们提出了面向性能的拥塞控制,一种新的拥塞控制结构( PCC ),PCC 中持续关注控制机制中动作(asction)和基于经验的性能表现之间的联系,这样做能够使得 PCC 采取的动作能够持续导致高的性能表现。我们证明 PCC 能够收敛到稳定并且公平的均衡状态,通过许多真实并且具有挑战性的实际环境测试,PCC 表现出持续的 10倍以上的性能提高,并且比 TCP 拥有更好的公平性和稳定性。PCC 并不需要路由器硬件支持或者新的包格式。
作者: Mo Dong, Qingxi Li, Doron Zarchy, etc
来源: NSDI 2015
论文链接: https://www.usenix.org/system/files/conference/nsdi15/nsdi15-paper-dong.pdf
论文代码: https://github.com/PCCproject/PCC-Uspace
内容整理: 李冰奇
介绍
TCP 的拥塞控制应用了差不多 25 年,性能下降很严重了。TCP 在有损链路表现很差,对高 RTT 的数据流不友好,对高的带宽延迟积的连接带宽利用不足,而且 TCP 难以应对变化很大的网络,在数据中心的连接上可能导致网络崩溃,导致网络上缓存溢出引起的高的延迟。随着时间的推移,TCP 严重的性能问题越积越多,在专门的网络环境中,比如高带宽延迟积( BDP )链路、卫星链路、数据中心、无线链路和有损链路等等环境,TCP 协议通过协议 “补丁”解决这些特定场景的问题,但是这些补丁表明只能解决特定场景的问题,在其他场景并不适用。更糟糕的是,我们通过在真实世界中实验发现,即使是在特定场景,这次 TCP 的变种即使是专门为这类协议制定的也远远不能达到最优状态。实际上,TCP 差的性能已经影响工业界进军为了专门目的而要求高性能的数据传输的网络服务的高利润市场。
虽然TCP出现了很多“补丁”,但是核心问题仍然没有被解决:在复杂的真实的网络环境中获取持续的高的性能表现。我们认为在TCP的速率控制结构中,这是一个非常困难的问题,我们把这种速率控制称为硬连接映射关系:确定的提前定义的包级别的事件和控制动作之间的硬性的映射,TCP 对事件的反应可以是相当简单的,这些事件包括比如“一个包的丢失”(TCP New Reno),或者加入多种信号如“一个包丢失并 RTT 增加了 x%”(TCP Illinois)。相似的,拥塞控制的反应可能是“速率减半”(New Reno)或者一个更复杂的动作,比如“减少窗口尺寸 w 至 f( △RTT)w”(Illinois)。这种定义的方式就是控制动作就是包级别事件的直接映射函数。
一种硬连接的映射必须提前对网络进行假设。采取固定的 事件—控制 对应队:一个包丢失那么减半拥塞窗口。TCP 假设丢包表示网络拥塞。当这种假设过于激进,减半拥塞窗口可能严重降低性能( 例如,如果丢包是随机的,那么发送速率是保持还是增加 ),在复杂的真实网络环境中建立一种总是最优的硬连接的映射关系是很困难的,这是因为实际上对一个事件的最优反应(比如增加还是降低?增加或者降低多少?)是对网络环境敏感的。现在的网络环境是相当多种多样的:随机丢包和零丢包,浅队列和缓存溢出,竞争流的 RTT 变化范围超过 1000 倍,由于移动无线网络或者路径变化引起的网络动态变化,从 Kbps-Gbps 带宽网络链路,AQM 网络,软件路由,网关的流量整形,虚拟层和中间设备(例如防火墙),检包设备和负载均衡。这些因素增加了网络的复杂性,远不是通过相对简单的假设就能够嵌入到这种硬连接的假设中去的。
本文提出了一种新的拥塞控制结构:面向性能的拥塞控制机制( PCC )。PCC 的目标是通过实时的实验测量证据理解哪些速率控制的动作能够提高性能表现,从而避免提前假设网络状态。PCC 以 r 速率在短的周期事件内发送速率,观察网络上结果(比如,SACKs 包包含发送数据量、丢包和每个包的延迟)。PCC 通过这样周期性的微小实验,把这些参数整合到一个数字化表示的效用函数 u 中,这些效用函数用来描述特定的目标,比如高吞吐量和低延迟。PCC 通过运行多个为“micro-experiments”:尝试以不同的速率发送数据,并通过经验判断哪一个发送速率能够取得高性能,然后朝这一发送速率的方向制定速率控制决策。这是有效的A/B 测试方法,这就是 PCC 决策的核心。PCC 持续进行此类“micro-expriments”(每个字节的数据,而不是随机的探测),这种微型的实验是受到追踪经验最优的发送速率的在线学习算法的驱动。PCC 的速率控制本质上是自私的,但是令人惊讶的是,使用广泛适用的效用函数,在一条单一的瓶颈链路上,PCC 的竞争流最终收敛到一个平衡点。实验表明,PCC与TCP的收敛时间相似,但速率方差明显小于TCP。此外,通过选择实用函数(例如吞吐量或延迟)来表达不同目标的能力提供了超出TCP体系结构的灵活性。
我们在大规模的真实网络环境中测试了 PCC ,不需要调整其拥塞控制算法,PCC 取得了持续的高性能,并且在各种各样的场景中取得了比 TCP 更好的效果:a)全球商业互联网中,比 TCP CUBIC 获得超过十倍的吞吐量;b)在互联的数据中心网络中,比 TCP Illinois 获得 5.23 倍的吞吐量;c)模拟卫星互联网络中,比TCP Hybla 获得 17 倍的吞吐量;d)不可靠的有损链路,比 Illinois 获得10-37倍的吞吐量;e)在竞争流中具有不公平的 RTT 时间的链路中,PCC 结构性的解决 RTT 的不公平性;f)浅缓存的瓶颈链路,PCC 能够取得 45 倍的高性能,或者在达到90%吞吐量的情况下能够减少13倍的缓存大小;g)快速变化的网络,比 CUBIC 能够取得 14 倍的吞吐量,比 Illinois 5.6倍。和 ICTCP 性能表现相似;h)数据中心场景。尽管 PCC 是根本性的结构变化,但是,只需要在用户端进行替换发端的TCP 速率控制单元。它现在也可以通过在 speedier.net/pcc 上的用户空间实现来发送真实数据。
PCC 结构
关键思想
网络中的数据丢包有可能是很多种原因导致的,并不一定的是网络拥塞引起的,TCP 及其变种的速率控制都是基于对网络的假设,提前制定硬性的事件——动作的映射,即使是在某种网络条件下最优的网络假设,只要网络稍有变化,那么性能就会下降很多。本文提出的 PCC 机构的关键思想就是在 MI (监督间隔)时间内不断探测不同的速率引起的性能表现(通过将各种参数整合到为了不同目的设定的效用函数)来决定发送端的速率选择。PCC 采取的在线学习算法类似与梯度上升,比如现在的发送速率是 r ,那么在接下来的 MI 里测试 (1+ε)r速率和(1-ε)r速率,并选择性能提高即更高的效用函数的速率变化方向。
PCC 的测试是持续根据真实发送的数据进行监督测试的,并不是随机探测,也不是发送专门的测试数据进行测试。
本文中,针对可能出现的 MI 测试实验时的噪声干扰,导致测量的效用函数和真实的情况不同,PCC 进行了改进(RCTs),即增加两个 MI 事件(4个 MI 实验阶段),重复进行增加速率、减小速率测试来确定发送速率的变化方向,并且增加速率和减少速率的顺序是随机的。没有 RCTs 的改进,PCC 已经能够取得很大色性能提高,RCTs 的改进进一步降低速率变化 35%。虽然 RCTs 增加了收敛时间,但是这有利用更好的速率决策,总体上说,提高了稳定和收敛速度的折中。
公平性和收敛性
PCC 虽然是每个发送端通过本地的观察控制发送速率,每个发送端很自私的实现自己效用函数的最大值,但是,本文通过理论证明,证明了只要在安全的效用函数下,最终实现收敛性和公平性。具体的证明过程感兴趣的可以参考论文参考文献中的证明过程。
效用函数:灵活的来源
PCC 通过制定不同的效用函数,可以实现不同的网络目的,比如是更加看重网络吞吐量还是更加看重网络延迟或者更加在意网络丢包,这些不同的效用函数是 PCC 灵活适用不同应用需求的来源。
应用
PCC 的应用不需要路由器的支持,也不需要新的协议,收端也不需要进行改变:仅仅TCP SACK中的信息就足够了。
PCC 安全替换 TCP 或者和TCP 安全交互是现存的担忧。本文指出可以是整体替换或者是和 TCP 独立开来。本文提到几种网络场景中可以安全替换或者独立使用PCC,比如 CDN 网路,卫星网络,等等。论文还指出在一些效用函数下能够实现 TCP 的友好性,这在4.3.1节将讨论。
设计原型
性能监督
像第 2 节和图 3 描述的,PCC 将时间分成一个一个 MI 段,在每个 MI 段里记录发送数据的信息,根据 SACK 信息,将吞吐量、丢包率和平均 RTT 等性能评价指标整合到效用函数中,决定下一个 MI 的发送速率。本文中除非另有说明,否则使用2.2节中的效用函数。
为了确保有足够的数据包在一个 MI 时间内发送,我们设定的时间是10个数据包的最大时间和一个均匀分布的随机时间,范围在[1.7,2.2]的 RTT 。另外 PCC 测量的 MI 间隔实验是持续的,并不会等前一个 MI 处理出结果才开始下一个 MI,等 MI 出结果以后,更新 MI 的开始时间和速率,不用等下一个 MI 才变化。
控制算法
根据2.2节描述的简单的控制算法的原则,我们设计了一个实用的控制算法。
开始状态: PCC 开始速率是2 * MSS/RTT (即3KB/RTT),并且在接下来的MI内翻倍发送速率,就和TCP一样。PCC和TCP不一样的是,PCC不存在因为丢包而引起的启动阶段。而是,PCC监督速率翻倍之后的效用函数。只有当效用函数降低的时候,PCC才会存在开始阶段,返回到之前拥有更高的效用函数的发送速率,并且进入制定决策阶段。PCC 也可以使用其他更加激进的启动策略,但是这样的提高 TCP 也能同样做到。
评估
本文通过多样的、大规模的真实网络环境的实验证明PCC的速率控制结构优于TCP。下面各种场景实验结果如图所示。
论文表明 PCC 能够获得持续的高性能
数据中心之间的测试环境下
卫星链路测试环境、不可靠的有损链路、不同RTT流链路、瓶颈链路上拥有小缓存的测试环境
变化迅速的网络环境下
在真实环境中的大数据量传输实验下
在与 TCP流的竞争实验中,说明:
- PCC 比 TCP 更加公平和稳定
- PCC 比 TCP 拥有更好的稳定—反应之间的折中方案
实验表明,PCC 是一个很有前途的 TCP 友好解决方案。
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。