具有入口控制的业务量管理的制作方法_2

文档序号:8225869阅读:来源:国知局
60,被配置为在低活动期间提供对省电的支持。
[0051] 图3B示出了将分组处理流水线300的功能块映射到多个线程的一个示例。线程 可被配置为在一个或多个处理器核,例如处理器核220a,...,220n上并行地执行。在此示 例中,网络接口 216包括多个端口 235a,...,235n,其中每个端口都包括各自的接收器NIC Rx322a,...,322n(例如,Rx237)和各自的传输器NICTx324a,...,324n,例如Tx236。 例如,分组处理流水线可包括线程0、线程1、线程2、直到线程(n+1)和线程(n+2),其配置 为处理多个业务量流的分组。线程可被配置为在流水线中的不同的分组上并行地执行。在 本示例中,线程0包括PktI/ORx302和Pkt解析304,线程1包括Classif306、监管器 308和负载均衡器210,线程2至(n+1)的每一个包括各自的工作器312a,...,312n,并且 线程(n+2)包括丢弃器314、HierSched316和PktI/OTx318。继续这个示例,分组处理 流水线和相关联的线程可被配置为对一个物理端口处理分组,例如端口 235a、Rx237和Tx 236,其分别对应于NICRX0和NICTX0。
[0052] 在一些实施例中,一个物理端口可以由多个线程所共享。如本文所述,多个子端口 可以与一个物理端口相关联。然后每个子端口都可以与各自的线程相关联。对于一个物理 端口的排列和出列操作可以与同一个线程相关联。与调度器316相关联的排列和出列操作 被配置为由同一个线程,例如线程(n+2)实现。如本文所述,排列和出列操作可以共享,例 如,分组描述符、队列表、队列存储区和活动队列的位图。由同一个线程实现这些操作被配 置为通过允许队列和位图操作是非线程安全的以及维护同一处理器核内部的调度器数据 结构,来提供改进的运行效率。因此,可避免使用用于访问序列化的锁定原语或用于无锁访 问的原子原语。
[0053] 图3C示出了将多个分组处理流水线的功能块映射到多个处理器核的示例330。 在此示例中,分组处理流水线的功能块被映射到两个处理器核,例如图2中的220a,..., 220n。在本示例中,包括PktRx333 (例如PktI/ORx和Pkt解析)和Classif304的分 组接收功能块被映射到第一处理器核332a(例如处理器核220a)和业务量管理334 (如丢 弃器314和HierSched316),并且分组传输功能(例如PktI/OTx318)被映射到第二处 理器核332b(例如处理器核220b)中。在该示例中,业务量管理334包括调度器排列模块、 多个队列以及调度器出列模块。
[0054] 图3D示出了将多个分组处理流水线的功能块映射到多个处理器核的另一个示例 340。在此示例中,分组处理功能块被映射到3个处理器核。在这个示例中,包括PktRx333 和Classif304的分组接收功能块被映射到第一处理器核332a(例如处理器核220a),业务 量管理334功能被映射到第二处理器核332b(例如处理器核220b),并且分组发送功能被 映射到第三处理器核332b(例如处理器核220n)。在该示例中,业务量管理334包括调度 器排列模块、多个队列和调度器出列模块。例如,核332a、332b、332c可以被包括在处理器 210中,并因此可以对应于处理器核220a,...,220n。
[0055] 因此,与多个业务量流相关联的多个分组可以由网络设备200使用一个或多个分 组处理流水线,例如分组处理流水线300,来处理。分组处理流水线300的功能块可以被实 现为网络设备220的一个或多个处理器核220a,...,220n上的一个或多个线程。分组处 理流水线功能块到处理器核220a,...,220n的映射可以是可配置的,并且可以至少部分地 基于,与每个业务量流和相关联的应用程序相关联的性能水平以及为每个功能块启用的一 组特征。例如,一些功能块可以消耗多于一个处理器核220a,...,220n(例如,每个处理器 核220a,...,220n都被配置为执行相同的功能块的不同的实例,但在不同的输入的分组上 的)。在另一个例子中,多个功能块可以被映射到一个处理器核,例如处理器核220a。流水 线化,利用多个线程的处理,以及利用多个核的处理便于处理例如64K或更多分组流。
[0056] 图4示出了与本发明的一个实施例相一致的示例性调度器模块400。调度器400是 图2中调度器模块253的一个例子。调度器400对应于,例如,图3A和3B中的HierSched 316。调度器400包括排列模块402、多个队列404和出列模块406。排列模块402被配置 为在传输之前排列、即暂时存储多个分组。如本文所述,排列模块402被配置为选择多个队 列404中的要在传输之前存储分组的其中一个队列。出列模块406被配置为选择所存储的 分组以提供给网络接口,例如网络接口 216,以便传输。如本文所述,出列模块406被配置为 至少部分地基于多个标准,选择用于传输的下一分组。
[0057] 调度器400被配置为根据策略将来自多个用户(例如客户端)和多个业务量类别 的分组的传输排优先级,所述策略由与每个网络节点,例如网络节点105a,...,105n相关 联的服务等级协议(SLA)指定。调度器400被配置为管理相对大量(例如大约几万或更 多)的业务量流和相关的队列。调度器400被配置为逻辑地将分组分组为多个层级,并至 少部分地基于与分层等级的相关的用户、业务量类别和标准,选择下一要发送的分组。如本 文所述,调度器400还可以被配置为在其选择过程中利用业务量整形、严格优先级和加权 轮叫中的一项或多项。
[0058] 图5示出了与本发明的各种实施例相一致的示例性调度层次结构500。如本文所 述,调度层次结构500表示业务量流的逻辑分组,并且被配置为便于选择用于传输的下一 分组。逻辑分组被进一步配置为便于满足多个用户的每个业务量类别的SLA。逻辑分组可 以数据结构来实现,随后当选择用于传送的下一分组时,将利用所述数据结构来促进提高 处理的效率。
[0059] 在这个例子中,调度层次结构500包括五个层次:端口、子端口、管道、业务量类别 和队列。在一些实施例中,调度层次结构可包括更多或较少的层次。每个层次的成员的数 量可能依赖于,例如,相关的网络设备的能力、服务提供商网络的特性、服务级别协议的要 求、网络节点数量等等。例如,包括具有多个端口的网络接口的网络设备的调度器,例如调 度器253,被配置为实现多个调度层次结构,每个端口,例如端口 235a,...,235n,一个层次 结构,,,。如本文中所述,调度器,例如调度器253,被配置为根据调度层次结构500分组队 列(例如大约上万的队列),并且将一个或多个分组流与每个队列(例如大约数十万或更多 个分组流)相关联,并在选择(即,调度)用于传输的分组时,利用组和相关的标准。
[0060] 调度层次结构500的第一层是端口 502。端口 502对应于一个端口,如网络接口 216的端口 235a,...,235n。例如,端口 502可以对应于具有大概几千兆比特每秒,例如 lGbE(每秒千兆比特以太网)、10GbE和/或40GbE的比特率的以太网Tx端口。调度器253 被配置为以循环顺序调度多个端口,每个端口都具有相同优先级。
[0061] 子端口 504a,...,504s是调度层次结构500的第二层,对应于一个或多个调度层 次结构。每个端口的子端口的数量可以被设定,例如,由网络服务提供商设定。例如,每个 端口的子端口的数量可以是8。在一些实施例中,每个子端口都可以代表预定义的用户组。 多个管道506a,...,506p是调度层次结构500的第三层。每个子端口的管道的数量可以被 设定,例如,由网络服务提供商设定。例如,每个子端口的管道的数量可以是4000。每个子 端口的管道的数量通常大约为几千。在一些实施例中,一个管道可以代表一个用户,例如一 个订户。
[0062] 多个业务量类别508a,. ..,508d是调度层次结构的第四层。业务量类别的数量通 常是2的幂,一般是比较小的。在此示例中,业务量类别的数量为4。因此,每个管道,如管道 506a,都包括四个业务量类别,如业务量类别508a,...,508d。每个业务量类别508a,..., 508d都对应于各自的业务量类型,如语音、交互视频、非交互视频、数据传输(文件传输、应 用程序下载、电子邮件流量、网页浏览等)。每个业务量类别508a,...,508d都可具有相关 联的传输参数,所述传输参数涉及,例如相关的SLA和/或QoS(服务质量)规范。例如,传 输参数可以包括但不限于,相关的允许丢失率、容许延迟和/或可允许的抖动规范。
[0063] 调度层次结构500的第五层对应于多个队列510a,? . .,510d、512a,. . .,512d、 514a,. . .,514d、516a,. . .,516d。在这个例子中,每个管道的队列的数量是16。每个业务量 类别,如业务量类别508a,都包括四个队列,例如队列510a,...,510d。每个队列510a,..., 510d、512a,. . .,512d、514a,. . .,514d、516a,. . .,516d都被配置为存储来自属于同一用户 的同一类型的一个或多个连接(即,业务量流)的分组。
[0064] 如本文所述,调度器253可以被配置为在子端口和管道的层上使用令牌桶技术实 现业务量整形,其中每个子端口都具有一个令牌桶并且每个管道都具有一个令牌桶。在子 端口层以及管道层,可以针对每个业务量类别,实施各自的上限。如本文所述,调度器253 还可以被配置为允许较低优先级业务量类别重新使用可能没有被较高优先级业务量类别 使用的子端口带宽和/或管道带宽管道带宽。
[0065] 调度器253可以被配置为按照严格优先级顺序,调度同一管道的业务量类别。如 果一个子端口业务量类别被超额订阅(例如配置时间事件),则管道层业务量类别的上限 可能被限制为由子端口相关联的所有管道共享的动态调整值。调度器253可以被配置为根 据预定义的权重,使用加权轮叫(WRR)技术来调度相同业务量类别的队列。
[0066] 图6示出了与本发明的各种实施例相一致的示例性调度器数据结构600。调度器 数据结构600对应于调度层次结构500。调度器253可以被配置为每个端口,例如,端口 235a,...,235n,实现各自的调度器数据结构,,例如,调度器数据结构600。调度器数据结 构600包括子端口表602、管道表604、队列表606、队列存储区608、活动队列位图610和管 道磨机阵列612。
[0067]子端口表602包括多个子端口表条目条目Subport0,...,SubportSn。例如,每 个子端口条目SubportO, . ..,SubportSn都有64字节的大小。子端口表条目的数量对应 于每个端口的子端口数量。每个子端口表条目的条目Subport0,...,Subp〇rtSn都被配置 为存储子端口的永久性数据,例如,与每个子端口,例如子端口 504a,...,504s相关联的令 牌桶信用。子端口表602可被例如调度器253访问,以执行与的出列操作相关联的读取和 /或写入。
[0068]管道表604包括多个管道表条目Pipe0,...,PipePn。例如,每个管道条目 PipeO,...,PipePn都有64字节的大小。管道表条目的数量对应于每个端口的管道的数 量。每个管道表条目条目Pipe0,...,PipePn都被配置为存储与每一管道相关联的永久 性数据,包括与业务量类别,例如业务量类别508a,...,508d相关联的永久性数据,以及与 管道相关联的队列,例如,队列 510a,. ? ?,510d、512a,. ? ?,512d、514a,. ? ?,514d、516a,. ? ?, 516d。例如,永久性数据可以包括令牌桶信用。如本文所述,例如在运行期间,可以更新管 道表条目表条目Pipe〇,...,PipePn。通常,在运行期间不改变,并且可以被多个管道共 享的管道配置参数不被包括在管道表604中。如本文所述,这样的管道配置参数可以被包 括在管道简档表中。管道表604可以被例如调度器253访问,以执行与的出列操作相关联 的读取和/或写入。
[0069]队列表606包括多个队列条目。例如,每个队列条目,Queue0,...,QueueQn,都 可以具有4字节的大小。队列表条目条目数量对应于每个端口的队列数量。
[0070] 每个队列条目QueueO,. ..,QueueQn者被配置为存储水久性数据,例如,读取和写 入指针。对于每个业务量类别的所有队列,每个队列的队列大小都可以相同。配置一致的 队列大小,以允许队列基地址被有效地确定,因此,队列基地址和队列大小通常没有被包括 在相应的队列表条目中。队列表606可以被例如调度器253访问,以执行与排队和出列操 作相关联的读取和/或写入。与对应的管道相关联的队列表条目条目通常被存储在,例如, 处理器缓存222a的相同的缓存线中。
[0071]队列存储区 608 包括多个队列,Queue0,???,QueueQn。Queue0,???,QueueQn 的数量对应于每个端口的队列数。每个队列Queue0,...,QueueQn都可以被配置为存储 多个队列元素。队列元素的数量是可配置的。例如,每一个队列Queue0,...,QueueQn可 以被配置为存储64个8字节的元素。每个8字节的队列元素都对应于一个分组描述符的 存储器地址(即mbuf指针)。所述分组描述符(即mbuf)是每个分组的一种相对较小的数 据结构(通常是64个字节或更少),其包含与该分组相关联的元数据(例如分组长度、在缓 冲器中数据的第一个字节的位置等等)。通常,mbuf与分组体(即头部和有效负载)位于 同一存储器缓冲区中,位于存储器缓冲器的特定存储位置。队列存储区608可被例如调度 器253访问,以执行与出列操作相关列的读取和/或与排列操作相关联的写入。例如,分组 排列对应于mbuf指针被写入到队列中,并且分组出列相当于mbuf指针从所述队列中读取。
[0072]活动队列位图610被配置为包括每个队列Queue0,...,Queue Qn的一个队列状 态位。每个端口的队列状态位的数量对应于每个端口的队列数。例如,图5的端口位图524 包括对应于与管道506a相关联的队列520的位图部分522。所述队列状态位被配置为指 示,队列Queue0,. . .,Queue Qn是活动的(S卩,队列不为空)或者队列Queue0,. . .,Queue Qn是不活动的(即队列为空)。每个队列状态位可通过,例如调度器253排列操作(即被 排列的分组)设置,以及当相应的队列变空时,被调度器253的出列操作复位(即清除)。 在操作中,位图扫描操作被配置为返回下一非空管道和它的状态(例如管道中的活动队列 的16位掩码)。
[0073] 管道磨机阵列612包括多个管道磨机(pipegrinder),PipeGrinder0,..., PipeGrinderGn。例如,管道磨机阵列612可具有大约128字节的大小。管道磨机,Pipe Grinder0,...,PipeGrinderGn的数量是可配置的。例如,管道磨机的数量可以是8。管 道磨机阵列612被配置为存储当前正在处理的活动管道列表。每个管道磨机,PipeGrinder0,...,PipeGrinderGn都包含管道处理过程中的临时数据。如果当前管道耗尽了分组或 者信用,则它被替换为来自位图610的另一活动管道。管道磨机阵列612可被例如调度器 253访问,以执行与的出列操作相关联的读取和/或写入。
[0074] 调度器模块253被配置为在其分组处理操作(即排列和出列操作)中使用调度层 次结构,例如调度层次结构500以及数据结构248,例如数据结构。调度器模块253进一步 被配置为利用多个处理器核220a,...,220n以及网络设备200的多线程能力,以提高处理 效率。因此,调度器253可以有效率地从数以千计的队列中选择用于传输的下一分组,同时 满足SLA的承诺。
[0075] 图7示出了与本发明的一个实施例相一致的被配置为排列多个分组的示例性操 作的流程图。例如,所述操作可以由调度器模块253执行。在一些实施例中,例如,当实现 拥塞管理时,拥塞管理操作可以由例如拥塞管理模块257执行。最初,一个或多个分组可以 被接收自,例如工作器模块或拥塞管理模块。操作702可以包括访问分组描述符(mbuf)并 且读取数据字段。数据字段可以包括,例如,分组类型、分组长度、数据开始的指针等。数据 字段可被读取,以便识别每一个分组的目标队列。例如,数据字段可包括端口、子端口、业务 量类别和业务量类别标识符内的队列。数据字段可以在调度器模块253接收分组之前由分 类阶段确定,例如Classif306。操作704可以包括访问队列结构,例如队列表606,并识别 队列阵列中的写位置,例如队列存储区608。
[0076] 可以在操作706确定被识别队列是否已满。如果被识别队列已满,则操作708可以 包括丢弃分组。然后,程序流程可返回到确定被识别队列是否已满。后续的分组也可以被 丢弃,直到分组从队列中被出列。如果被识别的队列没满,并且拥塞管理被启用,则可在操 作710确定被识别队列的占用率是否高于阈值。如果被识别队列占用率大于阈值,则在操 作712,至少部分地基于拥塞管理确定是否丢弃分组。拥塞管理可包括随机早期检测(RED) 或加权随机早期检测(WRED)。RED和/或WRED被配置以考虑队列占用率和分组优先级,以 决定是否要排列或丢弃特定的分组。例如,较高优先级的分组比低优先级的分组更有可能 被排列,例如当目标队列占用率相对较高时。RED和WRED被配置以提供相对于胡乱丢弃的 分组更加智能的有关排列或丢弃分组的决定。在操作714,如果分组不被丢弃,则被识别队 列阵列位置可以被访问,分组被存储。例如,存储分组对应于写入mbuf指针。程序流程在 操作716结束。
[0077] 由于输入分组的相对较高的速率(例如每秒千兆位)以及相对较大数量的队列 (例如几万),被访问以排列当前分组的数据结构可能不出现在当前核的缓存器中(例如核 220a的缓存器222a)。因此,排列相关的存储器访问可能会导致一个或多个缓存缺失,以及 相应的性能下降。因此提前预取数据是有益的。
[0078] 图8示出了包括预取的排列操作的示例性流水化的实现800。示例性实现800包 括4个流水线阶段:预取mbuf802、预取队列804、预取队列
当前第2页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1