Not All Microseconds are Equal研读笔记

文章信息

M. Lee, N. Duffield, and R. R. Kompella, “Not all microseconds are equal: fine-grained per-flow measurements with reference latency interpolation,” in Proceedings of the ACM SIGCOMM 2010 conference on SIGCOMM - SIGCOMM ’10, New Delhi, India, 2010, p. 27, doi: 10.1145/1851182.1851188.

文章内容

设计思路

这篇文章介绍了一种用于测量流级别的网络延迟的方案 RLI (Reference Latency Interpolation). RLI主要受到以下这一现象的启发, 即数据包的传输延迟在时间上和空间上具有局部性. 具体而言, 就是对于通过同一条链路的数据包, 如果他们通过这条链路的时间相近, 那么他们的传输延迟也是相仿的. 这个很好理解, 因为数据包的传输延迟主要来自于他们在网络设备中的排队延迟, 而相邻的数据包在网络设备中所观察到的队列长度是相近的, 这就导致了他们经历的网络传输延迟也相近. 因此, 我们可以在信息流中插入一系列的探测数据包, 这些数据包中携带了发送方的本地时间戳. 接收方受到这些探测数据包以后, 可以根据其中携带的时间戳以及本地时间来计算出这些数据包的传输延迟, 并用这些延迟来推测出两个相邻探测数据包之间的普通数据包的传输延迟. 同时, 我们通过对普通数据包进行采样, 可以获得网络中数据流的信息, 而采样的数据包的传输延迟可以通过RLI获得, 所以这些数据流的传输延迟也就可以通过RLI获得.

这一方法的一大优势是, 它不需要对数据包进行修改, 而且它可以用于任何的数据流测量算法, 比如NetFlow等.

RLI包含了两个组件, 即探测数据包生成器, 以及数据包延迟估计器. 其中, 探测数据包生成器可以根据网络带宽的使用情况来实时计算探测数据包的生成频率, 从而使得网络不会因为探测数据包的频繁发送而过载, 同时当网络带宽利用率较低的时候可以发送较多的探测数据包, 从而提高网络延迟测量的精度. 在获得探测数据包的网络延迟以后, 数据高延迟估计器可以探测数据包的网络延迟来估计普通数据包的传输延迟, 并最终计算数据流的延迟.

探测数据包生成器

探测数据包生成器的主要任务是根据当前的网络状况来计算探测数据包的发送速率. 每当发送了一个探测数据包以后, 生成器就会立即计算一个新的探测数据包发送速率, 而这一速率可以直接映射成为发送下一个探测数据包所需要的等待时间. 具体算法如算法1所示. 这里我们对算法1进行一个简要的介绍.

我们将两个探测数据包发送时间之间的时间间隔成为探测间隔. 假设上一个探测间隔 (即刚才发送的探测数据包和它之前的探测数据包之间的时间间隔)之内经过被测链路的流量为 c b c_b 字节, 上一个探测间隔长度为 d r p d_{rp} 秒, 链路的带宽为 l c l_c , 所以从上一个探测数据包到刚才发送的探测数据包这段时间内链路的带宽利用率为:
u i n s t a n t c b / d r p / l c u_{instant}\gets c_b/d_{rp}/l_c

我们对链路的带宽利用率做平滑处理. 令 0 < α < 1 0< \alpha < 1 , u e s t u_{est} 为链路的带宽利用率, 则考虑上一个探测间隔的带宽利用率以后, 我们得到新的带宽利用率如下:
u e s t u i n s t a n t α + u e s t ( 1 α ) u_{est}\gets u_{instant}\cdot\alpha + u_{est}\cdot (1-\alpha) .

我们预先设定了链路带宽利用率的最大值 u m a x u_{max} 和最小值 u m i n u_{min} , 因此如果我们计算出的当前带宽利用率 u e s t u_{est} 超过了 [ u m i n , u m a x ] [u_{min}, u_{max}] 的范围, 则我们需要对 u e s t u_{est} 进行修正. 我们修正 u e s t u_{est} 的方式如下 (实际上我们用 u e f f u_{eff} 来代替了 u e s t u_{est} , 此外算法1中并没有体现修正的过程):
u e f f min { u m a x , u e f f } u e f f max { u m i n , u e f f } u_{eff} \gets \min\{u_{max}, u_{eff}\}\\ u_{eff} \gets \max\{u_{min}, u_{eff}\}

最后我们计算探测数据包的发送速率. 我们预先设定了探测数据包的最大发送速率 r m a x r_{max} 和最小发送速率 r m i n r_{min} . 链路的带宽利用率越高, 则探测数据包的发送速率越低, 当链路的带宽利用率为 u m a x u_{max} , 探测数据包的发送速率为 r m i n r_{min} ; 链路的带宽利用率越低, 则探测数据包的发送速率越高, 当链路的带宽利用率为 u m i n u_{min} 时, 探测数据包的发送速率为 r m a x r_{max} . 具体的计算探测数据包发送速率的方法如下:
r e f f r m i n + ( r m a x r m i n ) 1 ( u e f f u m i n u m a x u m i n ) 2 r_{eff}\gets r_{min} + (r_{max} - r_{min})\cdot\sqrt{1 - (\frac{u_{eff} - u_{min}}{u_{max} - u_{min}})^2}
在这里插入图片描述

数据包延迟估计器

接收方有一个存放数据包的缓冲区. 当接收方收到一个探测数据包以后, 它就会对这个探测数据包之后到达的(被采样的)正常数据包进行缓存, 直到下一个探测数据包到达. 一旦接收方受到了两个探测数据包, 它就会根据这两个探测数据包的传输延迟对这两个探测数据包之间的正常数据包的传输延迟进行估计. 具体而言, 探测间隔左右两侧的探测数据包的到达时间分别为 τ l \tau_l τ r \tau_r , 它们的传输延迟分别为 d l d_l d r d_r , 当前我们要估计其传输延迟的数据包的到达时间为 τ a \tau_a , 则易得这个数据包的传输延迟的估计值为:
d l + τ a τ l τ r τ l ( d r d l ) d_l + \frac{\tau_a - \tau_l}{\tau_r - \tau_l}\cdot (d_r - d_l)
所以当前数据包的到达时间越接近 τ l \tau_l , 则它的传输延迟估计值越接近 d l d_l ; 它的到达时间越接近 τ r \tau_r , 则它的传输延迟估计值越接近 d r d_r .

原文中, 在估计一个数据包的传输延迟的时候, 它还增加了一个修正项, 即它同时考虑了网络设备将一个数据包进行串行化 (serilization)所用的时间. 假设探测数据包的长度为 b b , 待测数据包的长度为 b a b_a , 链路带宽为 l c l_c , 则他们的串行化时间之差为:
b a b l c \frac{b_a - b}{l_c}

所以最终对数据包的传输延迟的估计值为
d ^ d l + τ a τ l τ r τ l ( d r d l ) + b a b l c \hat{d} \gets d_l + \frac{\tau_a - \tau_l}{\tau_r - \tau_l}\cdot (d_r - d_l) +\frac{b_a - b}{l_c}

每一个数据包都对应于一个数据流; 我们为每个数据流维护了三个计数器, c , m , v c, m, v . 每当得到一个数据包的传输延迟的估计值 d ^ \hat{d} 以后, 我们就更新这个数据包所对应的流的统计数据如下:
c c + 1 , m m + d ^ , v v + d ^ 2 c\gets c + 1, m \gets m + \hat{d}, v\gets v + \hat{d}^2
最后, 数据流的均值和方差为:
μ m / c , σ 2 v / m μ 2 \mu\gets m/c, \sigma^2\gets v/m - \mu^2
(原文中认为 σ 2 v / m 2 μ 2 \sigma^2\gets v/m^2 - \mu^2 , 但是我认为原文中的方法是错误的.)

猜你喜欢

转载自blog.csdn.net/nankai0912678/article/details/105943800
ALL