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

文档序号:8225869阅读:来源:国知局
706中的位置和排列808。每个 阶段802、804、806、808都被配置为在两种不同的输入分组上并行执行。例如,预取mbuf802 可以对分组00和01进行操作,预取队列804可以对分组10和11进行操作等。每个输入 分组在给定时间都可以是一个流水线阶段的一部分(即,被一个流水线阶段操作),并且多 个分组可以被并行地操作。预取操作具有相关联的执行延迟,在该过程中,处理器210不能 尝试访问当前处于预取中的数据结构。处理器210可被配置为执行其它工作,例如,执行其 他输入分组上的操作的排列序列的不同阶段,从而导致排列操作的流水线化实现。
[0079] 因此,在排列操作期间,多个分组可以被并行操作。,每一个输入分组都不能一次 被多于一个的流水线阶段操作,但在任何时间点,多个分组可以由多个流水线阶段进行操 作。流水线结构被配置为"隐藏"预取延迟,从而提高分组排列操作的性能。
[0080] 图9A和9B示出了与本发明的一个实施例相一致的被配置为出列多个分组的示例 性操作的流程图900、950。所述操作可以由,例如调度器模块253执行,并且可以对于每个 端口,例如端口 235a,执行,。如本文所述,流程图950是流程图900的延续。程序流程可以 开始于901。可以在操作902确定当前端口的任何管道是否活动。例如,可以通过分层调度 器253来确定活动队列位图610是否包括被设置以及对应于不包含在管道磨机阵列612的 管道的任何位。如果当前端口没有活动的管道,则程序流程可以维持在操作902。如果有活 动的管道,则操作903可以包括识别当前端口的下一活动的管道。例如,可以使用例如活动 队列位图610的位图扫描操作来识别下一活动的管道。位图扫描操作被配置为返回下一非 空的管道标识符和相关联的状态(即管道中的活动队列的16位掩码)。
[0081] 操作904包括预取下一活动管道数据结构,并预取与下一活动管道相关联的队列 指针。操作906可以包括切换管道磨机。例如,如本文所述,操作906可以包括从第一管道 磨机切换到第二管道磨机。切换管道磨机被配置为"隐藏"与下一活动管道相关的预取操 作。换句话说,切换管道磨机被配置为允许与下一活动管道相关联的预取操作同与当前管 道相关联的分组出列操作并行地发生。如本文所用,当前管道对应于当前被选为用于出列 操作的管道,并且下一活动管道对应于要被选为用于出列操作的下一管道。因此,在流程图 900、950的当前轮次(pass)中的操作903中被识别的下一活动管道对应于流程图900、950 的操作的下一轮次中的当前管道。
[0082] 操作908可以包括读取当前管道数据结构。操作910可以包括更新当前管道和它 的子端口的信用。例如,可更新当前管道及其子端口的相应的业务量整形令牌桶信用,以及 与当前管道和其子端口相关联的相应的业务量类别信用。可以在操作912识别当前管道内 的下一活动业务量类别。操作913可以包括在当前管道和当前业务量类别(TC)范围内选 择下一队列。例如,下一队列可以使用加权轮叫(WRR)进行选择。操作914包括在当前的 队列中预取下一位置(即队列读取指针所指出的位置)。在当前队列预取下一位置对应于 预取包含了队列元素(即队列阵列)的数据结构(在由队列读取指针所指出的位置)。队 列指针是在操作904中预取的。每一个队列元素是mbuf?指针。队列读取指针对应于在操 作904中预取的队列指针。操作915可以包含切换管道磨机。
[0083] 操作916可以包括从当前队列读取当前元素(即mbuf指针)和预取其分组描述 符(即mbuf)。操作917包括切换管道磨机。操作918可以包括从分组描述符中读取分组 的长度。在操作920中可确定可用的业务量整形(TS)令牌桶信用和可用的业务量类别信 用是否大于或等于分组信用。分组信用对应于分组的长度(以字节为单位)加上组帧开销 (以字节为单位)。如本文所述,各自的业务量整形令牌桶信用可以每个子端口和每个管道 地提供,并且可以被用于业务量整形。如本文所述,各自的业务量类别信用可以每个子端 口和每个管道地提供,并且可被用于对于每个业务量类别实现子端口级别和管道级别的上 限。如果可用的令牌桶信用和可用的TC信用不大于或等于所述分组信用,则程序流程可进 行到操作932。
[0084] 在操作922,如果可用的业务量整形令牌桶信用和可用的TC信用大于或等于分组 信用,则当前分组可以被调度以用于传输。在操作924,可以减去信用,并且可更新加权轮叫 (WRR)队列令牌累加器。例如,对于所选择的管道以及相关联的子端口,可从令牌桶中减去 信用,并且对于所选择的业务量类别,可以从在管道和子端口级别的信用计数器中减去信 用。减去信用的数量对应于发送的字节数(即分组信用)。队列令牌累加器可增加对应于 分组长度的量(例如以字节为单位)。可以在操作926中选择当前管道和当前业务量类别 内的下一队列。
[0085] 在操作930可确定当前业务量类别是否是活动的。如果当前业务量类别是活动 的,则程序流程可以返回到操作916,从当前的队列中读取当前元素并预取其分组描述符。 如果当前业务量类别是不活动的,则在操作932确定在当前管道中的任何下一业务量类别 是否是活动的。如果在当前管道中的下一业务量类别是活动的,则程序流程可以返回到操 作912,识别当前管道内的下一业务量类别。如果当前管道内没有下一业务量类别是活动 的,则程序流程可返回到操作902,对于当前端口确定任何管道是否是活动的。
[0086] 确定下一业务量类别是否是活动的操作932被配置为避免返回到当前的管道中 的已被服务的业务量类别。例如,在操作912,当识别下一活动的业务量类别时,业务量类别 可能是不活动的。在另一个例子中,业务量类别可能是活动的,但可能缺乏足够的业务量整 形令牌桶信用和/或业务量类别信用。
[0087] 为了避免缓存缺失,流程图900的操作,例如操作904,被配置为在被访问之前预 取数据结构(例如管道、队列、队列阵列、mbuf)。通过对于当前管道,在预取被发出之后立 即从例如管道磨机1中的当前管道切换到例如管道磨机2中的另一个管道(即下一活动管 道),预取操作的延迟可以被"隐藏。因此当前管道的预取操作在执行切换回管道磨机1中 的该管道之前完成。
[0088] 流程图900、950的操作被配置为利用处理器缓存中的数据存在。例如,调度器模 块253可以被配置为在从相同管道移动到下一活动的业务量类别(如果有)或移动到另一 活动的管道之前,尽可能多地从相同管道业务量类别和管道调度分组(最多至可用的分组 和f目用)。
[0089] 图10示出了与本发明的一个实施例相一致的示例性出列操作1000。示例性出列 操作1000被配置为利用分层调度器数据结构,例如数据结构600。管道磨机1002a,..., 1002d可以被耦合到子端口表1004、管道简档表1006、管道表1008、队列表和/或队列存储 区域1012。
[0090]管道简档表被配置为存储管道配置值,该值对于相同管道的分组来说是不变的。 这样的管道配置值通常与SLA相关,并且可以包括,例如周期、每个周期的信用等。因此,如 果SLA被修改,则管道简档表中的值可改变,但对于相同管道的分组通常不改变。例如,电 信网络可以被配置为由相对较小数量的服务类别(例如少于10)构成。可为每个服务类别 创建相应的管道简档,并且大量的(比如大约数千)管道可能共享相同的服务类别,并因此 有相同的管道简档值。由于多个管道的相对静态的数据被存储在管道简档表中,因此所述 包含每个分组地改变的数据(例如管道令牌桶计数器、每个业务量类别的剩余信用、WRR计 数器等)的管道表条目大小可以减小表条目。
[0091] 最小化管道表条目被配置为减少每个管道要预取的数据的量。预取被配置为以缓 存行大小(如64字节)为增量预取管道数据,缓存行大小与处理器物理体系结构相关。因 此,对于每个管道,分层调度器被配置为预取管道表条目结构和同一管道的所有16个队列 的队列指针。然后,队列指针可以存储在第二缓存行中。分层调度器可以被配置为同时启 动两个预取,例如,图9操作904。
[0092] 在这个例子中,管道磨机阵列包括对应于四个活动的管道的四个管道磨机 1002a,...,1002d。活动管道由位图1014指示。分层调度器,例如调度器253,被配置为选 择管道磨机1002a,...,1002d中的每一个以管理调度通过输出端口 1018进行传输的分组 1016例如,输出分组1020。多个与管道磨机1002a,. ..,1002d相关联的活动管道被用来促 进流水线化。多个管道磨机1002a,...,1002d被配置为并行处理多个管道。
[0093]例如,为了避免缓存缺失,数据结构(例如管道、队列、队列阵列、mbuf)可以在被 访问之前被预取。通过在对当前管道发起预取后,立即从当前管道(例如在磨机1002b中) 切换到另一个管道(例如在磨机1002c中),预取操作的延迟可被"隐藏"。这被配置为在 执行切换回该管道(例如在磨机1002b中)之前提供足够的时间用于完成预取操作。
[0094] 图11是与本发明相一致的示例性管道预取状态机1100。示例1100管道预取状 态机被配置为利用数据局部性,通过例如从同一个业务量类别依次调度分组,只要令牌桶 信用可用并且没超过所述管道级和子端口级业务量类别的上限。与状态机1100相关联的 状态包括开始1102、预取管道1104、预取业务量类别队列阵列1106、预取mbuf1108和读 取mbuf1110。状态机1100通常被配置为从开始1102到预取管道1104到预取业务量类别 队列阵列1106到预取mbuf1108到读取mbuf1110按顺序进行。如果当前状态是预取管 道1104,并且没有活动的管道,即没有带有至少一个活动队列的管道,则状态机1100被配 置为保持在预取管道1104的状态。
[0095] 如果当前状态是读取mbuf1110,则状态机1100被配置为保持在读取mbuf1110 的状态,只要与管道相关联的相同业务量类别有活动的队列(且信用可用)。如本文所述, 例如,如果与mbuf?(和相关联的第一分组)相关联的分组信用小于或等于可用的令牌桶和 TC信用,则可以调度第一分组以用于传输。继续这个示例,如果在与第一分组相同的业务量 类别和相同的管道中有其他分组正在等待调度,则状态过渡是"相同TC"并且下一状态对应 于读取mbuf。
[0096] 状态机1100被配置为如果下一活动的业务量类别与当前活动业务量类别在同一 管道中,则从读取mbuf状态1110转换到预取mbuf状态1108。例如,如果第一分组的分组 信用超过了可用信用或者在相同的业务量类别中没有额外的分组在等待调度,并且相同管 道中的业务量类别具有活动的队列,则可从读取mbuf1110转换到预取mbuf1108。
[0097] 状态机1100被配置为如果接下来的活动队列在下一活动的管道中,则从读mbuf 状态1110转换到预取业务量类别队列阵列状态1106 ("下一活动的管道")。例如,如果第一 分组的分组信用超过了可用信用或者在相同的业务量类别中没有额外的分组在等待调度, 并且在相同管道中没有业务量类别具有活动的队列,则可发生从读取mbuf1110到预取TC 队列阵列1106的转换。状态机1100被配置为如果不存在活动的管道,则从读取mbuf状态 1110转换到管道预取状态11〇4( "无活动的管道")。
[0098] 因此,示例性管道预取状态机1100被配置为,通过在移动到相同管道中的另一个 业务量类别之前,从相同的管道中的相同业务量类别调度分组(只要信用可用并且没超过 上限)来利用数据局部性。示例性管道预取状态机1100可以进一步被配置为从相同管道 的分组调度,只要信用可用,并没超过上限。示例性管道预取状态机1100提供管道的分组 调度的序列化视图。多个活动的管道可以被并行地处理。每个预取操作都被配置为触发切 换到另一个活动管道,从而当预取操作正在发生时,分组调度操作可以继续。因此,对于多 个活动的管道,分组处理(即调度)操作可以在时间上交错。
[0099] 因此,如本文所述,分组出列操作可以由,例如调度器253利用调度层次结构和调 度器数据结构来实现。下一活动管道可以使用被配置为识别活动队列及其相关的管道的 (例如活动队列位图610的)位图扫描操作来识别(),。多个活动管道可被包括在管道磨 机阵列中,所述管道磨机阵列被配置为促进管道的并行处理,以便预取延迟被掩盖,从而提 高操作效率。
[0100] 图12示出了调度器和网络接口端口的相定时和同步的示例1200。每个输出端口, 例如端口 235a,. ..,235n,可以被建模为字节缝隙的传送带,所述字节缝隙将被调度器填充 用于传输的数据。例如,能够lOGbE的端口对应于每秒12. 5亿字节缝隙可用于分层调度器。 如果分层调度器无法以足够高的速率来出列分组以填充所述时隙,假设存在足够的分组和 信用,那么某些时隙将被闲置并且带宽将被浪费。为了完全利用该端口,期望分层调度器保 持字节缝隙为满。虽然示例1200示出了一个端口的定时和同步,但是,在操作中,分层调度 器可以为多个端口并行地调度分组。示例1200包括其中端口的带宽得到充分利用的两个 时间间隔1202U204,,以及其中分层调度器无法保持字节缝隙为满的两个时间间隔1206、 1208字节缝隙。
[0101] 在第一时间间隔1202,分层调度器足够快可以填充字节缝隙并且没有字节缝隙隙 被浪费。在第二时间间隔1204,分层调度器处理在传输之前,并且分层调度器再次足够快地 填充字节缝隙。在第三时间间隔1206,分层调度器延迟导致多个空字节缝隙1210以及因此 导致未使用(即浪费)的带宽。在第四时间间隔1208,分层调度器的处理比端口传输其要 慢,并且一些字节缝隙1212是空的,因而,可用的带宽不能被充分利用。
[0102] 一般来说,分层调度器253出列操作可以被网络接口发送器(Tx),例如Tx236触 发。例如,网络接口Tx输入队列的占用将被监控。如果网络接口Tx输入队列的占用下降 到低于预定阈值,则通知调度器(例如基于中断或基于轮询)将更多的分组推送到队列中。
[0103] 调度器253被配置为监视将被信用逻辑所使用的时间提前量。信用逻辑可能包括 子端口和管道业务量整形、业务量类别上限实施等等。信用逻辑被配置为至少部分地基于 时间,例如从最后一次更新以来的时间间隔的时长,来更新信用。当调度器决定将分组发送 到用于传输的网络接口发送器时,调度器被配置为相应地增大它的间隔时间基准。因此,可 以很方便地以字节为单位保持内部时间基准,其中一个字节表示物理接口,例如PHY233,在 传输介质上将一个字节发送出去所要求的持续时间。当调度一个分组以用于传输时,该时 间递增(n+h),其中n是以字节为单位的分组的长度,h是每个分组的成帧开销字节的数量。 [0104] 调度器253可以被配置为将其内部时间基准与正在被传输的分组速率,即端口传 送带的速度,校准。将调度时间基准与网络接口的时间校准被配置为确保调度器不给网络 接口,例如,网络接口Tx236提供比物理介质的线路速率更多的字节。由此,可避免分组 被丢弃(例如被调度器,因为网络接口Tx236输入队列为满和/或通过网络接口Tx内部 地)。
[0105] 调度器253被配置成响应于每个出列调用,读取当前时间。当前处理器时间可通 过读取被包括在,例如核220a和/或处理器210中的时间戳计数器(TSC)寄存器或高精度 事件计时器(HPET)寄存器223而获得。当前处理器时间(即CPU时间戳)可以从处理器时 钟周期数转换为字节数,因为time_bytes=time_cycles/cycles_per_byte,其中cycles_ per_byte对应于处理器周期数,它等效于在传输介质上1字节的传输时间(例如,对于处理 器频率为 2GHz和lOGbE端口,cycles_per_byte= 1. 6)。
[0106] 调度器253被配置成保持与网络接口时间("NIC时间")相关联的内部时间基准。 当分组被调度时,NIC时间被增加了分组信用(即分组长度加上成帧开销)。在每个出列调 用中,调度器253被配置为将其NIC时间的内部基准262与当前处理器时间,即处理器时间 263进行比较。如果NIC时间262是在未来(NIC时间 > =当前处理器时间),则NIC时间 可不被调整。因此,调度器253在网络接口实际需要分组之前调度这些分组。换句话说,网 络接口Tx236被很好地提供分组。另一方面,如果NIC时间是在过去(NIC时间<当前处 理器时间),那么NIC时间262应通过将其设置到当前处理器时间263而调整,因此,调度器 253可能无法跟上NIC字节传送带的速度。换句话说,由于向网络接口Tx236的分组供应 不畅,因此,带宽未被使用(即浪费)。
[0107] 调度器往返延迟(SRTD)对应于调度器对同一管道的两个连续的检查之间的时间 (即,处理器周期数)。为了跟上输出端口 235a(即为了避免可用带宽的利用不足),调度 器253被配置为比网络接口Tx236可以发送n个分组更快地调度n个分组。如本文所述, 调度器被配置为以对应于每个管道的分组传输速率的速率调度分组,假设没有端口超额预 订,如为相关联的管道令牌桶所配置的。因此,管道令牌桶的大小可被设置得足够高以避免 由于相对长的持续时间SRTD而导致的溢出,因为这将导致管道的信用损失(因此带宽损 失)。
[0108] 调度器253被配置为将对应于第一数量的分组流的多个分组排列进第二数量的 队列以及出列存储的分组,用于通过一个或多个端口 253a,...,253n传输。所述第一数量 大于或等于所述第二数量。调度器253被配置为利用调度层次结构,例如,调度层次结构 500,数据结构,例如,数据结构600和信用逻辑,以做出调度决定,S卩,为了选择下一出列的 分组。
[0109] 当符合以下准则时,从(子端口S、管道P、流量类别(TC)、队列?发送下一分组的 调度决定是有利的(即,发送分组):
[0110] 1.当前子端口S的管道P被其中一个端口磨机选择;
[0111] 2.业务量类别TC是管道P的最高优先级的活动业务量类别;
[0112] 3?队列Q是管道P的业务量类别TC中的WRR(加权轮叫)选择的下一队列;
[0113] 4.子端口S有足够的信用发送分组;
[0114] 5.子端口S有足够的信用供业务量类别TC发送分组;
[0115] 6.管道P有足够的信用发送分组;以及
[
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1