设计思路
基于采样的测量方法只有当测量时间足够长以后才能够提供准确率的保证. 我们把收敛时间定义成为从开始测量到获得准确的测量结果所用的时间.
NitroSketch的关键创新点:
想法一: 保持原有的多哈希表结果, 并且基于哈希表进行采样 (而不是基于信息流进行采样). 当一个数据包到达的时候, 对于每一个哈希表, 我们都以概率
p对其进行更新. 通过选取合适的
p的值, 我们可以使对每个数据包进行的进行哈希和更新哈希表的次数减少到1以下. 但是这个想法对于每个数据包都需要进行多次取随机数的操作, 而取随机数是一个相当耗时的操作.
想法二: 通过几何采样 (Geometric Sample)来减少取随机数的操作的次数. 为了避免对每一个数据包都取多个随机数, 我们采用对几何分布进行采样的方式来决定(1)下一步更新哪一个哈希表, 以及(2) 在更新哈希表之前需要跳过多少个数据包. 假设采样成功概率为
p, 则我们对下一个数据包(即跳过0个数据包)进行采样的概率为
Pr(X=0)=p, 跳过1个数据包进行采样的概率为
Pr(X=1)=(1−p)p, 依此类推, 跳过
k个数据包进行采样的概率为
Pr(X=k)=(1−p)k−1p. 因此,
D(n)=∑k=0nPr(X=k)=1−(1−p)n+1即为一个几何分布. 因此, 为决定下一次对哪一个数据包进行采样, 我们可以取一个随机数
Y. 如果
Y≤D(0), 则我们对下一个数据包进行采样; 否则, 如果
D(k)<Y≤D(k+1), 则我们从下一个数据包开始, 跳过
k+1个数据包再进行采样. 假设我们有5个哈希表
H0,H2,⋯,H4, 当前我们对数据包进行采样并更新哈希表
H3. 通过几何采样我们得知, 我们需要跳过5个数据包进行采样, 即我们需要从下一个数据包开始的第6个数据包进行采样, 则我们对这个数据包采样的时候需要更新的哈希表为
H(3+6)%5即
H4. (这部分内容大多是根据我的理解写的, 而非直接抄录原文的内容)
想法三: 根据数据包到达速率调整采样频率来减少收敛时间. 如果我们使用固定的采样频率, 那么我们必须要兼顾到可能的最大的数据包到达速率, 因此不得不选择一个较小的采样频率. 但是当数据包到达速率较小的时候, 一个过小的采样频率会导致收敛时间不必要地增加, 因此根据数据包到达速率动态调整采样频率能够在兼顾CPU负荷的情况下获得更高的准确率和更短的收敛时间.
我们有两种自适应的采样模式. (1) AlwaysLineRate: 将采样频率
p设为当前数据包到达频率的倒数, 因此在单位时间内, 我们进行采样的次数是一定的. (2) AlwaysCorrect: 开始的时候采用
p=1.0的采样频率对数据流进行采样, 但是我们的采样结果能够收敛以后就切换到AlwaysLineRate模式进行采样.
想法四: 把需要更新的数据包和哈希桶缓存起来, 并使用SIMD进行并行操作来提高效率. 这个只是作者采样的一个小技巧, 没有什么值得讨论的.
理论分析
假设
U为所有数据流的集合, 而
fx是数据流
x的长度 (比如数据包数), 其中
x∈U.
Lk≜kFk
=k∑x∈Ufxk
是频数向量
f的第
k范数 (k-th norm). 特别地,
L1是被测数据包的总数. 假设我们采用恒定的采样概率
p (这里的采样概率是计算几何分布时候的概率, 而不是采样频率)对网络流量进行采样.
定理1. 令
d≜log2δ−1,
w≜4ϵ−1. 对于给定信息流, 如果存在一个足够大的常数
c, 有
L1≥c⋅(ϵ−2p−1logδ−1
), 则NitroSketch + Count-Min满足如下不等式:
Pr[∣fx
−fx∣≥ϵL1]≤δ
其中
fx和
fx
分别是数据流
f的真实频率和估计频率.
定理1在原文中没有给出证明; 按照作者的说法, 它的证明过程来自< Constant Time Updates in Hierarchical Heavy Hitters>(SIGCOMM 2017)这篇文章. 如果我之后读完这篇文章, 那将会在此处给出我的研读笔记的链接.
定理2. 令
w=8ϵ−2p−1,
d=O(logδ−1). AlwaysLineRate模式的空间复杂度为
O(ϵ−2p−1logδ−1), 分摊时间复杂度为O(1 + dp), 并且在信息流中, 如果
L2≥8ϵ−2p−1, 则有
Pr(∣fx−fx
∣>ϵL2)≤δ.
证明: 假设当一个数据包到达的时候, 我们会为每一个哈希表进行采样. (我理解的原文应该就是这个意思; 如果真是这样, 那就比较有意思了, 因为NitroSketch的一个主要优势就是我们不需要为每一个哈希表对数据包进行采样.) 令
Si⊆S为被采样并更新哈希表
Hi的数据包的集合, 其中
i=1,⋯,d. 此外, 我们令
fi,x≜∣{j∣(xj∈Si)∧(xj=x)}∣为数据流
x在
Si中出现的频数, 即来自数据流
x的数据包被用来更新哈希表
Hi的次数. 令
L2≜∑x∈Ufx2
表示信息流
S的频数向量的第二范数. 类似地,
L2,i≜∑x∈Ufi,x2
表示信息流
Si的频数向量的第二范数. 因此,
∀i∈{1,⋯,d},L2,i≤L2.
p为对数据包的采样概率.
在引理3中, 我们将会证明
E(L2,i2)≤2pL22.
设
C(i,hi(x))为哈希表
Hi中索引为
hi(x)的哈希桶的计数值,
gi(x)的含义可见原文的算法1. 在引理4中, 我们将会证明
Var[Ci,hi(x)g(x)−p−1fi,x]≤2p−1L22/w.
在这里我们将首先使用这两个引理的结论, 并在之后给出具体的证明过程.
因为
fi,x∼B(fx,p), 即
fi,x服从二项分布, 所以
E(fi,x)=fxp,
Var(fi,x)=fxp(1−p). (如果一个数据包随机地映射到
d个哈希表中的一个, 则f_{i,x}不应该服从参数为
fx和
p的二项分布, 所以这里我的理解是, 数据包都会被映射到
d个哈希表中的每一个.)
令
A≡Ci,hi(x)gi(x),B≡p−1fi,x. 因为
Var(fi,x)=fxp(1−p), 所以
Var(B)=fxp−1(1−p).
因为
A−B (除
x以外的所有数据流)和
B(数据流
x)是独立的, 所以有
Var(A)=Var((A−B)+B)=Var(A−B)+Var(B)≤2p−1L22/w+fxp−1(1−p)≤2p−1L22/w+fxp−1
因为
E(Ci,hi(x)⋅gi(x))=p−1x′∈U∣hi(x)=hi(x′)∑E(fi,x′⋅gi(x′)⋅gi(x))=p−1E(fi,x)=fx
(关于以上这个不等式, 我认为存在这篇文章中的第二个疑点, 即它似乎认为当
x′=x时,
E(fi,x′⋅gi(x′)⋅g(x))=0, 然而我不能理解这么做得理由.)
所以记哈希表
Hi对数据流
x的频数的估计值为
fx(i)
≜A=Ci,hi(x)g(x), 则根据切比雪夫不等式有:
Pr[∣fx(i)
−fx∣≥ϵL2]=Pr[∣Ci,hi(x)g(x)−E(Ci,hi(x)g(x))∣≥ϵL2]=Pr[∣A−E(A)∣≥ϵL2]≤Pr[∣A−E(A)∣≥2p−1L22/w+fxp−1
δ(A)⋅ϵL2]≤(ϵL2)22p−1L22/w+fxp−1=pϵ22/w+p(ϵL2)2fx≤pϵ22/w+pϵ2L21
令
L2≥8p−1ϵ−2,w≥8p−1ϵ−2, 则有
Pr[∣fx(i)
−fx∣≥ϵL2]le83
因为我们的算法使用了
d=O(logδ−1)个相互独立的哈希表, 所以令
fx
=mediani∈{1,⋯,d}fx(i)
, 则由切诺夫界可知,
Pr(∣fx−fx
∣>ϵL2)≤δ成立. (我并不知道切诺夫界应该怎么应用于这里所述的情况.)
引理3.
E[L2,i2]≤2pL22
证明: 因为
fi,x∼B(fx,p), 所以
E(fi,x)=fxp,Var(fi,x)=fxp(1−p)
所以有
E[L2,i2]=x∈U∑E[fi,x2]=x∈U∑(Var[fi,x]+(E[fi,x])2)=x∈U∑(fxp(1−p)+(fxp)2)≤x∈U∑2pfx=2pL22
引理4.
Var[Ci,hi(x)gi(x)−p−1fi,x]≤2p−1L22/w
证明: 首先,
Ci,hi(x)gi(x)=p−1∑x′∈U∣hi(x)=hi(x′)fi,x′gi(x′)
如定理3中所述, 因为本人不能理解的原因, 当
x′=x时,
E(fi,x′gi(x)gi(x′))=0, 且当
x=x′时,
E(fi,x′gi(x)gi(x′))=E(fi,x). 所以
E(Ci,hi(x)⋅gi(x))=p−1x′∈U∣hi(x′)=h(x)∑E(fi,x′⋅gi(x′)⋅gi(x))=p−1E(fi,x)=fx
E(Ci,hi(x)⋅gi(x)−p−1fi,x)=0
此外,
∀x′∈U/{x},Pr[hi(x)=hi(x′)]=w1.
Var[Ci,hi(x)g(x)−p−1fi,x]=E((Ci,hi(x)⋅gi(x)−p−1fi,x)2)=E((Ci,hi(x)g(x))2−2p−1Ci,hi(x)g(x)fi,x+p−2fi,x2)=E[(p−1x′∈U∣hi(x)=hi(x′)∑fi,x′gi(x′)gi(x))2−2p−1(p−1x′∈U∣hi(x)=hi(x′)∑fi,x′gi(x′)gi(x)fi,x)+p−2fi,x2]=p−2E[(x′∈U∣hi(x)=hi(x′)∑fi,x′2)−fi,x2]=p−2E[x′∈U/{x}∣hi(x)=hi(x′)∑fi,x′2]≤p−2E(L2,i2)/w≤2p−1L22/w