《弹性sketch:一种自适应快速网络测量方案》

sketch:可用于网络测量的数据流算法

杨仝为第一作者,其他作者包括信息学院一名硕士研究生和三名本科生、李晓明教授,以及中国科学院先辈计算机体系研究中间黄群副研究员、南加州大学博士研究生缪睿和伦敦大学玛丽女王学院Steve Uhlig教授。

杨仝等人旨在使用一种通用的概率算法解决复杂网络环境下多种网络测量题目,首次提出弹性网络测量的研究方向和一种概率数据结构(即弹性sketch),可根据现有网络带宽、CPU(中间处理器)资源等,自适应地调整测量算法的速度、测量算法占用的CPU和网络资源,从而最小化网络测量义务对营业的影响。他们将弹性sketch实如今CPU单核、CPU多核、GPU(图形处理器)、FPGA(现场可编程门阵列)、OVS(开放假造交换标准)以及P4Switch六个平台上。与传统算法不同,文中所提出的算法具有通用性,即用一种数据结构同时完成六种流量测量义务;与此同时,较现有的专用算法精度更高、速度更快。

作为网络与通讯领域顶级会议和风向标,ACM SIGCOMM收录的论文对学术界和工业界均具有向导性的影响,每年录用的论文一样平常少于40篇。此前,大陆高校和研究机构作为第一作者单位所发表的文章不超过10篇。

当网络遇到拥塞、扫描攻击、DDOS攻击时,网络测量就很重要。在这种情况下,包括可用带宽、包速率和流量大小分布在内的流量特性变化很大,显著降低了测量性能,因此提出了弹性草图。它适应当前的流量特征。此外,它对测量任务和平台是通用的。我们在P4、FPGA、GPU、CPU、多核CPU和OVS六个平台上实现了弹性草图,来处理六个典型的测量任务。实验结果和理论分析表明,弹性示意图能很好地适应流量特性。与最新技术相比,弹性草图的速度提高了44.6-45.2倍,2.0-273.7较小误差率。

背景

网络测量为网络运营、服务质量、容量规划、网络会计和计费、拥塞控制、数据中心和主干网中的异常检测提供了不可或缺的信息。相对于采样方法,由于高精度和速度,基于sketch的方法在网络测量中被广泛应用。

现有的测量解决方案主要集中在精度、速度和内存使用之间的权衡。最先进的大学还注重:一般性,即使用一个sketch来处理许多任务,并在这四个维度之间进行了良好的权衡。尽管现有工作有很大改进,但它们并没有集中于一个基本需求:无论流量特性(包括可用带宽、流量大小分布和包速率)如何变化,都能实现准确的网络测量。当网络出现问题时,测量尤其重要。

第一个流量特性是可用带宽。在数据中心,管理员更关心整个网络的状态,而不是单个链路或节点,即全网测量。在数据中心,管理员可以部署许多测量节点,这些节点定期向收集器发送sketches。测量需要可用带宽,这些带宽与用户流量共享相同的数据平面。在数据中心,经常网络拥塞,它可以在一秒钟内频繁发生,并且可以达到网络带宽的一半以上。在这种情况下,测量对于拥塞控制和故障排除尤为重要。不能等到可用带宽充足时才报告sketch,因为网络问题应及时解决;另一方面,网络测量不应妨碍网络。一个好的解决方案是以较小的精度损失主动压缩sketch从而减少带宽使用。这在文献中还没有出现过。除了拥塞时的被动压缩外,网络运营商还需要主动控制测量任务。例如,为了在维护或故障期间保持服务层协议(SLA),运营商倾向于减少测度,为关键的用户流量保留带宽。

第二个特征是包到达率,它是变化的,有时变化剧烈。例如,提出了一些路由协议或机制来调整包发送速率以优化网络性能。此外,当网络受到攻击(例如,网络扫描或DDOS攻击)时,数据包往往较小。在这种情况下,包到达率非常高,即使可用带宽很重要。软件平台处理Sketches的速度根据包速率而定。因此,当数据包速率突然变得更高时,它不能很好地工作,很可能无法记录重要的信息,例如攻击者的IP地址。因此,在这种情况下,需要通过主动丢弃不重要的信息来加快处理速度。

第三个特征是流大小分布。众所周知,大多数流都较小,被称为鼠标流,而很少的流是大的,被称为大象流。一个优雅的解决方案是准确地将大象流和鼠流分开,并使用不同的数据结构来存储它们。但是流的大小分布不同。有人可能认为我们可以预先预测流量traffic并为sketch分配适当大小的内存。在一小时内预测大象的流量可能很容易,但在秒或毫秒的时间尺度上却很难预测。因此,我们需要设计一个弹性(elastic)数据结构来动态地为象流分配适当的内存大小。

总结:sketch是可以改变的:要与带宽、包到达率和流大小分布相适应。除此之外,测量还有三个其他要求:1)通用、2)快速和3)准确。首先,每个测量节点通常要执行多个任务。如果我们为每个任务构建一个数据结构,处理每个通信包需要更新所有的数据结构,这会占用时间和空间。因此,所有任务都需要一个通用的数据结构。第二个。为了快速,每个包的处理时间应该是小而恒定的。第三,准确意味着在使用给定的内存量时,错误率应该足够小。在所有现有的解决方案中,没有一个解决方案是弹性的,只有两个已知的解决方案声称是通用的:UnivMon和FlowRadar。然而,我们在第7节中的实验结果表明,UnivMon实际上并不精确,而FlowRadar则不具有有效记忆。

解决方法:

在本文中,我们提出一个新的sketch。也就是弹性sketch。它由两部分组成:一重一轻。我们提出了一种分离技术,叫做“排斥法”,使大象流在重的部分,而鼠流在轻的部分。

为了使它“有弹性”,我们做以下的工作。1)为了适应带宽,我们提出了压缩和合并sketch的算法。首先,将sketch压缩到适应当前可用带宽的大小。然后,使用服务器来合并sketch,以减少带宽使用。2)当包到达率较高时,更改处理方法:每个包只访问重部分来记录大象流的信息,丢弃鼠流的信息。这样,我们可以以合理的精度下降为代价,获得更快的处理速度。3)由于大象流的数量不同且未知,我们提出了一种动态增加重部分内存大小的算法。

为了使我们的解决方案“通用化”,我们执行以下操作。1)为了通用各种测量任务,保留每个包的必要信息,丢弃鼠流的ID,这是基于观察到鼠流的ID消耗内存,但实际上是无用的。2)为了在平台上通用,我们提出了弹性sketch的软件和硬件版本,以使我们的sketch易于在软件和硬件平台上实现。考虑到这个平台的流行,做了一个P4版本的弹性sketch。

由于分离和丢弃了不必要的信息,我们的sketch是准确和快速的:实验结果表明,sketch比最先进的:UnivMon速度快446 45.2倍,误差率小2.0~273.7。

主要内容

我们提出了一个新的网络测量的sketch,即弹性sketch。与以往的工作不同,着重点在于sketch对带宽、包速率和流大小分布的适应能力。具有通用性,快速性和准确性。我们提出了两个关键技术,一个是分离鼠流和大象流,另一个是压缩sketch

在P4、FPGA、GPU、CPU、多核CPU和OVS六个平台上实现了sketch,来处理六种典型的测量任务。

实验结果表明,sketch在所有平台,六项任务中的每一项都显著优于最先进的平台。

背景和相关工作

在本节中,我们首先讨论自适应测量的挑战。第二,我们展示了如何实现通用性,最后,我们从文献中介绍了最著名的网络测量系统。

2.1适应性测量的挑战

如上所述。当网络不能很好地工作时,网络测量尤为重要。在这种情况下,流通特性变化很大,给测量带来了很大的挑战

首先,根据可用带宽以适当的大小发送测量数据是很困难的。当可用带宽很小时,发送一个大的sketch将导致长的延迟,并影响用户流量。所有现有的解决方案都会在开始测量之前调整内存大小。问题是如何使sketch大小小于可用带宽,特别是当网络不能正常工作时。一个简单的解决方案是为相同的网络流通构建不同大小的sketch,例如,可以构建两个内存大小为m和m/2的sketch s1、s2,当可用带宽很小时,在发送s2到收集器。一个更好的解决方案是只构建S1,然后快速地将其压缩成一半。压缩后的s1与s2达到相同的精度并不困难。然而,压缩后的s1要比s2实现更高的精度是很有挑战性的,也是本文的实际目标。

第二,使处理速度适应包速率是一个挑战,在拥塞或攻击期间,包速率可能会发生剧烈变化。现有的sketch通常具有恒定的处理速度,但处理一个数据包需要几个甚至10个以上的内存访问。设计目标是在包速率低的情况下对每个包进行2次内存访问,在包速率高的情况下进行1次内存访问。然而,当只使用一个内存访问时,要保持高精度是很困难的。

第三,在真实的网络流通中。流量大小分布是倾斜的、可变的。”歪斜意味着大多数流是鼠流,而少数流是大象流。为了实现内存效率,可以设法将大象流与鼠流分开。由于大象流通常比鼠流更重要,因此需要为大象流分配适当的内存大小。不幸的是,大象流的数量不能预知,很难预测,因此,动态地为大象流分配更多的内存是一个挑战。

2.2通用测量方法

我们主要关注以下网络测量任务,这些任务已经被广泛研究过

流大小估计:为任何流ID估计流大小。流ID可以是5元组的任意组合,例如源IP地址和源端口,或者仅是协议。在本文中,将一个流的包数作为流的大小。这也可用于估计每个流的字节数:假设最小数据包为64字节,假设到来的数据包为120字节,我们将其视为2个数据包。

重击检测:报告大小大于预定义阈值的流。

重大变化检测:报告两个相邻时间窗内流大小增加或减少超过预定阈值的流,以检测异常流通。

流量大小分布估计:估计流大小分布。

熵估计:估计流大小的熵。

基数估计:估计流的数目。

通用性的解决方法是使用一种数据结构来支持所有这些测量任务。如果已经记录了所有流的ID和大小,就可以处理这些任务。但是记录所有流ID是困难的,需要高的内存使用。我们观察到鼠流的流ID对于这些任务是不需要的。由于大多数流都是鼠标流,因此丢弃鼠标流的ID可以显著节省内存和传输带宽。为此,我们需要将大象流和老鼠流分开。为了解决这一问题,我们利用排斥的方法,提出了一种快速、精确的分离算法。最后,我们的sketch具有通用性和节省内存。

通用性的另一个含义是该算法可以在各种平台上实现。对于小公司来说,流量速度可能不高,在CPU上测量是一个不错的选择。对于大公司来说,通信速度可能非常高,应使用硬件平台进行测量,以赶上高速。因此,测量解决方案应该是通用的,可以在不同的平台上进行良好的性能权衡。

2.3网络测量系统

到目前为止,著名的测量系统包括UnivMon、Trumpet、openSketch、FlowRadar、SketchVisor、Marple、Pingmesh和Dream,其中,FlowRadar和UnivMon是通用的,因此是本文最相关的工作。

FlowRadar在Bloom过滤器和可逆Bloom查找表中记录所有流的ID和大小。为了减少内存的使用,作者提出了一种优雅的全网译码解决方案。但与sketch相比,它的内存使用率要高得多。

UnivMon建立在关键方法universal streaming上,保证了精度。UnivMon是第一个具有通用性的工作成果,具备良好性能。然而,它没有解决可变流量特性的问题。sketch是第一个依赖于单一数据结构的工作成果,它能够适应带宽、包速率和流量大小分布。

3弹性sketches

3.1 基础版本

基本原理:需要将大象流与鼠流分离。我们将分离简化为以下问题:给定一个高速网络流,怎样只使用一个桶来选择最大的流?由于内存太小,不可能得到准确的结果,因此我们的目标是达到高精度。我们的技术在方法上类似于排斥。具体来说,每个bucket存储三个字段:流ID、正投票数和负投票数。给定一个流ID是f1的传入包,如果它与桶中的流相同,我们增加正投票。否则,我们会增加负票,如果负投票数正投票数≥λλ是预定义的阈值,取出bucket的流,放入f1.

3.1.1数据结构和方法

数据结构:如图1所示,数据结构由两部分组成:一部分是重的部分记录象流,另一个是“轻的”部分记录鼠流。重部分Η是Η与哈希函数h关联的哈希表。重部分的每个桶记录流的信息:流ID(键)、正投票数(vote+)、负投票数(vote-)和标志。vote+记录属于此流的数据包数(流大小)。vote-记录其他数据包的数量。标志表明轻部分是否可能包含此流的正投票。

轻部分是一个CM sketch,一个CM sketch由d个数组组成(A1,A2,…Ad,)。每个数组与一个哈希函数相关联,由w个计数器组成。给定一个传入包,CM sketch提取流ID,计算d个哈希函数以定位每个数组中的计数器,并将d个计数器(d哈希计数器)增加1。查询类似于插入:在获得了d哈希计数器之后,发送最小值。

插入:给定一个流ID是f的传入包,将其哈希到bucket Η[h(f)%B],其中b是重部分中的bucket数。假设桶存储了(f1,vote+,,vote-,flag1),类似于排斥,如果f匹配f1,增加vote+,否则,我们增加vote-,然后根据两个投票决定是否驱逐f1。有以下四种情况:

情况1:桶是空的。插入(f,1,F,0),其中F表示桶中没有发生驱逐。插入结束。

情况2:f= f1,将vote+增加1

情况3:f ≠ f1且在vote-加1后vote-vote+,在CM sketch中插入(f,1):哈希计数器加1

情况4:f ≠ f1且在vote-加1后vote-vote+≥λ

通过将bucket设置为(f,1,T,1)来取出流f,并将流f1取出到CM sketch:将映射的计数器增加vote+。此时,标志设置为T(true),因为在选择f之前,流f的一些投票可以插入到轻部分中。

查询:对于不在重部分中的流,轻部分(CM sketch)发送流大小。对于重部分中的任何流f,有两种情况:1)f的标志为假。其大小为相应的vote+;2)f的标志为真。添加相应的vote+和CM sketch的查询结果

3.1.2精度分析

弹性sketch中流的估计值有以下误差范围,报告中提供了详细的证明。

定理3.1:让向量f=(f1,f2,…,fn)表示流的大小向量,其中fi表示第i个流的大小。给定两个参数ϵ和δ,让w=(e是欧拉数)和d=ln。让弹性的d(d是计数器数组的数目)和w(w是每个数组中计数器的数目)记录f流。流i的弹性报告大小fi

fififl<fif

为界,概率至少为1-δ,其中fl表示轻部分记录的子流的大小向量。

根据定理3.1、弹性的估计误差以fl为界,而不是Count-Min的f。事实上,流的大部分包都记录在重的部分,fl通常明显小于f。因此,当参数(d和w)相同时,弹性比Count-Min有更小的误差范围。

由于象流和鼠流的分离,大多数情况下弹性的精度都很高。1)重部分无误差:对于标志为假的流,记录的vote+是无误差的流大小;对于标记为“真”的流,记录的vote+是流大小的一部分,仍然没有误差,而另一部分有误差的记录在轻部分中。2)在轻的部分,不记录流ID,只记录鼠流的大小,因此可以使用许多小的计数器(如8位计数器),而传统的sketch使用一些大的计数器(32位计数器)来容纳大象流。因此,轻部分可以非常精确。总之,象流和鼠流的精度都很高。

在最坏的情况下—象流碰撞,弹性精度会下降:当两个或多个象流被映射到同一个桶中时,一些象流会被驱逐到轻的部分,可能使一些鼠流大大超出估计。

大象碰撞率:定义为由多个象流映射的桶数除以桶总数。事实证明,映射到每个桶的象流数量遵循二项分布。下面是大象碰撞率Phc的公式:

Phc=1-Hw+1e-Hw

其中H是象流的数量,w是桶的数量。当Hw=0.1或0.01时,大象碰撞率分别为0.0046和0.00005。

大象碰撞的解决方案:显然,降低哈希碰撞率可以降低大象碰撞率,因此,我们使用两种经典方法:1)使用多个子表;2)在一个桶中使用多个键值对。

3.2 可用带宽的自适应性

为了适应可用带宽,要在发送sketch之前对其压缩。大多数流是鼠流,因此轻部分的内存大小通常比重部分大得多。在本节中,将展示如何压缩和合并轻部分-CM sketch,之前也未有人做过压缩sketch。

3.2.1 sketch的压缩

为了压缩一个sketch,关键思想是首先将计数器分组,然后将同一组中的计数器合并到一个计数器中。

分组:如图2所示,给定一个大小为zw'*d的sketch A(宽度w=zw’,深度d,z是表示压缩率的整数)。分组方法如下:1)将A z等分。每个分区的大小是w’* d 。2)构建一个w’*d大小的sketch B。3)分区中具有相同索引的计数器(Aik[j]k=1, …,z)在同一组中,因此可以设置Bij=OPk=1zAik[j](1≤i≤d,1≤j≤z),其中op是合并运算器(例如max或sum)。为了查询sketch B,只需要将哈希函数hi(.)%w更改为hi(.)%w%w’,引理如下。

引理3.2:给定一个任意整数i,两个整数w和w',如果w可被w’整除,则(i%w)%w’=i%w’。

合并:我们提出两种合并方法。第一种方法是对每组中的计数器进行汇总,Bij=k=1zAik[j]。将此方法命名为和压缩(SC),如第2节所述,为了适应可用带宽,可以构建两个内存大小为m和m/2的CM sketches s1和s2。更好的解决方案是将s1压缩到一半。使用SC,压缩后的s1与s2具有相同的精度,且SC不使用s1记录的信息。第二种方法是最大压缩(MC)。使用“最大值”而不是“求和”,

Bij=maxAi1j,Ai2j,Ai3j,,,Aiz[j]

与SC相比,MC中的求和运算使用了S1中很多的信息,因而具有更好的精度。

最大压缩误差范围(MC):给出一个大小为d*zw的CM sketch,用MC把它压缩成d *w的大小。给定一个任意小的正数ϵ和一个任意流fj;,最大压缩后sketch的绝对误差是有以下范围:

其中nj是fj的实际大小,nj是fj的估计大小,N是数据包的总数。

关于SC和MC,有以下结论:1)在和压缩后,CM sketch的误差范围不变,而在最大压缩后,误差范围更紧。2)MC使压缩后的CM sketch有过估计误差,但没有欠估计误差。3)压缩速度快,实验结果表明,使用单指令多数据SIMD后压缩速度加快了5到8倍。4)不需要解压。5)压缩不需要额外的数据结构。

3.2.2 sketch的合并

图3:网络范围的测量。当网络很大时,服务器可以用来合并sketches

如图3所示,可使用服务器来节省带宽。每个服务器收到许多来自测量节点sketches,然后合并,将它们发送到收集器。为了合并,需要对所有sketch使用相同的哈希函数。如果sketch有共同的流ID,使用一个简单的方法---和合并;否则,使用一个新的方法,命名为最大合并。

和合并:给定两个相同大小d* w的CM sketch,和合并算法只需通过添加每两个相应的计数器来添加两个CM sketch。该算法简单快速,但不精确。

相同大小sketch的最大合并:算法命名为Maximum Merging(MM)。 如图4所示,给定两个大小为w*d的sketch A和B,再构建了一个大小为w * d的新sketch C。简单地设置Ci[j] =max {Ai[j],Bi[j]}(1≤i≤d,1≤j≤w)。 例如,在图4中,C1[2] = max{A1[2],B1[2]}= max{3,4}= 4。这种合并方法可以很容易扩展到多个sketch。 显然,在MM合并后,sketch仍然没有低估计误差。还可以合并两个不同宽度的sketch。

3.3对包速率的适应性

在测量节点中,通常有一个输入队列来缓冲传入的数据包。包速率(即每秒传入的包数)是可变的:在大多时候很低,但在最坏的情况下,非常高。当数据包速率较高时,输入队列将很快被填满,很难记录所有数据包的信息。为了解决这个问题,最先进的解决方案SketchVisor利用了一个专用的组件,即快速路径,以高包速率吸收过多的流量。但是,在最坏的情况下,它需要遍历整个数据结构,尽管有一个摊销的O(1)更新复杂性。这会产生大量的内存访问并降低性能。相反,我们提出的方法通常只需要一次内存访问。

我们提出了一种新策略,以在需要时提高插入速度。当输入队列中的包数量大于预定义的阈值时,让传入的数据包只访问重部分,以便只记录象流的信息并丢弃鼠流。重部分的插入过程几乎不变,除了下列情况:如果桶中的一个流f被另一个流f’替换,f’的流大小被设定为f的流大小。因此,每次插入需要在重部分中一个桶的指针。当数据包速率下降时,再使用以前的算法。

该策略以稍微降低精度为代价来提高速度。当激活此策略时,不会丢弃轻部分,只是在插入时不更新,仍将在查询使用。这意味着只有在高数据包速率发生时,轻部分记录的信息才会丢失。在大多数情况下,这种策略对查询的准确性没有太大的影响,因为包速率通常很低。

3.4对流大小分布的适应性

流大小分布的一个关键指标是象流的数量。有时它的变化很大,很难确定重部分的大小。为了解决这个问题,我们需要使重的部分适应流量分布的变化。我们提出了一种动态加倍重部分的技术。工作原理如下。最初,为重部分分配一个小的内存。随着插入越来越多的象流,重部分会满。定义了一个阈值T1。如果一个传入的包被映射到一个所有流都大于T2的桶中,就认为该桶已满。如果满桶的数量超过了一个阈值,那么重部分是满的。当重部分满时,进行以下复制操作:

只复制重部分,并将重部分与副本合并为一个。哈希函数从h(.)%w变为h(.)%(2w)更改。这个复制操作可由引理3.2证明。复制操作后,应移除桶中一半的流。删除操作可以逐步执行。对于每次插入,可以检查映射桶中的所有流,平均有一半流没有映射到桶并且可以被删除。即使某些bucket最终可能没有被清除,这不会对算法产生负面影响。

示例:如图5所示,我们演示了如何在复制后插入流为f2的传入数据包。计算h(f2)%8并得到映射的桶,其中流f3是。计算h(f3)%8=6,发现它应该被映射到复制部分的bucket。因此,我们用f3代替f2。

图5:弹性重部分的复制。重部分原桶数是4,复制后变为8。

开销:由于重的部分通常很小(例如150KB),复制150KB数组的时间开销通常很小,可以忽略不计。

除了使重部分变大,还可以压缩重的部分。压缩方法与最大压缩类似(MC,第3.2.1节)。与MC不同的是,在重部分,合并buckets(key,vote+,flag,vote-)而不是抵消。以合并两个桶为例:给定两个桶,对于桶中的两个键,在弹性sketch中查询它们的频率,保留较大的一个,将另一个放入轻部分中。压缩操作赋予弹性sketch在需要时主动释放内存的能力。

4优化

4.1优化轻部分

使用d=1的CM sketch:对于CM sketch,关键点是深度d,即数组的数量。实际上,如果使用d=3或4,可以获得更高的精度。但设置d=1有以下两个原因:1)我们更关心实现的可行性和速度,而不是准确性;2)sketch的精度已经很高。

4.2弹性草图的硬件版本

如上所述,大象碰撞的第一个经典解决方案是在重部分使用几个子表。每个子表与基本版本的重部分完全相同,但与不同的哈希函数关联。大象碰撞率随子表的数量线性增加呈指数递减。由于每个子表具有相同的操作,因此此版本适用于硬件平台。

示例:插入和查询操作与基本版本略有不同,这里我们使用例子来显示图6中的差异。1)为在第一个子表中插入f8,vote-将增加1,f8将插入下一个子表。2)为了在第一个子表中插入f9,将取出流大小为7的f4,并插入下一阶段。在第二个子表中,f4被映射到bucket。在这种情况下,只需将值从2增加到9。3)查询一个流,因为它可能出现在多个重的部分中,需要添加所有的值。

实验结果表明,使用4个子表是在某些硬件实现(如p4switch)的可行性和准确性之间的一个很好的权衡。

4.3弹性sketch的软件版本

如上所述。大象碰撞的第二个经典解决方案是:让重部分中的每个桶存储多个流。这允许在一个桶中记录多个大象流,因此大象碰撞率显著下降。这样,桶的大小就大于一个机器字,从而使重包的访问成为瓶颈。幸运的是,这个过程可以通过在CPU平台上使用SIMD来加速,因此这个版本适合于软件平台。与基本版本的区别在于:1)每个bucket中的所有流共享一个vote-字段;2)将映射bucket中最小的流逐出。

示例:我们使用图7中的两个例子来显示此软件版本和基本版本之间的差异。1)给定流f8的传入数据包,首先将其哈希到一个桶中。桶满了,没有流f8。将vote-从10增加到11。最小流是大小为11的f6。因为11≤11*λ=11*8,不移除流f6,而是将f8插入轻部。2)给定一个流f9的传入包,首先将其哈希到一个bucket中,bucket是满的,没有f9。将vote-从55增加到56,因为56≥7*λ=7*8,将流f4取出到轻部分。取出后,将hashed bucket设置为(f9,1,T),并将vote-设置为0。

Elastic Sketch: Adaptive and Fast Network-wide Measurements相关推荐

  1. #Reading Paper# APG: Adaptive Parameter Generation Network for Click-Through Rate Prediction

    #论文题目:APG: Adaptive Parameter Generation Network for Click-Through Rate Prediction(APG:点击率预估中的自适应参数生 ...

  2. GCN代码超详解析Two-stream adaptive graph convolutional network for Skeleton-Based Action Recognition(三)

    代码地址https://github.com/lshiwjx/2s-AGCN 本篇解析对应 2s-AGCN/graph/ntu_rgb_d.py ,用于创建NTURGB-D对应的图结构,以及2s-AG ...

  3. GCN代码超详解析Two-stream adaptive graph convolutional network for Skeleton-Based Action Recognition(二)

    代码地址:https://github.com/lshiwjx/2s-AGCN 本篇解析代码为[2s-AGCN/model/aagcn.py] import mathimport numpy as n ...

  4. GCN代码超详解析Two-stream adaptive graph convolutional network for Skeleton-Based Action Recognition(一)

    代码地址:https://github.com/lshiwjx/2s-AGCN 这个图用于说明人体关键节点的定义及其连接方式 这个文件是根据NTURGB-D中关键点的定义计算骨骼长度 所以最终得到的数 ...

  5. 阿里基础设施技术亮相SIGCOMM 2018

    8月21日,一场在匈牙利举办的关于未来网络技术走向的SIGCOMM 2018学术顶级会议获得了来自亚洲.北美和欧洲科技界人士密切关注.阿里巴巴在会上完整展示了网络软硬件技术栈和阿里云飞天虚拟网络系统- ...

  6. 图卷积网络 GCN Graph Convolutional Network(谱域GCN)的理解和详细推导

    文章目录 1. 为什么会出现图卷积神经网络? 2. 图卷积网络的两种理解方式 2.1 vertex domain(spatial domain):顶点域(空间域) 2.2 spectral domai ...

  7. 使用 Web 高速缓存减少网络流量 / Reducing network traffic with Web caching

    使用 Web 高速缓存减少网络流量 / Reducing network traffic with Web caching English Version Reducing network traff ...

  8. 【U-HRNet2022】U-HRNet: Delving into Improving Semantic Representation of High Resolution Network for

    U-HRNet: Delving into Improving Semantic Representation of High Resolution Network for Dense Predict ...

  9. NE(Network Embedding)论文小览

    #NE(Network Embedding)论文小览 自从word2vec横空出世,似乎一切东西都在被embedding,今天我们要关注的这个领域是Network Embedding,也就是基于一个G ...

  10. 推荐|NE(Network Embedding)论文小览,附21篇经典论文和代码

    文章转自:NE(Network Embedding)论文小览,附21篇经典论文和代码 自从word2vec横空出世,似乎一切东西都在被embedding,今天我们要关注的这个领域是Network Em ...

最新文章

  1. “CTO嫌弃我读书太少!” 假期里如何更高效的阅读?老K的3张专辑文章,读个痛快!...
  2. 【机器学习】树回归和聚类算法解析和应用
  3. Schmid Telecom选择StoreAge SVM实现数据镜像保护
  4. 《剑指offer》-数组中只出现一次的数字
  5. Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)
  6. python实验收获_python实验课代码心得
  7. HALCON示例程序inspect_bga.hdev测量bga焊点缺陷
  8. 数据库:SQL 语法速成手册,建议新手收藏!
  9. Springboot初次学习
  10. 将chart放入panel中出现滚动条_聊天场景在web前端开发中的体验与优化
  11. PNG免扣苹果IPHONE手机模型样机,让一切简单一点!
  12. mysql知识思维导图
  13. 用RichEditableText做的一个代码编辑器
  14. 线性回归-误差项分析
  15. 测序深度和覆盖度(Sequencing depth and coverage)
  16. 正交解调 matlab,13.1.1 正交调制解调
  17. 大雨瓢泼!多地告急!告诉你雨天行车的全部秘密。
  18. 拼点游戏(类似于田忌赛马)
  19. 【珍藏版】⼤数据中台架构及解决⽅案
  20. 克里斯·保罗:永不停滞的冠军梦

热门文章

  1. 基于FPGA的Yolov4 tiny目标检测网络加速器
  2. jQuery实现二级下拉菜单
  3. java js 二级联动下拉列表_最简单js代码实现select二级联动下拉菜单
  4. js树形数据处理--树形数据转换,获取指定类型节点下的所有子节点或指定类型下的所有父节点
  5. Failed to build sentencepiece
  6. ubuntu + windows双系统默认启动项修改方法
  7. Jmeter-界面功能介绍
  8. 易趋携手电气风电,推进产品研发项目管理能力进阶
  9. 初中英语语法(019)-连词
  10. 又是一年春来到,祝大家有个好的开始。