计算机网络的测量指标的制作方法

文档序号:23068548发布日期:2020-11-25 17:56阅读:168来源:国知局
计算机网络的测量指标的制作方法

本发明针对一种测量指标的方法和系统,并且优选是计算机网络中的测量指标,诸如计算机网络管理和服务质量的测量指标。



背景技术:

在计算机网络管理以及许多其他应用领域中,通常测量不同的指标,例如延迟、抖动、数据包丢失和吞吐量等。

在us20170093677“methodandapparatustosecurelymeasurequalityofserviceendtoendinanetwork”中,描述了一种用于安全地测量网络中端对端的服务质量(qos)的方法和装置。其特征在于一对端点,该对端点配置为检测数据包,该数据包被标记用于qos测量,将时间戳(使用安全时钟)与此类数据包相关联,并将时间戳以及数据包标识元数据报告给外部监视器。

在us20170257287a1“real-timequalityofservicemonitoringapparatusandmethod”中,描述了实时qos监视装置。其特征在于:应用注册单元,其被配置成为qos测量注册至少一个监视目标应用程序;函数浏览器单元,也称为函数查找器,其配置为检测应用程序代码中的用户定义的函数;循环语句浏览器单元,其配置为检测循环语句;用户定义的位置浏览器单元,其配置为检测用户定义的位置;以及心跳生成器,配置为生成多个心跳调用以对应于函数查找器所检测的函数。

在us8958327b2“passivenetworklatencymonitoring”中,描述了一种用于测量网络中节点的每个端口的驻留延迟以及网络中每对相邻节点之间的对等延迟的方法,从而使得可以从这些驻留延迟和对等延迟中确定网络中每对相邻节点之间的延迟。该方法包括使用所确定的延迟为通过网络中的节点的数据包进行路由加权。每个节点包括具有可切换连接的交换机。其被控制器配置成从输出端口将探测包发送到邻节点中的端口。探测包可以包括时间戳和标识符。

在us7260627b2中,描述了“real-timemeshmeasurementsystemstreamlatencyandjittermeasurements”。描述了一种用于精确测量关于移动通过网络的信息包的系统延迟和延迟抖动的方法。该方法的特点在于使用设置为通用标准的实时时钟来在通过源和目的地之间的网络的路上对信息包进行时间戳记。然后通过分析带时间戳的数据包来确定延迟和延迟抖动。



技术实现要素:

虽然以上背景技术中提到的专利以及许多其他现有技术公开描述了执行测量以获得数据点的不同方式,但现有技术完全集中在获得各个数据点的方法上。

这与本发明的一个方面不同,本发明的该方面不集中于如何获得各个数据点,而是集中于如何收集数据点的集合或样本并将其有效地上传到诸如服务器之类的计算设备以执行高级统计分析,例如计算这些样本的秩统计。

本发明的一个方面是执行高级统计分析、例如秩统计,并且特别是如何从数据源计算和表示分位数信息,由此可以高精度地计算秩统计而无需访问整个数据资源。

根据本发明的实施例,提供了一种测量计算机网络的指标的方法,包括以下步骤:

-从多个数据源收集数据点

-其中,从每个数据源收集的数据点的集合是在对于每个数据源和数据点的集合可以是唯一的采样周期内收集的。

-其中,在每个数据源的每个整个采样周期中收集称为样本的数据点的集合,

-其中,每个数据源都与分位数信息类型相关联,该分位数信息类型指定如何对分位数信息实例进行处理和编码以及解码,

-其中,在每个数据源的每个采样周期开始时执行重置,以产生空的分位数信息实例,

-其中,在整个采样周期内,通过重复更新关联的分位数信息实例,对每个数据源的收集的数据点进行处理,

-其中,当采样周期结束时,每个数据源的分位数信息实例被压缩并传输到计算设备或服务器以进行进一步处理。

在本文中,术语“分位数信息”被定义为关于要上传并存储在诸如服务器的计算设备上的每个样本的最少信息片段。

在本文中,术语“进一步处理”包括高级统计分析,诸如计算来自与各个样本相关联的分位数信息实例的样本的秩统计以及分位数信息实例的聚合,以使得能够对聚合的样本计算秩统计。

在本文中,术语“实例”表示通常在计算机程序的运行期间存在的任何对象的具体出现。

在本文中,术语“从设备”、“测试代理”和“探针”是如下相关的:从设备与服务器相关联,负责执行测量并因此用作探针,并且在一些实施例中被实施为测试代理。

在本文中,术语“服务器”是指经由计算机网络与一个或多个从设备连接的设备,其负责从每个这样的从设备接收关于测量的信息,并使该信息可用于进一步处理。服务器构成“计算设备”,并且在一些实施例中可以被实施为“控制中心”。

在本文中,关于在获得的数据点上执行的操作的术语“即时”是指在获得数据点之后立即执行该操作。

在本文中,术语“采样周期”、“采样时间周期”、“样本周期”和“样本时间周期”及其变体是等同的。

根据本发明的各个方面和实施例,根据本发明的解决方案提供了对分位数信息的高效压缩、解压缩、上传和聚合,以及从原始和聚合的分位数信息来估计秩统计。

首先,将在公开本发明的各个方面和实施例之前解释所使用的各个术语的定义。

典型地,根据本发明的各个方面,数据点由从设备或探针周期性地收集,并且在采样周期期间从数据源测量和/或收集的数据点的集合构成样本。各个测量之间的时间段以及采样周期的长度可根据测量的指标、进行测量的网络的部分中的通信量速率以及其他因素而变化。采样周期是支持数据的统计分析的最小时间帧。在每个采样周期结束时,样本(其可以是整个样本,但通常不是整个样本)的表示被上传到计算设备(例如服务器)以进行进一步处理。

数据点可以是值、在采样期间从数据源收集的测量值,并因此构成样本。采样周期以及每个样本包含多少个值可以在不同数据源之间以及在来自同一数据源的不同样本之间而有所不同。

从每个样本、通常是从每个数据源产生分位数信息的实例,或者换句话说,“分位数信息实例”。分位数信息是要上传到服务器的样本的优选表示形式,其使得能够在不访问完整样本的情况下就可以由样本估计秩统计信息。

尽管在优选实施例中,通过在整个采样周期内用收集的数据点连续更新分位数信息来由从设备生成分位数信息,并在采样周期结束时将其上传到服务器,但是在可选实施例中,整个样本在采样周期结束时被上传到服务器,服务器由此从完整样本生成分位数信息实例,或者将每单个数据点被实时上传到服务器,该服务器由此通过在整个采样周期期间用收集的数据点连续更新它来生成分位数信息实例,或者是在这两种极端之间的任何方案。

分位数信息具有类型,因此典型地,每个数据源都与分位数信息类型相关联。

每个分位数信息的实例典型地被压缩,并且被上传到服务器。通常,压缩的整体方法(例如所描述的方法)在不同数据源之间是相同的,但不一定必须如此。在一般情况下,典型地,每个数据源都因此必须与一种压缩方法相关联。当在服务器上存储分位数信息的实例时,一些附加信息也可以被存储以促进以下分位数估计的计算。这在不同数据源之间可能会有所不同,但如果确实如此,则每个数据源还必须与有关如何完成此操作的信息相关联。特别地,如果使用了使用选定分位数的预先计算表的方法,则分位数选择作为配置的一部分典型地需要与数据源相关联。

为了节省服务器处的空间,根据一个实施例,分位数信息实例被聚合。聚合的调度由聚合方案定义,聚合方案在不同的数据源之间可能有所不同。因此,典型地根据一个实施例,每个数据源需要与聚合方案相关联。

服务器的作用典型地是提供样本和样本的聚合(聚合是超级样本,其中来自多个单独样本的信息进行组合)的统计分析。这样的分析包括但不限于极值(最小值、最大值),平均值、低于/高于/介于预定义阈值(阈值计数器)之间的数据点的数量以及百分位数。

关于单独样本和样本的聚合,极值、平均值和阈值计数器典型是直接的。

·对于极值,从设备可以简单地在每个采样周期内记录最小值和最大值,并在采样周期结束时将其上传到服务器。

·对于平均值,从设备仅需要记录样本的数据点的总和及数量,并在采样周期结束时将其上传到服务器。

·对于阈值计数器,从设备仅需要记录多少个低于/高于/介于阈值之间的值,并在采样周期结束时将其上传到服务器。

根据一个实施例,通常还可以直接在服务器上聚合极值、平均值和阈值计数器。两个样本的聚合的极值是相应样本的多个极值中的极值,并且两个样本的平均值是其总和之和除以值的数量之和,两个样本的阈值计数器是相应样本的阈值计数器之和。

挑战通常在于处理秩统计,例如百分位数。即使我们假设从设备具有足够的计算能力来运行线性时间选择算法以在采样周期结束时计算预定义(例如1%、10%、25%、50%、75%、90%和99%)的百分位数的集合并将其上传到服务器,服务器也无法仅通过从各个样本中选择百分位数来计算聚合样本的百分位数。

为了说明这个问题,让我们考虑三个样本x、y和z,每个样本由21个数据点组成,其中x、y和z分别是x、y和z的中位数。

仅给出x、y和z,而不访问x、y和z中的任何其他数据点,我们如何计算并集x+y+z的中位数?

如果x<y<z,则很容易猜测y是并集的中位数的最佳估计,因此应给出有限的可用信息。我们肯定知道有21个数据点保证小于y,且有21个数据点保证大于y。

但是,还有20个与y不相关的数据点,以及20个与x和z均不相关的数据点。如果与y不相关的所有数据点均小于y,则41个数据点小于y,且21个数据点大于y,因此使得y是相当糟糕的中位数估计。另一方面,如果与x不相关的所有数据点都小于x,则31个数据点分别小于和大于x,这使x成为完美的中位数估计。

显然,如果根据估计值来计算估计值,则估计质量将进一步下降,并且对于每个聚合级别,估计质量都会变得更差。

精确计算聚合样本的百分位数需要将每个样本的整体或每个出现值的至少一个(值、频率)对上传到并存储在服务器上。

但是,这可能不可行,原因如下:

·在从设备和服务器之间发送样本的成本太高。

·由服务器处的样本计算百分位数的成本太高。

·在服务器处存储所有样本的成本太高。

·通常情况下,聚合样本不会减少存储需求。

因此,根据一个目的,本发明要解决的技术问题是找到一种识别最少信息片段的方法,在此我们将其称为关于每个样本的分位数信息,以上传并存储在服务器上。我们将“a/b分位数”(其中a<=b)定义为比百分位数(其只是分位数的一种特殊情况—“百分位数”等于“a/100分位数”)更通用的秩统计。分位数信息通常必须支持对百分位数的估计,使得计算需要比由样本计算百分位数更少的计算资源。通常还必须有可能聚合来自几个样本的分位数信息,以使聚合的分位数信息正确地表示所有聚合的样本,并且同时不需要比关于单个样本的分位数信息更多的存储空间。只有这样,才有可能实施这样一种方案,即我们可以为最近的样本提供较高的时间线粒度分析,而为过去的样本提供较低的粒度时间线分析。

示例:在当前分钟内提供基于秒的百分位数,在当前小时内提供基于分钟的百分位数,在当前天中提供基于小时的样本,等等。当一分钟过去后,将60个基于秒的分位数信息的实例聚合为基于分钟的分位数信息,当一个小时过去后,将60个基于分钟的分位数信息的实例聚合为基于小时的分位数信息,而当一天过去时,将24个基于小时的分位数信息的实例聚合为基于天的分位数信息。使用此方案,服务器需要记录当前分钟的最多60个分位数信息的实例、当前小时的60个分位数信息的实例、当前一天的24个分位数信息的实例和当前月的约30个分位数信息的实例。即使为最近的样本提供了完整的基于秒的粒度,这也给出一个月的总数少于120个的分位数信息的实例。如果没有发生聚合,则需要在30天内存储差不多260万个分位数信息的实例,这比上述聚合方案产生的120个实例要大得多。

要使该方案有效,还必须考虑分位数信息的一些其他方面,这进一步增加了眼前的技术挑战。

通常,根据分位数信息计算出的百分位数/分位数信息是估计值,因为100%精确的百分位数需要完整的样本,如上所述,这些样本太“昂贵”而无法上传到服务器,因此无法被聚合以节省服务器处的存储。分位数估计值的精确性是以绝对和相对的秩误差来测量的。绝对秩误差是估计的分位数和真实的分位数之间的秩差的绝对值,而相对秩误差是绝对秩误差除以样本的大小。例如,如果1000个数据点中的中位数估计值具有秩400,即恰好399个数据点的值较小,则绝对秩误差为500-400=100,相对秩误差为100/1000=0.1=10%。

分位数性估计值应尽可能精确,并且自然会在精确性和存储成本之间进行权衡。即,我们允许的分位数信息的实例的大小越大,估计值就越精确。因此,对于每个数据源,必须单独地配置分位数信息,以允许用户实现适当的权衡。这种配置需要包括数据源的范围和粒度。此外,需要用于分位数信息的压缩/解压缩方案,以向服务器提供高效的上传和存储。

对于给定的数据源,我们通常对值的范围和测量精度以及是否存在负值,正值或两者都有一些想法。

例如,我们可能知道:延迟的测量不能比1微秒更精确,即四舍五入到最接近的微秒,并且10微秒以下的延迟以及2秒以上的延迟极为罕见。

此外,鉴于可能需要在不进行进一步的舍入的情况下测量和记录小的值,与小的值相比,接近最大值的测量值具有非常小的相对舍入误差。

例如,对于1微秒的粒度,10微秒的测量值的相对舍入误差是1/10=10%(假设通过截断来舍入),而2秒的测量值的舍入误差是1/2000000=0.00005%。这表明我们可以在不增加最大相对舍入误差的情况下对大值进行进一步舍入。

根据本发明的优选实施例,使用了经优化以平衡测量上的相对误差并同时减少数据量的分位数信息表示。在该特定实施例中,分位数信息的主要表示包括:指数的区间,其限定具有最小和最大的绝对值的值,以及表示有效数字或尾数的位的固定数量。对于尾数(其可以由可用的位表示)和具体指数区间内的指数的每种组合,我们有计数器来记录样本的多少个数据点被舍入为由相应尾数和指数的组合形成的值。在(尾数,指数)对与计数器之间存在双射映射,并且我们有时将计数器称为箱(bin)或桶(bucket)(例如,对多少个值落入箱进行计数)。结果是一个直方图,其中每个频率计数器都会记录有多少个值被舍入为由与该计数器相关联的(尾数,指数)对形成的值。

当然,用于不同数据源的分位数信息可能具有不同的指数区间和可用于尾数的位。这些参数与指示负值或正值或两者的标志一起,与文本串(通常是标识数据源的文本)一起构成分位数信息的类型。

服务器将知道每个数据源的分位数信息类型。

因此,在完成每个样本后,只需上传计数器数组的压缩版本以及数据源的标识符就足够了。探针维护(至少)两个分位数信息的实例,以能够在每个新的采样周期内以新的/重置的(例如,所有计数器均被清零)实例开始,同时在其被重置之后保持该实例免受之前的采样周期的影响,直到已确认上传到服务器为止。

尽管本发明的优选实施例使用经优化以平衡测量值上的相对误差的分位数信息表示,但是它不限制本发明的范围和精神。本领域技术人员将能够使用分位数信息的替代表示,其中使用被设计为满足其他优化标准的其他方法(或函数)将数据点映射到箱索引。本领域技术人员将进一步认识到,这样的替代表示和映射函数被包括在类型信息中,并且不同的分位数信息实例可以使用完全不同的类型以及类型表示。

典型地,使用时间戳将压缩的分形信息的实例存储136在服务器上的数据库中,该时间戳将以分位数信息表示的采样的时间周期标识为密钥,并将压缩的分形信息标识为二进制数据(二进制大型对象或blob)。

典型地,表示相同数据源的两个或更多个原始的分位数信息的实例的聚合是通过以下方式实现的:首先对它们进行解压缩,然后通过从原始的分位数信息的实例添加相应计数器来一个接一个地计算新的聚合计数器。注意,除了时间戳可以表示更长的时间间隔并且计数器具有更高的值之外,没有什么可以区分聚合的分位数信息和非聚合的分位数信息。因此,直接对聚合执行任意级别的聚合,这是该表示的全部目的。但是,如果聚合的目的只是为了计算累积时间段的百分位数,则可以在完成计算时丢弃该聚合,而如果目的是要将节省数据库中的存储,则删除原始的分形信息的实例并压缩聚合,并插入表示聚合的间隔的新时间戳。

典型地,由分位数信息计算分位数很简单。首先,从数据库中检索分位数信息并进行解压缩。然后,找到先前计数器之和小于或等于目标秩的最大计数器,然后由对应于该计数器的(尾数,指数)对来计算分位数估计值。

现在请参考附图。

附图说明

图1是示出本发明的示例性实施例的流程图,

图2是示出本发明的示例性实施例的流程图,

图3是示出聚合的流程图。

具体实施方式

本发明的实施例以及参考附图的以下描述为本发明的上述描述增加了相当多的细节。其目的是为本领域技术人员提供足够的信息以实施本发明的优选实施方案。该详细描述不以任何方式限制本发明的范围,并且本领域技术人员将知道如何概括该具体实施方式以获得权利要求的完整范围。

分位数信息表示

图1示出了本发明优选实施例的主要操作。在第一步骤中,从设备在采样周期s的开始时以用于所讨论的数据源的适当类型的空的分位数信息实例启动105。此后,从数据源重复收集110数据点p并且通过用数据点更新分位数信息实例来立即处理每个数据点,直到采样周期结束并且来自样本的所有数据点p都已被处理120。

本文中的处理120意思是通过用每个数据点更新120分位数信息实例f。当采样周期s结束121时,表示样本的分位数信息实例f被上传122到服务器以进一步处理130。

图2示出了本发明的替代实施例100’。在第一步骤中,在采样周期s期间从数据源收集110数据点的集合。数据点的集合构成如上所述的样本。每个样本被上传122到服务器,该服务器立即从完整样本中产生130用于所讨论的数据源的适当类型的分位数信息实例f。此后,分位数信息实例f可用于进一步处理130。

根据本发明的又一个实施例。在第一步骤中,服务器以用于所讨论的数据源的适当类型的空的分位数信息实例y100开始105。在整个采样周期s内,从数据源重复收集110数据点,然后将每个数据点一个接一个地或者以数据点p的集合发送到服务器,直到采样周期结束121。当服务器接收单个数据点或者数据点的集合时,其立即用这些数据点更新分位数信息实例f。

在采样周期s结束时,分位数信息实例f表示整个样本,并可用于进一步处理130。

根据一个实施例,两个或更多个分位数信息实例f1、f2...fm与每个数据源相关联300。

-其中,对于每个数据源,在每个采样周期期间只有一个分位数信息实例f是主动的,

-其中,对于每个数据源,非主动的分位数信息实例在每个采样周期期间都是被动的,

-其中,对于每个数据源,在采样周期(s)开始时,主动的分位数信息实例f空是空的105,

-其中,对于每个数据源,被动的分位数信息实例被发送和/或存储以用于进一步处理130,

-其中,对于每个数据源,可以在每个采样周期结束时回收至少一个被动的分位数信息实例,以在随后的采样周期内变成空的主动的分位数信息实例。

典型地,从一个或多个数据源收集数据点110由测试代理来执行,

-其中,在整个采样周期s中,每个测试代理在收集与数据源相关联的每个数据点之后立即更新120与每个数据源相关联的分位数信息实例f,

-其中每个测试代理在每个采样周期(s)结束后将分位数信息实例(f)上传122到控制中心,以供进一步处理。

根据一个实施例,进一步处理130的步骤包括执行132高级统计分析,并且其中,分位数信息使得在不访问完整样本的情况下能够从样本中估计134秩统计。

根据一个实施例,收集110的步骤包括采样时间周期,其中,各个测量之间的时间段以及采样周期的长度根据以下一项或多项而变化:测量的指标,进行测量的网络的一部分中的通信量速率。

根据选择分位数信息表示以平衡相对误差的任何实施例,数据点可以四舍五入并通过(尾数、指数)对来表示,但是我们还没有解释该指数使用哪个底数,也没有解释(尾数、指数)对如何映射到二进制或计数器。

根据各种实施例,该表示有几种选择,但是最明显的两个是底数2和底数10。在我们的优选实施例的实施中,我们已经选择将尾数表示为是大于或等于1/2且小于1的数字的归一化分数。在我们已经用来将优选实施例实施为计算机程序产品的c编程语言中,有一个函数frexp可用于将原始的双精度浮点数字转换为归一化分数和相应的指数,以使分数*2^指数等于原始数字。分位数信息类型包含以下参数:

name表示类型的名称的文本串

sigbits用于表示尾数的有效位的数量。

expmin最小的2的指数次方

expmax最大的2的指数次方

负标志位指示数据点是否可以低于零

正标记位指示数据点是否可以大于零

根据以上基本参数,我们计算出以下辅助参数:

signum=2^sigbits归一化分数的不同尾数值的数量(四舍五入后)。

expnum=expmax-expmin+1指数的不同值的数量。

absmin=1/2*2^expmin我们可以表示的>0最小绝对值。

absmax=(1-epsilon)*2^expmax可表示的最大绝对值,其中epsilon是可表示的>0的最小值。

如果负=假,则rawmin=0,否则

rawmin=-((signum/2)*expnum-1)最小的原始计数器(箱、桶)索引。

如果正=假,则rawmax=0,否则

rawmax=((signum/2)*expnum-1)最大的原始计数器索引。

如果负=正=真,则rawnum=signum*expnum-1,否则

rawnum=signum/2*expnum计数器/箱/桶的数量。

一旦计算了这些辅助参数,就可以直接将每个数据点的值映射到范围[rawmin,rawmax]内的原始索引(index),然后添加-rawmin以获得实际的计数器/箱/桶索引。

计数器对于值的index计算如下:首先,针对absmin和absmax对该值进行检查并限制以确保其位于这些之间而不会更改符号。然后,使用frexp根据值计算分数和指数。接下来是通过以下方式压缩分数:如果分数<0,则加1/2,如果分数>0,则减1/2,然后将结果存储在compress中。然后通过以下方式来计算rawindex的第一部分:将compress乘以signum,如果compress<0则将-1/2加到乘积,或者如果compress>0则将1/2加到乘积,并且然后最后截断小数以获得整数。通过计算(exponent-expmin)*signum/2可以获得rawindex的第二部分。然后通过以下方式获得最终的rawindex:如果compress<0,则从第一部分中减去第二部分,或者如果compress>0,则将第二部分加到第一部分。通过将-rawmin加到rawindex来完成最终的index的计算。

分位数信息更新与维护

除类型和辅助参数外,分位数信息还由rawnum计数器的数组表示。通过如上所述简单地计算index并且然后将与index相关联的计数器,即counter[index]加1,可以实现在新数据点可用时更新分位数信息。

除更新外,已确认对分位数信息的唯一其他维护要求其在已上传到服务器时重置所有计数器。这可以通过循环遍历所有计数器并将它们设置为零来轻松实现。

分位数估计的计算

分数计算的主要操作是首先使用以下公式计算目标秩:rank=a/b*n,其中a和b是分数参数,n是分位数信息表示的数据点的数量。

并非参数的所有组合都有效。例如,计算10个数据点的1/1000分位数是没有意义的。至少,n必须大于或等于b,假设a/b是不可约的,但更有意义的是要求n至少比b大10倍。此外,可以(以合理精度)计算的哪些分位数也取决于rawnum。如果计数器太少,则分位数估计将变得非常粗略。

假设参数是确定的,则通过找到index可以实现分位数估计的计算,使得sum[index-1]<rank<=sum[index],其中sum[index]=counter[0]+...+counter[index]。

可以使用蛮力(bruteforce),即在求和直到总和超过rank之前循环遍历计数器,或者通过使用互补的数据结构以加快搜索来执行该计算。

如果将分位数信息压缩到最大,即在压缩表示中不包含用于加快分位数计算的附加信息,并且仅执行一次分位数计算,则蛮力是最有效的方法。

但是,如果需要计算几个分位数估计,则构建互补数据结构以加快计算通常会更有效。这样的补充数据结构的压缩表示构成用于加快分位数信息的压缩表示中包括的分位数计算的附加信息。

现在参考图3。

最简单的互补数据结构是聚合的求和数组aggrsum,其大小等于rawnum的平方根四舍五入到最接近的整数。计数器数组在逻辑上划分为大小相等的子数组,除了最后一个子数组外,其中每个子数组对应于aggrsum的一个元素,因此aggrsum[0]等于子数组0的计数器的总和,并且aggrsum[uberindex]等于aggrsum[uberindex-1]加上子数组uberindex的计数器的总和。

使用聚合的求和数组来计算分位数估计是通过以下方式实现的:首先找到uberindex,使得aggrsum[uberindex-1]<rank<=aggrsum[uberindex],并且然后直接跳转到子数组uberindex来使用上述方法在那里完成搜索。

使用聚合的求和数组来计算分位数估计的计算复杂度(即工作量)与rawnum的平方根成正比,因为聚合的求和数组的大小和计数器数组的每个子数组的大小都大致等于rawnum的平方根。将其与在不使用聚合的求和数组的情况下执行计算时的计算复杂度(其与rawnum成正比)进行比较。使用一级聚合的求和数组的存储开销与rawnum的平方根成正比。

请注意,也可以在不使用底部处的求和数组的情况下,直接使用计数器来使用聚合的求和方法,因为我们可以使用聚合的求和数组来快速跳转到计数器数组,然后开始累积以找到目标秩,同时确保我们将只需要处理计数器数值的一小部分。实际上,根据一个实施例,该方法是优选的,因为完整的求和数组在压缩其时会引起一些问题。

可以将这种方法推广到个更多的级别,并且以使用一些额外的存储为代价来更多地加快计算速度。具有两个聚合的求和级别,选择子数组的大小作为rawnum的立方根,并且选择子数组的数量作为rawnum的立方根的平方。在中间级别处,存储由rawnum的立方根的平方构成的聚合的求和数组,并且在最高级处,该数组大小等于rawnum的立方根。

在下面,我们示出了零级、一级和两级聚合的求和数组的存储成本和计算成本,以对于固定值为100万的rawnum来检查如何完成空间与速度的权衡。

请注意,即使对于三级,与决定1百万个整数的计数器数组的大小的rawnum相比,存储开销也相当小。

本领域技术人员将能够将其推广到更多级别,以实现更高的分位数计算速度,同时换取一些额外的存储。

提供分位数估计的快速计算的另一种方法是直接计算求和数组(其根据定义被排序),然后执行二进制搜索以找到与目标秩相关联的索引。实际上,由于每个单独的计数器都可以从求和数组派生出,因此甚至不必存储产生零存储开销的计数器数组。这样,计算成本将与rawnum的以2为底的对数成正比,即对于100万个条目而言将约为20。组织求和数组,使得可以利用的内存访问的局部性和缓存行大小将使得更进一步减小计算成本。假设缓存行大小为512位的intel架构,并且此外,假设每个聚合的总和需要32位,我们可以在每个内存访问中搜索16个聚合的总和,并实现为17的搜索扇出。因为175大于1百万,这意味着在我们的示例中(假设从主内存到缓存的内存读取成本在计算成本中占主要地位),我们将计算成本降低到了5。

提供快速分位数计算的又一种方法是使用预先计算的选定分位数的表,并针对这些中的每个将索引记录到存储对应计数器的计数器数组中。这样,对预先计算的分位数的计算就变得超快(即恒定时间),同时对其他分位数的计算以基计数器开始,该基计数器是最接近的较小的预先计算的分位数(例如,75%百分位数,如果表包含50%、75%和90%,并且我们想要计算80%百分位数),然后循环遍历基计数器之外的计数器,直到达到80%百分位数的目标秩。但是,这需要针对每个预先计算的分位数,在表中计算并存储相应的总和,如果有sum数组,我们将拥有相应的总和和。否则,将无法准确达到目标秩。

分位数信息的聚合

分位数信息的聚合是直接的。给定分位数信息的两个实例x和y表示相同的数据源(从中可以得出它们的类型相同),通过简单地循环遍历计数器x.counter[0..rawnum-1]和y.counter[0..rawnum-1]的数组并为每个索引添加计数器来执行聚合。也就是说,对于每个index=0..rawnum-1,a.counter[index]=x.counter[index]+y.counter[index],其中a是聚合的分位数信息。

此外,还直接地通过将总和加在一起(如果分位数信息是由计数器的总和而不是计数器表示的)来执行聚合,因为

a.sum[index]=a.counter[0]+...+a.counter[index]=

=(x.counter[0]+y.counter[0])+...+(x.counter[index]+y.counter[index])=

=(x.counter[0]+...+x.counter[index])+(y.counter[0]+...+y.counter[index])=

=x.sum[index]+y.sum[index]。

分位数信息的压缩和解压缩

分位数信息的存储成本通常由计数器的数组和计数器的总和的存储成本占主要地位。其他一切(如类型、平均值和极值),如果与分位数信息存储在一起,则需要恒定的存储量,并且聚合的求和数组(如果使用一个)的存储成本与计数器数组的成本相比可以忽略不计。

如果类型丰富,这意味着我们具有高粒度和许多计数器,则表示样本的分位数信息中的许多计数器可为零,并因此不包含任何信息。我们期望所有非零值在样本大小等设置的约束范围内都是随机的。即,我们不希望一小部分计数器具有相同的值。在这些假设下,我们显然应该能够通过避免存储零而压缩计数器数组并只存储非零的计数器。但是,如果我们使用的求和数组,则除了第一非零计数器之前的计数器所对应的总和之外,没有任何总和为零。因此,我们将避免包含与计数器数组大小相同的求和数组的表示形式。

在下文中,我们将详细描述如何压缩和解压缩计数器数组,何时使用不同的表示形式,以及为什么这样做。

首先,给定一个大小为n的计数器数组,我们将密度(density)定义为非零计数器的数量。此外,令counterbits为用于表示计数器的位的数量,并且indexbits为用于表示到计数器数组中的索引的位的数量。

我们根据密度是低、中还是高来使用三种不同的表示形式。

低密度:对于每个索引(index),其中counter[index]>0,我们存储(index,counter[index])对。此外,我们记录列表的大小(size),即对的数量。

中密度:对于每个索引,其中counter[index]>0,我们存储该计数器。另外,我们有一个大小为n的位数组,其中每个位对应一个计数器,并且仅设置与存储的计数器相关联的位。

高密度:我们存储未压缩的计数器数组。

现在,让我们研究这三种方法的相应存储成本,以得出用于计算确定何时使用哪种方法的阈值的公式。令sl、sm和sh分别为低密度表示、中密度表示和高密度表示所需的位的数量。

我们具有:

sl=density*(counterbits+indexbits)+indexbits

sm=density*counterbits+n

sh=n*counterbits

使用低密度表示而不是中密度表示的标准是sl<sm。即,

density*(counterbits+indexbits)+indexbits<density*counterbits+n

density*(counterbits+indexbits)-density*counterbits<n-indexbits

density*(counterbits+indexbits-counterbits)<n-indexbits

density<(n-indexbits)/indexbits

使用中密度表示而不是高密度表示的标准是sm<sh。即,

density*counterbits+n<n*counterbits

density*counterbits<n*counterbits-n

density<(n*counterbits-n)/counterbits

通常,计数器位是32位,这意味着在中密度情况下使用的位数组可在中密度范围的低端引起较大的存储成本开销。也可以递归使用类似的方法来压缩位数组。原则上,这种混合方法与上述聚合的求和数组相同。该位数组被分为大小相等的块(chunk),并且对于每个块具有一个位的另一位数组用于记录哪些块仅包含零以及哪些块包含一。在这种情况下,我们只需要存储聚合的位数组,例如,它可以比原始的且然后仅32位的块(并非所有的位都是零)小32倍。

压缩计数器数组是通过首先对其进行分析以找到密度来完成的。然后采用上述适当的压缩方法。

低密度压缩是通过以下方式来实现的:通过循环遍历计数器数组并收集非零计数器及其索引并将它们存储在预先分配的大小为density的空数组中,然后存储密度。通过首先基于类型中可用的信息而分配空的并重置的(所有计数器均清零)分位数信息实例来实现解压缩。然后,我们循环遍历对的数组,并为每个对(索引,值)将该值分配给空的分位数信息实例中的counter[index]。

通过首先分配大小为n的空位数组和大小为density的小计数器数组来实现中密度压缩。然后循环遍历原始计数器数组,并将每个非零计数器存储在小计数器数组中的下一个可用位置中,同时用与原始计数器数组相同的索引设置位数组中的位。与低密度表示形式一样,解压缩通过分配空的分位数信息实例开始。接下来是以小计数器数组中的第一计数器开始,并且循环遍历位数组,直到找到设置位,然后将小计数器数组中的当前计数器的值以与设置位的索引相同的索引写到空的分位数信息实例。写到空实例后,我们在小计数器数组中前进,以便下一个计数器成为当前计数器。

使用混合方法时的压缩和解压缩与使用中密度方法时的压缩和解压缩基本相同,但在如何处理位数组上略有不同。

类型减少

通常,对于给定的数据源,分位数信息的类型不会改变。但是,在某些情况下,对数据源的分析可能已经通过使用过于丰富的类型而开始,该过于丰富的类型能够在没有发生任何感兴趣事情的值范围内以高精度计算估计值。

总是有可能采用丰富类型的分位数信息实例,然后对其进行下采样以被表示为较不丰富的类型。这使得可以减少数据源的类型,然后在执行聚合时,在执行聚合之前,将更丰富类型的实例下采样为较不丰富类型。

如上所述,根据各个方面和实施例的本发明描述了如何计算和表示来自数据源的分位数信息。

本发明的方法步骤可以由可编程处理器来执行,可编程处理器执行指令程序以通过对输入数据进行操作并生成输出来执行本发明的功能。

本发明可以以数字电子电路或计算机硬件、固件、软件或它们的组合来实现。

本发明可以有利地在以在可编程系统上执行的一个或多个计算机程序来实施,该可编程系统包括:至少一个可编程处理器,该至少一个可编程处理器被耦合以从数据存储系统接收数据和指令以及向数据存储系统传输数据和指令;至少一个输入设备;以及至少一个输出设备。每个计算机程序可以用高级过程或面向对象的编程语言来实施,或者如果需要的话可以用汇编语言或机器语言来实施;并且在任何情况下,该语言都可以是编译语言或解译语言。

根据图1所示的方法的一个示例,用于从服务器和/或包括该服务器的控制中心测量100计算机网络的指标,该方法包括以下步骤:

-在每个数据源的每个采样周期s开始时,提供105与该数据源相关联的类型的空的分位数信息实例f空;

在整个采样周期(s)中,从多个数据源收集110数据点,其中,在每个数据源的每一整个采样周期s中,收集构成样本的数据点p的集合;

-在整个采样周期s中,用每个信息点更新120与每个数据源相关联的分位数信息实例f;和

-在每个采样周期s结束之后,将分位数信息实例f上传到控制中心,以用于进一步处理。

根据该方法的另一示例,该方法可以包括:

-从一个或多个数据源收集数据点110由测试代理执行;

-在整个采样周期s中,每个测试代理在收集每个数据点之后立即更新120与每个数据源想关联的分位数信息实例f;

-每个测试代理在每个采样周期(s)结束后将分位数信息实例f上传130到控制中心,以用于进一步处理。

根据该方法的另一示例,该方法可以包括:

-从每个数据源收集110数据点由测试代理执行,该测试代理在整个样本时间周期s中收集样本p的所有数据点;

-测试代理在采样时间时间周期s结束时将整个样本上传121到控制中心;

-控制中心从接收到的样本中生成分位数信息实例f,以用于进一步处理130。

根据该方法的另一示例,该方法可以包括:

-在采样时间周期s开始时,控制中心以用于每个数据源的空的/重置的分位数信息实例f开始105;

-在整个采样周期s中,测试代理将各个数据点或数据点的集合重复上传122到控制中心;

-服务器被配置为,针对每个数据源,在从相应的测试代理接收到每个数据点之后立即更新120分位数信息实例f,因为它在整个采样周期s中接收数据点,其中分位数信息实例f表示在采样周期s结束时的整个样本并且可用于进一步处理130。

根据该方法的另一示例,进一步处理130的步骤包括在不访问完整样本的情况下,从分位数信息实例f执行132高级统计分析,例如秩统计134的计算。

根据该方法的另一示例,收集110的步骤包括采样周期s,其中,根据以下一项或多项来改变110各个测量之间的时间段以及采样周期的长度:测量的指标、进行测量的网络的一部分中的通信量速率。

根据该方法的另一示例,在采样周期期间收集110数据点的集合的步骤包括采样周期s是支持数据的统计分析的最小的时间帧。

根据该方法的其他示例:

-从每个数据源收集的数据点p的集合是在采样周期s期间收集的,该采样周期s对于每个数据源和数据点p的集合是唯一的;和/或

-每个数据源均与分位数信息类型相关联,该分位数信息类型指定如何对分位数信息实例进行处理、编码和解码;和/或

-在每个数据源的每个采样周期开始时执行重置,以产生空的分位数信息实例f空;和/或

-对于每个数据源,在整个采样周期内通过重复更新121相关联的分位数信息实例f来处理收集的数据点p;和/或

-当采样时间段s结束时,对于每个数据源,将分位数信息实例f压缩并传输到计算设备或服务器以进行进一步处理。

如本文参考图2和图3的描述中已经描述的步骤可以被包括在示例性方法的其他示例中。

根据本发明的又一个示例,提供了一种系统。所述系统可连接地关联到包括数据源的计算机网络。该系统包括服务器和/或控制中心以及与数据源相关联的测试代理,其中该系统被配置为在每个数据源的每个采样周期s开始时提供105与该数据源相关联的类型的空的分位数信息实例f空,并且所述测试代理被配置为在整个采样周期s中从多个数据源收集110数据点,其中在每个数据源的每个采样周期(s)中收集构成样本的数据点p的集合,并在整个采样周期s中用每个数据点更新120与每个数据源相关联的分位数信息实例f,并在每个采样周期s结束后将分位数信息实例f上传130到控制中心,以用于进一步处理130。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1