防止欠载的分组存储器系统、方法和设备的制造方法

文档序号:10660770阅读:321来源:国知局
防止欠载的分组存储器系统、方法和设备的制造方法
【专利摘要】一种用于选择性地在一个或多个输出端口上输出所接收到的分组的分组存储器系统。该分组存储器系统包括用于控制输出端口的控制器。具体地,针对需要从多个端口输出的多播或广播业务的分组,控制器指定从分组存储器中读取分组数据的一个或多个读取端口,使得其余的端口能够仅仅对读取的分组数据进行监听而不执行读取操作。
【专利说明】
防止欠载的分组存储器系统、方法和设备
技术领域
[0001]本发明涉及分组存储器系统。更具体地,本发明涉及在分组存储器系统中防止欠载(underrun)〇【背景技术】
[0002]类似于交换机微芯片的分组处理设备通常都需要在设备对分组进行处理时缓冲分组到具有一个或多个存储器库的分组缓冲存储器(PM)中分组。某些分组(例如,以太网分组)的大小事先是未知的,因此设备需要在不知道分组多大的情况下启动在分组缓冲器中存储分组。而且,分组以交错方式到达设备分组,因而设备同时将到达的多个分组存储到分组缓冲器中。分组在设备的分组存储器中存储分组的现有技术的解决方案是为每个分组分派分组存储器的多个块(被称作页面),而不是为其分派单个大的块。使用这种方案,分组没有被连续地存储在分组存储器的多个存储器库中,而是被分散在遍及分组存储器的多个存储器库的一个或多个页面中。因此,需要在交换机中维护特定分组所使用的所有页面(及其存储器库)的链表;随后遍历该链表,从而从分组存储器定位和读取分组来进行传输。
[0003]在被称作广播业务的分组业务类型中,要求设备的所有输出端口输出相同的分组数据。类似地,在被称作多播业务的分组业务类型中,要求设备的输出端口中的多个(但不是所有)端口输出相同的分组数据。因此,对于这样的业务,所有这些输出端口将针对该相同分组数据请求分组存储器。这会在设备中产生性能问题,因为这引起了大量的输出端口在大致相同的时间对相同数据的请求。具体地,当这种情况经常发生时,分组存储器中的少数存储器库将需要服务所有的请求,而其它存储器库保持空闲。因此,输出端口中的某些端口将很快地得到数据,但是其它端口将需要等待相对较长的时间以获取数据,这是因为这个存储器库的较小子集需要串行化来自多个输出端口的所有请求,因为每个存储器库通常只有少量的读取端口。[〇〇〇4]数据的这一等待时间具有两个不希望的结果。如果数据对应于分组的开始,那么将延迟整个分组的传输。这意味着端口带宽的下降,因为在其实际能够发送数据时却在等待发送数据。如果数据对应于分组的中部而且已经传输了分组中的一些数据,那么输出端口不能以需要的速率进行传输,并且引起欠载错误。这比上面描述的性能下降更为严重,因为分组在有错误的情况下传输,并且接收机将不得不丢弃该分组,从而导致在某些情况下代价很高的分组重传。上面描述的第二种情况在交换机工作在直通(cut-thru)模式时更加常见。在这种模式下,需要传输分组的所有输出端口都将在大致相同的时间进行操作,因为它们被指示尽快传输分组而无需等待接收到整个分组。
【发明内容】

[0005]—种用于选择性地在一个或多个输出端口上输出所接收的分组的分组存储器系统。该分组存储器系统包括用于控制输出端口的控制器。具体地,针对需要从多个端口输出的多播或广播业务的分组,控制器指定从分组存储器读取分组数据的一个或多个读取端口,使得其余的端口能够仅仅对读取的分组数据进行监听而不执行读取操作。
[0006]第一个方面针对分组存储器系统,所述系统包括非瞬态计算机可读分组存储器, 所述非瞬态计算机可读分组存储器包括用于存储由所述系统输入的分组的分组数据的一个或多个存储器库,其中,所述分组数据在被存储在存储器库上时根据被映射到所述存储器库的一个或多个页面来进行组织;多个输出端口,多个输出端口与分组存储器耦合,并且被配置为选择性地从分组存储器读取分组数据,并且将分组数据向系统的外部输出;以及, 与多个输出端口耦合的控制器,控制器用于控制哪些端口输出所述分组数据,其中如果分组数据将从两个或更多个端口被输出,则控制器命令少于两个或更多个端口中的所有端口的端口以引起分组数据从分组存储器被读出并且被传输至两个或更多个端口中的所有端口。在某些实施例中,多个输出端口和控制器正以直通(cut-thru)模式操作,以使得多个输出端口中的每个端口在分组的整体被接收到之前开始输出分组数据。在某些实施例中,控制器命令两个或更多个端口中的所有端口基于分组数据标识符在分组数据从分组存储器被读出之后监听并且输出分组数据,分组数据的标识符由控制器发送至两个或更多个端口中的所有端口。在某些实施例中,少于两个或更多个端口中的所有端口的端口中的每个端口引起分组数据的不同部分从所述分组存储器被读出。在某些实施例中,少于两个或更多个端口中的所有端口的端口中的每个端口的分组数据的不同部分由控制器基于在页面之间如何分配分组数据而确定。在某些实施例中,少于两个或更多个端口中的所有端口的端口的数量由控制器基于在其上存储有分组数据的页面的数量来确定。在某些实施例中,控制器基于两个或更多个端口中的每个端口的拥塞程度来选择少于所述两个或更多个端口中的所有端口的端口。在某些实施例中,多个输出端口中的每个端口包括缓冲器,缓冲器存储有用于标识已经由控制器指定将被端口输出的、但是还没有被该端口输出的一个或多个分组的列表,并且另外其中两个或更多个端口中的每个端口的拥塞程度基于由该端口的缓冲器列表所标识的分组的当前数量。在某些实施例中,少于所述两个或更多个端口中的所有端口的端口正是引起所有的分组数据从分组存储器被读出的两个或更多个端口中的一个端口。在某些实施例中,少于所述两个或更多个端口中的所有端口的端口正是两个或更多个端口中的第一端口和第二端口,并且另外其中控制器命令第一端口以引起分组数据的第一部分被读出,并且命令第二端口以引起分组数据的没有被包括在第一部分中内的剩余部分被读出。在某些实施例中,第一部分被存储在被映射到所述存储器库的页面中的一个或多个第一页面上并且包含分组数据的头部,并且另外其中分组数据的剩余部分被存储在被映射到所述存储器库的页面中的一个或多个第二页面上并且包括分组数据的没有被包含在第一页面内的剩余部分。
[0007]第二个方面针对存储在非瞬时性的计算机可读介质上并且与多个输出端口耦合的控制器,多个输出端口选择性地从分组存储器读取并输出分组数据,其中分组存储器具有存储分组数据的一个或多个存储器库,并且另外其中控制器被配置为,如果分组数据将从两个或更多个端口被输出所,则命令少于两个或更多个端口中的所有端口的端口以引起分组数据从分组存储器被读出并且被传输至两个或更多个端口中的所有端口。在某些实施例中,多个输出端口和控制器以直通模式进行操作,以使得多个输出端口中的每个端口在分组的整体被接收到之前开始输出分组数据。在某些实施例中,控制器被配置为,命令两个或更多个端口中的所有端口基于分组数据标识符在分组数据从分组存储器被读出之后监听并且输出所述分组数据,分组数据的标识符由控制器发送至两个或更多个端口中的所有端口。在某些实施例中,少于所述两个或更多个端口中的所有端口的端口中的每个端口引起分组数据的不同部分从所述分组存储器被读出。在某些实施例中,分组数据被存储在所述存储器库上时根据被映射到存储器库的一个或多个页面来进行组织,另外其中少于所述两个或更多个端口中的所有端口的端口中的每个端口的分组数据的不同部分由控制器基于在页面之间如何分配分组数据而确定。在某些实施例中,控制器被配置为,基于其上存储了分组数据的页面的数量来确定少于所述两个或更多个端口中的所有端口的端口的数量。 在某些实施例中,控制器被配置为,基于两个或更多个端口中的每个端口的拥塞程度来选择少于所述两个或更多个端口中的所有端口的端口。在某些实施例中,多个输出端口中的每个端口包括缓冲器,缓冲器存储有用于标识已经由所述控制器指定将被端口输出的、但是还没有被该端口输出的一个或多个分组的列表,并且另外其中两个或更多个端口中的每个端口的拥塞程度基于由该端口的缓冲器列表所标识的分组的当前数量。在某些实施例中,少于两个或更多个端口中的所有端口的端口正是引起所有的分组数据从分组存储器被读出的两个或更多个端口中的一个端口。在某些实施例中,少于两个或更多个端口中的所有端口的端口正是所述两个或更多个端口中的第一端口和第二端口,并且其中控制器被配置为,命令第一端口以引起分组数据的第一部分被读出,并且命令第二端口以引起分组数据的没有被包括在第一部分内的剩余部分被读出。在某些实施例中,第一部分被存储在被映射到存储器库的页面中的一个或多个第一页面上并且包括分组数据的头部,并且另外其中分组数据的剩余部分被存储在被映射到存储库的页面中的一个或多个第二页面上并且包括分组数据的没有被包括在第一页面内的剩余部分。
[0008]第三个方面针对操作分组存储器系统的方法。方法包括:在非瞬态计算机可读分组存储器的一个或多个存储器库上存储分组的分组数据,其中在存储器库上存储分组数据包括当分组数据被存储在存储库上时根据被映射到存储库的一个或多个页面来进行组织; 如果分组数据从被耦合至分组存储器的两个或更多个端口被输出,则利用被耦合至输出端口的控制器来命令少于两个或更多个端口中的所有端口的端口以引起分组数据以引起分组数据从所述分组存储器被读出且被传输至两个或更多个端口中的所有端口;以及利用两个或更多个端口从两个或更多个端口中的每个端口输出分组数据。在某些实施例中,多个输出端口和控制器以直通模式进行操作,以使得通过两个或更多个端口中的每个端口输出分组数据包括,在分组的整体被接收到之前开始输出分组数据的至少一部分。在某些实施例中,方法还包括,利用控制器命令两个或更多个端口中的所有端口基于分组数据标识符在分组数据从分组存储器被读出之后监听并且输出分组数据,分组数据标识符由控制器发送至两个或更多个端口中的所有端口。在某些实施例中,少于所述两个或更多个端口中的所有端口的所述端口中的每个端口引起分组数据的不同部分从所述分组存储器被读出。在某些实施例中,方法还包括,利用控制器基于在页面之间如何分配分组数据来确定少于所述两个或更多个端口中的所有端口的端口中的每个端口的分组数据的不同部分。在某些实施例中,方法还包括,利用控制器基于在其上存储了分组数据的页面的数量来确定少于两个或更多个端口中的所有端口的端口的数量。在某些实施例中,方法还包括,利用控制器基于两个或更多个端口中的每个端口的拥塞程度来选择数目少于两个或更多个端口中的所有端口的端口。在某些实施例中,多个输出端口中的每个端口包括缓冲器,缓冲器存储有用于标识已经由控制器指定将被端口输出的、但是还没有被该端口输出的一个或多个分组的列表,并且其中两个或更多个端口中的每个端口的拥塞程度基于由该端口的缓冲器列表所标识的分组的当前的数量。在某些实施例中,少于两个或更多个端口中的所有端口的端口正是引起所有的分组数据从所述分组存储器被读出的两个或更多个端口中的一个端口。在某些实施例中,少于所述两个或更多个端口中的所有端口的端口正是两个或更多个端口中的第一端口和第二端口,还包括,利用控制器命令第一端口以引起分组数据的第一部分被读出以及命令第二端口以引起分组数据的没有被包括在第一部分内的剩余部分被读出。在某些实施例中,第一部分被存储在被映射到存储器库的页面中的一个或多个第一页面上并且包括所述分组数据的头部,并且其中分组数据的剩余部分被存储在被映射到存储库的页面中的一个或多个第二页面上并且包括分组数据的没有被包括在第一页面内的剩余部分。【附图说明】
[0009]图1图示了根据某些实施例的分组存储器系统。
[0010]图2图示了根据某些实施例的分组的页面链表和链表到分组存储器的存储器库的示例性映射。
[0011]图3图示了根据某些实施例的、在分组存储器系统中防止欠载的方法。【具体实施方式】
[0012]在以下描述中,出于说明的目的阐述了许多细节。然而,本领域的技术人员将认识至IJ,本发明可以不使用这些具体的细节来实践。因此,本发明并不旨在被限制于所示出的实施例,而是遵循与本文所描述的原理和特征相一致的最大的范围。
[0013]多个实施例针对用于选择性地在一个或多个输出端口上输出所接收的分组的分组存储器系统。该分组存储器系统包括用于控制输出端口的控制器。具体地,针对需要从多个端口输出的多播或广播业务的分组,控制器指定从分组存储器中读取分组数据的一个或多个读取端口,使得其余的端口能够仅仅对读取分组数据进行监听而不执行读取操作。因此,防止了所有输出端口基本上同时访问分组存储器中的分组的尝试,从而提高了系统的效率。
[0014]图1图示了根据某些实施例的分组处理设备102上的分组存储器系统100。如图1所示,分组存储器系统100包括与分组存储器104和控制器108耦合的一个或多个输出端口 106。分组存储器104包括一个或多个存储器库110,每个存储器库具有一个或多个读取和/ 或写入端口(未示出),实现每周期从存储器库110读取数据或向其写入数据。存储器库110 被耦合至每个端口 106,使得每个存储体110能够输出由一个、多个或所有的端口 106接收的数据。每个端口 106包括端口缓冲器116,并且能够作为分组存储器访问元件112(例如,直接存储器访问块)的一部分,其中分组存储器访问元件112还可以包括被耦合至每个端口 106 以及至少一个存储器库110的一个或多个存储器库地址元件114。特别地,元件112可以包括用于每个存储体110的存储器库地址元件114。备选地,可以存在比存储器库110的数目更多或更少的存储器库地址元件114。因此,每个端口 106能够经由相关联的存储器库地址元件 114和分组存储器访问元件112与每个存储体110进行通信(例如,从其读取数据)。在某些实施例中,存储器库地址元件114是存储器库读取地址复用器(多路复用器)。控制器108能够对分组执行任何需要的修改,确定将分组发送到何处,并且执行所需的任何业务管理。控制器108与每个端口 106耦合,使得控制器108能够选择性地向一个或多个端口 106发送控制数据和其它类型的数据。另外,在某些实施例中,控制器108能够监测一个或多个端口 106的端口缓冲器116的状态和/或接收来自一个或多个端口 106的端口缓冲器116的反馈数据。 [〇〇15] 分组处理设备102可以是分组处理电路和/或微芯片。例如,设备102可以是数据中心的交换机微芯片(例如,机架顶端交换机)或其它类型的分组处理电路或专用集成电路。 在某些实施例中,设备102是软件定义网络可编程微芯片,其能够被编程/定制以调整对分组进行处理的方式。备选地,设备102可以是本领域已知的其它类型的分组处理设备。端口 106、控制器108和地址元件114可以包括硬件、软件、或硬件和软件的组合,其中的软件被存储在设备102的非瞬时性的计算机可读介质上。分组存储器104可以包括诸如三态内容可寻址存储器的非瞬时性的计算机可读介质。备选地,分组存储器104可以包括本领域已知的其它类型的存储器或它们的组合。系统100和/或设备102能够以常规模式和直通模式进行操作。在常规模式下,系统/设备在开始进行分组输出之前进行等待,直到接收到整个分组。在直通模式下,控制器108和/或输出端口 106尽可能快地传输分组而不等到接收到整个分组。
[0016]图2图示了根据某些实施例的分组所使用的页面的链表202和链表202到分组存储器104的存储器库110的示例性映射。如图2所示,在映射到分组存储器104的存储器库110的一个或多个页面202上存储分组的分组数据。具体地,每个页面202都能够表示(或被映射至IJ)多个存储器库110的一个或多个条目(entry)。因此,当在一个页面202上存储分组或分组的一部分时,这将导致该分组被存储在被映射到该页面的、分组存储器104内跨存储器库 110分配的多个不连续的位置中。分组通常将需要多个页面202以便存储分组的整体。将页面的列表202称为链表,并且它可以用作指向在分组存储器104的存储器库110上存储分组的位置的指针的映射或列表。通常,链表202中的一个或多个页面的第一集合202a将包括分组的头部(header),而链表202中的一个或多个页面的第二集合202b将存储分组的主体 (body)。具体地,头部页面含有控制块处理的头部数据,主体页面含有通常不由设备102改变的分组的主体。因此,页面202实现了跨存储器库110分配每个分组的分组数据,使得从存储器库110读取分组数据或向其写入分组数据更高效。
[0017]如图2所示,虽然头部页面202a跨两个存储器库110被映射,并且主体页面202b跨三个存储器库110被映射,但是页面202每个能够跨更多或更少的存储器库被映射。例如,可以将页面映射到单个存储器库110的不连续的条目,或者可以将其映射到多个存储器库110 中任意数目的存储器库的条目。备选地,页面202可以被映射到单个存储器库110的连续的条目。分组具有关联的描述符或标记,基本形式的描述符或标记可以是指向存储分组的页面的链表202的第一页面的指针。使用这一初始指针,分组所使用的所有页面都能够按照与使用其遍历链表202的相同的次序来获取,因为每个后续页面都包含了指向列表202中的下一个页面的位置的指针。
[0018]在操作中,当设备/系统102/100处于直通模式时,控制器108确定分组是旨在由端口 106中的单个目标端口输出的单播业务分组、还是旨在由端口 106中的多个目标端口输出的多播/广播业务分组。如果确定分组为多播/广播,那么控制器108不会命令所有的目标端口 106尝试从存储器104读取分组的分组数据,而是仅仅选择和命令目标端口 106中的子集尝试读取分组数据。在某些实施例中,这一子集仅仅是目标端口 106中的单个端口 106,使得选择的单个端口 106被命令从分组存储器104访问所有分组数据。备选地,这一子集可以是目标端口 106中的多个(但不是所有)端口。在这些实施例中,选择的端口 106中的每一个都能够被控制器108命令访问分组数据的不同部分,使得只有在所有的端口 106都已经发布了它们的请求之后,才从分组存储器104中读取所有的分组数据。特别地,能够在链表202中的逐个页面的基础上划分分组数据和/或将其在端口的子集当中分配,从而使得子集中的每个端口被指定与分组相关联的链表202中的一个或多个页面。例如,如果子集具有两个端口 106,控制器108能够将存储分组的头部数据的页面202a分配给子集中的第一个端口 106,并且将存储分组的主体数据(或其余部分)的页面202b分配给子集中的第二个端口 106。
[0019]在某些实施例中,控制器108随机地或根据轮询(round robin)协议选择哪些目标端口 106将被包含在子集中和/或将被包含在子集中的目标端口 106的数量。备选地,控制器 108可以基于目标端口 106当前的拥塞程度来选择哪些目标端口 106将被包含在子集中和/ 或将被包含在子集中的目标端口 106的数目。例如,将具有低拥塞程度的目标端口 106选择为构成子集的读取端口。特别地,控制器108可以监测、请求和/或被传输以来自每个目标端口 106的指示它们当前的业务拥塞程度的反馈。在某些实施例中,每个端口 106的拥塞程度基于已经由控制器指定给端口将输出的、但是还没有被该端口输出的待处理的分组的数量,通过端口缓冲器116对其进行指示,端口缓冲器116存储了来自控制器108的、指示需要从端口 106输出的分组数据的命令消息或标记。例如,端口缓冲器116可以根据先进先出协议进行操作,其中,将被输出的分组或分组数据的标识符(例如,描述符或标记)由缓冲器 116进行接收,并且随后只有在端口 106已经接收并且输出了相关联的分组或分组数据之后才从缓冲器116中将其去除。因此,存储在缓冲器116中的标识符的数量表示端口 106当前的积压(backlog)或拥塞程度。备选地,拥塞程度可以基于其它的度量和/或因素。
[0020]在某些实施例中,控制器108可以基于分组的大小(例如,存储分组的页面的数目、 字节数)、不同类型的分组数据的数目、和/或可以基于目标端口 106的当前的拥塞程度,确定将被指定为读取端口 106的子集的(目标端口中的)端口的数量。例如,基于第一选择端口 106的拥塞程度,控制器108能够限制被指定给第一端口 106的分组的页面的数目,并且能够确定需要一个或多个附加的端口 106,其中,可以对每个附加的端口 106执行同样的页面数目的限制和/或添加选择的端口 106,直到已经将所有的分组数据指定给了形成子集的目标端口 106为止。换言之,拥塞程度越高,将为选择的目标端口 106所指定的页面的数目和/或分组数据量就越少,其中,如果由于拥塞限制而不能够在当前选择的端口 106当中分配所有的数据,可以添加一个或多个端口 106作为选择的读取端口 106。
[0021]一旦控制器108已经确定了目标端口 106的子集,控制器108向子集中的每个目标端口发送读取消息。读取消息包括读取标识符、分组标识符(例如,描述符或标记)、端口标识符、和/或分组数据标识符。读取标识符向端口 106指示,其需要发布、从由该分组数据指示符所指示的分组存储器104的存储器库110的多个条目内的位置处读取由分组数据指示符所指示的分组数据的读取访问请求。端口标识符指示读取消息针对哪个端口 106,并且由此使得端口 106能够获知该消息是针对该端口 106的。分组标识符唯一地标识分组,而且分组数据标识符标识指示端口 106正被指向以从分组存储器104读出的分组数据或其中的部分。例如,分组数据标识符能够标识与分组相关联的链表202中的一个或多个页面,从而基于由所述页面所指向的存储器110中的位置,所选择的读取端口 106能够发布读取访问消息,读取访问消息导致从分组存储器104读取出存储在所标识的页面上的分组数据。在某些实施例中,端口标识符能够被省略和/或分组标识符和分组数据标识符能够匹配或只有单个标识符。例如,如果子集仅仅是单个端口 106,分组标识符自身能够被用于对分组数据进行标识(例如,经由相关联的链表202)。另外,分组标识符能够被附加到所有的访问请求,并且随后将所有的分组数据作为数据读出并且传输到设备102上的所有端口 106,从而使得所有的目标端口 106能够在接收到分组数据时,基于所附加的分组标识符来识别和输出分组数据。
[0022]控制器108还能够向没有被包含在选择的子集中的每个目标端口 106发送监听消息。这些监听消息类似于读取消息,但是其中的分组数据标识符可以被省略、并且读取标识符能够被省略和/或指示端口 106不是读取端口,并且相反地,其仅仅需要针对具有与监听消息中所指示的标识符相匹配的所附加的分组标识符的分组数据而监测/监听来自分组存储器104的输出。因此,没有被选择的或其余的目标端口 106将不尝试从分组存储器104读取分组数据,并且相反地,将仅在基于子集的访问尝试、将分组数据从存储器104读出到所有的端口 106时监听/监测分组数据。
[0023]在接收到读取消息之后,选择的目标端口 106发布针对由分组数据标识符和/或包括所需要的分组数据的分组标识符所指示的存储器库110的多个条目上的数据的分组数据请求。如上所述,这些读取访问请求可以包括分组标识符,使得分组数据当从分组存储器 104中读出时能够将该分组标识符附加,从而使所有的目标端口(子集和其余端口)能够通过将被附加到数据的分组标识符和所接收到的读取/监听消息中的分组标识符进行匹配, 来接收和输出所读出的分组数据。所选择的端口 106的子集能够发布对分组存储器104的任意所需数量的读取访问请求,以获取由控制器108所指示的分组数据。例如,对于为每个端口 106所指定的页面,端口 106能够从由所指定的页面中的第一个页面指示的存储器104内的第一位置开始,并且随后进行到由链表202中的下一页面所指示的分组存储器104内的另一位置,直到被指定给端口 106的所有页面已经被发布访问/读取请求。
[0024]这些请求能够发生在访问元件112的内部。具体地,从端口 106的子集传输请求至与在其中存储了所需要的分组数据的存储器库11〇(由页面202指示)相关联的存储器库地址元件114。存储器库地址元件114随后裁决在该周期中发布了读取访问请求的哪个端口 106将获得对与存储器库110相关联的一个或多个读取端口的访问。这种裁决可以是独立的、或者可以针对每个地址元件114独立地发生,并且对于每个存储器库110也是如此。随后,如上所述,所访问的存储器库110的读取端口传播读取分组数据的请求的分组标识符, 并且将该读取的分组数据传输到设备102上的所有的端口 106。因此,在接收到分组数据之后,每个端口 106能够对指定给端口 106的分组标识符与被附加到分组数据的被传播的分组标识符进行比较,并且如果二者匹配,则消费(consume)并且输出该数据。因此,所有的目标端口 106将根据控制器108的指示消费多播/广播分组数据并且输出所述数据,尽管实际上只有子集端口 106从分组存储器104请求数据。因此,系统100提供了降低多播业务中针对存储器库110的争用的优点,并且由此消除或最小化了特别在直通模式期间的分组欠载的可能性。
[0025]图3图示了根据某些实施例的、在分组存储器系统中防止欠载的方法。如图3所示, 在步骤302,分组处理设备102在分组存储器104的一个或多个存储器库110上存储一个或多个分组。如上所述,每个分组能够被存储在被映射到分组存储器104中的多个位置的链表 202的一个或多个页面上。在步骤304,控制器108确定分组是否是需要从多个目标端口 106 输出的多播/广播分组。在步骤306,如果分组是多播或广播,控制器108发送读取命令至目标端口 106的选择子集,指示子集中的每个端口从分组存储器104读取分组数据的部分或者全部。在步骤308,所有的目标输出端口 106在接收到来自分组存储器103的分组数据后输出分组数据。在某些实施例中,设备102处于直通模式,从而由目标端口 106输出分组数据包括,在接收到整个分组之前开始输出分组数据的至少部分。在某些实施例中,方法还包括, 如果分组是多播或广播,控制器108发送监听命令至目标端口 106中的未被选择的其余端口,并且指示其余端口中的每个端口在子集从分组存储器104读取分组数据时,监听/监测分组数据并且输入分组数据。因此,该方法提供了减少被发送给分组数据的存储器库110的针对多播/广播分组数据的读取访问流量的优点。
[0026]本文描述的分组存储器系统具有许多优点。具体地,系统提供了减少读取需要从端口发送的分组而对分组存储器的访问量,并且由此减少了对存储器库读取端口的争用。 事实上,这反过来又降低了分组欠载的可能性,并且有助于端口的带宽性能。而且,当多个目标端口而不是所有的目标端口被指定为读取端口、从而可以执行适当数量的并行数据访问时,增加了分组存储器的带宽。特别是,在多个端口之间划分分组数据可以有助于防止所选择的所有端口对同时访问相同存储器库的需求。另外,通过使用来自多个端口的拥塞反馈,控制器除了可以确定需要的端口数量之外还可以提供在目标端口之间更好的分配读取访问负荷的益处。因此,系统可以再次降低分组欠载的可能性,并且有助于端口的带宽性能。
[0027]尽管已经参照许多特定的细节描述了本发明,但是本领域的技术人员将认识到的是,本发明可以通过其它的具体形式来体现,而没有背离本发明的精神。例如,虽然本文所描述的不同的方法和操作描述了步骤的特定次序,但是可以预见其它的次序以及省略一个或多个步骤和/或添加一个或多个新的步骤。而且,虽然在本文中独立地描述了前面的方法和操作,但是可以组合(全部地或部分地)一个或多个方法和操作。因此,本领域的技术人员将理解的是,本发明不受前面说明性细节的限制,而是由随附的权利要求限定。
【主权项】
1.一种分组存储器系统,所述系统包括:非瞬态计算机可读分组存储器,所述非瞬态计算机可读分组存储器包括用于存储由所 述系统输入的分组的分组数据的一个或多个存储器库,其中所述分组数据在被存储在所述 存储器库上时根据被映射到所述存储器库的一个或多个页面来进行组织;多个输出端口,所述多个输出端口与所述分组存储器耦合,并且被配置为选择性地从 所述分组存储器读取所述分组数据并且将所述分组数据向所述系统外部输出;以及与所述多个输出端口耦合的控制器,所述控制器用于控制哪些所述端口输出所述分组 数据,其中如果所述分组数据将从两个或更多个所述端口被输出,则所述控制器命令少于 所述两个或更多个端口中的所有端口的端口以引起所述分组数据从所述分组存储器被读 出并且被传输至所述两个或更多个端口中的所有端口。2.根据权利要求1所述的系统,其中所述多个输出端口和所述控制器正以直通模式进 行操作,以使得所述多个输出端口中的每个输出端口在所述分组的整体被接收到之前开始 输出分组数据。3.根据权利要求2所述的系统,其中所述控制器命令所述两个或更多个端口中的所有 端口基于分组数据标识符在所述分组数据从所述分组存储器被读出之后监听并且输出所 述分组数据,所述分组数据标识符由所述控制器发送至所述两个或更多个端口中的所有端□ 〇4.根据权利要求3所述的系统,其中所述少于所述两个或更多个端口中的所有端口的 所述端口中的每个端口引起所述分组数据的不同部分从所述分组存储器被读出。5.根据权利要求4所述的系统,其中所述少于所述两个或更多个端口中的所有端口的 所述端口中的每个端口的所述分组数据的所述不同部分由所述控制器基于在所述页面之 间如何分配所述分组数据来确定。6.根据权利要求5所述的系统,其中所述少于所述两个或更多个端口中的所有端口的 所述端口的数量由所述控制器基于其上存储有所述分组数据的页面的数量来确定。7.根据权利要求6所述的系统,其中所述控制器基于所述两个或更多个端口中的每个 端口的拥塞程度来选择少于所述两个或更多个端口中的所有端口的所述端口。8.根据权利要求7所述的系统,其中所述多个输出端口中的每个输出端口包括缓冲器, 所述缓冲器存储用于标识已经由所述控制器指定将被所述端口输出的、但是还没有被所述 端口输出的一个或多个分组的列表,并且另外其中所述两个或更多个端口中的每个端口的 所述拥塞程度基于由所述端口的所述缓冲器的所述列表所标识的分组的当前数量。9.根据权利要求7所述的系统,其中少于所述两个或更多个端口中的所有端口的所述 端口正是引起所有的分组数据从所述分组存储器被读出的所述两个或更多个端口中的一 个端口。10.根据权利要求7所述的系统,其中少于所述两个或更多个端口中的所有端口的所述 端口正是所述两个或更多个端口中的第一端口和第二端口,并且另外其中所述控制器命令 所述第一端口以引起所述分组数据的第一部分被读出以及命令所述第二端口以引起所述 分组数据的没有被包括在所述第一部分内的剩余部分被读出。11.根据权利要求10所述的系统,其中所述第一部分被存储在被映射到所述存储器库 的页面中的一个或多个第一页面上并且包括所述分组数据的头部,并且另外其中所述分组数据的所述剩余部分被存储在被映射到所述存储器库的页面中的一个或多个第二页面上 并且包括所述分组数据的没有被包括在所述第一页面内的剩余部分。12.—种存储在非瞬态计算机可读介质上并且与多个输出端口耦合的控制器,所述多 个输出端口选择性地从分组存储器读取并且输出分组的分组数据,其中所述分组存储器具 有存储所述分组数据的一个或多个存储器库,并且另外其中所述控制器被配置为,如果所 述分组数据将从两个或更多个端口被输出,则命令少于所述两个或更多个端口中的所有端 口的端口以引起所述分组数据从所述分组存储器被读出并且被传输至所述两个或更多个 端口中的所有端口。13.根据权利要求12所述的控制器,其中所述多个输出端口和所述控制器正以直通模 式进行操作,以使得所述多个输出端口中的每个输出端口在所述分组的整体被接收到之前 开始输出分组数据。14.根据权利要求13所述的控制器,其中所述控制器被配置为,命令所述两个或更多个 端口中的所有端口基于分组数据标识符在所述分组数据从所述分组存储器被读出之后监 听并且输出所述分组数据,所述分组数据标识符由所述控制器发送至所述两个或更多个端 口中的所有端口。15.根据权利要求14所述的控制器,其中少于所述两个或更多个端口中的所有端口的 所述端口中的每个端口引起所述分组数据的不同部分从所述分组存储器被读出。16.根据权利要求15所述的控制器,其中所述分组数据在被存储在所述存储器库上时 根据被映射到所述存储器库的一个或多个页面来进行组织,另外其中少于所述两个或更多 个端口中的所有端口的所述端口中的每个端口的分组数据的不同部分由所述控制器基于 在所述页面之间如何分配所述分组数据来确定。17.根据权利要求16所述的控制器,其中所述控制器被配置为,基于其上存储有所述分 组数据的页面的数量来确定少于所述两个或更多个端口中的所有端口的所述端口的数量。18.根据权利要求17所述的控制器,其中所述控制器被配置为,基于所述两个或更多个 端口中的每个端口的拥塞程度来选择少于所述两个或更多个端口中的所有端口的所述端 □ 〇19.根据权利要求18所述的控制器,其中所述多个输出端口中的每个输出端口包括缓 冲器,所述缓冲器存储用于标识已经由所述控制器指定将被所述端口输出的、但是还没有 被所述端口输出的一个或多个分组的列表,并且另外其中所述两个或更多个端口中的每个 端口的所述拥塞程度基于由所述端口的所述缓冲器的所述列表所标识的分组当前数量。20.根据权利要求18所述的控制器,其中少于所述两个或更多个端口中的所有端口的 所述端口正是引起所有的分组数据从所述分组存储器被读出的所述两个或更多个端口中 的一个端口。21.根据权利要求18所述的控制器,其中少于所述两个或更多个端口中的所有端口的 所述端口正是所述两个或更多个端口中的第一端口和第二端口,并且另外其中所述控制器 被配置为,命令所述第一端口以引起所述分组数据的第一部分被读出以及命令所述第二端 口以引起所述分组数据的没有被包括在所述第一部分内的剩余部分被读出。22.根据权利要求21所述的控制器,其中所述第一部分被存储在被映射到所述存储器 库的页面中的一个或多个第一页面上并且包括所述分组数据的头部,并且另外其中所述分组数据的所述剩余部分被存储在被映射到所述存储器库的页面中的一个或多个第二页面 上并且包括所述分组数据的没有被包括在所述第一页面内的剩余部分。23.—种操作分组存储器系统的方法,所述方法包括:在非瞬态计算机可读分组存储器的一个或多个存储器库上存储分组的分组数据,其中 在所述存储器库上存储所述分组数据包括当所述分组数据被存储在所述存储器库上时根 据被映射到所述存储器库的一个或多个页面来进行组织;如果所述分组数据将从被耦合至所述分组存储器的多个输出端口中的两个或更多个 输出端口被输出,则利用被耦合至所述输出端口的控制器来命令少于所述两个或更多个端 口中的所有端口的端口以引起所述分组数据从所述分组存储器被读出并且被传输至所述 两个或更多个端口中的所有端口;以及利用所述两个或更多个端口从所述两个或更多个端口中的每个端口输出所述分组数据。24.根据权利要求23所述的方法,其中所述多个输出端口和所述控制器正以直通模式 进行操作,以使得通过所述两个或更多个端口中的每个端口输出所述分组数据包括,在所 述分组的整体被接收到之前开始输出所述分组数据的至少一部分。25.根据权利要求24所述的方法,还包括利用所述控制器命令所述两个或更多个端口 中的所有端口基于分组数据标识符在所述分组数据从所述分组存储器被读出之后监听并 且输出所述分组数据,所述分组数据标识符由所述控制器发送至所述两个或更多个端口中 的所有端口。26.根据权利要求25所述的方法,其中少于所述两个或更多个端口中的所有端口的所 述端口中的每个端口引起所述分组数据的不同的部分从所述分组存储器被读出。27.根据权利要求26所述的方法,还包括利用所述控制器基于在所述页面之间如何分 配所述分组数据来确定少于所述两个或更多个端口中的所有端口的所述端口中的每个端 口的分组数据的所述不同部分。28.根据权利要求27所述的方法,还包括利用所述控制器基于其上存储有所述分组数 据的页面的数量来确定少于所述两个或更多个端口中的所有端口的所述端口的数量。29.根据权利要求28所述的方法,还包括利用所述控制器基于所述两个或更多个端口 中的每个端口的拥塞程度来选择少于所述两个或更多个端口中的所有端口的所述端口。30.根据权利要求29所述的方法,其中所述多个输出端口中的每个端口包括缓冲器,所 述缓冲器存储用于标识已经由所述控制器指定将被所述端口输出的、但是还没有被所述端 口输出的一个或多个分组的列表,并且另外其中所述两个或更多个端口中的每个端口的所 述拥塞程度基于由所述端口的所述缓冲器的所述列表所标识的分组的当前数量。31.根据权利要求29所述的方法,其中少于所述两个或更多个端口中的所有端口的所 述端口正是引起所有的分组数据从所述分组存储器被读出的所述两个或更多个端口中的 一个端口。32.根据权利要求29所述的方法,其中少于所述两个或更多个端口中的所有端口的所 述端口正是所述两个或更多个端口中的第一端口和第二端口,所述方法还包括利用所述控 制器命令所述第一端口以引起所述分组数据的第一部分被读出以及命令所述第二端口以 引起所述分组数据的没有被包括在所述第一部分内的剩余部分被读出。33.根据权利要求32所述的方法,其中所述第一部分被存储在被映射到所述存储器库 的页面中的一个或多个第一页面上并且包括所述分组数据的头部,并且另外其中所述分组 数据的所述剩余部分被存储在被映射到所述存储器库的页面中的一个或多个第二页面上 并且包括所述分组数据的没有被包括在所述第一页面内的剩余部分。
【文档编号】H04L12/933GK106027426SQ201610193288
【公开日】2016年10月12日
【申请日】2016年3月30日
【发明人】E·穆索尔
【申请人】凯为公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1