通信量和负载感知动态队列管理的制作方法

文档序号:7803191阅读:303来源:国知局
通信量和负载感知动态队列管理的制作方法
【专利摘要】本发明涉及通信量和负载感知动态队列管理。一些实施例提供了有效且动态地管理多个队列的队列管理系统,多个队列处理进出在主机上执行的多个虚拟机(VM)的通信量。这个系统通过以下步骤管理队列:(1)将队列分成不同优先级池,其中为特定类型的通信量或VM(例如,用于需要低延迟的VM的通信量)保留较高优先级池,(2)动态地调节每个池中的队列数量(即,动态地调节池的大小),(3)基于一个或多个优化标准(例如,与队列的未充分使用或过度使用有关的标准),将VM动态地分派给新队列。
【专利说明】通信量和负载感知动态队列管理

【技术领域】
[0001] 在过去的几年中,已经针对用多个队列通过网络接口卡(NIC)分配进出主机的传 入和传出通信量,提出了队列管理系统。图1示出一个这样的系统。具体地讲,图1示出(1) 在主机计算机(未示出)上执行的多个虚拟机(VM) 102和(2)具有多个队列的NIC100。如 在此图中示出的,每个队列具有接收侧的缓冲器集合104和发送侧的缓冲器集合106,以分 别处理传入和传出通信量。该系统具有四种类型的队列,它们是:默认队列105、一些非默 认队列115、LRO(大型接收卸载,largereceiveoffload)队列120和RSS(接收侧调整, receivesidescaling)队列125。后两种类型的队列是与NIC支持的专用硬件LRO和RSS 功能关联的专业队列。

【背景技术】
[0002] 图1的队列管理系统跨多个队列分配进出虚拟机(VM)的通信量。在这个系统中, 所有VM在默认队列105中开始。每当VM的通信量超过给定阈值时,把VM从默认队列移出 到非默认队列115。当把VM从默认队列移出时,这种实现方式总是将VM移向负载最小的非 默认队列而不管VM的要求。这造成三个主要问题。
[0003] 第一,由于目前的实现方式是在没有考虑VM的通信量类型的情况下选择非默认 队列,因此具有特别要求的VM可能受到其它VM干扰。例如,如果发送和接收对延迟敏感的 通信量的特定VM与运行对延迟不太敏感、对吞吐量敏感的工作负荷的一些其它VM共用同 一队列,则该特定VM的延迟和抖动一定会受影响。图1中的队列150是具有用于低延迟要 求(LLR)VM152和一些高延迟容忍(HLT)VM二者的通信量的超负荷队列的示例。在这种情 形下,LLRVM152可能因为各种HLTVM的通信量而在它可容忍的最大延迟内无法发送和接 收通信量。
[0004] 这个实现方式的第二个问题在于,它将固定数量的队列静态地分派给三个不同非 默认队列池中的一个,这三个不同非默认队列池是非默认队列115、LR0(大型接收卸载)队 列120和RSS(接收侧调整)队列125。在这种方法中,各个池在驱动器初始化期间分派和 分配其所有的队列。默认地,各个池将得到相同数量的队列,即使该池实际上并不使用。这 导致当池需要更多的队列来维持通信量时出现性能问题,因为超负荷的池将无法接管其它 池中的空闲队列,因此无法进一步增长,即使该系统具有容量。
[0005] 第三个问题在于,VM的队列分派是一次性的,S卩,一旦VM移到队列,它将再也不移 动到其它非默认队列。这造成两个问题。第一,因为分派是一次性的,所以如果VM随后需 要更多资源来增长通信量,则它会最终变得受限于对其目前队列的利用。即使存在具有更 多增长空间的不太忙的队列,这种现有方法不允许VM有这个机会。另外,这种方法尝试静 态地使所有队列忙,即使并不需要那么多队列来服务于通信量。由于这种方法具有用于每 个队列的专用内核上下文,因此具有不必要数量的活动队列导致更多活动的上下文。这些 活动的上下文将不可避免地在中断到达时停止其它上下文(例如,vCPU)。因此,主机最终 变得花费更多周期进行上下文切换,这损害了VM整合率。


【发明内容】

[0006] -些实施例提供了有效且动态地管理多个队列的队列管理系统,这多个队列处理 进出在主机上执行的多个虚拟机(VM)的通信量。这个系统通过以下步骤管理队列:(1)将 队列分成不同优先级池,其中为特定类型的通信量或VM(例如,用于需要低延迟的VM的通 信量)保留较高优先级池,(2)动态地调节每个池中的队列的数量(即,动态地调节池的大 小),(3)基于一个或多个优化标准(例如,与队列的未充分使用或过度使用有关的标准), 将VM动态地重新分派给新队列。
[0007] 在一些实施例中,队列管理系统初始地在未分派的默认池中具有新初始化的VM。 当VM的通信量超过预设阈值时,该系统确定是否存在匹配VM通信量要求的池,并且,如果 有的话,则将VM分派给该池。如果没有匹配的池,则该系统创建新的池并且将VM分派给该 池。在没有用于创建新的池的空闲队列的情形下,队列管理系统先占取一个或多个分派的 队列(即,分派给之前创建的池的队列)并且将先占取的队列分派给新创建的池。这个先 占取处理重新均衡了现有池之中的队列,以空出一个或多个队列用于新的池。在一些实施 例中,可通过资源分配标准(例如,池的最小和最大大小、池的相对优先级等)控制跨池的 重新均衡处理。
[0008] 另外,队列管理系统可基于一个或多个标准(例如,相关联的管理线程(例如,内 核上下文)的CPU负载、通信量类型、通信量负载、队列的其它实时负载指标等)来重新均 衡池内的通信量。在一些实施例中,系统针对不同的池使用不同的重新均衡标准。例如,在 一些池中,系统可能想要将VM装满一些队列,而对于其它池,系统可能想要跨尽可能多的 队列分配VM。在一些实施例中,队列管理系统具有负载均衡器,该负载均衡器周期性地和/ 或在特定事件时执行重新均衡处理。
[0009] 当VM的通信量降至阈值以下时,一些实施例的队列管理系统将VM移回到默认队 列。当VM是正使用非默认队列中的队列的最后一个VM时,则系统将最后使用的队列移到 空闲队列的池,使得它随后可被重新分配给任何池。
[0010] 作为VM数据通信量的附加或者替代VM数据通信量,一些实施例的队列管理系统 动态地定义池,唯一地管理每个池,动态地改变池内的队列,并且动态地重新分派进出在主 机上执行的非VM可寻址节点(例如,源端节点或目的地端节点)的数据通信量。具体地讲, 一些实施例的系统通过主机装置的NIC监控VM和/或非VM可寻址节点(例如,数据端节 点)集合的数据通信量。基于该监控,该系统指定至少用于非VM可寻址节点集合的池,并 且将队列集合分派给该池。该系统接着使用目的地或源媒体访问控制(MC)过滤器或者五 元组过滤,引导用于非VM可寻址节点集合的由主机装置接收或发送的数据通信量到分派 的队列集合。
[0011] 替选地,或者结合地,基于该监控,一些实施例的系统可改变分派给用于VM和非 VM可寻址节点集合的池的队列集合。如以上提到的,这种改变的示例包括当池的一个或多 个队列被过度使用或未被充分使用时向池添加队列或者从池中去除队列。在一些实施例 中,该系统通过先占取另一个池中的队列(例如,通过使用上述先占取方法之一)向该池添 加队列。
[0012] 另外,替代上述操作或与上述操作结合,该系统可基于该监控,将用于VM或非VM 可寻址节点(例如,数据端节点)的数据通信量从该池中的第一队列重新分派给该池中的 第二队列。例如,基于该监控,一些实施例的系统检测通过第一队列的用于VM或非VM可寻 址节点的通信量降至通信量的最小阈值量以下(例如,持续一段时间)。因为这种未充分使 用,系统将该通信量切换至第二队列。在进行该切换之前,一些实施例的系统确定通过第二 队列的通信量没有超过通信量的最大阈值量。
[0013] 基于该监控,一些实施例的系统检测通过第一队列的通信量超过通信量的最大阈 值量(例如,持续一段时间)。因为这种过度使用,系统将用于VM或非VM可寻址节点(例 如,数据端节点)的通信量从第一队列切换至第二队列。同样,在进行该切换之前,一些实 施例的系统确定通过第二队列的通信量没有超过通信量的最大阈值量。
[0014] 之前的"
【发明内容】
"旨在用作对本发明的一些实施例的简要介绍。它并不意味着 是本文献中公开的所有独创性主题的介绍或概要。后面的"【具体实施方式】"和在"具体实施 方式"中参照的附图将进一步描述"
【发明内容】
"中描述的实施例以及其它实施例。因此,为 了理解本文献描述的所有实施例,需要对"
【发明内容】
"、"【具体实施方式】"和附图的全面阅读。 此外,要求保护的主题将不受"
【发明内容】
"、"【具体实施方式】"和附图中的示例细节限制。

【专利附图】

【附图说明】
[0015] 在所附的权利要求书中阐明了本发明的新颖特征。然而,出于说明的目的,在下面 的附图中阐明了本发明的一些实施例。
[0016] 图1是具有用于低延迟要求(LLR)VM和一些高延迟容忍(HLT)VM二者的通信量的 超负荷队列的示例。
[0017] 图2示出基于通信量的类型或VM要求将队列概念性地分组成两个优先级池的示 例。
[0018] 图3示出用于三种不同类型的VM的三个优先级池的示例。
[0019] 图4示出网络虚拟化层(NVL)中的负责PNIC中的队列的线程以及本发明的一些 实施例的中断产生结构。
[0020] 图5示出一些实施例的队列管理系统。
[0021] 图6概念性示出在一些实施例中负载均衡器执行的整体处理。
[0022] 图7示出一些实施例的队列分派处理。
[0023] 图8概念性地示出在一些实施例中由负载均衡器周期性地(例如,每隔几秒)调 用的池调节处理。
[0024] 图9示出由一些实施例的负载均衡器执行以评估VM对其队列的使用度的处理。
[0025] 图10示出因为对第一队列的未充分使用或因为VM对其第一队列的未充分使用而 将VM从第一队列重新分派给第二队列的示例。
[0026] 图11示出因为对第一队列的过度使用而将VM从第一队列重新分派给第二队列的 示例。
[0027] 图12示出跨池的池均衡处理的示例。
[0028] 图13示出一些实施例的队列管理系统,所述队列管理系统使用MAC地址过滤把在 主机装置上执行的VM和非VM数据可寻址节点的数据通信量路由到队列的不同池和池内的 不同队列。
[0029] 图14和图15图示示出一些实施例使用五元组过滤器来区分在视频呈现期间由虚 拟机发送或接收的VOIP和视频包的示例。
[0030] 图16概念性地示出用来实现本发明的一些实施例的电子系统。

【具体实施方式】
[0031] 在下面对本发明的详细描述中,阐明和描述了本发明的众多细节、示例和实施例。 然而,本领域的技术人员将明白和清楚的是,本发明不限于所阐明的实施例,并且可在没有 所讨论的一些具体细节和示例的情况下实施本发明。
[0032] 一些实施例提供了一种有效且动态地管理多个队列的队列管理系统,这多个队列 处理进出在主机上执行的多个虚拟机(VM)的通信量。该系统通过以下步骤管理队列:(1) 将队列分成不同优先级池,其中为特定类型的通信量或VM(例如,用于需要低延迟的VM的 通信量)保留较高优先级池,(2)动态地调节每个池中的队列数量(即,动态地调节池的大 小),(3)基于一个或多个优化标准(例如,与队列的未充分使用或过度使用有关的标准), 将VM动态地重新分派给新队列。
[0033] 在一些实施例中,队列管理系统将队列分组成四种类型的池。它们是:
[0034] (1)默认池,该默认池在一些实施例中包括一个默认队列,该默认队列是在一些或 全部VM初始化时用于一些或全部VM的初始队列(在其它实施例中,默认池包括一个以上 默认队列);
[0035] (2)空闲池,该空闲池包括所有未使用的队列(S卩,没有分派给进出任何VM的通信 量的队列);
[0036] (3)硬件特征池,该硬件特征池包括与特定硬件特征关联的队列,例如LRO和 RSS;
[0037] (4)VM要求池,该VM要求池包括服务于具有不同种类要求的VM(例如,低延迟要求 (LLR)VM和高延迟容忍(HLT)VM)的队列。
[0038] 在这些实施例中的一些实施例中,除了默认池中的一个默认队列之外,队列管理 系统初始地具有未分派的空闲池中的所有队列。一些实施例一直没有分派默认队列,直到 第一VM被初始化,而其它实施例甚至在第一VM被初始化之前就指定默认队列。
[0039] 当VM的通信量超过预设阈值时,系统确定是否存在匹配VM通信量要求的池(例 如,是否存在针对超过其阈值的LLRVM的LLR池),如果有的话,系统将VM分派给该池。如 果没有匹配的池,则系统形成新的池并且将VM分派给该池。当没有用于创建新的池的空闲 队列时,队列管理系统先占取一个或多个分派的队列(即,分派给之前指定的池的队列)并 且将先占取的队列分派给新创建的池。该先占取处理重新均衡了现有池之中的队列,以空 出一个或多个队列用于新的池。在一些实施例中,跨池的重新均衡处理是基于一个或多个 资源分配标准,例如池的最小和最大大小、池的相对优先级等。
[0040] 除了跨池均衡队列之外,一些实施例的队列管理系统还重新均衡池内的通信量。 该系统在不同实施例中使用不同标准来重新均衡池内的通信量。这种标准的示例包括相 关联的管理线程的CUP负载、通信量类型、通信量负载、队列的其它实时负载指标等。在一 些实施例中,系统针对不同的池使用不同的重新均衡标准。例如,在一些池中,系统尝试将 VM装满一些队列,而对于其它池,系统尝试跨尽可能多的队列分配VM。在一些实施例中,队 列管理系统具有负载均衡器,该负载均衡器周期性地和/或在特定事件时执行重新均衡处 理。
[0041] 当VM的通信量降至阈值以下时,一些实施例的队列管理系统将VM移回到默认队 列。当VM是正使用非默认队列中的队列的最后一个VM时,则将最后使用的队列移到未分派 队列的空闲池,使得它随后可被重新分配给任何池。因此,在这种方法下,队列一被分派VM, 就将队列分派给非默认池之一,并且队列的最后一个VM-被重新分派或被关断,就将该队 列分派回到空闲池。
[0042] 作为VM数据通信量的附加或者替代VM数据通信量,一些实施例的队列管理系统 动态地定义池,唯一地管理每个池,动态地改变池内的队列,并且动态地重新分派进出在主 机上执行的非VM可寻址节点(例如,源端节点或目的地端节点)的数据通信量。以下,首 先描述针对VM执行这些操作。然后,在此讨论之后讨论针对非VM可寻址节点执行这些操 作。
[0043] I.用于具有不同要求的VM的不同池
[0044] 如以上提到的,一些实施例的队列管理系统将队列分成不同优先级池,其中为特 定类型的通信量或VM(例如,用于需要低延迟的VM的通信量)保留较高优先级池。图2示出 基于通信量的类型或VM要求将队列概念性地分组成两个优先级池210和215的示例。具体 地,图2示出(1)具有多个队列的物理NIC200,和(2)具有不同要求的多个虚拟机(VM) 202。 VM在主机计算机(未示出)上执行。跨NIC的各种队列分配进出这些VM的通信量。如此 图中示出的,每个队列具有接收侧的缓冲器集合204和发送侧的缓冲器集合206,以分别处 理传入和传出通信量。在一些实施例中,多核处理器中的一个核管理每个队列。因此,在图 2中示出的示例中,八个核将管理NIC的八个队列。
[0045] 在一些NIC中,每个接收侧的缓冲器集合204是其自己在NIC中的独立的队列。 同样地,在这些NIC中,每个发送侧的缓冲器集合206是其自己在NIC中的独立的队列。然 而,即使在这些NIC中接收侧队列与发送侧队列分开并且独立,一些实施例的队列管理系 统也将一个接收侧队列与一个发送侧队列配对,使得队列对可被用作VM的一个队列构造。 然而,其它实施例没有将队列"配对"。具体地,这些其它实施例不要求使用接收侧队列的VM 都使用相同的发送侧队列;两个VM可使用相同的接收侧队列,但使用不同的发送侧队列。 然而,为了保持图示简单,图3至图6和图10至图15中示出的每个队列是队列对,该队列 对包括与发送侧队列配对的接收侧队列。
[0046] 在图2中,队列管理系统将物理NIC200的队列分组成三种不同类型的池。它们是: ⑴默认池205,(2)LLR池210,(3)HLT池215。如图2中所示,一些实施例中的默认池205 只包括一个默认队列。在其它实施例中,它包括一个以上默认队列。默认队列服务于没有 被分派给非默认池的队列的VM的通信量。当只有一个默认队列(例如,默认队列207)时, "默认"队列服务于没有被分派给非默认池的所有VM。在一些实施例中,默认队列207服务 于所有低通信量VM,S卩,服务于具有比预设通信量阈值低的通信量的任何VM。这些VM的通 信量太小,以致于应被置于非默认队列中。
[0047] 以某些方式,默认队列207可被视为不属于任何池,因为从硬件的视角看,该队列 只服务于没有匹配过滤器的所有VM,所述匹配过滤器将它们的传入和传出通信量的路由引 导到另一队列。一些实施例的队列管理系统启动默认队列上的每个VM,直到VM的通信量 超过阈值。一旦VM的通信量超过阈值,系统就为VM选择非默认队列,然后引导PNIC来分 配用于VM的入站通信量的过滤器,并且引导虚拟化层来分配用于VM的出站通信量的过滤 器。在一些实施例中,对出站通信量的过滤器是基于源MC地址,而对入站通信量的过滤器 是基于目的地MAC地址。这些过滤器引导虚拟化层和PNIC中的模块,以将传入和传出通信 量路由到所选择的队列。应该注意,过滤器可基于其它标识符。例如,在一些实施例中,对 出站通信量的过滤器是基于软件转发元件端口ID。
[0048] 过滤器的分配允许概念性地被分派给非默认池的队列服务于VM的通信量。换句 话讲,通过指定过滤器,系统将VM的通信量与队列相链接。此外,通过将队列与其保持的概 念上的"池"关联,队列管理系统可应用不同的管理处理,以不同地管理不同池中的队列,从 而管理具有不同要求的不同VM。以下,在部分II中对此进行进一步描述。
[0049] 当针对要被分配给池的队列而言不存在池时,队列管理系统首先定义池,然后将 队列分配给该池,如以下进一步描述的。LLR池210和HLT池215是被创建用于应对具体VM要求的两个池。LLR池210包括旨在服务于LLRVM的队列,而HLT池215包括旨在服务于 HLTVM的队列。如图2中所示,LLRVM250和252通过LLR池210的LLR队列222和224 发送和接收它们的数据包,而HLTVM260通过HLT池215的HLT队列230-238发送和接收 它们的数据包。
[0050] 在一些实施例中,队列管理系统通过具体地分配过滤器(在发送侧和接收侧二 者)来概念性地定义这些池,使得LLRVM通信量经过一个队列集合,而HLTVM经过另一个 队列集合。对于LLRVM,一些实施例的队列管理系统优化LLR队列的分配,以确保VM通信 量尽可量地跨LLR队列分散开,使得LLRVM受其它VM的通信量的影响最小。另一方面,对 于HLTVM,一些实施例的系统通过尝试减少由HLTVM使用的HLT队列的数量来优化HLT队 列的分配,以使更多的空闲队列可用于新分配。
[0051] 通过将用于LLRVM的队列与用于HLTVM的队列分开,一些实施例的队列管理系 统允许进出LLRVM的通信量经过不太拥塞的LLR队列。如此,LLRVM在发送和接收它们 的数据包时可具有较低延迟。
[0052] 尽管图2中图示的示例示出了三种类型的池,但本领域的普通技术人员将认识 至IJ,其它实施例使用更少的池或额外的池。例如,替代提供LLR池和HLT池两者,一些实施 例的队列管理系统只定义LLR池,并且引导全部HLT通信量通过默认池。为了处理所有这 种HLT通信量,一些实施例的队列管理系统定义默认池中的多个队列。
[0053] 除了LLR池和/或HLT池之外,一些实施例的队列管理系统还定义LRO和RSS池 (类似于图1中示出的那些),以支持NIC的LRO和RRS硬件特征。另外,LLR池和HLT池是 基于VM要求而制定的池的示例,其中,相比于HLT,LLR是更高优先级池,因为LLR旨在用于 LLRVM通信量。在其它实施例中,队列管理系统定义两个以上优先级池,以处理两种类型以 上的VM要求。例如,图3示出用于三种不同类型的VM的三个优先级池的示例。这些池包 括高池305、中间池310和低池315,并且它们的队列分别处理用于高优先级(HP)VM320、中 间优先级(MP)VM325和低优先级(LP)VM330的通信量。在一些实施例中,相比于较低优先 级池,较高优先级池可具有较少的VM和/或每队列具有较少的总体通信量。
[0054] 另外,替代定义LLR池或HLT池或者结合定义这种池,一些实施例的队列管理系统 定义高中断(HI)池或低中断(LI)池。在该上下文中,中断是指由PNIC产生的、通向负责 PNIC中的队列的网络虚拟化层(NVL)中的线程的信号。图4示出这种线程以及本发明的一 些实施例的中断产生结构。在一些实施例中,线程是被初始化成执行任务集合(例如,管理 用于VM的网络堆栈中的接收侧模块或发送侧模块)的处理。另外,在一些实施例中,不同 线程可作为多线程处理器的不同线程上和/或多核处理器的不同核上的独立处理来执行。
[0055] 图4示出PNIC400,PNIC400包括(1)用于接收需要被中继到VM的传入通信量的 一些队列,(2)用于管理传入通信量到队列的分派的接收侧(RX)处理引擎405,(3)用于监 控队列状态的队列监控器410,(4)用于产生中断的中断发生器430,所述中断引导NVL的 接收侧线程检索存储在队列中的数据。RX处理引擎包括如上所述并且以下进一步描述的、 用于将VM的传入通信量与队列配对的MAC过滤器420。
[0056] 图4还示出用于PNIC中的每个队列的接收侧(RX)线程427。在一些实施例中,线 程427是管理通过PNIC进出虚拟机的通信量的网络虚拟化层的一部分。在一些实施例中, 队列管理系统是网络虚拟化层的一部分。
[0057] 每个线程管理其相关联的队列。每当队列被接收到的数据包堵塞时,PNIC的队列 监控器410检测该情况并且引导PNIC的中断发生器430生成针对执行队列的线程425的 核的中断,以引导线程从队列中检索数据包。发生器通过PNIC驱动器435的API发送该中 断,其进而生成针对核的中断。每当因这个操作调用队列的线程时,管理该队列并且执行该 队列的线程的核必须中断它正在执行的其它任务,以执行该线程,使得它可从队列中检索 数据包。这种中断影响处理器的操作效率。
[0058] 因此,为了提高处理器的操作效率和/或降低关键VM的延迟,一些实施例的队列 管理系统定义HI池或LI池。HI池是包含承载需要以较低延迟传递的通信量的队列的池, 而LI池是包含承载可容忍较大延迟的通信量的队列的池。
[0059] 在一些实施例中,管理HI池的线程将比管理LI池的线程接收更多中断,如此,在 一些实施例中,它由其上具有比操作LI池的核更小的负载的处理器核来操作。具体地讲, 为了导致LLRVM的期望的低延迟,一些实施例的队列管理系统指定处理用于LLRVM的通 信量的队列作为HI池中的队列。基于该指定,它接着可执行各种任务,以优化对该队列的 管理和对执行该队列的线程的核的管理。例如,一些实施例中的队列管理系统减少分派给 该HI队列的VM的数量,或者只将也是关键的并且需要低延迟的VM分派给该队列。与此结 合或者作为替代方式,一些实施例的队列管理系统还可引导处理器的调度器来减少执行该 HI队列的线程的核上的负载,和/或引导PNIC针对该队列及早生成中断。
[0060] 图4示出减少执行HI池的核上的负载的示例。具体地讲,在这个示例中,队列管 理线程TQMl和TQM2用于管理作为HI队列的高优先级队列HPQl和HPQ2。这些线程被分派 给多核处理器450的核1和核2。如图4中所示,这些核上的负载相对轻,因为核2只执行 线程TQM2,而核1执行线程TQMl和非队列管理线程TNQMl。这些核上的负载与核5上的负 载形成对比,核5执行队列管理线程TQM5 (针对低优先级队列5 (LPQ5)),而且还执行三个其 它非队列管理线程TNQM2-TNQM4。
[0061] 为了导致HLTVM的较高的可接受延迟,一些实施例的队列管理系统指定处理用于 HLTVM的通信量的队列作为LI池中的LPQ。基于该指定,它接着可执行各种任务,以优化 对该队列的管理和对执行该队列的线程的核的管理。例如,一些实施例中的队列管理系统 可将更多的VM分派给该队列。与此结合或者作为替代方式,一些实施例的队列管理系统还 可向处理器的调度器通知它可将额外的线程调度到执行该队列的线程的核上,和/或引导PNIC针对该队列生成较少中断(即,在生成中断之前允许该队列更多地填充)。
[0062] 在一些实施例中,将HI池和/或LI池的指定与LLR池和/或HLT池的指定结合起 来使用,而在其它实施例中,使用HI池和/或LI池的指定以取代LLR池和/或HLT池的指 定。在一些实施例中,队列可被指定为LLR队列和HI队列二者。替选地,LLRVM可与HLT VM-起被包括在队列中,但该队列可被指定为HI队列,使得它的核未被严重地负载,因此 可被频繁地中断以清空队列。
[0063]II.队列管理系统
[0064] 现在,将参照图5描述一些实施例的队列管理系统。该系统500将队列分成不同 优先级池,其中为特定类型的通信量或VM(例如,用于需要低延迟的VM的通信量)保留较 高优先级池。它还动态地调节每个池中的队列(即,动态地调节池的大小),并且基于一个 或多个优化标准(例如,与队列的未充分使用或过度使用有关的标准),将VM动态地重新分 派给新队列。
[0065] 图5示出(1)正在主机上执行的一些VM505,(2)主机的由VM共用的物理NIC515, (3) 在主机上执行并且有助于通过共用的PNIC进出VM的通信量的网络虚拟化层510,(4) 作为内核调度器的物理处理器调度器525 (也被称为物理CPU或PCPU),该内核调度器引导 处理器何时何地运行线程(也被称为上下文)之一。
[0066]PNIC515具有一些队列517。这些队列包括用于存储由主机接收到的传入数据的 接收侧队列和用于存储从VM发送的传出数据的发送侧队列。在一些实施例中,每个队列包 括用于存储传入或传出数据的缓冲器集合。在一些实施例中,接收侧队列与发送侧队列分 开并且独立,但虚拟化层将一个接收侧队列与一个发送侧队列配对,使得队列对可被用作 VM的一个队列构造。然而,其它实施例没有将队列"配对"。换句话讲,这些实施例不要求 使用接收侧队列的VM都使用同一发送侧队列;两个VM可使用同一接收侧队列,但使用不同 发送侧队列。
[0067] PNIC还具有用于从有线或无线链接接收传入数据包的接收(RX)侧处理引擎511。RX处理引擎具有MAC过滤器514,MAC过滤器514被配置成基于目的地MAC将每个VM的传 入通信量与一个队列对关联。虚拟化层保持用于传出数据包的相似的过滤器516,并且该层 中的队列选择器518使用该过滤器中的数据来配置每个VM的传出通信量,以使用与传入通 信量相同的队列对。在一些实施例中,过滤器516依据VM的源MAC地址或它的VNIC的源 MAC地址来指定VM,而在其它实施例中,过滤器516依据VM的VNIC所连接的软件转发元件 的端口ID来指定VM。在一些实施例中,PNIC还包括用于监控队列并且生成中断的电路,如 以上参照图4描述的。
[0068]VM在超级监督者(未示出)之上执行,在一些实施例中,超级监督者包括网络虚拟 化层510。图5示出每个VM包括虚拟NIC(VNIC) 507。图5还示出网络虚拟化层510包括 (1)用于每个VM的一个网络堆栈550,(2)软件转发元件535,(3)统计信息收集引擎540, (4) 统计信息存储器545,和(5)动态负载均衡器555。每个网络堆栈包括VNIC仿真器527 和I/O链529。每个网络堆栈由接收/发送线程531管理。
[0069] 每个网络堆栈通过其VNIC仿真器连接到其VM并且连接到由所有VM的所有网络 堆栈共用的软件转发元件535。每个网络堆栈通过交换机的端口(未示出)连接到软件转 发元件。在一些实施例中,软件转发元件保持用于每个VNIC的单个端口。软件转发元件 535执行数据包处理操作,以将它的一个端口接收的数据包转发到它的另一个端口,或者转 发到在另一个主机上执行的另一个软件转发元件的一个端口。例如,在一些实施例中,软件 转发元件尝试使用数据包中的数据(例如,数据包头部中的数据)来使数据包匹配基于流 的规则,并且在发现匹配时,执行由匹配规则指定的动作。
[0070] 在一些实施例中,在不同主机装置(例如,不同计算机)上执行的软件转发元件被 配置成针对使用相同的共用计算和连网资源的不同租用者、用户、部门等的不同逻辑网络 来实现不同的逻辑转发元件(LFE)。例如,在两个主机上执行的两个软件转发元件可执行 L2交换功能。这些软件交换中的每个可部分地实现两个不同的逻辑L2交换,其中,每个逻 辑L2交换连接一个实体的VM。在一些实施例中,软件转发元件提供L3路由功能,并且可被 配置成利用在其它主机上执行的软件L3路由器来实现不同的逻辑路由器。
[0071] 在虚拟化领域中,有些人将软件交换称为虚拟交换,因为它们是软件元件。然而, 在本文献中,软件转发元件被称为物理转发元件(PFE),以将它们与逻辑转发元件池区分 开,逻辑转发元件是与物理世界无关的逻辑构造。换句话讲,软件转发元件被称为PFE,因为 它们在物理世界中存在并进行操作,而逻辑转发元件仅仅是向用户呈现的转发元件的逻辑 表示。逻辑转发元件的示例是诸如逻辑交换、逻辑路由器等逻辑转发元件。美国专利申请 14/070, 360提供了PFE和LFE的额外示例,并且以引用方式并入本文。
[0072]软件转发元件535连接到PNIC,以发送传出数据包并且接收传入数据包。在一些 实施例中,软件转发元件被定义成包括端口,该软件转发元件通过该端口连接到PNIC以发 送和接收数据包。如以上提到的,在一些实施例中,在软件转发元件535和PNIC之间插入 队列选择器518。队列选择器选择用于检索传入数据包的接收侧队列和用于供应传出数据 包的发送侧队列。如以上提到的,队列选择器使用过滤器516中的数据来识别用于供应特 定VM传出通信量的发送侧队列。选择器没有使用过滤器中的数据来选择队列并且检索其 用于VM的RX线程的数据包。在一些实施例中,队列选择器是网络堆栈的接收/发送线程 531的一部分,如以下进一步描述的。如此,对于这些实施例,队列选择器518是接收/发送 线程531在一些实施例中执行的队列选择操作的概念表示。
[0073]VM中的每个VNIC负责通过其关联的VNIC仿真器527在VM和网络虚拟化层之间 交换数据包。每个VNIC仿真器与VM中的NIC驱动器交互,以将数据发送到VM并且从VM 接收数据。在一些实施例中,VNIC是由虚拟NIC仿真器实现的物理NIC的软件抽象。例如, 在一些实施例中,用于请求和获得连接ID的代码驻留在虚拟NIC仿真器的组件中。换句话 讲,在一些实施例中,由每个VNIC仿真器实现并保持VNIC状态。诸如VNIC的虚拟装置尽 管是作为VM的一部分的便于讨论的软件抽象,但实际上是由使用仿真器的虚拟软件来实 现的。然而,每个VM的状态包括其虚拟装置的状态,虚拟装置的状态是由下层的虚拟化软 件来控制和保持的。尽管图5示出用于每个VM的每个VNIC的一个VNIC仿真器,但是在一 些实施例中,每个VNIC仿真器可以保持一个以上VNIC和/或一个以上VM的状态。
[0074] 每个网络堆栈中的I/O链包括对每个数据包执行一系列任务的一系列模块。如以 上并入的美国专利申请14/070, 360中描述的,I/O链模块的两个示例是ARP和DHCP代理 模块,ARP和DHCP代理模块解析ARP和DHCP广播消息,而不采取广播这些消息的手段。由 I/O链中的模块执行的处理的其它示例包括防护墙和通信量隧穿操作。I/O链的输入/输 出转到软件转发元件的端口之一。
[0075] 在一些实施例中,每个网络堆栈550的接收/发送线程531是管理网络堆栈中的 模块的内核级线程。这些线程还管理与堆栈的VM关联的PNIC队列517。具体地,在一些 实施例中,每个队列的接收侧具有用于处理来自队列接收侧的轮询数据包和中断的专用RX 内核线程。另外,每个VM具有用于处理从VM发送的数据包的专用TX内核线程。在一些实 施例中,每对接收/发送线程由主机的多核处理器的核之一执行,因为这些实施例中推荐 的队列的数量等于主机的多核处理器的核的数量。尽管在图5中使用单独的接收和发送线 程来分别管理堆栈及其关联队列的接收和发送操作,但是本领域普通技术人员将认识到, 在其它实施例中,使用一个线程来执行这两个任务。另外,在一些实施例中,RX/TX线程可 与队列、核和/或VM不相关或严格相关。
[0076] 如以上提到的,网络虚拟化层还包括统计信息收集引擎540、统计信息存储器545 和动态负载均衡器555。统计信息收集引擎540、负载均衡器555和RX/TX线程531部分地 形成一些实施例的队列管理系统。由统计信息收集引擎540收集的统计信息向负载均衡器 提供为确定何时将队列分派给池以及何时调节池所需的信息。
[0077] 在不同实施例中,统计信息收集引擎从不同源中得到统计信息。例如,在一些实施 例中,该统计信息收集引擎从任一CPU调度器525 (针对CPU使用率)和RX/TX线程(针对 网络通信量)"拉取(pull) "统计信息或者从任一CPU调度器525 (针对CPU使用率)和 RX/TX线程(针对网络通信量)接收被推送的统计信息。对于网络通信量,网络虚拟化层使 得从各种源收集统计信息(例如,吞吐量、数据包比率、丢包率等),所述各种源包括网络堆 栈的每层(即,由RX/TX线程管理的每个模块)。
[0078] 在一些实施例中,统计信息收集引擎收集负载均衡器的以下网络统计信息:PNIC 数据包比率、PNIC吞吐量和每个RX/TX线程的CPU使用率。在一些实施例中,CPU调度器 525更新CPU使用率数据,而RX/TX线程更新PNIC数据包比率和吞吐量,因为它们是实际上 与PNIC通信并且具有精确计数的线程。在一些实施例中,PNIC驱动器模块处于队列选择 器以下,并且该PNIC驱动器是与PNIC通信并且更新PNIC负载统计信息的模块。另外,在 一些实施例中,统计信息收集引擎不仅收集负载均衡器的PNIC统计信息,而且收集由VNIC 仿真器采集的VNIC统计信息。
[0079] 通过依靠VNIC统计信息,负载均衡器可决定,当对延迟敏感的VM的VNIC数据包 比率在某个阈值以上时将对延迟敏感的VM移到独有队列,所述某个阈值会开始损害任何 一个与其共用同一队列的VM。更通常地,负载均衡器555使用收集到的统计信息来确定要 将哪个队列分派给哪个VM,何时将队列动态地分派给池以及何时动态地调节池。
[0080] 在一些实施例中,负载均衡器周期性地(例如,每隔几秒、几毫秒、几微秒等)运 行负载均衡处理。该处理从统计信息收集引擎保持的"负载统计信息"数据存储器545中 拉取统计信息,并且基于这些统计信息,确定是否需要分配池,解除分配池,将VM分派给队 列,调整池的大小和/或先占取队列。在一些实施例中,负载均衡器通过配置PNIC和虚拟 化层的过滤器以将特定队列标识符与用于传出通信量的特定源MAC地址和用于传入通信 量的特定目的地MAC相关联来将VM分派给队列。为了配置PNIC的MAC过滤器,负载均衡 器使用PNIC驱动器的API来对每个队列的硬件特征和过滤器进行编程。
[0081] 如图5中所示,负载均衡器具有三个模块,S卩,池561、队列均衡器559和池均衡器 557。这些池是负载均衡器定义的PNIC队列的软件抽象分组。负载均衡器应用不同处理来 管理不同"池"中的队列。如此,每个池可被视为具有相同"特征"的队列集合,其中,特征 类似于硬件特征(类似RSS/LRO)。这种特征的示例包括VM要求(例如,低延迟或低中断比 率)。
[0082] 通过应用不同处理来管理不同池中的队列,负载均衡器可针对不同池不同地优化 队列的分配和池大小的调整。池重新均衡器557基于池的资源分配标准调整每个池的大小 并且在需要时先占取其它池中的队列。这种资源分配标准的示例包括池中的队列的最大/ 最小数量、池的总CPU使用率、池的网络通信量、池的服务质量(QoS)约束。队列重新均衡 器559基于池的重新均衡标准,重新均衡同一池中的队列。这种池重新均衡标准的示例包 括将VM填充尽可能少的队列(例如,针对HLT池),跨尽可能多的队列(例如,针对LLR池) 分配VM等。在一些实施例中,管理两个不同池的两个不同处理指定不同的资源分配标准、 不同的先占取标准、不同的重新平衡标准等。
[0083]III.调节VM分配并且调节池
[0084] 图6概念性地不出在一些实施例中负载均衡器555执行的整体处理600。一些实 施例中的负载均衡器555周期性地(例如,每隔几秒、几毫秒、几微秒等)执行该处理,以将 VM分派给队列,重新均衡每个池内的队列并且保持跨池的期望均衡。
[0085] 在一些实施例中,当计时器(例如,N秒计时器)期满时,开始处理600。如图6中 所示,处理600初始地调用(在605)队列分派处理,该队列分派处理检查默认池中的VM以 识别必须移到非默认池的任何VM,并且将识别的任何VM移到非默认池中的合适的非默认 队列。在一些实施例中,当VM对默认队列的使用超过默认队列的阈值水平或VM对默认队 列的使用的阈值水平时,队列分派处理将VM移到(在605)非默认队列。在605,该处理还 识别非默认队列中的必须移回到默认池的任何VM,并且将任何识别的VM移回到默认池。在 一些实施例中,当VM对其默认队列的使用在非默认队列的阈值水平或VM对非默认队列的 使用的阈值水平以下时,队列分派处理将VM移回到(在605)默认池。以下,通过参照图7 进一步描述一些实施例的队列分派处理。
[0086] 在605之后,处理600调用(在610)池调节处理,以均衡每个池内的队列。在一 些实施例中,池调节处理检查每个池,以基于池的一个或多个优化标准确定它是否必须将 一个或多个VM在池中的队列之间移动、或者将一个或多个VM移到池中的新队列。一些实 施例的池调节处理针对不同的池使用不同的优化标准。例如,在一些实施例中,用于LLR池 的优化标准使得该处理倾向于将VM分配到LLR池的队列之间,而用于HLT池的优化标准使 得该处理倾向于将VM聚集到HLT池中的较少队列上。基于这些标准及其在610的确定,处 理600在池中的队列之间重新分派VM(在610)、或者将VM重新分派给池中的新队列。以 下,进一步描述一些实施例的池调节处理。
[0087] 接着,在615,处理600调用保持跨池的期望均衡的池均衡处理。在一些实施例中, 池均衡处理检查跨各种池的队列使用率。基于该检查,均衡处理可将一个或多个队列分配 给一个池。它还可基于该检验将一个或多个队列从另一个池解除分配。在一个调用中,该 处理可将更多队列分配给一个以上的池,或者它可将一个以上的池中的队列解除分配。以 下,进一步描述跨池的重新均衡处理。
[0088] 普通技术人员将认识到,在其它实施例中,负载均衡处理600是不同的。例如,在 一些实施例中,处理600没有单独的重新均衡操作615,而是作为操作605和610的一部 分,隐含地或明确地执行该操作。另外,虽然以上和以下说明了作为操作605、610、615之一 的一部分的某些子操作,但普通技术人员将认识到,这些子操作可在这些操作605、610、615 中的不同操作中执行,或者作为对它们自身的不同操作或者不同操作的子操作来执行。
[0089]在615之后,处理600结束。
[0090] 图7概念性地示出在一些实施例中负载均衡器555周期性地(例如,每隔几秒、几 毫秒、几微秒等)调用的队列分派处理700。一些实施例中的负载均衡器555周期性地调用 该处理,以识别和移动过度使用默认队列或未充分使用非默认队列的任何VM。如图7中所 示,处理700初始地从统计信息存储器545收集(在705)统计信息,而不管所有VM对默认 队列和非默认队列的使用情况。该处理使用获取的统计信息来执行分析,如以下进一步描 述的。
[0091] 接下来,基于获取的统计信息,处理识别(在710)使用默认池中的目前超过默认 队列的阈值使用水平或VM对默认队列的使用的阈值使用水平(例如,当不同VM针对默认 队列具有不同阈值使用水平时)的默认队列的任何VM。如以上提到的,一些实施例在VM被 初始化时将每个VM分派给默认队列,但监控每个VM对默认队列的使用,并且当VM的使用 超过阈值时将VM移到非默认队列。
[0092] 在715,该处理确定是否能够在710识别到任何VM。如果识别不到,则该处理转到 以下将进一步描述的765。否则,该处理转到720,以选择在710识别的VM之一,并且识别 所选择的VM对于加入池的队列的要求。如以上提到的,本发明的一些实施例定义满足不同 VM集合的一个或多个不同要求的队列的一个或多个非默认池。
[0093] 接下来,在725,该处理确定它之前是否已经定义了针对所选择的VM要求的池。例 如,假设所选择的VM是LLRVM,则该处理确定(在725)它之前是否已经定义了用于将LLR VM分配给该池的队列的LLR池。当该处理确定(在725)它之前已经定义了针对VM要求的 池时,它接着确定(在730)它是否可将所选择的VM分派给之前定义的该池中的队列之一。 换句话讲,在730,该处理确定该池的现有队列是否具有用于在720选择的VM的足够的可用 容量。
[0094] 当该池中的队列具有足够容量时,该处理将VM分派(在735)给该队列和该队列 的池,然后转到以下将描述的740。如以上提到的,一些实施例通过过滤来创建VM和队列之 间的关联,其使用源MAC地址将VM的传出通信量与特定队列关联并且使用目的地MAC地址 将传入通信量与特定队列关联。一些实施例明确地指定VM和池之间的关联,而其它实施例 隐含地通过VM的关联队列和池之间的关联来指定该关联。在735创建的VM和池之间的关 联允许负载均衡器应用公共的处理集合来管理其队列上的VM、以及同一池中的该队列和其 它队列上的其它VM。如以上提到的,在一些实施例中,这些处理集合不同于用于管理队列的 其它池中的其它VM的处理集合。
[0095] 当该处理确定(在725)针对所选择VM的要求(例如,LLR要求)而言不存在池 时,该处理指定(在745)针对所选择VM的要求的池(例如,指定LLR池),然后转到750。 当该处理确定(在730)之前针对VM的要求指定的池没有对于所选择的VM具有足够容量 的任何队列时,该处理也转到750。
[0096] 在750,该处理确定是否存在目前未分派给任何VM的任何PNIC队列(即,在队列 的空闲池中是否存在任何队列)。如果存在,该处理(在755)选择空闲队列中的一个,将 它分派给池,将所选择的VM分派给该队列和池,然后转到以下将描述的740。否则,该处理 先占取(在760)由非空闲池中的另一个所使用的队列中的一个。先占取涉及首先将正在 使用先占取队列的VM重新分派给池中的包括先占取队列的其它队列。在一些实施例中,该 处理在一些情况下将无法先占取另一个池中的队列,因为VM的目前非默认池具有比其它 非默认池低的优先级。一旦所有VM已经被重新分派并且队列已经处理了这种VM的所有通 信量,该处理就将先占取队列分派(760)给针对所选择VM的要求的池。该处理还将所选择 VM分派(在760)给该队列和池,然后转到740。
[0097] 在740,该处理确定它是否已经处理了在710识别的所有VM。如果为否,该处理返 回到720以选择识别的另一个VM。否则,在该处理已经将在710识别的每个VM分派给池和 队列之后,该处理基于在705检索的统计信息,确定(在765)位于非默认队列中的任何VM 是否应该被移回到默认池。在一些实施例中,当VM对非默认队列的使用降至非默认队列的 阈值使用水平或VM对非默认队列的使用的阈值使用水平以下时,该处理将VM移回到默认 队列。在这些实施例中的一些实施例中,该处理只在VM的使用已经在阈值使用水平以下持 续足够长的时间段时才移动VM。当该处理在765识别了任何VM时,它将识别的VM移回到 默认池的默认队列,并且从其之前分配的非默认队列的池中去除该VM。当在该重新分派之 后没有其它VM使用之前分派的非默认队列时,处理700还将非默认队列重新分派(在765) 给空闲队列的池。当该重新分配的队列是池中最后一个队列时,一些实施例的处理700还 解除池的分配,因为它不再包含任何队列。然而,其它实施例在这种情形下不解除池的分 配。在765之后,该处理结束。
[0098] 图8概念性地示出在一些实施例中负载均衡器555周期性地(例如,每隔几秒、每 隔数毫秒、每隔数微秒等)调用的池调节处理800。一些实施例中的负载均衡器555周期性 地调用该处理,以重新均衡每个池内的队列。在一些实施例中,池调节处理检查每个池,以 基于池的一个或多个优化标准确定它是否必须将一个或多个VM在池中的队列之间移动、 或者将一个或多个VM移到池中的新队列。一些实施例的池调节处理针对不同的池使用不 同的优化标准。例如,在一些实施例中,用于LLR池的优化标准使得该处理倾向于在LLR池 的队列之间分配VM,而用于HLT池的优化标准使得该处理倾向于将VM聚集到HLT池中的队 列上。
[0099] 如图8中所示,处理800初始地从关于所有VM对默认队列和非默认队列的使用的 统计信息存储器545收集(在805)统计信息。该处理使用检索到的统计信息来执行分析, 如以下进一步描述的。在805之后,处理800选择(在810)非默认池中的一个进行检查 (例如,选择LLR池进行检查)。接下来,在815,该处理确定池中的任何队列是否未被充分 使用。如果发现任何这种队列,则该处理接着确定(在815)所选择池中的任何其它队列是 否具有用于目前正在使用该处理在815识别的任何未充分使用队列的一个或多个VM的容 量。当该处理识别具有过量容量的这种队列时,该处理将一个或多个VM从未充分使用的队 列分派(在815)到具有过量容量的一个或多个队列。当在移动之后没有任何其它VM被分 派给未充分使用的队列时,该处理还将未充分使用的队列从所选择池中解除分配(在815) (即,将未充分使用的队列分派给空闲池)。以此方式,未充分使用的队列可空出来,以在随 后被分配给另一池或同一池。
[0100] 在815之后,该处理识别(在820)所选择池中正被过度使用的任何队列。该处理 接着确定(在825)所选择池是否存在任何队列具有过量容量来处理目前被分派给识别的 过度使用队列的一个或多个VM的通信量。当该处理识别(在825)具有过量容量的一个或 多个队列时,该处理将目前被分派给识别的过度使用队列的一个或多个VM分派(在830) 给具有过量容量的一个或多个队列,然后转到以下将描述的835。
[0101] 另一方面,当该处理确定(在825)所选择池没有任何过量容量的队列来处理目前 正经过过度使用队列的通信量中的一些时,该处理确定(在840)是否存在任何空闲队列 (例如,空闲池是否具有任何队列)。如果存在,则该处理将空闲队列中的一个或多个分配 (在845)给所选择池(即,在810选择的池)。在845,该处理还将目前被分派给识别的过 度使用队列的一个或多个VM分配给重新分配的队列,然后转到以下将描述的835。
[0102] 当该处理确定(在840)没有空闲队列时,该处理确定(在850)它是否可先占取 另一池中的队列。在一些实施例中,并非所有池可先占取其它池中的队列;只有一些池(例 如,LLR池)可先占取其它池(例如,HLT池)中的队列。另外,在一些实施例中,在某些情 形下(例如,当其它池本身没有严重超负荷时),一些池可先占取其它池中的队列。
[0103] 当该处理确定(在850)它无法先占取另一池中的队列时,该处理转到835。另一 方面,当该处理确定(在850)它可先占取另一池中的队列时,该处理将目前正在使用先占 取队列的所有VM分派(在855)给与先占取池相同的池内的新队列。在重新分派所有VM 之后,该处理接着将先占取队列分配(在855)给所选择池(即,在810选择的池),并且将 目前被分派给识别的过度使用队列的一个或多个VM分派给新分配的队列,然后转到835。
[0104] 在835,该处理确定它是否检查了它应该检查的所有非默认池。如果是,该处理结 束。否则,该处理返回到810以选择另一个非默认池。该处理使用不同标准来评估不同池 的队列的未充分使用和过度使用。例如,对于LLR池,过度使用阈值可以是50 %负载并且未 充分使用阈值可以是5 %,而对于HLT池,过度使用阈值可以是90 %并且未充分使用阈值可 以是75%。
[0105] 另外,如以上提到的,一些实施例基于不同池资源分配标准(例如,池中队列的最 大/最小数量、池的总CPU使用率、池的网络通信量、池的服务质量(Qos)约束等)调整不 同池的大小。类似地,一些实施例基于不同的重新均衡标准(例如,将VM填充尽可能少的 队列(例如,针对HLT池)、跨尽可能多的队列分配VM(例如,针对LLR池)等)来重新均衡 不同池中的队列。
[0106] 在一些实施例中,图8的处理800检查未充分使用的队列,以将它们的VM重新分 派给同一池中的其它队列,使得它可解除未充分使用队列的分配。作为检查未充分使用的 队列的补充或替代,一些实施例的负载均衡器检查要分派给未默认队列的每个VM,以确定 VM对其非默认队列的使用是否在阈值水平以下。图9示出一些实施例的负载均衡器执行的 用于评估VM对其队列的使用率的处理900。
[0107] 如该图中所示,处理900先开始选择(在905)非默认队列的VM。接下来,在910, 该处理确定VM是否未充分使用其队列。例如,在一些实施例中,当只有通过队列的通信量 的1 %归属于VM时,认为VM未充分使用其队列。
[0108] 当该处理确定(在910)VM没有未充分使用其队列时,该处理结束。否则,该处理确 定(在915)与VM的目前队列相同的池中的另一队列是否具有用于所选择VM的容量。如 果没有,则该处理结束。否则,该处理(在920)将VM分派给与VM的目前队列相同的池中 的新队列。如果VM的之前队列没有被分派任何其它VM,则该处理接着解除之前队列的分 配。
[0109] 图10示出因为对第一队列的未充分使用或因为MV对其第一队列的未充分使用而 将VM从第一队列重新分派给第二队列的示例。具体地讲,该图示出初始被分派给两个队列 1025和1030的两个VM1015和1020的网络堆栈1005和1010。在这两个VM被初始化时, 这两个VM被分派给这两个队列。
[0110] 在某个随后时间点,负载均衡器555检索关于各种队列的各种VM使用的统计信 息。基于这些统计信息,负载均衡器检测VM1020使用队列1030的容量的不足1%。因为该VM未充分使用其队列,所以负载均衡器接着定义网络虚拟化层中和PNIC中的过滤器,其将 VM1020及其网络堆栈1010从队列1030重新分派给队列1025。如果没有其它VM正在使用 队列1030,则负载均衡器还把队列1030重新分配给队列的空闲池。在一些实施例中,负载 均衡器会把VM1020重新分派给队列1025,这只有当确定在进行该重新分派(和同时使用队 列1030的任何其它VM的重新分派)时,队列1030可从任何VM通信量中空出来,因此被重 新分配给空闲池才进行。然而,在其它实施例中,负载均衡器仅仅基于VM自身对其队列的 使用来进行其重新分配决定。
[0111] 图11示出因为第一队列的过度使用而将VM从第一队列重新分派给第二队列的示 例。具体地讲,这个图示出在相同的两个VM1015和1020已经被分派给队列1025之后这 两个VM的相同的两个网络堆栈1005和1010。在某个时间点,负载均衡器555检索关于各 种队列的各种VM使用的统计信息。基于这些统计信息,负载均衡器检测队列1025正以其 90%的容量处理通信量。因为这个队列正被过度使用,所以负载均衡器接着定义网络虚拟 化层中和PNIC中的过滤器,其将VM1020及其网络堆栈1010从队列1025重新分派给队列 1030。
[0112] 如以上提到的,一些实施例中的负载均衡器是保持跨池的期望均衡的池均衡处 理。在一些实施例中,池均衡处理检查跨各种池的队列使用。基于该检查,均衡处理可将一 个或多个队列分配给一个池。还可基于该检查将一个或多个队列从另一个池解除分配。在 一次调用中,该处理可将更多队列分配给一个以上的池,或者它可解除一个以上的池中的 队列的分配。
[0113] 图12示出跨池的池均衡的示例。具体地讲,它示出在两个阶段1205和1210中将 队列从低优先级池1215添加到高优先级池1220。在第一阶段中,负载均衡器555从统计信 息存储器545检索统计信息。基于检索的统计信息,负载均衡器确定通过高优先级池1220 的队列的负载(LH)大于通过低优先级池1215的队列的负载(LT)的特定百分比(例如, 75% ) 〇
[0114] 因为一些实施例想要通过高优先级队列的负载显著小于通过低优先级队列的负 载,所以负载均衡器设置过滤器,使得低优先级池中的队列1250从该池中被去除并且被添 加到高优先级池中。在队列1250可切换到高优先级池之前,正在使用低优先级池中的队列 1250的VM必须被分派给该池中的不同队列。图12示出将队列1250添加到高优先级队列 之后,通过高优先级队列的负载(LH)小于通过低优先级队列的负载(LL)的指定百分比。
[0115] IV.非VM可寻址节点和其它过滤
[0116] 以上已经描述了一些实施例,对于进出在主机装置上执行的一个或多个VM的数 据通信量,动态地定义队列的池,唯一地管理每个池,动态地改变池内的队列,并且将VM的 通信量重新分派给新队列。这些实施例中的许多实施例使用主机装置接收或发送的数据包 的目的地或源MAC地址,以将VM数据通信量数据包分派给不同池和池内的不同队列。
[0117] 然而,并非所有实施例使用MC地址将数据通信量分派给池和池内的队列。另外, 一些实施例的队列管理方法和设备用于除VM数据通信量之外的数据通信量。具体地讲,作 为VM数据通信量的附加或者作为VM数据通信量的替代,一些实施例动态地定义池,唯一地 管理每个池,动态地改变池内的队列,并且动态地重新分派进出在主机上执行的非VM可寻 址节点(例如,源端节点或目的地端节点)的数据通信量。一些实施例的方法和设备用于 执行这些操作,以区分通过队列的不同类型的数据通信量的路由。
[0118] 以下,进一步描述一些这样的实施例。具体地讲,子部分A描述使用MC地址过滤 将非VM通信量数据路由到不同池的不同队列的一些实施例。接着,子部分B描述使用五元 组IP过滤将不同类型的数据通信量路由到不同池的不同队列的一些实施例。
[0119] A.用于非VM通信量的MAC过滤
[0120] 一些实施例使用MC地址过滤将在主机装置上执行的非VM数据可寻址节点的数 据通信量路由到队列的不同池和池内的不同队列。例如,一些实施例的方法监控通过主机 装置的物理NIC的非VM可寻址节点(例如,数据端节点)集合的数据通信量。基于该监控, 该方法指定至少用于非VM可寻址节点集合的池,并且将队列集合分派给该池。该方法接着 使用目的地或源MAC过滤将用于非VM可寻址节点集合的由主机装置接收或发送的数据通 信量引导到分派的队列集合。
[0121] 可替选地或者可结合地,基于该监控,该方法可改变被分派给用于非VM可寻址节 点集合的池的队列集合。这种改变的示例包括当池的一个或多个队列被过度使用或未充分 使用时在池中添加队列或者从池中去除队列。在一些实施例中,该方法通过先占取另一个 池中的队列(例如,通过使用上述先占取方法中的一种)在该池中添加队列。
[0122] 另外,作为上述操作的替代或与上述操作结合,该方法可基于该监控,将用于非VM 可寻址节点(例如,数据端节点)的数据通信量从该池中的第一队列重新分派给该池中的 第二队列。例如,基于该监控,一些实施例的方法检测通过第一队列的用于非VM可寻址节 点的通信量降至通信量的最小阈值量以下(例如,在一段时间内)。因为这种未充分使用, 该方法将这个通信量切换至第二队列。在进行该切换之前,一些实施例的方法确定通过第 二队列的通信量没有超过通信量的最大阈值量。
[0123] 基于该监控,一些实施例的方法检测通过第一队列的通信量超过通信量的最大阈 值量(例如,在一段时间内)。因为这种过度使用,该方法将用于非VM可寻址节点(例如, 数据端节点)的通信量从第一队列切换至第二队列。同样,在进行该切换之前,一些实施例 的方法确定通过第二队列的通信量没有超过通信量的最大阈值量。
[0124] 图13示出一些实施例的队列管理系统1300,队列管理系统1300使用MAC地址过 滤将在主机装置上执行的VM和非VM数据可寻址节点的数据通信量路由到队列的不同池和 池内的不同队列。这个系统类似于图5的系统500,不同的是,系统500只管理进出VM端节 点的通信量,而系统1300管理进出VM和非VM可寻址节点(例如,iSCSI(内部小型计算机 系统接口)安装器1305、NFS(网络文档存储)安装器1307和VM迁移器1309)的通信量。 系统1300将队列分成不同优先级池,其中为特定类型的可寻址节点保留较高优先级池。它 还动态地调节每个池中的队列(即,动态地调节池的大小),并且基于一个或多个优化标准 (例如,与队列的未充分使用或过度使用有关的标准)将可寻址节点动态地重新分派给池 中的新队列。
[0125] 图13示出(1)在主机(未示出)上执行的一些VM505,(2)两个安装的存储卷1320 和1325,(3)VM迁移数据1330,(4)主机的由VM和非VM节点共用的物理NIC515,(5)有助 于通过共用的PNIC进出VM的通信量的虚拟化层1307。如进一步示出的,虚拟化层包括一 些非VM可寻址节点,例如iSCSI安装器1305、NFS安装器1307、VM迁移器1309。该层还包 括用于每个VM或非VM可寻址节点的网络堆栈1311、1313、1315、1317或1319。虚拟化层还 包括软件转发元件535 (例如,软件交换)、队列选择器518、动态负载均衡器555、统计信息 收集引擎540和统计信息存储器545。
[0126] 在一些实施例中,图13的PNIC515等同于图5的上述PNIC515。如以上提到的, PNIC具有用于从有线或无线链接接收输入数据包的接收侧(RX)处理引擎51URX处理引擎 具有MAC过滤器514,MAC过滤器514被配置成基于目的地MAC将每个(VM或非VM)可寻址 节点的传入通信量与一个队列对关联。虚拟化层保持用于传出数据包的类似的过滤器516, 并且该层中的队列选择器518使用该过滤器中的数据配置每个可寻址节点的传出通信量, 以使用与传入通信量相同的队列对。在一些实施例中,过滤器516依据VM的源MC地址或 VM的VNIC的源MAC地址来指定可寻址节点,而在其它实施例中,它依据VM的VNIC所连接 的软件转发元件的端口ID来指定VM。因为图13的PNIC515等同于图5的PNIC515,所以 为了不用不必要细节模糊对图13的描述,将不对图13的PNIC515进行进一步描述。
[0127]VM和非VM可寻址节点在超级监督者(未示出)之上执行,在一些实施例中,超级 监督者包括虚拟化层1310。VM和非VM可寻址节点可以是用于通过网络发送的数据包的 源端节点和目的地端节点。如以上提到的,这些节点包括VM505、卷安装器1305和1307和 VM迁移器1309。iSCSI安装器1305将存储卷1320安装在主机上。该存储卷1320是通过 iSCSI协议可访问的外部存储器(即,例如存储器服务器的主机外部的存储器)的一些或 全部。类似地,NFS安装器1307将存储卷1325安装在主机上。该存储卷1325是通过NFS 协议可访问的外部存储器(例如,存储服务器)的一些或全部。接着,在主机或其它装置上 执行的模块(例如,VM)可访问安装的卷,就好像外部存储器驻留在主机中一样。VM迁移器 1309收集关于在主机上执行的每个VM的数据,以有助于VM从一个主机在线迁移到另一个。 这种VM迁移器的一个示例是在VMware公司的ESX超级监督者中使用的vMotion模块。
[0128] 每个可寻址节点通过网络堆栈和转发元件的端口(未示出)连接到软件转发元件 535。在一些实施例中,每个VM的网络堆栈包括VNIC仿真器527和I/O链529,并且由接 收/发送线程531管理,如以上参照图5描述的。在一些实施例中,每个非VM可寻址节点 的网络堆栈包括超级监督者内核网络接口和接收/发送线程。在一些实施例中,每个非VM 可寻址节点的超级监督者内核网络接口(例如,VMware公司的vmknic)包括用于处理由非 VM可寻址节点接收和由非VM可寻址节点发送的TCP/IP数据包的TCP/IP堆栈。例如,在一 些实施例中,每个非VM可寻址节点的网络(1)将TCP/IP数据包头部附于它从其对应的安 装卷1320/1325或迁移数据存储器1330发送的数据包,(2)从它接收的用于存储在其对应 的安装卷或迁移数据存储器中的数据包中去除TCP/IP数据包头部。
[0129] 在一些实施例中,非VM可寻址节点(例如,VM迁移器1309)的超级监督者内核网 络接口不包括TCP/IP堆栈,而是包括其它数据包处理模块,例如RDM(远程直接存储器访 问)数据包处理模块。另外,在一些实施例中,非VM可寻址节点的网络堆栈包括其它I/O 链模块,这些I/O链模块用于对由它们对应的卷或数据存储器发送和接收的数据包执行其 它变换操作。类似于图5的接收/发送线程531,每个非VM可寻址节点的网络堆栈的接收 /发送线程管理网络堆栈中的模块,与和堆栈的非VM可寻址节点关联的PNIC队列517交 互,并且收集关于其堆栈的模块的操作的统计信息。
[0130] 如以上提到的,虚拟化层还包括统计信息收集引擎540、统计信息存储器545和动 态负载均衡器555。统计信息收集引擎540、负载均衡器555和RX/TX线程(未示出)部分 地形成一些实施例的队列管理系统。由统计信息收集引擎540收集的统计信息向负载均衡 器提供为确定何时将队列分派给池以及何时调节池所需的信息。
[0131] 在不同实施例中,统计信息收集引擎从不同源中得到统计信息。例如,在一些实施 例中,该统计信息收集引擎从任一CPU调度器525 (针对CPU使用率)和RX/TX线程(针对 网络通信量)拉取统计信息或者从任一CPU调度器525 (针对CPU使用率)和RX/TX线程 (针对网络通信量)接收被推送的统计信息。对于网络通信量,虚拟化层使得从各种源收集 统计信息(例如,吞吐量、数据包比率、丢包率等),所述各种源包括网络堆栈的每层(即,由 RX/TX线程管理的每个模块)。
[0132] 在一些实施例中,统计信息收集引擎收集负载均衡器的以下网络统计信息:PNIC 数据包比率、PNIC吞吐量和每个RX/TX线程的CPU使用率。在一些实施例中,CPU调度器 525更新CPU使用率数据,而RX/TX线程更新PNIC数据包比率和吞吐量,因为它们是实际上 与PNIC通信并且具有精确计数的线程。在一些实施例中,PNIC驱动器模块处于队列选择 器以下,并且该PNIC驱动器是与PNIC通信并且更新PNIC负载统计信息的模块。另外,在 一些实施例中,统计信息收集引擎不仅收集负载均衡器的PNIC统计信息,而且还收集非VM 可寻址节点采集的一个或多个VNIC统计信息。
[0133] 通过依靠VNIC统计信息,负载均衡器可决定,当对延迟敏感的(VM或非VM)可寻 址节点的数据包比率在某个阈值以上、或者它由于与其共用同一队列的一个或多个其它节 点的吞吐量而受损害时,将它移到独有队列或更高优先级池。更一般地,负载均衡器555使 用收集到的统计信息来确定将哪个队列分派给哪个可寻址节点,何时将队列动态地分派给 池以及何时动态地调节池。
[0134] 在一些实施例中,负载均衡器周期性地(例如,每隔几秒、几毫秒、几微秒等)运 行负载均衡处理。该处理从统计信息收集引擎保持的"负载统计信息"数据存储器545检 索统计信息,并且基于这些统计信息,确定是否需要将可寻址节点分派给队列,调整池的大 小,和/或先占取队列。负载均衡器通过配置PNIC和虚拟化层的过滤器以将特定队列标识 符与用于输出通信量的特定源MAC地址和用于输入通信量的特定目的地MAC关联来将节点 分派给队列。为了配置PNIC的MAC过滤器,负载均衡器使用PNIC驱动器的API来对过滤 器和各队列的硬件特征进行编程。
[0135] 如图13中所示,负载均衡器具有三个模块,S卩,池561、队列均衡器559和池均衡器 557。这些池是负载均衡器定义的PNIC队列的软件抽象分组。负载均衡器应用不同处理来 管理不同"池"中的队列。如此,每个池可被视为具有相同"特征"的队列集合,其中,特征 类似于硬件特征(类似RSS/LRO)。这种特征的示例包括VM要求(例如,低延迟或低中断比 率)。
[0136] 通过应用不同处理来管理不同池中的队列,负载均衡器可针对不同池不同地优化 队列的分配和池大小的调整。池重新均衡器557基于池的资源分配标准调整每个池的大小 并且在需要时先占取其它池中的队列。这种资源分配标准的示例包括池中队列的最大/最 小数量、池的总CPU使用率、池的网络通信量、池的服务质量(QoS)约束等。队列重新均衡 器559基于池的重新均衡标准,重新均衡同一池中的队列。这种池重新均衡标准的示例包 括将可寻址节点填充尽可能少的队列(例如,针对HLT池),跨尽可能多的队列分配可寻址 节点(例如,针对LLR池)等。在一些实施例中,负载均衡器555通过使用类似于以上参照 图6至图9的上述处理的处理,管理PNIC队列来处理VM和非VM可寻址节点。在这些实施 例中的一些实施例中,这些处理仅被修改为不仅监控和管理VM通信量而且监控和管理进 出非VM可寻址节点的通信量(例如,进出安装器1305和1307和迁移器1309的通信量)。
[0137] B.用于区分不同类型的数据包的替代过滤
[0138] 作为MAC地址过滤的替代,一些实施例使用其它过滤技术以不同方式处理不同类 型的数据包,以便例如为不同的数据包类型集合定义不同的池,以不同方式管理每个池,动 态地改变池内的队列,以及动态地重新分派不同类型的数据通信量。例如,基于非MC数据 包标识符,一些实施例的方法识别和监控通过主机装置的NIC的第一类型的数据通信量。 基于该监控,该方法指定用于第一类型的数据通信量的池,将队列集合分派给该池。该方法 接着使用非MC地址过滤将第一类型的数据通信量引导到所分派的队列集合。
[0139] 可替选地或者可结合地,基于该监控,该方法可改变分派给通过非MAC数据包标 识符识别的用于第一类型的数据通信量的池的队列集合。这种改变的示例包括当该池的一 个或多个队列被过度使用或未充分使用时在该池中添加或去除队列。在一些实施例中,该 方法通过先占取另一个池中的队列(例如,通过使用上述先占取方法中的一种)在该池中 添加队列。
[0140]另外,作为上述操作的替代或与上述操作结合,该方法可基于该监控,将第一类型 的数据通信量从该池中的第一队列重新分派给该池中的第二队列。例如,基于该监控,一些 实施例的方法检测通过第一队列的第一类型的数据通信量降至通信量的最小阈值量以下 (例如,在一段时间内)。基于这种未充分使用,该方法将这个通信量切换至第二队列。在 进行该切换之前,一些实施例的方法确定通过第二队列的通信量没有超过通信量的最大阈 值量。
[0141] 可替选地,基于该监控,一些实施例的方法可检测通过第一队列的第一类型的数 据通信量超过通信量的最大阈值量(例如,在一段时间内)。因为这种过度使用,该方法将 第一类型的数据通信量从第一队列切换至第二队列。同样,在进行该切换之前,一些实施例 的方法确定通过第二队列的通信量没有超过通信量的最大阈值量。
[0142] 不同的实施例使用不同的非MC过滤。一些实施例使用数据包头部数据将数据包 有效载荷归类为多种类型中的一种。例如,一些实施例使用L3和L4数据包头部中的五元组 IP数据对数据包有效载荷进行归类。五元组数据包括源端口标识符、目的地端口标识符、源 IP地址、目的地IP地址和协议。使用这五个标识符,一些实施例的过滤器可将IP数据包指 定为任何数量的不同类型,例如VOIP数据包、视频数据包、音频数据包、FTP数据包、HTTP数 据包、!1111^数据包、远程桌面数据包(?&)1?、¥从:、1?朽、管理数据包(认证、服务器健康监 控、时间同步)、电子邮件数据包(P〇P3、SMTP)等。由于这些协议全都具有不同的通信模式, 因此一些实施例将其中的一个或多个分成队列的不同池,并且使用不同的优化标准将数据 通信量分配到每个池中的队列。
[0143] 以下提供的列表示出可以如何使用五元组来通过使用下面的标志区分网络通信 量、VoIP、视频流、远程桌面、管理、电子邮件:协议-src_ip-dst_ip-src_port-dest_port, 其中,*表示通配符匹配。在这个列表中,假设VM是请求服务/数据/来自服务器的服务 的客户端。
[0144] ?网络:TCP-*-*-*-80/443 (80 是针对HTTP并且 443 是针对HTTPS)
[0145].VoIP(Skype) :TCP/UDP-*-*-23399_* 或TCP/UDP-*-*-*-23399 (传入和传出通信 量)
[0146] ?视频流(MMS) :TCP/UDP-*-*-*-1755
[0147] ?远程桌面(PCoIP) :TCP/UDP-*-*-*-4172
[0148] ?认证(Kerberos) :TCP/UDP-*-*-*_88
[0149] ?电子邮件(POP3) :TCP-*-*-*-110
[0150] 图14和图15图示示出了一些实施例使用五元组过滤器区分在视频呈现期间由虚 拟机发送或接收的VOIP和视频数据包的示例。图14示出使用五元组区分由VM1405正在 发送的VOIP和视频数据包的情况。在这个示例中,动态负载均衡器555在队列选择器518 中设置一组五元组过滤器1410,以将VOIP数据包从VM1405路由到高优先级队列池1420, 同时设置另一组五元组过滤器,以将视频数据包从这个VM路由到低优先级队列池1425。
[0151] 图15示出使用五元组区分由VM1405正在接收的VOIP和视频数据包的情况。在 这个示例中,动态负载均衡器555在PNIC515的RX处理引擎511中设置一组五元组过滤 器1510,以将传入的VOIP数据包(针对VM1405)发送到高优先级队列池1420,同时设置 另一组五元组过滤器1510,以将传入的视频数据包(针对VM1405)发送到低优先级队列池 1425。
[0152] 负载均衡器555设置五元组过滤器,以便将队列分组成池,然后它基于不同标准 来管理该池。具体地讲,通过依靠统计信息存储器545中收集的统计信息,负载均衡器555 可确定将哪个可寻址节点分派给哪个队列,何时将队列动态地分派给池,何时从池中动态 地去除队列,何时将可寻址节点动态地重新分派给新队列。
[0153] 在一些实施例中,负载均衡器周期性地(例如,每隔几秒、几毫秒、几微秒等)运行 负载均衡处理。这个处理从统计信息收集引擎保持的"负载统计信息"数据存储器545检 索统计信息,并且基于这些统计信息,确定是否需要将可寻址节点分派给队列、调整池的大 小、和/或先占取队列。负载均衡器通过配置PNIC和虚拟化层的五元组过滤器以将特定队 列标识符与特定五元组过滤器关联来将节点分派给队列。为了配置PNIC的过滤器,负载均 衡器使用PNIC驱动器的API来对过滤器和各队列的硬件特征进行编程。
[0154] 如以上参考图5和图13描述的,在一些实施例中,图14和图15的虚拟化层中的 负载均衡器555具有三个模块(未示出)。这三个模块是(1)存储器,该存储器存储各个 池、其相关队列的标识符、与每个队列关联的可寻址节点,(2)队列均衡器,(3)池均衡器。
[0155] 图14和图15的负载均衡器555应用不同处理来管理不同"池"中的队列。如此, 每个池可被视为具有相同"特征"的一组队列。通过应用不同处理来管理不同池中的队列, 负载均衡器可针对不同池不同地优化队列的分配和池大小的调整。池重新均衡器基于池的 资源分配标准调整每个池的大小,并且在需要时先占取其它池中的队列。以上提供了这种 资源分配标准的示例(例如,池中队列的最大/最小数量、池的总CPU使用率、池的网络通 信量、池的服务质量(QoS)约束等)。
[0156] 队列重新均衡器基于池的重新均衡标准,重新均衡同一池中的队列,例如将可寻 址节点填充尽可能少的队列(例如,针对HLT池),跨尽可能多的队列分配可寻址节点(例 如,针对LLR池)等。在一些实施例中,图14和图15的负载均衡器555通过使用类似于以 上参照图6至图9的上述处理的处理,管理PNIC队列来处理VM和非VM可寻址节点。在这 些实施例中的一些实施例中,这些处理仅被修改为不仅监控和管理VM通信量而且监控和 管理进出非VM可寻址节点的通信量。
[0157]V.电子系统
[0158] 上述特征和应用中的一些被实现为被指定为在计算机可读存储介质(也被称为 计算机可读介质)上记录的一组指令的软件处理。当这些指令由一个或多个处理单元(例 如,一个或多个处理器、处理器的核或其它处理单元)执行时,它们使得处理单元执行指令 中指示的动作。计算机可读介质的示例包括但不限于CD-ROM、闪存驱动器、RAM芯片、硬驱 动器、EPROM等。计算机可读介质不包括无线地或者通过有线连接传递的载波和电子信号。
[0159] 在本说明书中,术语"软件"意指包括可被读入存储器中供处理器处理的、存在于 只读存储器中的固件或存储在磁存储器中的应用。另外,在一些实施例中,多个软件发明可 在保持不同的软件发明的同时被实现为较大程序的子部分。在一些实施例中,多个软件发 明还可被实现为单独的程序。最终,一起实现本文描述的处理的单独程序的任何组合在本 发明的范围内。在一些实施例中,程序当被安装以在一个或多个电子系统上操作时定义一 个或多个特定机器实现方式,这些实现方式执行和运行软件程序的操作。
[0160] 图16概念性地示出用来实现本发明的一些实施例的电子系统1600。电子系统 1600可以是上述主机装置中的任一个。这个系统可以是执行上述处理和/或队列管理系统 中的任一个的任何装置。电子系统1600可以是计算机(例如,台式计算机、个人计算机、平 板计算机、服务器计算机、大型机、刀片计算机等)、电话、PDA或任何其它类型的电子装置。 这种电子系统包括各种类型的计算机可读介质和用于各种其它类型的计算机可读介质的 接口。电子系统1600包括总线1605、处理单元1610、系统贮存器1625、只读贮存器1630、 永久存储装置1635、输入装置1640和输出装置1645。
[0161] 总线1605共同地代表所有以通信方式连接电子系统1600的众多内部装置的系统 总线、外围设备总线和芯片组总线。例如,总线1605将处理单元1610与只读贮存器1630、 系统贮存器1625和永久存储装置1635通信地连接。
[0162] 从这些各种贮存器单元,处理单元1610获取要执行的指令和要处理的数据,以执 行本发明的处理。在不同的实施例中,处理单元可以是单个处理器或多核处理器。
[0163] 只读贮存器(ROM) 1630存储电子系统的处理单元1610和其它模块所需的统计信 息数据和指令。另一方面,永久存储装置1635是读写贮存器装置。这个装置是非易失性贮 存器单元,即使当电子系统1600关闭时也存储指令和数据。本发明的一些实施例使用大容 量存储装置(例如,磁盘或光盘及其对应的盘驱动器)作为永久存储装置1635。
[0164] 其它实施例使用可移动存储装置(例如,软盘、闪存驱动器等)作为永久存储装 置。类似于永久存储装置1635,系统贮存器1625是读写贮存器装置。然而,不同于存储装 置1635,系统贮存器是易失性读写贮存器,例如随机存取贮存器。系统贮存器存储处理器 在运行时需要的指令和数据中的一些。在一些实施例中,本发明的处理被存储在系统贮存 器1625、永久存储装置1635和/或只读贮存器1630中。从这些各种贮存器单元,处理单元 1610获取要执行的指令和要处理的数据,以执行一些实施例的处理。
[0165] 总线1605还连接到输入装置1640和输出装置1645。输入装置使用户能够传送信 息并且选择针对电子系统的命令。输入装置1640包括字母数字键盘和指点装置(也被称 为"光标控制装置")。输出装置1645显示电子系统产生的图像。输出装置包括打印机和 显示装置,例如阴极射线管(CRT)或液晶显示器(LCD)。一些实施例包括诸如同时用作输入 装置和输出装置的触摸屏的装置。
[0166] 最后,如图16中所示,总线1605还通过网络适配器(未示出)将电子系统1600 连接到网络1665。以此方式,计算机可以成为计算机网络(例如,局域网(LAN))、广域网 (WAN)、或以太网、或诸如因特网的网络中的网络的部分。电子系统1600的任何或所有组件 可与本发明结合使用。
[0167] 一些实施例包括电子组件,例如将计算机程序指令存储在机器可读或计算机可读 介质(可替选地,被称为计算机可读存储介质、机器可读介质、或机器可读存储介质)中 的微处理器、存储器和贮存器。这种计算机可读介质的一些示例包括RAM、ROM、只读光盘 (CD-ROM)、可记录光盘(CD-R)、可重写光盘(CD-RW)、只读数字通用盘(例如,DVD-ROM、双层 DVD-ROM)、各种可记录/可重写DVD(例如,DVD-RAM、DVD-RW、DVD+RW等)、闪存存储器(例 如,SD卡、迷你SD卡、微型SD卡等)、磁和/或固态硬盘驱动器、只读和可记录Blu-Ray? 盘、超级密度光盘、任何其它光或磁介质、软盘。计算机可读介质可存储能由至少一个处理 单元执行的计算机程序并且包括用于执行各种操作的一组指令。计算机程序或计算机代码 的示例包括诸如由编译器生成的机器代码和包括由计算机、电子组件或微处理器使用解释 器执行的更高级代码的文件。
[0168] 虽然以上讨论主要指的是执行软件的微处理器或多核处理器,但一些实施例是由 一个或多个集成电路(例如,专用集成电路(ASIC)或现场可编程门阵列(FPGA))执行的。 在一些实施例中,这种集成电路执行存储在电路本身中的指令。
[0169] 如本说明书中使用的,术语"计算机"、"服务器"、"处理器"和"贮存器"都是指电 子或其它技术装置。这些术语不包括人或人的群组。出于说明书的目的,术语"显示"意指 在电子装置上显示。如本说明书中使用的,术语"计算机可读介质"和"机器可读介质"完 全限于将信息以计算机可读形式存储的有形物理物体。这些术语不包括任何无线信号、有 线下载信号、任何其它短暂或瞬变信号。
[0170] 虽然已经参照众多具体细节描述了本发明,但本领域的普通技术人员将认识到, 在不脱离本发明的精神的情况下,可以以其它具体形式实施本发明。另外,多个图(包括图 6至图9)概念性地示出处理。这些处理的具体操作可以不按照示出和描述的准确次序执 行。具体操作可以不在连续一系列操作中执行,不同具体操作可在不同实施例中执行。此 夕卜,可使用多个子处理来实现处理,或者处理可被实现为更大宏处理的一部分。
【权利要求】
1. 一种为包括具有多个队列的网络接口卡NIC的电子装置管理所述队列的方法,所述 方法包括: 监控进出所述NIC的数据通信量; 基于所述监控,指定池并且将队列集合分派给所述池,所述池具有用于管理经过所述 队列集合的数据通信量的标准集合;以及 基于所述标准集合,引导所述数据通信量的子集到所述队列集合。
2. 根据权利要求1所述的方法,其中所述池是第一池,所述队列集合是第一队列集合, 所述标准集合是第一标准集合,并且所述数据通信量的子集是数据通信量的第一子集,所 述方法包括: 基于所述监控,指定第二池并且将第二队列集合分派给所述第二池,所述第二池具有 用于管理经过所述第二队列集合的数据通信量的第二标准集合;以及 基于所述第二标准集合,引导所述数据通信量的第二子集到所述第二队列集合; 其中所述第一标准集合不同于所述第二标准集合。
3. 根据权利要求2所述的方法,其中每个特定池的标准集合指定经过所述特定池的每 个队列的数据通信量的最大阈值量,其中所述第一标准集合指定与所述第二标准集合不同 的最大阈值。
4. 根据权利要求3所述的方法,还包括:当至少经过所述特定池中的队列的子集的数 据通信量超过所述最大阈值量时,将新队列分派给特定池的队列集合。
5. 根据权利要求4所述的方法,其中所述特定池的队列的子集包括所述特定池的队列 集合中的所有队列。
6. 根据权利要求4所述的方法,其中所述特定池的队列的子集不包括所述特定池的队 列集合中的所有队列。
7. 根据权利要求2所述的方法,其中特定池的每个标准集合指定经过所述特定池的每 个队列的数据通信量的最小阈值量,其中所述第一标准集合指定与所述第二标准集合不同 的最小阈值。
8. 根据权利要求7所述的方法,还包括:当经过特定队列的数据通信量在所述最小阈 值量以下持续一段时间时,从特定池的队列集合中去除该特定队列。
9. 根据权利要求2所述的方法,其中: 特定池的每个标准集合指定经过所述特定池的每个队列的数据通信量的阈值量, 所述第一标准集合指定最大阈值量而不指定最小阈值量,而所述第二标准集合指定最 小阈值量而不指定最大阈值量。
10. 根据权利要求1所述的方法,其中监控数据通信量包括监控与在所述电子装置上 执行的可寻址节点关联的数据通信量。
11. 根据权利要求1所述的方法,其中所述队列集合只包括一个队列。
12. 根据权利要求1所述的方法,其中所述队列集合包括一个以上队列。
13. 根据权利要求1所述的方法,其中引导数据通信量的子集包括指定所述NIC中的过 滤器集合以经过所述队列集合路由所述数据通信量的子集。
14. 根据权利要求13所述的方法,其中所述过滤器集合将所述数据通信量的子集经过 所述队列集合路由到在所述电子装置上执行的可寻址目的地节点集合。
15. 根据权利要求1所述的方法,其中引导数据通信量的子集包括指定过滤器集合,所 述过滤器集合将所述数据通信量的子集经过所述队列集合从在所述电子装置上执行的可 寻址源节点集合路由到所述电子装置之外。
16. 根据权利要求15所述的方法,其中所述过滤器集合被限定在与多个可寻址源节点 共用所述电子装置上的网络连网资源集合的网络层中。
17. 根据权利要求15所述的方法,其中所述过滤器集合被限定在与在所述电子装置上 执行的多个可寻址节点共用所述电子装置上的连网资源集合的网络虚拟化层中。
18. 根据权利要求15所述的方法,其中所述监控、指定和引导是由在多个不同虚拟模 块之间共用所述电子装置上的连网资源集合的网络虚拟化层所执行的操作,其中所述过滤 器集合被限定在所述网络虚拟化层中,以将来自不同虚拟模块的数据通信量分派给多个队 列中的不同队列。
19. 一种为包括具有多个队列的网络接口卡NIC的电子装置管理所述队列的方法,所 述方法包括: 指定包括至少第一队列的默认池; 将数据通信量集合分派给所述默认池; 确定非默认池应该被指定用于处理所述数据通信量集合的第一子集; 指定所述非默认池和针对所述非默认池的第二队列;以及 将所述数据通信量的子集分派给所述第二队列。
20. 根据权利要求19所述的方法,还包括:监控进出所述NIC的数据通信量集合,其中 所述确定基于所述监控。
21. 根据权利要求20所述的方法,还包括: 基于所述监控,识别要分派给所述非默认池的所述数据通信量集合的第二子集;以及 分派所述第二子集到所述非默认池。
22. 根据权利要求21所述的方法,其中分派所述第二子集包括将所述第二子集分派给 所述第二队列。
23. 根据权利要求21所述的方法,其中分派所述第二子集包括将所述第二子集分派给 被分派给所述非默认池的第三队列。
24. 根据权利要求20所述的方法,还包括: 监控数据通信量的第一子集;以及 基于所述监控,重新分派所述数据通信量的第一子集回到所述默认池。
25. 根据权利要求24所述的方法,其中重新分派第一子集包括将所述第一子集重新分 派回到所述第一队列。
26. 根据权利要求24所述的方法,其中重新分派所述第一子集包括将所述第一子集重 新分派回到被分派给所述默认池的第三队列。
27. 根据权利要求19所述的方法,其中不同池具有用于将数据通信量分派给池中的队 列的不同标准集合。
28. 根据权利要求27所述的方法,其中不同池的各个标准集合的不同之处在于,指定 用于经过特定池的每个队列的数据通信量的不同的最大阈值量。
29. 根据权利要求27所述的方法,其中不同池的各个标准集合的不同之处在于,指定 用于经过特定池的每个队列的数据通信量的不同的最小阈值量。
30. 根据权利要求27所述的方法,其中不同池的各个标准集合的不同之处在于,指定 用于经过特定池的每个队列的数据通信量的不同的阈值量,其中一个池指定最大阈值而另 一个池指定最小阈值。
31. 根据权利要求19所述的方法,其中所述数据通信量集合包括与在所述电子装置上 执行的可寻址节点关联的数据通信量。
32. 根据权利要求31所述的方法,其中所述可寻址节点包括虚拟机VM、存储卷安装器 和VM迁移器中的至少一个。
33. -种管理执行多个虚拟机VM的主机的网络接口中的多个队列的方法,所述方法包 括: 指定第一池和第二池,所述第一池和第二池定义所述队列的至少一个子集的第一分组 和第二分组; 基于第一标准集合,指定第一 VM集合到所述第一池中的队列的分配;以及 基于第二标准集合,指定第二VM集合到所述第二池中的队列的分配,其中所述第一标 准集合和所述第二标准集合不同。
34. 根据权利要求33所述的方法, 其中指定所述第一 VM集合的分配包括使用第一处理集合来指定该分配; 其中指定所述第二VM集合的分配包括使用第二处理集合来指定该分配,其中所述第 一处理集合和第二处理集合是不同的处理。
【文档编号】H04L12/863GK104426799SQ201410191336
【公开日】2015年3月18日 申请日期:2014年5月8日 优先权日:2013年8月26日
【发明者】S·阿加瓦尔, L·辛格阿崴鲁, A·维尔阿伊颜, C-C·陈 申请人:Vm维尔股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1