笔记不完整,主要是对 Zotero 上的个人注释的补充。本文可能持续更新。
TIMELY: RTT-based Congestion Control for the Datacenter
paper: https://dl.acm.org/doi/10.1145/2785956.2787510
摘要:TIMELY、尾延迟、Clos 拓扑、DCTCP、ECN 显式拥塞通知、NIC offload.
Congestion Control for Large-Scale RDMA Deployments
paper: https://dl.acm.org/doi/10.1145/2829988.2787484
位于文章的 “4. BUFFER SETTINGS” (Zhu et al., 2015, p. 528) 标红的公式。
已知:$t_{PFC} > n \cdot t_{ECN}$
动态PFC阈值计算公式(t_PFC 会根据当前缓冲区的使用情况 s 进行动态调整):
$t_{PFC}=\beta (B-8nt_{flight}-s)/8$
又 $s \le n \cdot t_{ECN}$
由上:
$n\cdot t_{ECN} < t_{PFC}=\beta (B-8nt_{flight}-s)/8$
将 $s$ 的临界值 $n \cdot t_{ECN}$ 代入不等式的右边:
$n\cdot t_{ECN} < \beta (B-8nt_{flight}-n \cdot t_{ECN})/8$
$8n\cdot t_{ECN} < \beta (B-8nt_{flight})-\beta n \cdot t_{ECN}$
$8n\cdot t_{ECN} + \beta n \cdot t_{ECN} < \beta (B-8nt_{flight})$
$(8n+\beta n) \cdot t_{ECN} < \beta (B-8nt_{flight})$
$n(8+\beta) \cdot t_{ECN} < \beta (B-8nt_{flight})$
得到的公式和论文中略有不同。
一些其他的 DCQCN 笔记存于我私人的 Zotero 中,如有问题可以评论区讨论。
HPCC: high precision congestion control
paper: https://dl.acm.org/doi/10.1145/3341302.3342085 link: https://cloudswit.ch/blogs/what-is-int%EF%BC%88in-band-network-telemetry%EF%BC%89/
摘要:主要讲 HPCC 算法本身,并没有额外补充其他的知识。
以下是 Algorithm 1 的一些 notes.
先看第21行的函数,lastUpdateSeq 用来记录新窗口 $W^C$ 中第一个发送的数据包,当到来的 ACK 的序列号大于 IastUpdateSeq 时,触发窗口大小的更新。否则不进行更新,这体现在 updateWc 的参数设置上。在函数的最后,例行更新了 R 和 L 的值。
第5行,使用 min(ack.L[i].qlen, L[i].qlen) 是为了过滤掉 qlen 的噪声。
3到7行的代码选出最大的 $U$, 第9行做了指数加权移动平均(ewma)。
ComputeWind 函数是算法的重点。函数的核心目标是平衡两个有时相互矛盾的需求:
- 反应速度 (Reaction Speed):当网络有空闲带宽时,要能非常迅速地把速率提上去,占满带宽;当网络拥塞时,要能非常迅速地把速率降下来。这个由乘性增/减 (MI/MD)负责。
- 公平性 (Fairness):当多个流共享瓶颈时,要确保大家能公平分配带宽,不能因为某个流反应快就一直多占。这个由加性增 (AI)负责。
第一阶段:“温柔试探”的加性增 (AI) 阶段
- 触发条件: 当发送端发现网络有空闲(
U < η),并且,它还处于“试探期”(incStage < maxStage,例如incStage < 5)。 - 执行动作 (对应伪代码16-19行):
- 它会执行一次非常保守的加性增 (AI):
W = W^c + W_AI。即在参考窗口的基础上,只增加一个很小的固定值W_AI。 - 同时,将“试探”计数器加一:
incStage++。
- 它会执行一次非常保守的加性增 (AI):
- 目的: 这个阶段的目的是稳定和公平。它避免了一个流在刚发现网络有空闲时就用“乘性增”暴力抢占带宽,那可能会导致网络震荡。相反,它会先“温柔地”走几步,看看网络反应,同时也给其他流公平竞争的机会。
第二阶段:“迅猛出击”的乘性增/减 (MIMD) 阶段
- 触发条件: 以下两个条件满足任何一个,就会进入这个阶段:
- 网络拥塞了 (
U >= η):这是最直接的触发条件。一旦发现拥塞,必须立刻、迅速地做出反应。 - 试探期结束了 (
incStage >= maxStage):发送端已经连续执行了maxStage次“温柔”的加性增,但发现网络依然还有空闲 (U仍然小于η)。这说明网络非常空闲,带宽裕量很大,没必要再一步一步地走了,是时候“迅猛出击”,快速把速率提上去了。
- 网络拥塞了 (
- 执行动作 (对应伪代码12-15行):
- 算法会调用完整的公式(4):
W = W^c / (U/η) + W_AI。 - 这个公式的核心是
W^c / (U/η)这一项,它是一个MIMD项:- 如果是情况1(拥塞),
U/η > 1,窗口会乘性减小,实现快速降速。 - 如果是情况2(试探期结束),
U/η < 1,窗口会乘性增大,实现快速提速。
- 如果是情况1(拥塞),
- 同时,将“试探”计数器清零:
incStage = 0,为下一次可能的“温柔试探”做准备。
- 算法会调用完整的公式(4):
QTCP: Adaptive Congestion Control with Reinforcement Learning (2018)
paper: https://ieeexplore.ieee.org/document/8357943/
摘要:Kanerva 编码、Q-learning、比例公平和 log。
ACC: automatic ECN tuning for high-speed datacenter networks (2021)
paper: https://dl.acm.org/doi/10.1145/3452296.3472927
参见:论文阅读 ACC:automatic ECN tuning for high-speed datacenter networks。
A Deep Reinforcement Learning Framework for Optimizing Congestion Control in Data Centers (2023)
paper: https://arxiv.org/abs/2301.12558
参见:论文阅读 A Deep Reinforcement Learning Framework for Optimizing Congestion Control in Data Centers