首页> 中国专利> 基于流持续时间的用于网络中路径选择的方法和装置

基于流持续时间的用于网络中路径选择的方法和装置

摘要

本发明涉及基于流持续时间的用于网络中路径选择的方法和装置。在一些实施例中,一种装置包括一转发模块,其配置为接收一组第一数据包。该转发模块配置为响应于接收每个第一数据包修改一数据流值。该转发模块还配置为存储每个第一数据包到一第一输出队列中,基于被修改之后该数据流值没有经过数据流阈值。此外,该转发模块配置为接收一第二数据包。该转发模块配置为响应于接收该第二数据包修改该数据流值,以便该数据流值经过该数据流阈值。该转发模块配置为存储该第二数据包到一第二输出队列中,基于该数据流值已经过该数据流阈值。

著录项

  • 公开/公告号CN105227485A

    专利类型发明专利

  • 公开/公告日2016-01-06

    原文格式PDF

  • 申请/专利权人 瞻博网络公司;

    申请/专利号CN201510744550.9

  • 发明设计人 G·艾贝;

    申请日2012-03-09

  • 分类号H04L12/851;H04L12/863;

  • 代理机构北京市金杜律师事务所;

  • 代理人王茂华

  • 地址 美国加利福尼亚州

  • 入库时间 2023-12-18 13:28:42

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-07-13

    授权

    授权

  • 2016-02-03

    实质审查的生效 IPC(主分类):H04L12/851 申请日:20120309

    实质审查的生效

  • 2016-01-06

    公开

    公开

说明书

本申请是申请日为2012年3月9日、申请号为201210228495.4、 发明名称为“基于流持续时间的用于网络中路径选择的方法和装置” 的发明专利申请的分案申请。

技术领域

这里描述的一些实施例一般涉及数据中心的网络流量转发,并且 尤其涉及用于基于数据中心的数据流持续时间将数据包归为队列类 别的方法和装置。

背景技术

在一些实施例中,为单独的应用构建单独的网络来传送流量。例 如,许多高性能的计算应用程序或高频的贸易系统使用专用的低延迟 网络。然而,当对独立网络的需求增加时,这种独立网络的方法是昂 贵的。可选地,一些已知的数据中心具有多个网络接口,每个专用于 不同类型的数据流(例如,批量数据传输,存储器存取,控制通信流 量)。然而,这样的一种方法在数据中心中典型地是不实用或不经济 的,其不得不大范围地部署服务器虚拟化。一些其他已知的数据中心 将流量流分类为不同的流量类别,以便这些类别的流量可以在数据中 心独立地被缓冲。然而,将流量流分类为不同的流量类别不保证能满 足每个流理想的需求,因为当数据流在进入该数据中心被分类时,对 数据中心来说数据流的表现(例如,持续时间)可能是未知的或不可 获得的,或者单个的应用会产生多种不同类型的数据流,其具有不同 的延迟和吞吐量需求。同样,与给定数据流的服务需求类别有关的信 息(例如,延迟需求)可能不被包含在数据流的数据包(或分组,packet, 下同)(例如,在数据包报头中)中。

因此,存在对能够转发不同应用的数据流并且满足关联于每个给 定流的理想需求而不会引入不必要的复杂度的方法和装置的需求。

发明内容

在一些实施例中,一种装置包括配置为接收一组第一数据包的转 发模块。该转发模块配置为响应于接收每个第一数据包修改数据流值。 该转发模块还配置为基于被修改之后没有经过(cross)数据流阈值的 数据流值将每个第一数据包存储在第一输出队列中。此外,该转发模 块配置为接收一第二数据包。该转发模块配置为响应于接收该第二数 据包修改数据流,以便数据流值通过该数据流阈值。该转发模块配置 为基于已经通过数据流阈值的数据流值将第二数据包存储在一第二 输出队列中。

附图说明

图1是根据一实施例的一示意图,举例说明配置为处理关联于数 据流的流状态值的流模块。

图2是根据一实施例的一示意图,举例说明一流模块包括一流状 态发展模块以及一流状态计时模块,配置为修改存储在存储器中的流 状态值。

图3是根据一实施例的示意图,举例说明一种交换器配置为传输 数据包,包括在输入端口接收数据包,分类数据包到输出队列,并从 输出端口发送数据包。

图4A是根据一实施例的示意图,举例说明一种交换器包括一种 转发模块,配置为基于队列数据库中存储的数据将输入的数据包分类 到输出队列中。

图4B是根据一实施例的示意图,举例说明一种队列数据库将数 据流与输出队列相关联。

图5是根据一实施例的一流程图,举例说明了一种用于基于接收 到的数据包更新数据流计数器的方法。

图6是根据一实施例的示意图,举例说明了一种流模块包括两个 哈希模块配置为共同确定流高速缓存中的存储位置以及两个哈希表, 在这两个哈希表存储有与数据流相关的信息。

图7是根据一实施例的流程图,举例说明了一种方法用于确定数 据流计数器被存储的存储器位置,并基于接收的数据包更新数据流计 数器。

具体实施方式

图1是根据一实施例的示意图,举例说明配置为处理与数据流相 关的流状态值的流模块。特别地,流模块100配置为处理流状态值11、 流状态值13、以及流状态值15、17、21和23,它们分别与数据流10、 数据流12和数据流14关联(在图1中用虚线箭头表示)。流状态值 11、13和15可以一起被称为流状态值19。数据流10、12和14可以 一起被称为数据流18。

每个数据流18可以定义为,例如一组包,如以太网包、会话控 制协议包、和/或其他类型的数据包。包可以具有数据头、负载、和/ 或尾部,其例如基于与开放系统连接(OSI)模型的任意层相关联的 因特网协议(IP)类协议来定义。在一些实施例中,数据流18可以 被称为数据流,或包流。在一些实施例中,一个或多个数据流18可 以关联于两个通信设备(例如,计算机服务器、网络路由器、个人计 算机等)之间的通信会话,也就是,从一个源设备发送到目的地设备。 例如,数据流10可以定义从计算机服务器(未示出)发送到网络路 由器(未示出)的第一通信会话的一部分,并且数据流12可以定义 从移动因特网设备(未示出)发送到个人膝上型电脑(未示出)的第 二通信会话的一部分,其不同于第一通信会话。在这些例子中,流模 块100可以是任何类型的实体(或包括在任何实体中),其被配置为 接收和处理数据。尽管在一些实施例中未示出,流模块100可以关联 于(例如,包括在其中),例如,位于数据通信网络(例如,网络170, 下面将详细描述)边缘,或多级交换机结构内部的分布式交换器/路由 器(例如图3中示出的交换器300)的一个或多个部分。有关交换器 结构的更多细节将结合图3来描述。

在一些实施例中,可以并行或串行接收数据流18的一个或多个 部分。例如,可以经由流模块100的网络接口卡(未示出)在流模块 100接收来自数据流12的第一数据包,并且可以随后经由相同的网络 接口卡在流模块100接收(串行地)来自数据流14的第二数据包。 在一些实施例中,可以经由流模块100的第一网络接口卡(未示出) 在一时间周期期间在流模块100上接收来自数据流12的第一数据包, 且可以在相同的时间周期期间(并行地)经由第二网络接口卡在流模 块100接收来自数据流14的第二数据包。

可以用流状态值19来识别数据流18的一个或多个特征。在一些 实施例中,一个或多个流状态值19可以为一个或多个数据流18表示 数据包计数器,其记录已经在流模块100接收的数据流中包含的数据 包数量。例如,流状态值11可以用来表示数据流10的数据包计数器, 其记录了已经在流模块100接收的数据流10的数据包数量。在一些 实施例中,表示数据流相对高数量的数据包的流状态值19可以表示 数据流与高吞吐量的通信连接(例如,大文本文件,批量数据,等的 传输)相关联。相反,表示数据流相对低数量的数据包的流状态值19 可以表示数据流与等待时间敏感的通信连接(例如,视频流,控制通 信,等)相关联。

在一些实施例中,一个或多个流状态值19可以表示一个或多个 数据流18的最后一个(即,最近的)数据包的时间戳。这个时间戳 可以记录数据流的最后一个数据包在流模块100被接收的时间。例如, 可以用流状态值13来表示数据流12的最后一个数据包的时间戳。可 选地,一个或多个流状态值19可以表示一种计时器,其记录在流模 块100接收一个或多个数据流18的第一数据包和接收最后一个(即, 最近的)数据包之间的时间总数。例如,可以用流状态值15来表示 一种计时器,其记录在流模块100接收数据流14的第一数据包与接 收最后一个数据包之间的时间总数。

在一些实施例中,一个或多个流状态值19可以表示用于一个或 多个数据流18的数据包大小计数器,其记录已经在流模块100上接 收的数据流中包括的所有数据包的总大小(例如,以位为单位)。例 如,可以用流状态值17来表示用于数据流14的数据包大小计数器, 其记录已经在流模块100上接收的数据流14的所有数据包的总大小。

在一些实施例中,一个或多个流状态值19可以表示用于一个或 多个数据流18的平均带宽计数器,其记录了已经在流模块100接收 的数据流的数据包占用的平均带宽。可以基于关联于数据流的一个或 多个其他流状态值来确定这样一种平均带宽计数器。特别地,可以通 过将数据流中包括的所有数据包的总大小(例如,位的单位)除以接 收数据流的第一数据包以及接收最后一个数据包之间的时间总量(例 如,以秒为单位)来计算数据流的平均带宽(例如,以位/秒为单位)。 如图1所示的例子,可以用流状态值23来表示用于数据流14的平均 带宽计数器,其可以基于数据流14中包括的所有数据包的总大小(例 如,由流状态值17表示)以及接收数据流14的第一个数据包和最后 一个数据包之间的时间总量(例如,由流状态值15表示)来被计算。 可选地,可以利用累积运动平均函数或幂运动平均函数来计算数据流 的平均带宽。

可以通过第一逻辑模块110和/或第二逻辑模块120来定义(例如, 修改)一个或多个流状态值19。例如,第一逻辑模块110可以配置为 响应于在流模块100上接收的并与数据流12关联的数据包来改变(例 如,重置、删除、增加、减少)流状态值13。在一些实施例中,第一 逻辑模块110可以基于算法来改变流状态值13。在一些实施例中,第 二逻辑模块120可以基于与第一逻辑模块110所使用的不同的算法来 改变流状态值13。在这些例子中,第二逻辑模块120的操作可以独立 于第一逻辑模块110的操作。在一些其他的实施例中,第二逻辑模块 120可以基于与第一逻辑模块110所使用的算法关联的算法改变流状 态值13。在这样的实例中,第二逻辑模块120的操作可以和第一逻辑 模块110的操作关联。第一逻辑模块110可以是,例如一种流状态提 高模块,并且第二逻辑模块120可以是例如一种流状态定时模块。有 关流状态提高模块以及流状态定时模块的更多信息会结合图2来描述。

在一些实施例中,与基于签名的各自数据流18相关联的流模块 100可以识别定义每个数据流18的数据包。例如,定义数据流12的 每个数据包可以包括一个共同的签名,其不同于定义数据流14的每 个数据包的共同签名。相应地,数据包可以被识别为关联于数据流12 的数据包而不是基于数据包签名的其他数据流,该签名与数据流12 中包括的其他数据包的签名相同。在这里签名还可以被称为流签名, 或数据流ID。例如,签名可以由(或基于)数据包的至少一部分(例 如,数据头部分)的位值来定义。在一些实施例中,一个或多个数据 流18可以具有关联于数据流18的源标识符(即,指定通信会话的源 设备的标识符)和/或数据流18的目的地标识符(即,指定通信会话 的目的地设备的标识符)的签名。在一些实施例中,签名可以基于数 据头的一部分(例如,数据头的层-2(L2)部分,数据头的层-3(L3) 部分,数据头的层-4(L4)部分)。例如,数据包可以被识别为关联 于数据流12的数据包,基于数据包的数据头的L3部分和L4部分中 所包括的源标识符以及目的地标识符。

在一些实施例中,第一逻辑模块110和/或第二逻辑模块120可以 基于在流模块100上接收的数据包的签名来定义(或改变)一个或多 个流状态值19。更特别地,可以基于接收的数据包来定义(或改变) 一个或多个流状态值19,该数据包与基于数据包签名的特定数据流 18相关联。例如,可以用流状态值15来表示用于数据流14的数据包 计数器,可以用流状态值17来表示用于数据流14的数据包大小计数 器,以及可以用流状态值21来表示当数据流14的最后一个数据包在 流模块100被接收时的时间戳。结果是,当数据流14的数据包(与 基于数据包签名的数据流14相关联的数据包)在流模块100被接收 时,流状态值15由第一逻辑模块110(例如,流状态提高模块)增加 1,流状态值17由第一逻辑模块110增加被接收的数据包的大小,以 及流状态值21用第二逻辑模块120(例如,流状态计时模块)接收的 数据包的时间戳来更新。在这种例子中,第一逻辑模块110的操作与 第二逻辑模块120的操作相关联。特别地,两个逻辑模块都被相同的 事件(即,接收到数据流14的数据包)触发来分别更新三个流状态 值。

在一些实施例中,一个或多个流状态值19可以被配置为当状态 条件被满足,或不满足时,基于流状态值19,触发一个动作(例如, 分析、发送通知)。例如,响应于基于流状态值19被满足的状态条 件,一个或多个流状态值19,和/或一个或多个数据流18的一个或多 个数据包可以被发送给流模块100的流分析模块140以及在流模块 100的流分析模块140被分析。对于另一个例子,如这里详细描述的, 响应于基于流状态值19满足的状态条件,通知可以被发送给交换设 备的其他模块(例如,图3示出的转发模块)。响应于接收到通知, 可以触发接收这种通知的其他模块对数据流18的相应的数据包采取 动作。

在一些实施例中,可以为不同的情景和/或不同类型的流状态值定 义一个或多个状态条件。在一些实施例中,一个或多个状态条件可以 被定义为当流状态值19匹配(例如,增加到,减少到)状态条件中 预先确定的阈值流状态值时是满足的。例如,正如这里详细描述的, 可以用流状态值11来表示数据包计数器用于数据流10。第一逻辑模 块110(例如,流状态提高模块)可以配置为当在流模块100接收到 数据流10的数据包之后将流状态值11增加1。当数据包计数器增加 到第一阈值流状态值时,可以满足为这种数据包计数器定义的一种状 态条件。相应地,当在流模块100接收到数据流10的新的数据包之 后,流状态值11被第一逻辑模块110增加1。如果增加的流状态值 11被确定等于第一阈值流状态值,作为结果,发送通知给转发模块。 在相同例子中,第二逻辑模块120(例如,流状态计时模块)可以配 置为基于算法降低流状态值11。当数据包计数器被减少到第二阈值流 状态值时,可以满足为这种数据包计数器定义的另一种状态条件。相 应地,第二逻辑模块120基于算法减少流状态值11。如果减少的流状 态值11被确定等于第二阈值流状态值,作为结果,发送通知给转发 模块。

对于另一个例子,正如这里详细描述的,可以用流状态值17来 表示用于数据流14的数据包大小计数器。响应于在流模块100接收 的数据流14的数据包,第一逻辑模块110(例如,流状态提高模块) 可以配置为对流状态值17增加被接收的数据包的大小(例如,以位 为单位)。当数据包大小计数器从一个小于阈值流状态值的值增加到 等于或大于阈值流状态值时,可以满足为这种数据包大小计数器定义 的一个状态条件。相应地,当在流模块100接收到数据流14的新的 数据包之后,流状态值17由第一逻辑模块110增加所接收的数据包 的大小。如果该增加的流状态值17被确定等于或大于阈值流状态值, 作为结果,发送通知给转发模块。

对于还一例子,正如这里详细描述的,可以用流状态值23来表 示用于数据流14的平均带宽计数器。响应于在流模块100接收到数 据流14的数据包,第一逻辑模块110(例如,流状态提高模块)和/ 或第二逻辑模块120(例如,流状态计时模块)可以配置为共同更新 (例如,增加、减少)流状态值23。特别地,基于已更新的流状态值 15和已更新的流状态值17来更新流状态值23,其中已更新的流状态 值15表示接收数据流14的第一个数据包和接收最后一个数据包之间 的时间总量,且更新的流状态值17表示用于数据流14的数据包大小 计数器。当平均带宽计数器从一个小于阈值流状态值的值增加到等于 或大于阈值流状态值的值时,可以满足为这种平均带宽计数器定义的 一种状态条件。相应地,当在流模块100接收到数据流14的新的数 据包之后,流状态值23相应地由第一逻辑模块110和/或第二逻辑模 块120更新。如果更新的流状态值23被确定符合相应的状态条件, 作为结果,发送通知给转发模块。

在一些实施例中,流分析模块140可以收集并使用有关数据流18 的流状态值19的统计数据来确定是否有一个或多个数据流18与流异 常相关联。在一些实施例中,数据包(或关联于数据包的数据流)的 深度数据包检查、模式匹配和/或常规表达评估(regularexpression evaluation)可以在流分析模块140处执行。作为结果,在一些实施例 中,流分析模块140可以发送通知(例如,通告、电子邮件消息、标 识符)(例如,发送到交换器设备的其他模块,发送到网络管理员)。

如图1所示,流状态值19被存储在流模块100的存储器132内 部的流状态数据库130中。流状态值19可以定义流状态数据库130 的至少一部分。在一些实施例中,存储器132可以是,例如,随机存 取存储器(RAM)(例如,动态RAM、静态RAM)、闪存、可移动 存储器、等等、和/或其组合。在一些实施例中,流状态数据库130 可以被实现为,例如,关系数据库、表、和/或等等。在一些实施例中, 基于例如关联于每个数据流18的数据包的一部分的哈希(hash), 流状态值19可以每一个被存储在存储器132内部的位置上。例如, 基于来自数据流12的数据包的数据头的L2部分的哈希,可将流状态 值13存储在存储器132内部的位置上。

如图1所示,数据流18可以来自网络170(或网络的一部分)。 在一些实施例中,网络170可以是,例如无线网络和/或有线网络。在 一些实施例中,网络170可以,例如,关联于数据中心。在这种例子 中,网络170可以被称为数据中心网络。在一些实施例中,流模块100 可以被配置在网络170外部,可以被包括在网络170内部,或可以位 于网络170边缘(例如,边缘设备中)。

在一些实施例中,流模块100的一个或多个部分可以包括基于硬 件的模块(例如,数字信号处理器(DSP)、现场可编程门阵列(FPGA)) 和/或基于软件的模块(例如,计算机代码模块、能够在处理器中执行 的一组处理器可读指令)。在一些实施例中,一个或多个功能关联于, 例如,第一逻辑模块110和/或第二逻辑模块120,其能够由不同的模 块执行和/或组合为一个或多个模块。在一些实施例中,流模块100 可以被包含在一个或多个诸如架单元或机架(chassis)的物理单元中。

在一些实施例中,代替数据包或除了数据包以外,流模块100的 处理可以基于诸如信元(cell)(例如,固定大小的信元、可变大小 的信元)的数据单元。例如,流模块100可以被配置为处理数据包, 其解析(和/或组合)为信元,信元可以在例如数据中心的交换架构中 传输。一些实施例中,流模块100可以配置为在处理和/或发送信元到 另一个设备(未示出)之前,将一个或多个数据包解析(和/或组合) 成一个或多个信元。在一些实施例中,流模块100还可以配置为从信 元重建数据包。

图2是根据一实施例的一示意图,举例说明一流模块200包括一 流状态提高模块210以及一流状态计时模块220,配置为修改存储在 存储器240中的流状态值22。在一些实施例中,流状态提高模块210 和流状态计时模块220分别能够对应于,例如图1中所示的第一逻辑 模块110和第二逻辑模块120。如图2所示,流状态值22被存储在由 地址值AD1到ADN表示的存储器位置中。例如,流状态值S被存储 在存储器240由地址AD3表示的存储器位置上(由参考数字23表示)。 对于另一个例子,流状态值TS2被存储在存储器240由地址ADN-1 表示的存储器位置上。

在一些实施例中,如这里所述,一个或多个流状态值22可以表 示用于一个或多个数据流的数据包计数器。例如,如图2所示,存储 在由地址值AD1-AD4表示的一个存储器位置中的每个流状态值22 表示用于唯一数据流的数据包计数器。每个流状态值Q、P、R和S 分别表示在流模块200接收的数据流中包括的数据包的数量。在一些 实施例中,如这里所述,一个或多个流状态值22可以表示用于一个 或多个数据流的数据包大小计数器。例如,如图2所示,存储在由地 址值AD5表示的存储器位置中的流状态值b表示用于数据流的数据 包大小计数器。

在一些实施例中,如这里所述,一个或多个流状态值22可以表 示一个或多个数据流的最后一个数据包的时间戳。例如,如图2所示, 存储在由地址值ADN-2-ADN表示的一个存储器位置中的每个流状态 值22表示唯一数据流的最后一个数据包的时间戳。每个流状态值TS1、 TS2和TS3分别表示数据流的最后一个数据包的时间戳。在一些实施 例中,如这里所述,一个或多个流状态值22可以表示一个计时器, 其记录在流模块200上接收一个或多个数据流的第一个数据包和接收 最后一个数据包之间的时间总量。例如,如图2所示,存储在由地址 值AD6表示的存储器位置上的流状态值t表示一个计时器,其记录了 流模块200上接收一数据流的第一个数据包和接收最后一个数据包之 间的时间总量。

在一些实施例中,存储器240内部的每个存储位置可以基于流签 名关联于单个的数据流(或单个的数据流类型)。在一些实施例中, 这样的一种流签名可以是数据包签名,其由(或基于)数据流的数据 包的至少一部分(例如,数据头部分)的位值来定义。例如,可以用 数据包20的部分21来关联数据包20与数据流(图2中未示出)。 也就是,数据包20的部分21可以关联于(例如,能够定义)用于包 含数据包20的特定数据流的数据包签名。在一些实施例中,数据包 20的部分21可以是,例如,数据包20的数据头的至少一部分,数据 包20的载荷的至少一部分,和/或数据包20的尾部的至少一部分。在 一些实施例中,数据包20的部分21可以包括具有数据包20的特定 数据流的源标识符和/或目的地标识符。

在一些实施例中,流模块200的索引模块212可以基于数据包的 一部分执行索引操作,以便来自存储器240的一个或多个存储位置(其 被积极地用于存储一个或多个流状态值)可以关联于特定数据包的数 据包签名(例如,L2/L3/L4位模式)。相应地,来自存储器240的存 储位置可以唯一地关联于(例如,基本上唯一关联于)包括特定数据 包的特定数据流。因此,流状态值22,其关联于特定数据流,可以在 也关联于特定数据流的单一的存储器位置上(例如,来自存储器240 的单一的存储位置)被更新(例如,增加,减少)。例如,索引模块 212可以基于数据包20的部分21执行索引操作来确定数据包20的索 引值24,或确定相当于包括该数据包20的数据流的索引值24。可以 用索引值24来(例如,被流状态提高模块210,被流状态计时模块 220)识别存储器240中的一个或多个存储位置(例如,由地址AD3 表示的存储位置,由地址ADN-1表示的存储位置),其关联于包括 数据包20的数据流。作为结果,存储在所识别的存储位置中的流状 态值22(例如,流状态值S,流状态值TS2)可以基于数据包20提 供的信息被相应地更新(例如,被流状态提高模块210,被流状态计 时模块220)。被更新的流状态值22关联于包含数据包20的数据流。

在一些实施例中,流模块200的索引模块212可以基于数据流的 数据包20执行一个或多个方法来为数据流确定一个或多个索引值24, 并且该确定的索引值24可以用来识别关联于该数据流的存储器240 中的一个或多个存储位置。例如,如图2所示,索引模块212基于数 据流的数据包20确定至少四个索引值24。流状态提高模块210和流 状态计时模块220都能够利用第一索引值24来选择由地址AD3表示 的存储位置,用于数据流的数据包计数器被存储在那里。与此同时, 流状态提高模块210可以利用第二索引值24来选择由地址AD5表示 的存储位置,用于数据流的数据包大小计数器被存储在那里。流状态 计时模块220可以利用第三索引值24来选择由地址AD6表示的存储 位置,记录接收数据流的第一个数据包和接收最后一个数据包之间的 时间总量的计时器被存储在那里。流状态计时模块220可以利用第四 个索引值24来选择由地址ADN-1表示的存储位置,数据流的最后一 个数据包的时间戳被存储在那里。另外,在一些实施例中,每个索引 值24可以用来识别存储器240的唯一的存储位置。在一些实施例中, 索引值24可以是表示存储器240中存储位置的地址的值。可选地, 索引值24可以是其他形式的值,其能够唯一地识别存储器240的存 储位置。

在一些实施例中,如下面结合图6和图7详细描述的,索引模块 212可以实现哈希函数来确定索引值24。特别地,索引值24可以是 基于数据包的一部分(例如,数据包20的部分21)计算的哈希值。 在这种实施例中,索引模块212可以是哈希模块(例如,配置为执行 哈希函数的哈希模块),被配置为确定索引值24,以及流状态值22 可以在存储器240中被存储为哈希表。在一些实施例中,存储在存储 器240中的流状态值22可以一起定义流表。在一些实施例中,流表 可以实现为布隆过滤器(bloomfilter)(并且利用多个哈希函数)。 在一些实施例中,索引模块212的功能性可以被定义以便将涉及到索 引值计算的冲突能被减少到一个满意的程度。也就是,由索引模块212 确定的用于数据流的索引值24有别于由索引模块212确定的用于不 同数据流的索引值24。在一些实施例中,如结合图6和图7描述的, 索引模块212可以实现一个以上的哈希模块来降低涉及索引值计算的 冲突。

在一些实施例中,流状态提高模块210可以配置为当基于一个或 多个索引值24(其由索引模块212确定)选择了流状态值22时增加 (例如,在单一的存储位置上增加)存储器240中存储的一个或多个 流状态值22。特别地,响应于基于接收的数据包的处理由索引模块 212选择了存储器240中的存储位置,可以用增加的流状态值在该存 储器位置替换(例如,重写)该存储器位置处的流状态值22中的一 个。例如,如图2所示,流状态提高模块210配置为增加流状态值S (由参考数字23表示),其表示数据包计数器,以响应基于索引值 24识别了地址AD3表示的存储位置。特别地,当数据包20在流模块 200上被接收时,索引模块212基于数据包20的部分21(例如,数 据头部分,尾部分)确定一个或多个索引值24。该流状态提高模块 210基于索引值24的一个选择由地址AD3表示的存储位置,并且接 着相应地,将对应的流状态值(由参考数字23表示)从S增加到S+1。 因此,流状态值(由参考数字23表示),其表示用于数据流的数据 包计数器,响应于在流模块200上接收到数据流的数据包20而增加1。

对于另一个例子,如图2所示,流状态提高模块210配置为增加 流状态值b,其表示数据包大小计数器,以响应于基于索引值24识别 了由地址AD5表示的存储位置。特别地,当数据包20在流模块200 被接收时,索引模块212基于数据包20的部分21(例如,数据头部 分,尾部分)确定一个或多个索引值24。流状态提高模块210基于索 引值24的一个选择由地址AD5表示的存储位置,并且接着相应地, 将对应的流状态值增加数据包20的大小。因此,表示用于数据流的 数据包大小计数器的流状态值被相应地增加,以响应于在流模块200 接收到数据流的数据包20。

在一些实施例中,流状态计时模块220可以配置为当基于一个或 多个索引值24选择了流状态值22时,更新(例如,改变)一个或多 个流状态值22,索引值24由索引模块212确定。特别地,来自存储 器240的存储位置上的一个流状态值22可以在该存储器位置处被替 换(例如,改写)为不同的流状态值,以响应于基于数据包的处理由 索引模块212选择了该存储位置。例如,如图2所示,流状态计时模 块220配置为更新流状态值TS2,以响应于基于索引值24识别了由 地址ADN-1表示的存储位置。特别地,当在流模块200接收到数据 包20时,索引模块212基于数据包20的部分21(例如,数据头部分, 尾部分)确定一个或多个索引值24。流状态计时模块220基于一个索 引值24选择由地址ADN-1表示的存储位置,并且接着相应地,将对 应的流状态值TS2替换为数据包20的时间戳(即,数据包20被接收 的时间)。因此,流状态值TS2,其表示数据流的最后一个数据包的 时间戳,被更新,以响应于在流模块200接收到数据流的数据包20。

对于另一个例子,如图2所示,响应于基于索引值24识别由地 址AD6表示的存储位置,流状态计时模块220配置为更新流状态值t, 表示一种计时器其记录接收数据流的第一个数据包和接收最后一个 数据包之间的时间总量。特别地,当数据包20在流模块200被接收 时,索引模块212基于数据包20的部分21(例如,数据头部分,尾 部分)确定一个或多个索引值24。流状态计时模块220基于一个索引 值24选择由地址AD6表示的存储位置,并且接着相应地,将相应的 流状态值t替换为接收数据流的第一数据包和接收数据包20(即,数 据流的最后一个数据包)之间的更新的时间总量。因此,流状态值t, 表示计时器其记录了接收数据流的第一个数据包和接收最后一个数 据包之间的时间总量,响应于在流模块200接收到数据流的数据包20 而被更新。

在图2示出的例子中,流状态提高模块210和/或流状态计时模块 220可以配置为共同更新流状态值(图2中未示出),其表示用于数 据流的平均带宽计数器,以响应于基于索引值24识别平均带宽计数 器被存储的存储位置。特别地,当数据包20在流模块200被接收时, 索引模块212基于数据包20的部分21(例如,数据头部分,尾部分) 确定一个或多个索引值24。如这里详细描述的,流状态提高模块210 和流状态计时模块220分别更新表示数据包大小计数器的流状态值, 以及表示记录接收数据流的第一个数据包和接收最后一个数据包之 间的时间总量的计时器的流状态值。随后,流状态提高模块210和/ 或流状态计时模块220选择平均带宽计数器被存储的存储位置,并接 着相应地,用基于已更新的数据包大小计数器和计时器而计算出的新 值来更新平均带宽计数器。因此,流状态值,其表示用于数据流的平 均带宽计数器,响应于在流模块200接收到数据流的数据包20而被 更新。

在一些实施例中,流状态计时模块220可以配置为基于一个或多 个算法减少(例如,在单独的存储位置减少)一个或多个流状态值22, 而与在流模块200接收的输入的数据包无关。在一些实施例中,流状 态计时模块220可以配置为周期性地减少表示用于数据流的数据包计 数器的流状态值22,而与在流模块200接收的数据流的数据包无关。 如图2示出的例子所示,流状态计时模块220可以配置为在每个固定 时段之后将存储在由地址AD3表示的存储位置上的数据流的数据包 计数器减小固定的值。该固定值和该固定时段可以在算法中预先确定。 例如,流状态计时模块220可以配置为每30分钟之后将数据包计数 器减小1。对于另一个例子,流状态计时模块220可以配置为在每24 小时之后将数据包计数器减小2。类似地,在一些实施例中,流状态 计时模块220可以配置为周期性地减小表示数据流的数据包大小计数 器的流状态值22,不考虑在流模块200接收的数据流的数据包。

在一些实施例中,流状态计时模块220可以配置为根据在流模块 200接收的输入的数据包,基于一个或多个算法减少一个或多个流状 态值22。在一些实施例中,流状态计时模块220可以配置为:如果在 一段固定的时段内在流模块220没有接收到数据流的数据包,则将用 于表示数据流的数据包计数器的流状态值22减小一个固定的值。换 句话说,流状态计时模块220可以配置为:自在流模块200接收到数 据流的最后一个数据包起的一段固定时段之后,将表示用于数据流的 数据包计数器的流状态值22减小一个固定值。该固定值和固定时段 可以在算法中预先确定。例如,如图2所示,在自数据流的最后一个 数据包在流模块200被接收起的一个小时之后,流状态计时模块220 配置为将存储在由地址AD3表示的存储位置的用于数据流的数据包 计数器减小1。在这种实施例中,数据流的计时信息,例如,数据流 的最后一个数据包的时间戳,可以被存储在存储器240中作为流状态 值,并且当需要时可以被提供给流状态计时模块220。类似地,在一 些实施例中,流状态计时模块220可以配置为:如果在一段固定的时 段内在流模块220没有接收到数据流的数据包,将表示用于数据流的 数据包大小计数器的流状态值22减小一个固定值。

在一些实施例中,冲突偏好可以用来解决流状态提高模块210和 流状态计时模块220之间的冲突。例如,如果流状态提高模块210和 流状态计时模块220试图在相同时间(或在相同时段内)改变流状态 值22的流状态值,流模块200可以配置为基于冲突偏好来解决该冲 突。在一些实施例中,冲突偏好可以被定义成它触发流模块200来, 例如允许被流状态提高模块210改变以及取消流状态计时模块220的 改变(或相反)。在一些实施例中,冲突偏好可以被定义成它触发流 模块200来,例如,在流状态计时模块220的改变被计划之前,计划 流状态提高模块210的改变(或相反)。

在一些实施例中,存储器240内部的存储位置可以被初始化为一 个或多个指定的流状态值。例如,由地址AD1-AD4表示的存储器240 的存储位置可以在任何数据流的数据包在流模块200被接收之前,被 初始化为用于数据包计数器的初始值(例如,零)。在一些实施例中, 存储器240内部的一个或多个存储位置可以在流模块200操作期间的 任何时间被设置为一个指定的流状态值。例如,存储器240内部的存 储位置可以是随机地、周期性地、和/或等等在流模块200的操作期间 设置为一个或多个指定的流状态值。在一些实施例中,当存储位置, 例如,由索引模块212第一次选择时,存储器240的存储位置(例如, 由地址值AD1表示的存储位置)可以被设置为指定的初始值(例如, 数据包计数器为零)。

图3是根据一实施例的示意图,举例说明一种交换器300配置为 转发数据包,包括在输入端口302接收数据包,分类数据包到输出队 列(例如,输出队列330,输出队列340),并从输出端口304发送 数据包。交换器300可以是操作性地在通信连接网络中从其他设备接 收数据或向其他设备发送数据(例如,数据包和/或数据信元的数据流) 的任何设备。在一些实施例中,交换器300可以是多级交换架构(例 如,3级交换架构,5级交换架构)中的分布式交换器/路由器的一个 或多个部分。例如,尽管未示出,交换器架构可以包括入口级,中间 级,和出口级。在一些实施例中,交换器架构可以是可再配置地(例 如,可再布置地)无阻断的交换器架构和/或时分复用交换器架构。在 一些实施例中,交换器架构可以被包括在数据中心网络(例如,一数 据中心网络的核心部分)中。特别地,交换器架构可以定义数据中心 网络的核心部分,它可以包括设备的网络或互联。在一些实施例中, 交换器架构可以基于Clos网络结构(例如,严格意义的无阻塞Clos 网络,Benes网络)来定义,其形成用于分布式交换器/路由器系统的 数据平面,该分布式交换器/路由器系统可以被包括在(或定义)数据 中心网络的核心之中。在一些实施例中,一个或多个外围处理设备(例 如,计算节点,存储节点,服务节点和/或路由器)和/或其他网络设 备可以被操作性地耦合到(例如,包括在…内部)数据中心网络。涉 及交换器架构的更多细节在以下中阐述:2009年3月31日提交的共 同未决U.S.专利申请No.12/414,825,标题为“DistributedMulti-Stage SwitchFabric”,2008年12月29日提交的共同未决U.S.专利申请 No.12/345,502,标题为“MethodsandApparatusRelatedtoaModular SwitchArchitecture”,以及2008年12月29日提交的共同未决U.S. 专利申请No.12/345,500,标题为“SystemArchitectureforaScalable andDistributedMulti-StageSwitchFabric”,这里合并引用它们所有的 内容。

如图3所示,交换器300可以包括一个或多个输入端口302和一 个或多个输出端口304。输入端口302和输出端口304可以是一个或 多个通信接口和/或网络接口(例如,40十亿比特(Gb)以太网接口, 100Gb以太网接口,等)的一部分,交换器300可以通过它们发送数 据(例如,数据包和/或数据信元的数据流)给通信网络中的其他设备 和/或接收来自通信网络中的其他设备的数据。与交换器300通信的设 备可以利用任何适合的连接,例如像光连接(例如,光缆和光学连接 器),电连接(例如,电缆和电连接器),无线连接(例如,无线链 路和无线信号收发器)和/或类似,操作性地耦合到交换器300的一个 或多个输入端口302和/或输出端口304。类似地说,在一些实施例中, 输入端口302和输出端口304可以利用双绞线电信令经由电缆,或利 用光纤信令经由光纤缆线,或利用无线信令经由两个无线信号收发器 之间的无线链路,实现物理层。在一些实施例中,一些输入端口302 和/或输出端口304实现一个物理层例如双绞线电信令,并且其他的输 入端口302和/或输出端口304实现不同的物理层例如光纤信令。

此外,输入端口302和输出端口304可以允许交换器300通过一 个或多个通信协议(例如,以太网协议,多协议标签交换 (multi-protocollabelswitching,MPLS)协议,光纤信道协议,通过 以太网的光纤信道(fibre-channeloverEthernet)协议,与Infiniband 有关的协议,等),与耦合于交换器300的其他设备,例如像计算机 服务器,来进行通信。在一些实施例中,一些输入端口302和/或输出 端口304实现一种例如以太网的协议并且其他输入端口302和/或输出 端口304实现一种例如像光纤信道的不同的协议。因此,交换器300 可以利用相同的或不同的物理层和/或协议经由一个或多个输入端口 302和/或输出端口304,与多个设备进行通信。

在一些实施例中,交换器300可以配置为在一个特定的输入端口 302接收给定数据流的每个输入数据包,和/或从特定输出端口304发 送数据流的每个输出数据包。例如,当在交换器300和另一个设备(例 如,数据流的源设备,数据流的目的地设备)之间构建通信会话来传 输数据流的数据包时,输入端口302和/或输出端口304被识别用于那 种通信会话,以便这种通信会话中的所有数据包都通过特定的输入端 口302和/或特定的输出端口304被传输。在一些其他的实施例中,交 换器300可以使用一个以上的输入端口302和/或一个以上的输出端口 304来传输单个数据流的数据包。

在一些实施例中,在一个输入端口302接收数据流的数据包之后, 交换器300可以处理数据包(例如,通过转发模块320),基于队列 数据库(例如,队列数据库325)提供的信息转发数据包给一个输出 队列(例如,输出队列330,输出队列340),从输出队列移动数据 包到一个输出端口304,并且最后从输出端口304发送出数据包。包 括流模块310的转发模块320在交换器300内部的处理器306内部执 行。在一些实施例中,转发模块320的一个或多个部分可以包括基于 硬件的模块(例如,数字信号处理器(DSP),现场可编程门阵列 (FPGA))和/或基于软件的模块(例如,在处理器上执行的计算机 代码模块,在处理器上执行的处理器可读指令集合)。在一些实施例 中,关联于转发模块320的一个或多个功能可以由不同的模块执行和 /或组合为一个或多个模块。在一些实施例中,转发模块320可以被包 括在一个或多个物理单元(例如架单元或机架)中。

类似于图1中描述的流模块100以及图2中描述的流模块200, 流模块310可以配置为处理关联于在一个或多个输入端口302接收的 数据流的数据包的流状态值。此外,转发模块320可以配置为基于由 流模块310处理的数据包的流状态值,转发数据包到一个或多个输出 队列(例如,输出队列330,输出队列340)之中。转发模块320,流 模块310,输出队列330,输出队列340,以及队列数据库325之间的 交互细节将在下文结合图4详细描述。

如图3所示,输出队列330,输出队列340,以及队列数据库325 被存储在交换器300的存储器308中。在一些实施例中,存储器308 可以是,例如随机访问存储器(RAM)(例如,动态RAM,和静态 RAM),闪存,可移动存储器,和/或等等。在一些实施例中,输出 队列(例如,输出队列330,输出队列340)和队列数据库(例如, 队列数据库325)可以实现为,例如关系数据库,表,和/或等等。在 一些实施例中,输出队列330,输出队列340,和队列数据库325每 一个可以被存储在存储器308内部的一个或多个存储位置中。在一些 实施例中,尽管图3中未显示,交换器300可以包括两个以上输出队 列和/或一个以上队列数据库。

图4A是根据一实施例的示意图,其举例说明一种交换器300, 包括转发模块320,配置为基于队列数据库325中存储的数据将输入 的数据包(例如,数据流40,数据流42,数据流44)分类到输出队 列(例如,输出队列330,输出队列340)。类似于图1中的流模块 100和图2中的流模块200,当在流模块310接收到数据包时,流模 块310可以配置为基于数据包的签名来识别关联于数据流的数据包。 注意尽管图4A显示了流模块310位于转发模块320内并且是其一部 分,但在其他实施例中这些模块可以彼此分离。如这里详细描述的, 在一些实施例中,数据包的签名可以由数据包的至少一部分(例如, 数据头部分)的位值来定义(或基于数据包的至少一部分(例如,数 据头部分)的位值)。例如,数据包的签名可以基于包含在数据包的 数据头中的源标识符和/或目的地标识符来确定。特别地,数据包的签 名可以是基于表示数据包的源标识符和/或目的地标识符的位值根据 哈希函数计算的哈希值。

在一些实施例中,数据包的签名可以是数据流ID,它唯一识别包 括数据包的数据流。例如,如图4A所示,在流模块310接收的数据 包的签名可以基于数据包的数据头中包含的源标识符和/或目的地标 识符。因此,数据包可以由流模块310确定为关联于由数据流40的 数据流ID识别的数据流。在一些其他实施例中,数据包的签名可以 关联于数据流ID,它唯一识别包含数据包的数据流。例如,尽管图 4A中未显示,交换器300可以包括数据结构(例如,表,数据库), 其关联每个数据包签名与数据流ID。因此,数据包可以被确定为关联 于数据流,如果数据包的签名能够被确定,在数据结构中,数据包可 以被确定为关联于数据流的数据流ID。

如结合图1和图2所描述的,当已接收的数据包被识别为与数据 流关联之后,流模块310可以识别与数据流关联的一个或多个流状态 值。此外,流模块310可以修改(例如,增加,减少)与数据流关联 的流状态值,以响应于在流模块310接收到与数据流关联的数据包。 例如,当在流模块310接收数据包并识别为关联于数据流40之后, 流模块310识别一个或多个流状态值,包括表示用于数据流40的数 据包计数器的流状态值、表示用于数据流40的数据包大小计数器的 流状态值、表示用于数据流40的平均带宽计数器的流状态值、以及 表示数据流40的最后一个数据包的时间戳的流状态值,等。此外, 流模块310配置为将数据流40的数据包计数器增加1、将数据流40 的数据包大小计数器增加所接收的数据包的大小、以及相应更新平均 带宽计数器和数据流40的最后一个数据包的时间戳。因此,关联于 数据流40的流状态值被更新,以响应于在流模块310接收到数据流 40的数据包。

如结合图3详细描述的,交换器300包括队列数据库325,输出 队列330,以及输出队列340,其被存储在交换器300的存储器(例 如,如图3所示的存储器308)内部。更特别地,如这里详细描述的, 队列数据库325存储关联于输出队列的数据。每个输出队列(例如, 输出队列330,输出队列340)配置为基于由队列数据库325提供的 数据,接收一个或多个数据流的一个或多个数据包,其通过转发模块 320被转发。每个输出队列接着配置为临时存储数据包,并且最后发 送数据包给交换器300的一个或多个输出端口(例如,如图3所示的 输出端口304)。

图4B是根据一实施例的示意图,举例说明一种队列数据库325 将数据流(例如,数据流40,数据流42,数据流44)与输出队列(例 如,输出队列330,输出队列340)相关联。队列数据库325可以具 有至少两列条目(entry),示出为数据流ID350和输出队列ID360。 第一列,数据流ID350,包含数据流ID(例如,40,42,44),每 个唯一地识别在交换器300接收的数据流。第二列,输出队列ID360, 包含输出队列ID(例如,330,340),每个唯一地识别输出队列,其 用来在发送数据包给一个或多个输出端口之前临时存储数据包。此外, 数据流ID350列的每个数据流ID关联于输出队列ID360列中的一个 输出队列ID。例如,数据流40关联于输出队列330,数据流42和数 据流44关联于输出队列340。队列数据库325被转发模块320用来确 定将数据流的接收到的数据包移动到哪个输出队列中。特别地,转发 模块320将数据流的接收到的数据包移动到在队列数据库325中被识 别为关联于所述数据流的输出队列中。例如,如图4B所示,数据流 40的数据包被转发模块320移动到输出队列330,因为数据流40在 队列数据库325中被识别为关联于输出队列330。类似地,数据流42 或数据流44的数据包被转发模块320移动到输出队列340,因为数据 流42和数据流44在队列数据库325中被识别为关联于输出队列340。

如以上结合图1详细描述的,一个或多个流状态值可以配置为当 状态条件满足或不满足时,基于流状态值触发一种动作。此外,在一 些实施例中,当流状态值匹配状态条件中定义的阈值流状态值时,状 态条件可以被满足。回到图4A,转发模块320可以被触发来访问队 列数据库325,并且当关联于已接收的数据包的一个或多个流状态值 匹配状态条件中定义的一个或多个阈值流状态值时,相应地修改存储 在队列数据库325中的数据(例如,数据流ID,输出队列ID)。特 别地,当关联于已接收数据包的一个或多个流状态值(例如,数据包 计数器,数据包大小计数器,平均带宽计数器,时间戳,等)匹配一 个或多个阈值流状态值(例如,数据包数量阈值,数据包大小阈值, 带宽阈值,时间阈值,等)时,转发模块320可以被触发来访问队列 数据库325,并修改(例如,增加,减少),删除,和/或插入队列数 据库325的关联于已接收的数据包的一个或多个条目(例如,数据流 ID,输出队列ID)。

在一些实施例中,响应于在转发模块320接收到数据流的数据包, 当数据流的数据包计数器被增加到一个数据包数量阈值时,转发模块 320可以被触发来改变关联于队列数据库325中的数据流的输出队列 ID。例如,当在转发模块320接收到数据流42的数据包之后,用于 数据流42的数据包计数器被从9增加到10,它等于预定的数据包数 量阈值。结果是,在队列数据库325中,转发模块320被触发将关联 于数据流ID42的输出队列ID(如果当数据包计数器是9时输出队列 ID是330)从330改变到340。

在一些实施例中,响应于在转发模块320接收到数据流的数据包, 当数据流的数据包大小计数器被增加从而经过(cross)(例如,等于, 大于)一个数据包大小阈值时,转发模块320可以被触发来改变队列 数据库325中的关联于数据流的输出队列ID。例如,当大小为20的 数据流42的数据包在转发模块320被接收之后,用于数据流42的数 据包大小计数器从100增加到120,它经过预定的数据包大小阈值105。 结果是,在队列数据库325中,转发模块320被触发将关联于数据流 ID42的输出队列ID(如果当数据包大小计数器是100时输出队列ID 是330)从330改变到340。

在一些实施例中,响应于在转发模块320接收到数据流的数据包, 当数据流的平均带宽计数器被增加从而经过(例如,等于,大于)一 个带宽阈值时,转发模块320可以被触发来改变队列数据库325中的 关联于数据流的输出队列ID。例如,当数据流42的数据包在转发模 块320被接收之后,用于数据流42的平均带宽计数器基于用于数据 流42的已更新的数据包大小计数器以及已更新的记录接收数据流42 的第一个数据包与接收最后一个数据包之间的时间总量的计时器,从 1000位/秒更新到1100位/秒。结果是,已更新的平均带宽计数器经 过预定带宽阈值1050位/秒,在队列数据库325中,转发模块320被 触发将关联于数据流ID42的输出队列ID(如果当平均带宽计数器是 1000位/秒时输出队列ID是330)从330改变到340。

在一些实施例中,当响应于根据预定调度减小数据包计数器,用 于数据流的数据包计数器被减少到一个数据包数量阈值时(所述预定 调度与在转发模块320接收到数据流的数据包无关),转发模块320 可以被触发来改变队列数据库325中的关联于数据流的输出队列ID。 例如,根据预定调度,流模块310配置为每30分钟将数据流42的数 据包计数器减小1(如果用于数据流42的数据包计数器大于零),而 不考虑接收到数据流42的任何数据包。当数据流42的数据包计数器 从6减小到5(其等于预定数据包数量阈值)时,在队列数据库325 中,转发模块320被触发将关联于数据流ID42的输出队列ID(如果 当数据包计数器是6时输出队列ID是340)从340改变到330。

在一些实施例中,响应于根据预定调度减少的数据包计数器,当 用于数据流的数据包计数器被减少到数据包数量阈值时(其中预定调 度依赖于在转发模块320接收的数据流的数据包),转发模块320可 以被触发来改变队列数据库325中的关联于数据流的输出队列ID。例 如,当在转发模块320接收到数据流42的最后一个数据包之后,根 据预定调度,流模块310配置为每30分钟将数据流42的数据包计数 器减小1(如果用于数据流42的数据包计数器大于零)。也就是,如 果自从数据流42的最后一个数据包被接收起的30分钟之内没有数据 流42的数据包被接收,则数据流42的数据包计数器被减少1,并且 如果在每个30分钟之内没有数据流42的数据包被接收,则将持续地 每隔30分钟被减少1。类似地说,当用于数据流42的数据包计数器 从6减少到5,其等于预定数据包数量阈值,在队列数据库325中, 转发模块320被触发将关联于数据流ID42的输出队列ID(如果当数 据包计数器为6时输出队列ID为340)从340改变到330。在这种实 施例中,转发模块320配置为基于被存储作为关联于流模块310中数 据流的流状态值的最后一个数据包的时间戳,确定数据流的最后一个 数据包在转发模块320被接收的时间。

在一些实施例中,当用于数据流的数据包计数器被减少到数据包 数量阈值时,或用于数据流的数据包大小计数器被减少到数据包大小 阈值时,转发模块320可以被触发来删除条目,包括队列数据库325 中的至少一个数据流ID以及关联的输出队列ID。例如,当数据流44 的数据包计数器从1减少到0时(例如,根据预定调度),其等于预 定数据包数量阈值,该转发模块320被触发在队列数据库325中删除 数据流ID44以及关联的输出队列ID340的条目。

在一些实施例中,当响应于在转发模块320接收到数据流的第一 个数据包,用于数据流的数据包计数器或数据包大小计数器在流模块 310中被定义和/或被初始化时,转发模块320可以被触发来在队列数 据库325中定义一个新的条目,包括至少一个数据流ID以及一个关 联的输出队列ID。例如,当在转发模块320接收到数据流40的第一 个数据包之后,数据流40的数据包计数器在流模块310中被定义并 被初始化为1。结果是,转发模块320被触发来在队列数据库325中 定义一个新的条目,其包括数据流ID40以及关联的输出队列ID330。

回到图3,在转发模块320基于队列数据库325中提供的数据转 发数据包给一个输出队列(例如,输出队列330,输出队列340)之 后,数据包被放置在输出队列中(例如,数据包队列),相应地移动 到一个输出端口304,并最后从输出端口304发送到目的地设备。在 一些实施例中,输出队列(例如,输出队列330,输出队列340)可 以被实现为先进先出(FIFO)队列。换句话说,较另一个数据包早放 置在队列中的数据包较早于另一个数据包离开队列(例如,到达输出 端口)。

在一些实施例中,输出队列配置为以不同速率移动数据包到一个 或多个输出端口304。即,一个输出队列可以移动它的数据包到一个 或多个输出端口的速率不同于另一个输出队列移动它的数据包到一 个或多个输出端口的速率。例如,如图3所示,输出队列330可以配 置为以10个数据包每单位时间(例如,毫秒)的速率移动数据包到 一个或多个输出端口304,而输出队列340可以配置为以2个数据包 每单位时间(例如,毫秒)的速率移动数据包到一个或多个输出端口 304。对于另一个例子,输出队列340可以配置为以输出队列330移 动数据包到一个或多个输出端口304的速率的一半(或,大致一半) 的速率移动数据包到一个或多个输出端口304。换句话说,在任何固 定的时段内,由输出队列340移动到一个或多个输出端口304的数据 包数量是由输出队列330移动到一个或多个输出端口304的数据包数 量的一半(或,大致一半)。

在一些实施例中,具有相对慢的输出速率(即,输出队列移动数 据包到一个或多个输出端口的速率)的输出队列倾向于转发关联于高 吞吐量的通信连接的数据流的数据包(例如,转送大文本文件,批量 处理数据,等)。另一个方面,具有相对快的输出速率的输出队列倾 向于转发关联于等待时间敏感(通常是低吞吐量)通信连接的数据流 的数据包(例如,视频流,控制通信,等)。因此,关联于等待时间 敏感通信连接的数据流的数据包从输出队列到输出端口的移动可以 快于关联于高吞吐量通信连接的数据流的数据包。在一些实施例中, 具有相对慢输出速率的输出队列被称为低优先级输出队列,并且具有 相对快输出速率的输出队列被称为高优先级输出队列。

图5是根据一实施例的一流程图,举例说明了一种用于基于接收 到的数据包更新数据流计数器(例如,数据包计数器,数据包大小计 数器)的方法。在502,数据包可以在交换设备上被接收。数据包可 以关联于数据流,其起源于一台源设备并且去往一台目的地设备。如 参考图3详细描述的,例如,数据包可以在交换设备(例如,交换器 300)的输入端口(例如,输入端口302)被接收并且接着转发到交换 设备的转发模块(例如,转发模块320),和/或进一步转发到转发模 块内部的流模块(例如,流模块310)。

在504,已接收数据包的数据流ID可以被确定。例如,如结合图 2详细描述的,流模块(例如,流模块200)的索引模块(例如,索 引模块212)可以基于已接收数据包的一部分(例如,数据包20的部 分21)执行一索引操作来确定具有已接收数据包的数据流的数据流 ID(例如,索引值24)。在一些实施例中,索引值24可以是基于已 接收数据包的一部分(例如,数据包20的部分21)计算的哈希值, 所述部分包括数据流的源标识符和/或目的地标识符。在一些实施例中, 数据流ID可以关联于存储在交换设备中的存储器中的流表中的一个 或多个条目。例如,索引值24可以被用来识别存储在存储器240中 的一个或多个存储器位置上的一个或多个流状态值。在一些实施例中, 索引值24可以用来识别存储在流表中的数据包计数器,所述流表关 联于包含已接收数据包的数据流。

在506,可以在流模块确定已接收的数据包的数据流ID是否关联 于流表中的条目。例如,如以上参考图2详细描述的,流状态提高模 块210可以配置为确定数据包20的索引值24是否可以用来识别关联 于存储在存储器240内部的一个或多个存储位置上的数据包20(或等 同地说,包括数据包20的数据流)的一个或多个流状态值。特别地, 流状态提高模块210可以配置为确定数据包20的索引值24是否可以 用来识别关联于包括数据包20的数据流的数据包计数器,其存储在 存储器240内部的存储位置上。

在508,如果已接收数据包的数据流ID被确定不关联于流表中的 数据流计数器(例如,数据包计数器,数据包大小计数器)的任何条 目,关联于数据流的新的数据流计数器可以在流表中被定义(例如, 定义,初始化)。例如,如以上结合图2详细描述的,如果数据包20 的索引值24由流状态提高模块210确定为不能识别存储在存储器240 中的任何流状态值,流状态提高模块210指示没有流状态值被存储在 关联于包括数据包20的数据流的存储器240中。换句话说,数据包 20是在流模块200接收的数据流的第一个数据包。结果是,关联于包 括数据包20的数据流的新的数据包计数器可以在存储器240的存储 位置(例如,由地址AD3表示的存储位置)被定义。此外,关联于 包括数据包20的数据流的数据包计数器可以被初始化为初始值(例 如,零)。

在510,如果已接收数据包的数据流ID被确定为关联于流表中的 数据流计数器(例如,数据包计数器,数据包大小计数器)的条目(在 506示出),或一种新的数据流计数器被定义在流表中用于包括已接 收数据包的数据流(在508示出),可以在流模块处将数据流的数据 流计数器中存储的值与计数器阈值进行比较。例如,如以上参考图2 详细描述的,如果数据包20的索引值24由流状态提高模块210确定 为能识别存储在存储器240内部的至少一个流状态值(例如,数据包 计数器,数据包大小计数器),或新的数据包计数器在存储器240内 部的存储位置被定义并初始化(例如,初始化为零)用于具有数据包 20的数据流,接着用于包括数据包20的数据流的数据包计数器在存 储器240内部的存储位置(例如,由地址AD3表示的存储位置)被 识别,并且对于流状态提高模块210来说是可用的(例如,可访问)。 接下来,流状态提高模块210可以配置为比较存储在数据包计数器中 的值与预定计数器阈值,来确定存储在数据包计数器中的值是否等于 预定的计数器阈值。

在512,如果存储在包含已接收数据包的数据流的数据流计数器 中的值(例如,数据包计数器,数据包大小计数器)被确定为等于计 数器阈值,那么转换信号可以被发送给队列数据库。特别地,转换信 号可以从接收并处理已接收数据包的转发模块发送到存储数据的队 列数据库,其关联于将已接收数据包分类为一个或多个输出队列。此 外,转换信号可以是引起队列数据库修改关联于队列数据库中存储的 数据流的一个或多个条目的信号。例如,如以上参考图4A和图4B 描述的详细内容,如果转发模块320确定存储在数据流40的数据包 计数器中的值等于预定计数器阈值,转发模块320可以配置为发送转 换信号到队列数据库325,引起队列数据库325将关联于数据流ID40 的输出队列ID从330改变到340。

在514,流表中的数据流计数器(例如,数据包计数器,数据包 大小计数器),其关联于具有已接收数据包的数据流,可以被增加。 例如,如结合图2详细描述的,响应于接收到数据包20以及识别存 储器240内部的包括数据包20的数据流的数据包计数器(例如,存 储在由地址AD3表示的存储位置上),流状态提高模块210可以配 置为将数据包计数器增大1。

在516,交换设备可以等待下一个数据包,并且在接收到新的数 据包时,对接收到的数据包重复操作502-514。例如,结合图2,流 模块200可以在数据包20被处理之后等候下一个数据包。接收到新 的数据包之后,流模块200和交换设备的其他部分可以对新的数据包 重复已经对数据包20执行的操作502-514。

图6是根据一实施例的示意图,举例说明了一种流模块600包括 两个哈希模块(例如,哈希模块620,哈希模块640),它们配置为 共同确定流高速缓存(即,流高速缓存610)中的存储位置以及两个 哈希表(即,哈希表630,哈希表650),在这两个哈希表中存储有 关联于数据流的信息。更特别地,如结合图7详细描述的,哈希模块 620和哈希模块640配置为共同确定流高速缓存610中的存储位置、 哈希表630、以及哈希表650,其中存储有关联于一个或多个数据流 的信息。该存储的信息包括关联于数据流的流状态值(例如,数据包 计数器,数据包大小计数器,等)以及涉及数据流的其他数据。

在一些实施例中,哈希模块620可以配置为基于关联于数据流的 数据包的一部分(例如,数据头部分)执行哈希函数来计算哈希值。 此外,在一些实施例中,哈希值可以基于数据包的一部分由哈希函数 计算,所述部分是数据包的共同部分,该共同部分包括在与特定数据 流关联的所有数据包上相同的位值。结果是,被计算的哈希值在所有 关联于数据流的数据包上相同。因此,这种被计算的哈希值可以用作 为索引值来确定哈希表630中的存储位置(如果有哈希表630中的任 何存储位置关联于数据流),其中关联于数据流的流状态值(例如, 数据包计数器,数据包大小计数器)被存储。例如,哈希模块620可 以配置为基于关联于数据流的数据包的数据头的L2部分执行哈希函 数来计算哈希值,其中数据头的L2部分包括共同的位值,其表示在 所有关联于数据流的数据包上相同的源标识符和/或相同的目的地标 识符。结果是,在关联于数据流的所有数据包上计算出的哈希值是相 同的。因此,哈希值用作为索引值被流模块600用来确定在哈希表630 中的存储位置,其中存储有数据流的数据包计数器,或数据流的数据 包大小计数器。

类似于哈希模块620,哈希模块640也可以配置为基于关联于数 据流的数据包的共同部分,执行哈希函数来计算哈希值,所述部分包 括在所有关联于特定数据流的数据包上的相同的位值。结果是,如这 里详细描述的,在关联于数据流的所有数据包上计算出的哈希值是相 同的,并且可以用作为索引值来确定哈希表650中的存储位置(如果 哈希表650的任何存储位置关联于数据流),其中关联于数据流的数 据(例如,标记)被存储。

在一些实施例中,哈希模块640可以配置为基于哈希模块620使 用的数据包的同一个共同部分,执行哈希函数(其不同于哈希模块620 中执行的哈希函数),来生成哈希值,其不同于由哈希模块620生成 的哈希值。在一些其他实施例中,哈希模块640可以配置为基于数据 包的共同部分执行哈希函数,该共同部分不同于哈希模块620使用的 数据包的共同部分,来生成哈希值,该哈希值不同于由哈希模块620 生成的哈希值。类似于由哈希模块620使用的数据包的共同部分,由 哈希模块640使用的数据包的共同部分还包括在所有关联于数据流的 数据包上相同的位值,以便由哈希模块640生成的哈希值在所有关联 于数据流的数据包上也是相同的。在所有以上结合图6描述的实施例 中,一旦哈希模块620配置为生成用于关联于两个或更多不同数据流 的数据包的相同哈希值(即,生成相同索引值的不同数据流冲突), 哈希模块640可以配置为生成用于关联于不同数据流的数据包的不同 的哈希值,以便有关索引值计算的冲突可以被解决,如下面结合图7 详细描述的。

在一些实施例中,流高速缓存610,哈希表630,以及哈希表650 可以在流模块600的存储器中实现,其中存储器可以是,例如随机访 问存储器(RAM)(例如,动态RAM,和静态RAM),闪存,可移 除存储器,和/或等等。在一些实施例中,哈希表630可以配置为存储 关联于一个或多个数据流的一个或多个流状态值(例如,数据包计数 器,数据包大小计数器)。关联于数据流的每个流状态值的存储位置 可以由索引值识别,其可以由哈希模块620基于关联于数据流的数据 包的一部分确定为哈希值。例如,如图6所示,一个或多个数据包计 数器,每个分别表示唯一的数据流,可以被存储在哈希表630的条目 (例如,A,B,C,D,E,F)中。数据包计数器的每个条目可以由索引值识 别,其由哈希模块620基于关联于对应的数据流的数据包的一部分确 定为哈希值。

在一些实施例中,哈希表650可以配置为存储一个或多个条目(例 如,索引值),每个表示唯一的数据流。类似于哈希表630,关联于 数据流的每个条目的存储位置可以由索引值识别,其可以由哈希模块 640基于关联于数据流的数据包的一部分确定为哈希值。例如,如图 6所示,一个或多个索引值,每个分别表示唯一的数据流,可以被存 储在哈希表650的条目中(例如,J,K,L,M,N,O)。条目中的 每个索引值可以被哈希模块640基于关联于对应的数据流的数据包的 一部分确定为哈希值。

此外,在一些实施例中,关联于存储在哈希表630中的一个或多 个流状态值的每个数据流还与存储在哈希表650中的条目关联,并且 反之亦然。例如,如图6所示,六个数据包计数器,每个表示唯一的 数据流,被分别存储在哈希表630的六个条目A,B,C,D,E,F 中。与此同时,六个索引值,每个表示相同的六个数据流中的一个, 被存储在哈希表650中的六个条目J,K,L,M,N,O中。在这种 实施例中,关联于存储在哈希表630中的流状态值的每个数据流还可 以由哈希表650中存储的一个条目识别。

类似于哈希表630,流高速缓存610可以配置为存储关联于一个 或多个数据流的一个或多个流状态值(例如,数据包计数器,数据包 大小计数器)。关联于数据流的每个流状态值的存储位置可以由索引 值识别,其基于关联于数据流的数据包的一部分来计算。在一些实施 例中,索引值可以基于关联于数据流的数据包的共同部分来计算,其 包括在数据流的所有数据包上相同的源标识符和/或目的地标识符。在 一些实施例中,索引值可以由哈希函数计算,其不同于哈希模块620 中执行的哈希函数或哈希模块640中执行的哈希函数。在这种实施例 中,流高速缓存610使用的索引值不同于哈希表630所用的索引值(即, 哈希模块620产生的哈希值)或哈希表650所用的索引值(即,哈希 模块640生成的哈希值)。

在一些实施例中,如结合图7详细描述的,流高速缓存610,哈 希模块620,哈希模块640,哈希表630,以及哈希表650可以配置为 一起解决有关用于多个数据流的索引值计算的冲突。特别地,哈希模 块620可以生成用于每个唯一的数据流的索引值(例如哈希值)。一 旦由哈希模块620生成的用于两个或以上的数据流的索引值相同,仅 仅一个数据流可以关联于哈希表630。也就是说,仅仅一个数据流的 流状态值可以被存储在哈希表630中,并且由索引值识别。此外,由 哈希模块640生成的用于特定数据流的不同哈希值可以被存储在哈希 表650中。与此同时,具有和特定数据流同样的索引值的其他数据流 的流状态值可以被存储在流高速缓存610中,并且由对于每个唯一的 数据流都不同的索引值识别。因此,每个唯一的数据流的流状态值可 以唯一地在流高速缓存610或哈希表630中的一个或多个存储位置中 被识别。

在一些实施例中,流模块600可以配置为定义,删除,和/或修改 (例如,增加,减少)存储在流高速缓存610、哈希表630、以及哈 希表650中的数据条目。例如,流模块600可以配置为定义一个新的 条目(其表示关联于流高速缓存610中的数据流的数据包计数器), 并且初始化该数据包计数器为一个初始值(例如,零)。对于另一个 例子,流模块600可以配置为增加关联于存储在哈希表630中的数据 流的数据包大小计数器,以响应于接收到数据流的新的数据包。对于 还一个例子,流模块600可以配置为从哈希表630删除关联于数据流 的数据包计数器的条目,以响应于数据包计数器被减少到一个预定的 数据包数量阈值(例如,零)。相应地,流模块600配置为从哈希表 650删除关联于数据流的索引值的条目。

图7是根据一实施例的流程图,举例说明了一种方法用于确定数 据流计数器(例如,数据包计数器,数据包大小计数器)被存储的存 储器位置,并基于接收的数据包更新数据流计数器。在702,数据包 可以在交换设备接收。特别地,数据包可以在交换设备的流模块(例 如,图6所示的流模块600)接收。数据包可以关联于起始于源设备 且去往目的地设备的数据流。如以上结合图3详细描述的,例如,数 据包可以在交换设备(例如,交换器300)的输入端口(例如,输入 端口302)接收且接着转发到交换设备的流模块(例如,流模块310)。

在704,可以确定已接收的数据包的标识符是否关联于流高速缓 存中的数据流计数器的条目。在一些实施例中,已接收的数据包的标 识符可以是以上结合图5详细描述的数据流ID。也就是,流模块可以 配置为基于数据流的已接收的数据包的一部分,生成用于已接收的数 据包的(或等同地说,用于包括已接收数据包的数据流的)索引值, 所述部分包括数据流的源标识符和/或目的地标识符。流模块可以配置 为确定生成的索引值是否可被用来识别关联于流高速缓存中的数据 流的数据流计数器(例如,数据包计数器,数据包大小计数器)的条 目。例如,如图6所示,流模块600可以配置为基于数据包的包括数 据流的源标识符和/或目的地标识符的部分,生成用于数据流的已接收 数据包的索引值。流模块600可以被配置为确定已生成的索引值是否 可以用来识别用于流高速缓存610中的数据流的数据包计数器。

在706,如果已接收数据包的标识符被确定为不关联于流高速缓 存中的数据流计数器的条目,哈希值1可以被计算用于已接收的数据 包。特别地,哈希值1可以由流模块中的第一哈希模块基于数据流的 接收到的数据包的共同部分(例如,数据头部分)来计算,该部分包 括在数据流的所有数据包上的相同的位值。例如,如以上结合图6详 细描述的,哈希模块620可以配置为基于关联于数据流的已接收的数 据包的数据头的L2部分来计算哈希值1。数据头的L2部分包括相同 的位值(或比特值,bitvalue),其表示在数据流的所有数据包上相 同的源标识符和/或相同的目的地标识符。结果是,计算出的哈希值1 在数据流的所有数据包上相同。因此,这种哈希值1可以用作为索引 值来识别哈希表630的存储位置,关联于数据流的流状态值(例如, 数据包计数器,数据包大小计数器)在那里被存储。

在708,确定已接收的数据包的哈希值1是否关联于哈希表1中 的条目。特别地,流模块可以配置为确定哈希值1是否可用作为索引 值来识别哈希表1中的至少一个存储位置,关联于数据流的流状态值 (例如,数据包计数器,数据包大小计数器)在那里被存储。例如, 如以上结合图6详细描述的,流模块600可以配置为确定由哈希模块 620计算的哈希值1是否可以用作为索引值来识别哈希表630中的存 储位置,用于数据流的数据包计数器在那里被存储。

在710,如果哈希值1被确定为不关联于哈希表1中的任何条目, 关联于数据流的数据流计数器(例如,数据包计数器,数据包大小计 数器)的新条目可以在哈希表1中被定义并初始化。特别地,流模块 可以配置为在哈希表1中定义新的数据流计数器,其被哈希值1索引, 以便数据流计数器关联于包括已接收数据包的数据流。此外,数据流 计数器可以被初始化为一个初始值(例如,零)。例如,如以上结合 图6详细描述的,如果已接收的数据包的哈希值1被确定为不关联于 哈希表630中的任何条目,流模块600可以配置为在哈希表630中定 义包括所接收的数据包的数据流的数据包计数器的新条目,并进一步 初始化该数据包计数器为零。

在712,当在哈希表1中定义新的条目之后,哈希值2可以被确 定用于已接收的数据包,并且在哈希表2中可以定义包括所接收的数 据包的数据流的新条目。特别地,哈希值2可以由流模块中的第二哈 希模块(不同于第一哈希模块)基于数据流的接收到数据包的共同部 分(例如,数据头部分)来计算,所述共同部分包括在数据流的所有 数据包上相同的位值。此外,流模块可以配置为定义一个新的条目, 其表示哈希表2中的数据流,它可以由哈希值2来索引。例如,如以 上结合图6的描述,当用于包括已接收的数据包的数据流的数据包计 数器的新条目在哈希表630中被定义之后,哈希模块640可以配置为 基于已接收数据包的数据头的L2部分计算哈希值2。此外,流模块 600可以配置为在哈希表650中定义包括哈希值2的新的条目,以便 新的条目可用来表示包括已接收数据包的特定数据流。此外,这种新 的条目可以由哈希值2识别。

回到708,如果哈希值1被确定为关联于哈希表1中至少一个条 目,在714可以为已接收的数据包确定哈希值2。特别地,如果用于 包括已接收数据包的数据流的哈希值1被确定为关联于哈希表1中的 条目,这种结果指示包括已接收数据包的数据流或者是关联于存储在 哈希表1中的条目的相同数据流,或者是产生与关联于存储在哈希表 1中的条目的数据流相同的哈希值1的不同数据流。用于包括已接收 数据包的数据流的哈希值2可以被用来区别这两种情况,如下面随后 步骤中详细描述的。如图6中例子所示,如果由哈希模块620计算的 哈希值1被确定为关联于存储在哈希表630中的数据包计数器,哈希 模块640可以配置为基于已接收数据包的数据头的L2部分来计算哈 希值2。

在716,可以确定已接收的数据包的哈希值2是否关联于哈希表 2中的条目。特别地,流模块可以配置为确定哈希值2是否可以用作 为索引值来识别哈希表2中的存储位置,用于包括已接收数据包的数 据流的标识在该存储位置被存储。在一些实施例中,用于数据流的标 识可以是为数据流计算的哈希值2。如图6的例子所示,流模块600 可以配置为确定由哈希模块640计算的哈希值2是否可以用来识别哈 希表650中的存储位置,用于包括已接收数据包的数据流的哈希值2 在该存储位置被存储。

在718,如果存储在哈希表1中的数据流计数器(例如,数据包 计数器,数据包大小计数器)可以被确定为关联于包括已接收数据包 的数据流,该数据流计数器可以被相应地增加。特别地,如果用于包 括已接收数据包的数据流的哈希值2被确定为关联于哈希表2中的条 目(例如,包括在条目中)(在716示出),或在哈希表2中新定义 了关联于数据流的哈希值2的条目(在712示出),这种结果指示该 数据流是与关联于存储在哈希表1中的数据流计数器的数据流相同的 数据流,其由数据流的哈希值1索引。因此,流模块可以配置为相应 地增加关联于存储在哈希表1中的数据流的数据流计数器,以响应于 接收到数据流的数据包。例如,如图6所示,如果由哈希模块640生 成的包括已接收数据包的数据流的哈希值2在哈希表650中被识别, 它表示该数据流与关联于哈希表630中存储的数据包计数器的数据流 是相同的,其由哈希模块620生成的数据流的哈希值1来索引。结果 是,流模块600可以配置为响应于接收到数据流的数据包而将数据包 计数器增加1。

回到716,如果用于包括已接收数据包的数据流的哈希值2被确 定为不关联于哈希表2中的任何条目,在720,关联于数据流的数据 流计数器(例如,数据包计数器,数据包大小计数器)的新条目可以 在流高速缓存中被定义,并被初始化为初始值(例如,零)。特别地, 如果用于包括已接收数据包的数据流的哈希值2被确定为不关联于哈 希表2中的任何条目(例如,没有包括在条目中),这种结果表示该 数据流不同于关联于存储在哈希表1中的数据流计数器的数据流,其 由哈希值1索引,尽管为包括已接收数据包的数据流生成了同样的哈 希值1。结果是,流模块可以配置为在流高速缓存中定义关联于包括 所接收的数据包的数据流的数据流计数器的新条目,并且进一步初始 化该数据流计数器为一个初始值(例如,零)。例如,如图6所示, 如果由哈希模块640基于已接收数据包生成的哈希值2不能被识别为 哈希表650中的条目,这种结果表示存储在哈希表630中的数据包计 数器(它由哈希模块620基于已接收数据包生成的哈希值1索引)不 关联于包括所接收的数据包的数据流。结果是,流模块600配置为在 流高速缓存610中定义关联于具有已接收数据包的数据流的新数据包 计数器,并将其初始化为零。

在722,如果存储在流高速缓存中的数据流计数器(例如,数据 包计数器,数据包大小计数器)被确定为关联于包括所接收的数据包 的数据流,数据流计数器可以被相应地增加。特别地,如果关联于包 括已接收数据包的数据流的数据流计数器的新条目在流高速缓存中 被定义(在720示出),或者已接收数据包的标识符被确定为关联于 流高速缓存中存在的数据流计数器(在704示出),流模块可配置为 相应地增加数据流计数器,以响应于接收到数据流的数据包。例如, 如图6所示,如果存储在流高速缓存610的数据包计数器被确定为关 联于具有已接收数据包的数据流,流模块600可以配置为将数据包计 数器增大1,以响应于接收到数据流的数据包。

在724,当存储在哈希表1(在718示出)或流高速缓存(在722 示出)中的关联于数据流的数据流计数器(例如,数据包计数器,数 据包大小计数器)响应于接收到数据流的数据包而被增加之后,流模 块可以等候下一个数据包。此外,接收到下一个数据包之后,流模块 可以配置为对所接收的数据包重复操作702-722。例如,如图6所示, 当响应于接收到数据流的数据包而将存储在哈希表630或流高速缓存 610中的关联于数据流的数据包计数器为增大1之后,流模块600等 候下一个数据包。接收一个新的数据包之后,流模块600配置为对新 接收的数据包重复已经对之前的数据包执行的操作702-722。

这里描述的一些实施例中涉及具有计算机可读媒介(也被称为处 理器可读媒介)的计算机存储产品,其上具有用于执行各种计算机执 行操作的指令或计算机代码。媒介和计算机代码(也被称为代码)可 以是用于专用目的或多个目的的设计和结构。计算机可读媒介的例子 包括,但是不限于:磁性存储媒介例如硬盘,软盘,以及磁带;光学 存储媒介例如激光唱片/数字视频盘(CD/DVD),只读光盘存储器 (CD-ROM),以及全息设备;磁光盘存储媒介例如光盘;载波信号 处理模块;以及特别配置为存储和执行程序代码的硬件设备,例如特 定用途集成电路(ASIC),可编程逻辑电路(PLD),以及只读存储 器(ROM)和RAM设备。

计算机代码的例子包括,但不局限于,微码或微指令,例如由编 译器生成的机器指令,用于生成web服务的代码,以及包括利用注释 器由计算机执行的高水平指令文件。例如,实施例可以被执行利用 Java,C++,或其他编程语言(例如,面向对象的编程语言)以及开 发工具。计算机代码的其他例子包括,但是不局限于,控制信号,加 密代码,以及压缩代码。

尽管上面已经描述的各种实施例,可以理解的是已经通过例子的 方式来公开,不限于,并且可以在形式上实施各种不同的改变。这里 描述的装置和/或方法的任何部分可以通过任何组合来结合,除了相互 排斥的组合。这里描述的实施例可以包括各种不同的功能组合和/或子 组合,描述的不同实施例的组件和/或要素。

尽管以上结合图2示出和描述了存储器240被实现为一个存储库, 在其他实施例中,存储器240可以实现为芯片上或芯片外的存储器的 多个库。例如,存储器240可以实现为四个存储库240a,240b,240c 和240d。存储器240的库可以配置为一起存储单独一个流表或多个分 离的流表。在一些实施例中,两个或更多的存储库240a,240b,240c 和240d可以是相同大小的,或不同大小的。

类似地,如以上结合图2示出和描述的一个例子,流模块200包 括流状态提高模块210的一个例子以及流状态计时模块220的一个实 例,但是在其他实施例中,流状态计时模块220的一个或多个例子可 以用来减少存储器240的一个或多个库中的流条目,以及流状态提高 模块210的一个或多个例子可以用来减少存储器240的一个或多个库 中的流条目。相应地,第一个流状态提高模块可以配置为增加关联于 流表的第一部分的流状态值,以及第二流状态提高模块可以配置为增 加关联于流表的第二部分的流状态值,该第二部分与流表的第一部分 不同。在一些实施例中,第一流状态提高模块,以及第二流状态提高 模块可以配置为在同时的/平行的(或不同的/串行的)时段期间操作。 类似地,第一流状态计时模块可以配置为减少关联于流表的第一部分 的流状态值,以及第二流状态计时模块可以配置为减少关联于流表的 第二部分的流状态值,该第二部分与流表的第一部分不同。在一些实 施例中,第一流状态计时模块,以及第二流状态计时模块可以配置为 在并发的/平行的(或不同的/串行的)时间周期期间操作。如果流表 是相对大和/或对于单独的流状态提高模块和/或单独的流状态计时模 块是不可管理的(例如,从计时的观点不可管理)(如图2所示), 则以这种形式将流表(其可以包括好几千万个流条目(或潜在的流条 目))划分到不同的存储库是令人满意的。此外,在一些实施例中, 单独的流状态提高模块(例如流状态提高模块210)可以特别地被指 定给(例如,用于)且配置为增加大于存储器240的四个库中的一个 中的流条目的状态。类似地,分离的流状态计时模块(例如流状态计 时模块220)可以被指定给(例如,用于)且配置为减少大于存储器 240的四个库中的一个中的流条目的状态。

尽管以上结合图1、图2和图4A示出和描述了包括平均带宽计 数器的流状态值,在其他实施例中,交换设备还可以实现一个或多个 移动平均带宽计数器作为关联于一个或多个数据流的流状态值。特别 地,用于数据流的移动平均带宽计数器记录了由在流模块处在固定的 时间数量的移动时段(例如,在过去10分钟,在过去1小时)中接 收的数据流的数据报占用的移动平均带宽。这种移动平均带宽可以基 于在流模块上接收的数据流的新数据包的大小以及在接收数据流的 数据包和接收之前最近数据包之间的时间数量而被更新(例如,修改)。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号