因为发现看过的论文很多都忘了,决定还是看论文的时候写个笔记,并上传到尘封已久的博客里。
Bolt
Sub RTT的CC
Background
CC的生效延迟有两部分
- 反馈延迟
- 通知的延迟,如果rsver反馈就算一个RTT,流开始时重要
- 未充分利用的延迟,流完成时重要
- 观察时间
- 大多数CC都是一个RTT内只改一次,为了不对同一拥塞重复触发
Design
packet守恒原则:如果total cwnd比capacity大,就有多余的packet在排队;反之则未充分利用
SRC: Sub-RTT Control
最小化notification:可编程交换机反馈
队列占用大于thresh(MTU),生成反馈SRC,路径上只有一个
SRC记录:当前队列长度、链路容量、原始数据包的时间戳tx_time(用于计算RTT_src)
sender计算RTT_src、reaction_factor(流对拥塞的贡献,流的速度/链路容量)、targetq(队列长度×贡献,大致视为流所占的队列长度,可以理解为额外侵占的部分);使用RTT_src/targetq作为更新cwnd的弹性间隙(从而一个RTT降低targetq),这样,队列越长,触发越频繁
重传啥的和Swift保持一致
PRU: Proactive Ramp Up
流完成通知sender
当大于一个BDP的流正在发生最后一个cwnd的数据时,包上设立LAST标记,表明下一个RTT内不再有包。第一个cwnd的包设FIRST,因为这期间发生的数据包不是网络所期望的
交换机收到LAST时,不拥塞则增加对应出端口的PRU令牌值
发送端在数据包上标记INC,有PRU令牌或空闲带宽(这里见SM)的交换机保留INC并消耗令牌,否则置零INC。ack携带INC给sender,sender收到后给对应流提速
SM: Supply Matching
cwnd快速更新,从利用率不足中恢复
- PRU的分配策略可能会浪费令牌:可能分给速度无法上升的流(线速or瓶颈)
- 链路未充分利用而无主动反馈,例如故障、路由更改等
上述此类事件,缓慢探测太久
做法:数据包到达时通过+supply(时间×带宽)-demand(包的大小)累计SM令牌,可以为负,最大为MTU(因为没有浮点运算,做法是一个65536大小的表,大于65微秒就直接设为1MTU)
时间是now - 上次数据包到达时时间
这样,上一个RTT浪费的PRU令牌可以在下一个RTT中被SM找到可用带宽
QoS
附录里提到了两种适配QoS的做法,一是加权增加令牌,二是概率生成SRC反馈
Understanding the impact of host networkingelements on traffic bursts
这篇没看具体实现,只关注结论
Background
自相似性:类似分形这样的概念,例如吞吐量的变化在不同的时间尺度可能具有相同的某些特征
自相似性会影响:
- 排队性能:对于强自相似性流量,平均队列长度会随着缓冲区的增加而增加,因此需要部署较小的缓冲区
- 吞吐和延迟的权衡。作者引用了一些,没详细说,以后可能会看看
- 流量预测。可以用于大时间尺度的流量预测
Hurst指数:0到1的值,衡量自相似性。
- H>0.5表示长期正自相关,即序列中的较大值之后的可能也是较大值,并且未来一段时间也会表现地较大
- H=0.5表示序列完全不相关
- H<0.5表示均值恢复,即序列中较大值之后可能是较小值(振荡)
Findings
本来以为会介绍很多发现并且有些推断,其实只是笼统地介绍了一下,组件会影响突发性、各个CC或者不同的qdisc会影响等等,并没有很多进一步的分析。
Empowering Azure Storage with RDMA
微软Azure的跨数据中心RDMA,经验论文
Background
微软的目标是存算分离场景下,同时为前端流量(计算和存储间)和后端流量(存储内)启用RDMA,前端流量可能位于不同的数据中心
Azure的拓扑图见Figure 2,Fat-tree,T2到RH交换机的长度可达数十公里,DC内RTT微秒,DC间2毫秒,T0和T1的pizza box交换机浅buffer,T2和RH是chassis交换机(机箱交换机?),deep buffer
计算集群里是VM,存储集群里是VHD(虚拟硬盘),存储集群分三层:Frontend(验证外部请求并转发)、Partition(管理所有分区)、Stream(分布式文件系统)
在区域RDMA中丢包的恢复要数百微秒,所以用PFC,区域内的新挑战:不同的NIC、不同的交换机间通信,不同的RTT带来的公平性、长距离对PFC headroom的压力
Azure使用PFC watchdog避免广播风暴
Storage Protocols over RDMA
sU-RDMA
用于后端通信,构建了sU RDMALib的用户空间的库
挑战:
- RDMA应用程序无法直接写入现有的内存区域(memory regions, MR)时,要么将应用程序缓冲区注册为新的MR,要么将数据复制到现有的MR,都带来很大的延迟损失
- RDMA的
Send
和Receive
原语,需要接收方预先发布足够的Receive request - 发送方和接收方必需就传输的数据大小达成一致
应对:
- 为了减少注册,维护一个公共缓冲池
- 预注册、跨多个连接共享
- 提供API允许应用程序请求和释放注册的缓冲区
- credit-based flow control,credit表示接收端的可用缓冲区和发布的receive request
- 没有使用RDMA的
Send
和Receive
发送消息。如果使用,每个请求都有固定的缓冲区大小S,用以传输数据。如果S太大,浪费内存空间;如果S太小,数据碎片开销,因此使用三种传输模式:- 小消息:使用RDMA的
Send
和Receive
- 中等消息:发送方使用RDMA
Write
传输,使用Send
通知接收端发送完成 - 大消息:发送方使用
Send
包含本地数据缓冲区的描述,然后接收端用Read
来读,最后接收端用Send
告诉发送端读完了
- 小消息:使用RDMA的
由于RDMA使用DCQCN作为CC,DCQCN不关注inflight,为了提高incast性能,实现了一种静态的流控机制,有固定大小的块,每个连接只允许一个inflight块
sK-RDMA
前端通信,在内核态允许(sU-RDMA在用户态)(应该是为了节省计算节点的CPU)
计算写存储:计算节点Send
携带请求,存储节点Read
读数据,存储节点Send
响应读完了(和sU的大消息一样)
计算读存储(存储写计算):计算节点Send
携带请求,存储节点Write
写数据,存储节点Send
响应计算节点写完了
响应用的是Send with Invalidate
RDMA Estats
测量工具,帮助判断瓶颈位置
Swith Management
异构性的解决方案:SONiC (Software for Open Networking in the Cloud)。通过统一的软件堆栈管理异构的交换机,它将交换机软件分解为多个容器化组件,网络运营商选择组件,定制SONiC,创建精简的“堆栈”。
SONiC提供部署RDMA所需要的全部功能,例如ECN、PFC、共享缓冲区
Buffer Model on Pizza Box Switches
实现了三个buffer pools:
ingress_pool
进行入口准入控制,针对所有分组egress_lossy_pool
进行出口准入控制,针对有损分组egress_lossless_pool
进行出口准入控制,针对无损分组
只对无损流量用入口准入控制(PFC暂停)
只对有损流量用出口准入控制(动态阈值来丢包)
Testing
软件测试是用了API给对应port打“断点”,然后发数据包获得“快照”
硬件测试用了可编程的流量生成器
Congestion Control
Scaling PFC
微软提到需要几个GB的PFC headroom 缓冲
利用了一个pathological case:所有端口同时拥塞、端口的所有ingress queue依次暂停对面,这样的情况很罕见(工程上确实可以这样)
两个方面:
- 用off-chip DRAM来存,与片上SRAM不同,片外DRAM的带宽略小,所以如果所有端口都线速,就会丢包
- 为所有入口无损队列分配一个PFC headroom pool(共享这部分)
DCQCN Interoperability
主要问题是不同代的网卡的DCQCN实现细节不一样,这里介绍了工程上具体什么不同,以及相应怎么互操作
Gen1把大部分功能用firmware实现,碍于性能,在一个time window内只会生成最多一个CNP(基于NP的汇聚)。并且有缓存有限带来的性能问题,因此速率限制的粒度应该是per-burst而不是per-packet,从而降低活动QP的数量,减少缓存不足的问题
Gen2和Gen3放在了hardware,并且是基于RP的汇聚:NP每个都发CNP,但是RP在一个时间窗口只削一次。速率限制是per-packet粒度
问题:2/3发1,per-packet粒度太细,导致速度拉慢;1发2/3,NP倾向于发过多的CNP,从而造成降速太快
解决:让2/3像1,首先是从基于RP改为基于NP的汇聚;其次是把粒度也改为per-burst
Tuning DCQCN
通过实验得出结论
- DCQCN不受RTT不公平的影响,因为基于速率
- 为了给具有大RTT的DCQCN提供高吞吐,ECN使用大的Kmax-Kmin和小的Pmax
- 见图
- 这样可以使ECN标记较为稀疏
- DCQCN要和缓冲区一起调整(而不是调整PFC),避免PFC在ECN之前被触发
Experience
逐步启用:测试平台→测试集群→生产环境中谨慎增加
在实验拥塞控制时先关闭DCQCN测出最佳的仅PFC性能,然后再用默认的DCQCN(测试环境得出的),然后调整ECN
Lessons and Open Problems
- RDMA的故障转移非常昂贵
- 主机网络(PCIe、NVLink等等)和物理网络应该融合
- Switch buffer越来越重要
- 云需要统一的行为模式和接口,解决异构
- 测试很难
Skyplane: Optimizing Transfer Cost and Throughput Using Cloud-Aware Overlays
云只对出口收费,收费只和吞吐量有关,和速度无关;同一片云,去远的DC更贵,其他公司的云,出去价格和物理距离无关
约束条件:价格上限优化带宽,or带宽下限优化价格
假设与总的区域间带宽相比,单个用户批量传输消耗的带宽可以忽略不计
Parallel TCP的不公平:
- 用这个很常见
- 用户按照带宽付费
- 云提供商的流量整形