《TCP ex Machina: Computer-Generated Congestion Control》论文阅读笔记
MODELING THE CONGESTION-CONTROLPROBLEM
1. Expressing prior assumptions about the network
作者对网络进行了先验的假设,认为网络是服从马尔可夫过程(下一时刻的状态只与当前时刻状态有关,而与前面的时刻状态无关,即为无后效性或马尔可夫性),因此,通常使用三个参数指标去描述网络状态:瓶颈链路的速率、传播时延、复用程度(瓶颈链路竞争流的数量)。
但是需要注意两个问题:1.如何选择参数指标,能够去准确的代表网络状态。2.这些参数指标的精确性是是否难以确定的。
由于现有的 CC 算法都是在基于特定网络设计的(性能良好,普适性差),但未来是希望 CC 算法能够自适应于不同的网络动态环境(性能和普适性都好)。所以需过对参数的选择以及参数的不确定性进行考量,即是对 CC 算法的设计能在 普适性 和 性能 方面达到一种平衡。譬如:针对无线网络设计的算法在无线网络环境中会比通用型算法性能好,但是在其他网络环境下表现就会很差。
2. Traffic model
流量模型方面,作者对 哑铃型网路拓扑结构 的 发送端 使用了 on/off model 去生成网络流量。on 时即该发送端发送数据;off 时即停止发送数据。off 的时间服从 exponential distribution;on 发送的数据大小是服从 empirical distribution of flow size(可根据网络条件自行设置)。
3. Objective function
RL目标函数是去评估 某个policy 下 action 的好坏,使得 policy 不断迭代更新能够收敛这个目标(最大吞吐量和最小RTT)中去。
目标函数的设计作者采用了 Resource-allocation 理论中的 the alpha-fairness 去评估多个 flow 共享同一链路时的 throughput 分配情况好坏。
\[\alpha -fairness:\ \ U_r\left( x_r \right) =w_r\frac{x_r^{1-\alpha _r}}{1-\alpha _r}\ \ \ \alpha _r>0 \] alpha-fairness 是单调递增的,它其实是对 proportional fairness,minimum potential-delay fairness and max-min fairness 这些 fairness 方法中总结出来的更 generate 效用函数。\(x_r\) 是 user r 的传输速率,\(w_r\) 是一个权重常数, \(U_r\left( x_r \right)\) 是 user r 的对带宽的利用效用。
Case 1. Minimum potential delay fairness。 当\(\alpha_r=2,\forall r\)
\[U_r\left( x_r \right) =-\frac{w_r}{x_r} \]Case 2.Proportional fariness。当 \(\alpha_r=1, \forall r\)
\[U_r\left( x_r \right) =\left\{ \begin{array}{l} -w_r\frac{x^{1-\alpha _r}}{1-\alpha _r},\alpha _r>0,\alpha _r\ne 1\\ w_r\log x_r,\alpha _r=1\\ \end{array} \right. \]Case 3.Max-min fairness。\(w_r=1,\alpha_r=\alpha,\forall r,\alpha \rightarrow \infty\)
将多用户的 Resource-allocation 问题建模为一个优化问题,即希望每个用户的传输速率在特定的约束条件下,它们的传输速率的效用函数累计和能够最大,使得每个用户的带宽分配到达一种相对公平的平衡。
而上面的 多种 fairness 方法,其实都是基于上面的问题去进行解答。通过设计不同的 \(U_r\left( x_r \right)\) ,在式2.2的约束下,以最大化用户效用累计和(式2.1)为目标,去证明它们的收敛(即能够找到每个用户的最优 \(x_r\) )。
详细的推导过程可参考该书(提取码:98dy)的 Resource Allocation 章节。
但是 alpha-fairness 中,考虑的只是吞吐量,没有考虑到链路的时延。如果每个用户端都尽可能地最大化自己地效用函数值,不断地提高自己地传输速率,会导致去侵占路由或者接收端的buffer,使得时延增加、缓存溢出而丢包,最终网络崩溃。
因此为了在 吞吐量和时延 中权衡 公平性和效率,作者提出了改进的 objective function:
\[U_{\alpha}\left( x \right) -\delta \cdot U_{\beta}\left( y \right) =\frac{x^{1-\alpha}}{1-\alpha}-\delta \frac{y^{1-\beta}}{1-\beta} \]其中 \(x\) 为吞吐量,\(y\) 为链路时延,\(\delta\) 表示了吞吐量和时延的重要程度。该目标函数的总体目标为,在保证 fairness 的基础上,最大化吞吐量并且最小化时延。
HOW REMY PRODUCES A CONGESTION-CONTROL ALGORITHM
1. The sender's state
- ack_ewma,ACK的到达间隔时间的指数加权移动平均值
- send_ewma,ACK的发送间隔时间的指数加权移动平均值
- rtt_ratio,当前 \(RTT\) 与 \(RTT_{min}\) 的比值。
以上三个变量称为为 RemyCC memory。作者在 memory 中没有去考虑丢包,一方面是不对丢包做出反应可以算法更加鲁棒性,另一方面是我们在最大化目标函数的中会去最小化时延,从而避免了 buffer 的累计,因此不会出现拥塞丢包。
2. The sender's action
- m >= 0,cwnd的乘系数
- b,cwnd的加系数(b可为负数)
- r > 0,连续发送的最小间隔时间
3.Mapping the memory to an action
Remy 目的是针对不同的网络状态(memory),能够做出该状态下最优的行为(action),并且将memory 映射到 action 的关系形成一张 rule table,其中该表中的每一行代表着一种 rule。即当前的拥塞策略是由多条 rule 构成,即rule table。因此在实际运行的时候,会通过查表的方法,去找到当前 memory 对应得 action。
4.Remy’s automated design procedure
首先初始化 action(m = 1,b = 1, r=0.01)。所有的memory(null) 都指向 该 action,作为rules table 的所有初始的 rule。
设置所有的 rules 的 epoch 都为 current_epoch。
用 current rule table 作为一个CC,放入到 建模的 网络仿真器中运行,找到current epoch下使用最多的 rule。如果找不到,转 step 4。
如果找到使用次数最多的rule,我们对该 rule 下的action 进行试探性的修改,调整的步骤以现有的 m,b,r参数值,每个参数依次按照指数规则增加或减少100次(一共调整 \(100^{3}\)次),并且使用16个以上的网络样本进行评估,即将每一次的修改的action 应用到 所有的 发送端,再次进行仿真。如果某种调整后的action 更优,那么我们就替换该 rule 下的action,然后再次修改,直到找不到更好的 action,此时,current_epoch++,并且回到 step 2。(detail: 首先得在仿真中,匹配到与该rule 下的memory相一致的memory,其次用 objective function 去评估采用修改的action后,该flow的 throughput 和 RTT 是否更优)
此时如果无法找到使用最多的rule,新增一个 Global_epoch,并且 Global_epoch++,若该 Global_epoch是K的倍数,转 step 5;否则转 step 1。
对映射表进行泛化,Remy 最后生成一张 rule table,为了提高泛化能力,作者将最常用的action 对应的memory(中间值) 在三维空间中泛化为距离当前memory值最小的的正方体中的8个点(8个新的memory,赋予和中间值相同的action),然后转第一步。
这篇论文是发在 2013 Sigcomm 顶会,应该是将机器学习的思想应用到拥塞控制领域的新的尝试。Remy 算法通过在不同的网络环境下找到该环境的最佳 Remy CC,将网络环境建模为 马尔可夫 过程,定义 objective function,并且定义 state 和 action,建立映射表,有 RL 的意思了。以现在的眼光看,网络环境的变化 是很难 通过映射表列举出来,同样也要耗费很大内存资源去存储这些映射,如果遇到未知的memory,性能就会比较差。但无疑推动了DRL 在 拥塞控制的应用。