CN109565455A - 具有高速缓存的分组存储器中的分组描述符存储 - Google Patents
具有高速缓存的分组存储器中的分组描述符存储 Download PDFInfo
- Publication number
- CN109565455A CN109565455A CN201780048619.1A CN201780048619A CN109565455A CN 109565455 A CN109565455 A CN 109565455A CN 201780048619 A CN201780048619 A CN 201780048619A CN 109565455 A CN109565455 A CN 109565455A
- Authority
- CN
- China
- Prior art keywords
- memory
- head
- queue
- memory equipment
- tail portion
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9015—Buffering arrangements for supporting a linked list
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
- H04L47/62—Queue scheduling characterised by scheduling criteria
- H04L47/6245—Modifications to standard FIFO or LIFO
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/10—Packet switching elements characterised by the switching fabric construction
- H04L49/103—Packet switching elements characterised by the switching fabric construction using a shared central buffer; using a shared memory
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9005—Buffering arrangements using dynamic buffer space allocation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9026—Single buffer per packet
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9042—Separate storage for different parts of the packet, e.g. header and payload
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9063—Intermediate storage in different physical parts of a node or terminal
- H04L49/9078—Intermediate storage in different physical parts of a node or terminal using an external memory or storage device
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Computer Security & Cryptography (AREA)
Abstract
第一存储器设备存储(i)FIFO队列的头部,所述FIFO队列被结构化为链表(LL)元素的LL,所述LL元素按照所述LL元素被添加到所述FIFO队列的顺序被布置,以及(ii)所述FIFO队列的尾部。第二存储器设备存储FIFO队列的中间部分,中间部分包括按照顺序在头部之后和按照顺序在尾部之前的LL元素。队列控制器从第一存储器设备取回头部中的LL元素,在头部变空之前将中间部分中的LL元素从第二存储器设备移动到第一存储器设备中的头部,并更新对应于移动的LL元素的LL参数,以指示移动的LL元素的存储从第二存储器设备改变到第一存储器设备。
Description
相关申请的交叉引用
本申请要求2016年6月2日提交的题为“Packet Descriptor Linked List Cache”的美国临时专利申请No.62/344,604的权益,其公开内容通过引用整体明确地并入本文。
技术领域
本公开一般涉及通信网络中的网络设备,并且更具体地涉及网络设备的存储器系统。
背景技术
诸如网桥、路由器等的网络设备基于分组中的地址和/或其他信息通过网络转发分组。网络设备通常包括耦合到不同网络链路的多个端口。网络设备可以经由一个端口接收分组并且处理分组的报头中的地址信息(和/或其他信息)以决定网络交换机应当经由哪个或哪些其他端口来发送分组。然后,网络设备将分组转发到所确定的一个或多个其他端口。
在接收到分组时,网络设备将分组存储在分组存储器(有时称为“分组缓冲器”)中。网络设备还生成分组描述符,该分组描述符包括关于分组的信息,诸如来自分组的报头和分组存储器中的分组的位置的信息。分组描述符通常比分组本身小得多。例如分组的长度通常超过1000个字节,而分组描述符的长度通常小于10个字节。
处理分组描述符至少以确定向其转发分组的一个或多个端口,然后将分组描述符排队在与所确定的一个或多个端口相对应的一个或多个发送队列中。当分组描述符到达发送队列的头部时,从分组存储器中取回对应的分组以便转发到所确定的一个或多个端口。
与用于存储分组描述符(诸如发送队列)的存储器相比,分组存储器通常更大并且被组织和/或配置用于处理更大的数据块。例如分组存储器被设计用于存储长度通常大于1000字节的分组,而发送队列被设计用于存储长度例如小于10字节的分组描述符。
发明内容
在一个实施例中,一种装置包括:第一存储器设备,被配置为存储:(i)先进先出(FIFO)发送队列的头部,该FIFO发送队列被结构化为链表(LL)元素的LL,LL元素按照LL元素被添加到FIFO队列的顺序被布置,头部包括第一多个LL元素,第一多个LL元素被布置为按照LL元素被添加到FIFO队列的顺序从FIFO队列中取回,以及(ii)FIFO队列的尾部,尾部包括第二多个LL元素,第二多个LL元素被布置为对应于其中第二多个LL元素被添加到FIFO队列的顺序。该装置还包括与第一存储器分离的第二存储器设备,所述第二存储器被配置为存储FIFO队列的中间部分,中间部分包括按照顺序在头部之后并有按照顺序在尾部之前的第三多个LL元素。装置还包括队列控制器,被配置为:根据顺序,从第一存储器设备取回头部中的LL元素;在头部变空之前,将中间部分中的LL元素从第二存储器设备移动到第一存储器设备中的头部;以及更新与移动的LL元素相对应的LL参数,以指示移动的LL元素的存储从第二存储器设备改变到第一存储器设备。
在另一实施例中,一种方法包括在第一存储器设备中存储:(i)先进先出(FIFO)队列的头部,FIFO队列被结构化为链表(LL)元素的LL,LL元素按照LL元素被添加到FIFO队列的顺序被布置,头部包括第一多个LL元素,第一多个LL元素被布置为按照LL元素被添加到FIFO队列的顺序从FIFO队列中取回,以及(ii)FIFO队列的尾部,尾部包括第二多个LL元素,第二多个LL元素被布置为对应于其中第二多个LL元素被添加到FIFO队列的顺序。该方法还包括:在与第一存储器分离的第二存储器设备中存储FIFO队列的中间部分,中间部分包括按照顺序在头部之后并且按照顺序在尾部之前的第三多个LL元素;以及根据顺序从第一存储器设备取回头部中的LL元素;利用队列控制器,在头部变空之前,将中间部分中的LL元素从第二存储设备移动到第一存储设备中的头部;以及利用队列控制器,更新与移动的LL元素相对应的LL参数,以指示移动的LL元素的存储从第二存储器设备改变到第一存储器设备。
在又一个实施例中,一种装置包括:多个网络接口,被配置为耦合到多个网络链路;以及分组处理器,被配置为处理经由多个网络接口接收的分组,并确定要将所接收的分组转发到的网络接口。该装置还包括第一存储器设备,被配置为存储:(i)先进先出(FIFO)发送队列的头部,先进先出(FIFO)发送队列与网络接口中的至少一个网络接口相对应,该FIFO发送队列用于存储对应于要经由至少一个网络接口发送的分组的分组描述符,FIFO发送队列被结构化为链表(LL)元素的LL,LL元素按照LL元素被添加到FIFO队列的顺序被布置,头部包括第一多个LL元素,第一多个LL元素被布置为按照LL元素被添加到FIFO队列的顺序从FIFO队列中取回,以及(ii)FIFO队列的尾部,尾部包括第二多个LL元素,第二多个LL元素被布置为对应于其中第二多个LL元素被添加到FIFO队列的顺序。该装置还包括与第一存储器分离的第二存储器设备,所述第二存储器被配置为存储FIFO队列的中间部分,中间部分包括按照顺序在头部之后并按照顺序在尾部之前的第三多个LL元素;以及队列控制器,被配置为:结合新分组描述符被添加到发送队列,根据所述顺序,将尾部中的新LL元素存储到第一存储器设备;结合经由至少一个网络接口传输对应于发送队列中的分组描述符的分组,根据所述顺序,从第一存储器设备取回头部中的LL元素;在头部变空之前,将中间部分中的LL元素从第二存储器设备移动到第一存储器设备中的头部;以及更新与移动的LL元素相对应的LL参数,以指示移动的LL元素的存储从第二存储器设备改变到第一存储器设备。
在又一个实施例中,一种方法包括经由网络设备的多个网络接口接收分组;在网络设备处确定接收到的分组要被转发到的网络接口;并且在第一存储器设备中存储:(i)与网络接口中的至少一个相对应的先进先出(FIFO)发送队列的头部,该FIFO发送队列用于存储对应于要经由至少一个网络接口发送的分组的分组描述符,FIFO队列被结构化为链表(LL)元素的LL,LL元素按照LL元素被添加到FIFO队列的顺序被布置,头部包括第一多个LL元素,第一多个LL元素被布置为按照LL元素被添加到FIFO队列的顺序从FIFO队列中取回,以及(ii)FIFO队列的尾部,尾部包括第二多个LL元素,第二多个LL元素被布置为对应于其中第二多个LL元素被添加到FIFO队列的顺序。该方法还包括在与第一存储器分离的第二存储器设备中存储FIFO队列的中间部分,中间部分包括按顺序在头部之后并按顺序在尾部之前的第三多个LL元素;结合经由至少一个网络接口传输与发送队列中的分组描述符相对应的分组,根据所述顺序,从第一存储器设备中取回头部中的LL元素;利用队列控制器,在头部变空之前,将中间部分中的LL元素从第二存储设备移动到第一存储设备中的头部;以及利用队列控制器,更新与移动的LL元素相对应的LL参数,以指示移动的LL元素的存储从第二存储器设备改变到第一存储器设备。
附图说明
图1A是根据一个实施例的示例网络设备的框图,该网络设备利用存储i)分组数据和ii)排队分组描述符的存储器设备。
图1B是根据一个实施例的图1A的网络设备的分组描述符高速缓存单元的框图。
图2是根据一个实施例的用于处理诸如图1A的网络设备的网络设备中的分组的示例方法的流程图。
图3A-C是根据一个实施例的当链表增长时存储在不同存储器中的例如分组描述符的示例链表的图。
图4A-D是根据一个实施例的用于将存储在第一存储器中的链表的元素移动到第二存储器的过程的图。
图5A-D是根据一个实施例的用于将存储在第二存储器中的链表的元素移回第一存储器的过程的图。
图6是根据一个实施例的用于在多个存储器设备中维护链表的示例方法的流程图。
具体实施方式
在下面描述的实施例中,在分组被处理时存储分组数据(例如分组的有效载荷)的分组存储器还用于存储已经由网络设备处理的分组描述符的队列。至少在一些实施例中,使用针对分组描述符存储的分组存储器改善了网络设备架构的可扩展性。为了解决由于分组存储器的使用而导致的增加的延迟,根据一些实施例,附加存储器(例如高速缓存存储器)与分组存储器中的分组描述符的存储结合使用。
在下面描述的其他实施例中,数据元素的链表(例如分组描述符)存储在多个存储器中。例如根据一个实施例,链表的头部和尾部的数据元素存储在第一存储器中,而位于头部和尾部之间的数据元素存储在与第一存储器不同的第二存储器中。维护跨越第一存储器和第二存储器之间的边界的链表允许较小的第一存储器的使用,同时允许使用比第一存储器更便宜(就每个存储单元成本而言)但可能更慢和/或具有更大延迟的第二存储器,因此至少在一些实施例中降低了总成本。
图1A是根据一个实施例的将分组数据和分组描述符两者都存储在分组存储器(有时称为分组缓冲器)中的示例网络设备104的框图。网络设备104包括被配置为耦合到相应网络链路的多个网络接口(例如端口)108。网络设备104还包括耦合到网络接口108的一个或多个接收处理器112。尽管图1A中仅示出了一个接收处理器112,并且一个接收处理器112被示为仅耦合到一个网络接口108,在一些实施例中,网络设备104包括多个接收处理器112,并且多个处理器112中的每一个耦合到一个或多个网络接口108的相应集合。
接收处理器112被配置为将对应于所接收的分组的分组数据(例如至少有效载荷)存储在存储器116中。在一些实施例中,存储器116还用于分组描述符的存储,如将在下文中更详细描述的。更多细节如下。在图1A中,接收处理器112被示出为将分组120存储在存储器116中。然而,根据一个实施例,接收处理器112至少初始地,针对多个分组中的每一个,仅将分组的有效载荷存储在存储器116中。根据一个实施例,分组的报头的至少一部分稍后由网络处理器14存储在存储器116中。根据另一实施例,接收处理器112至少初始地针对多个分组中的每一个将分组的有效载荷和分组的报头的一部分存储在存储器116中。根据一个实施例,分组的报头的剩余部分稍后由网络处理器14存储在存储器116中。根据又一实施例,接收处理器112针对多个分组中的每一个,将整个分组存储在存储器116中。
存储器116包括一个或多个读/写接口(未示出),并且接收处理器112使用一个或多个读/写接口将接收的分组(或至少分组的有效载荷)存储在存储器116中。在一个实施例中,存储器116的读/写接口具有适合于读/写1000或更多字节的分组的数据宽度,在一个实施例中。作为示意性实施例,读/写接口的数据宽度是128字节。在一个实施例中,读/写接口的数据宽度大于100字节。在另一实施例中,读/写接口的数据宽度大于60字节。
在一个实施例中,接收处理器112包括直接存储器访问(DMA)单元,直接存储器访问(DMA)单元被配置为经由存储器116的一个或多个读/写接口将所接收的分组(或至少分组的有效载荷)存储在存储器116中。
根据一个实施例,接收处理器112针对多个分组中的每一个来生成与分组相关联的描述符。每个分组描述符包括关于相应分组的信息,诸如来自分组的报头的报头信息。根据一个实施例,每个分组描述符包括关于存储器116中的对应分组的位置的位置信息。根据一个实施例,每个分组描述符具有比典型分组的长度短得多的数据长度。在示意性实施例中,一些分组描述符中的每一个具有50位和70位之间的合适长度。在另一实施例中,一些分组描述符中的每一个具有小于或等于50位的合适长度。在另一实施例中,一些分组描述符中的每一个具有小于或等于80位的合适长度。
在一个实施例中,接收处理器112将分组描述符提供给分组处理器124,分组处理器124被配置为处理分组(例如通过分析与分组相对应的分组描述符)。在图1A中,接收处理器112被示出为生成分组描述符128并将分组描述符128提供给分组处理器124。
分组处理器124包括转发引擎132。转发引擎132被配置为至少分析与分组相对应的报头信息(例如在分组描述符中)以确定要经由其发送分组的网络接口108(本文称为“目标网络接口”)。仅作为示意性示例,转发引擎132被配置为使用分组的报头中的目的地地址来在转发数据库(未示出)中执行查找,该转发数据库存储目的地地址与网络接口108之间的对应关系,以确定分组的目标网络接口。作为另一个示意性示例,转发引擎132被配置为使用分组的报头中的VLAN ID来在转发数据库(未示出)中执行查找(例如上面讨论的相同转发数据库或不同的转发数据库),其存储VLAN ID和网络接口108之间的对应关系,以确定该分组的一个或多个目标网络接口108的特定集合。根据一个实施例,转发引擎132被配置为在与分组对应的分组描述符中存储目标网络接口(或多个目标网络接口的集合)的ID。
网络设备104包括一个或多个分组描述符高速缓存单元144,其实现用于对与将要经由目标网络接口108发送的分组相对应的分组描述符进行排队的发送队列。尽管图1A中示出了一个分组描述符高速缓存单元144。根据一个实施例,网络设备104包括多个分组描述符高速缓存单元144,每个分组描述符高速缓存单元144对应于一个或多个目标网络接口108的相应集合,并且每个多分组描述符高速缓存单元144实现与一个或多个目标网络接口108的相应集合相对应的发送队列。
在一个实施例中,分组描述符高速缓存单元144针对多个网络接口108中的每一个实现多个发送队列。在一个实施例中,例如不同的发送队列,全部对应于单个网络接口108,每个对应于不同的优先级。
分组描述符高速缓存单元144接收分组描述符并将分组描述符存储到对应于适当目标网络接口108的适当发送队列中。例如分组描述符高速缓存单元144分析分组描述符中的信息(例如目标网络接口ID、优先级信息等)以确定要将分组描述符存储到其中的适当发送队列。作为示意性示例,根据一个实施例,相应的多个发送队列对应于相应端口,其中根据一个实施例,对应于单个端口的每个发送队列对应于相应的优先级。根据一个实施例,发送队列中的至少一些被安排为先进先出(FIFO)链表。例如根据一个实施例,发送队列包括链表的有序元素集合,其中链表的元素包括发送队列中的相应分组描述符。根据一个实施例,链表的至少一些元素中的每一个包括指向链表中的后续元素的存储器地址的指针。根据一个实施例,被添加到发送队列的分组描述符(例如对应于被排队以用于传输的分组)对应于添加到链表的尾部的新元素,而被从发送队列中移除的分组描述符(例如对应于轮到其要被发送的分组)对应于从链表的头部移除的元素。
分组描述符高速缓存单元144包括或耦合到本地存储器148,用于在发送队列中存储分组描述符。根据一个实施例,本地存储器148是相对快速但小的存储器,诸如SRAM,而存储器116通常是较慢但明显较大的存储器,诸如DRAM或闪存等。
根据一个实施例,当发送队列具有适当小的长度(例如根据一个实施例,包括适当少量的链表元素)时,发送队列完全存储在本地存储器148中。但是,当分组描述符以大于从发送队列的头部中移除分组描述符的速率的速率被添加到发送队列的尾部时,发送队列的长度将增加。根据一个实施例,当发送队列的长度增加到合适的级别时,分组描述符高速缓存单元144将一些分组描述符(例如在发送队列的头部和尾部之间)从本地存储器148传送到存储器116。
当从发送队列的头部移除分组描述符(例如对应于正被发送的分组)时,在存储器116中存储的分组描述符变得接近发送队列的头部和/或随着队列的长度降低,分组描述符高速缓存单元144将分组描述符从存储器116传送到本地存储器148。因此,本地存储器148充当存储器116的高速缓存,如下面将更详细描述的。例如根据一个实施例,从分组处理器124接收的分组描述符在被分组描述符高速缓存单元144传送到存储器116之前,首先存储在本地存储器148中,并且存储在存储器116中的分组描述符在被从发送队列中移除以用于分组传输之前,首先被传送到本地存储器148。
在一个实施例中,链表的头部和链表的尾部是链表的活动部分,其需要低延迟并因此被“高速缓存”在本地存储器148中。另一方面,根据一个实施例,链表的中间部分(例如位于头部和尾部之间)是不活动的,因此可以存储在相对较慢和/或较高延迟的存储器(例如存储器116)中。当从链表的头部移除分组描述符(例如对应于正被发送的分组)时,链表中间的分组描述符变得更靠近头部。因此,根据一个实施例,如果分组描述符存储在存储器116中,则当它们变得更接近链表的头部时,它们最终将被传送到本地存储器148。
在一个实施例中,根据一个实施例,确定队列是否要在本地存储器148和存储器116之间分叉不是基于测量队列的元素内的存储器内容的累积长度。相反,根据一个实施例,确定队列是否要在本地存储器148和存储器116之间分叉是基于监视队列中有多少链表元素。
本地存储器148包括一个或多个读/写接口(未示出),并且分组描述符高速缓存单元144使用一个或多个读/写接口将从分组处理器124接收的分组描述符存储在本地存储器148中。类似地,在一个实施例中,当分组描述符到达发送队列的头部时,分组描述符高速缓存单元144使用一个或多个读/写接口来取回本地存储器148中的分组描述符。在一个实施例中,本地存储器148的一个或多个读/写接口具有适合于读/写分组描述符的数据宽度。作为示意性实施例,一个或多个读/写接口的数据宽度在50位和70位之间,包括50和70位。在一个实施例中,一个或多个读/写接口的数据宽度小于或等于80位。在另一实施例中,一个或多个读/写接口的数据宽度小于或等于50位。
如上所述,根据一个实施例,存储器116被配置用于比分组描述符(例如分组有效载荷)大得多的数据单元(例如分组数据)的存储。因此,根据一个实施例,当将分组描述符传送到存储器116时,分组描述符高速缓存单元144将多个分组描述符组装成单个存储单元(本文有时称为“数据块”),然后将单个存储单元经由存储器116的读/写接口存储到存储器116。类似地,根据一个实施例,当从存储器116取回分组描述符时,分组描述符高速缓存单元144经由存储器116的读/写接口取回具有多个分组描述符的单个存储单元。
如上所述,根据一个实施例,发送队列被配置为有序元素的链表,其中至少一些元素中的每一个包括到链表中的后续元素的存储位置的指针。然而,根据一个实施例,当元素中的一些存储在存储器116中时,多个元素(例如数据块)被存储在对应于单个存储器地址的存储器116的单行内。因此,在一个实施例中,存储器116的单行内的元素的顺序由单行内的元素的相对位置而不是指针维护。根据一个实施例,当单个链表的元素存储在存储器116的多行中的多个数据块中时,通过对数据块进行排序来维护链表中的元素的排序,并且一个或多个数据块中的每一个包括到在链表中的后续数据块的存储器116中的地址的指针。因此,根据一个实施例,分组描述符高速缓存单元144被配置为:当链表在存储器116和本地存储器148之间分叉时,并且当链接元素在存储器116和本地存储器148之间传送时,维护存储器116和本地存储器148的链表指针。
当分组描述符到达发送队列的头部时,分组描述符高速缓存单元144将分组描述符提供给发送处理器152,该发送处理器152对应于与分组描述符对应的分组的目标网络接口108。在一些实施例中,尽管图1A中仅示出了一个发送处理器152,并且示出了一个发送处理器152仅耦合到一个网络接口108,但是网络设备104包括多个发送处理器152,并且多个发送处理器152中的每一个耦合到一个或多个网络接口端口108的相应集合。
发送处理器152经由存储器116的一个或多个读/写接口从存储器116中取回对应于分组描述符的分组数据。在一个实施例中,发送处理器152包括DMA单元,DMA单元被配置为经由存储器116的一个或多个读/写接口来取回存储器116中的分组(分组的至少有效载荷)。在一个实施例中,分组描述符包括指示存储器116中的分组数据的位置的位置信息,并且发送处理器152使用位置信息从存储器116中取回对应于分组描述符的分组数据。然后,发送处理器152将分组数据提供给网络接口108以进行传输。
在一些实施例中,使用i)执行在一个或多个存储器中存储的机器可读指令的一个或多个处理器、ii)硬件电路(例如一个或多个硬件状态机)、iii)或i)和ii)的组合来实现接收处理器112。
在一些实施例中,使用i)执行在一个或多个存储器中存储的机器可读指令的一个或多个处理器、ii)硬件电路(例如一个或多个硬件状态机)、iii)或i)和ii)的组合来实现分组处理器124。
在一些实施例中,使用i)执行存储在一个或多个存储器中的机器可读指令的一个或多个处理器,ii)硬件电路(例如一个或多个硬件状态机),iii)或i)和ii)的组合来实现发送处理器152。
图1B是根据一个实施例的分组描述符高速缓存单元144的框图。分组描述符高速缓存单元144例如经由接口168从分组处理器124接收分组描述符172a,并将分组描述符172a排队在发送队列中。所接收的分组描述符172a去往不同的发送队列,其中去往不同发送队列的分组描述符172a在图1B中表示为具有不同填充模式的分组描述符172。
分组描述符高速缓存单元144经由接口176向发送处理器152提供出队分组描述符172b,分组描述符172b已经从发送队列中被取回。分组描述符高速缓存单元144还经由接口180将分组描述符存储到存储器116,并从存储器116中取回分组描述符。在一些实施例中,接口180的数据宽度明显宽于接口168的数据宽度和接口176的数据宽度。例如如上所述,存储器116被配置用于长度通常大于1000字节的分组的存储,而在一些实施例中,个体分组描述符的宽度小于10字节;接口180的数据宽度是根据存储器116的读/写接口的数据宽度配置的。
控制器184(例如队列控制器)维护在本地存储器148(在本文中有时称为“队列存储器”)中并且在一些情况下在存储器116中实现的发送队列。在一个实施例中,控制器184将发送队列保持为相应的链表。如上所述,根据一个实施例,链表的至少一些元素中的每一个包括指向链表中的后续元素的指针,控制器184被配置为维护链表指针。当分组描述符高速缓存单元144经由接口168接收分组描述符172时,控制器184将分组描述符172存储在适当的发送队列内的本地存储器148内,例如在发送队列的尾部。例如根据一个实施例,控制器184更新发送队列的先前尾部中的指针以指向新分组描述符172的本地存储器148中的地址。控制器184还从本地存储器148(例如从发送队列的头部)取回分组描述符172,并将分组描述符172提供给接口176。
控制器184还从本地存储器148取回分组描述符,并经由接口180将分组描述符存储在存储器116中。例如根据一个实施例,当发送队列达到阈值长度时,控制器184在本地存储器148中取回发送队列中的分组描述符,并且经由接口180将分组描述符存储在存储器116中。根据一个实施例,作为另一示例,当本地存储器148的填充水平达到阈值时,控制器184在本地存储器148中取回发送队列中的分组描述符,并且经由接口180将分组描述符存储在存储器116中。通过将分组描述符从本地存储器148传送到存储器116,控制器184至少在某些情况下防止本地存储器148填充,这可能导致诸如发送队列中的分组描述符的重写或分组描述符的丢弃的错误。此外,通过允许将分组描述符从本地存储器148传送到存储器116,本地存储器148的总体大小可以保持小于不能将分组描述符从本地存储器148传送到存储器116的系统。另外,如下面更详细描述的,在这些分组描述符到达队列头部之前,控制器184将来自存储器116的队列中的分组描述符(其相对较慢和/或具有相对较高的延迟)传送到本地存储器148(其相对较快和/或具有相对较低的延迟)。因此,根据一个实施例,从系统的角度来看,与从发送队列写入和读取分组描述符相关联的速率和/或延迟与仅使用本地存储器148用于描述符的存储是一致的。
根据一个实施例,为了促进在存储器116中的分组描述符的存储,存储器116被配置用于更大的数据单元的存储,诸如分组有效载荷,控制器184从单个队列(链表)中取回多个分组描述符并组装更宽的数据单元(数据块),其对应于存储器116的读/写接口的数据宽度。根据一个实施例,控制器184在缓冲器188中组装数据块,数据块具有与存储器116的读/写接口的数据宽度相对应的数据宽度。在一个实施例中,缓冲器188内的分组描述符的相对位置对应于链表内的那些元素的顺序。
在一个实施例中,分组描述符高速缓存单元144包括与多个发送队列相对应的多个缓冲器188。在一个实施例中,分组描述符高速缓存单元144包括用于多个发送队列中的每一个的两个缓冲器188。在另一实施例中,分组描述符高速缓存单元144包括用于多个发送队列中的每一个的多于两个(例如三个、四个、五个等)缓冲器188。
根据一个实施例,当控制器184已在缓冲器188中组装了数据块时,控制器184经由存储器116的读/写接口将数据块存储到存储器116。在一个实施例中,根据一个实施例,控制器184更新对应于链表的指针以指向数据块被存储的存储器116的行。
类似地,根据一个实施例,当控制器184确定在存储器116中存储的分组描述符将很快需要从发送队列中出队时(例如通过确定发送队列的头部在存储器116中存储的分组描述符的阈值距离内),控制器184使用存储器116的读/写接口从存储器116中取回数据块,并将取回到的数据块中的分组描述符传送到本地存储器148。根据一个实施例,控制器184将数据块存储在缓冲器188中,然后将分组描述符从缓冲器188传送到本地存储器148。在一个实施例中,缓冲器188内的分组描述符的相对位置对应于链表内的那些元素的顺序。因此,根据一个实施例,控制器使用缓冲器188内的分组描述符的相对位置,将链表指针更新到与从缓冲器188传送到本地存储器148的分组描述符相对应的链表元素。
图1B示出了经由接口180在分组描述符高速缓存单元144和存储器116之间传送的若干数据块192。数据块192被组装在缓冲器188中,并且每个数据块192包括单个发送队列中的分组描述符。
根据一个实施例,尽管图1B示出了包括在分组描述符高速缓存单元144中的本地存储器148,但是本地存储器148与分组描述符高速缓存单元144分离,但是耦合到分组描述符高速缓存单元144,并且本地存储器148由一个或多个其他分组描述符高速缓存单元144(未示出)共享,并且耦合到一个或多个其他分组描述符高速缓存单元144(未示出)。
在一些实施例中,存储器116的一部分被预留用于分组描述符的存储。在一个实施例中,存储器116的一部分被共同预留用于多个发送队列,并且多个发送队列中的每个发送队列根据发送队列的长度自由地消耗存储器116中的存储空间。根据一个实施例,实际上,在任意特定时间的大多数发送队列将保持相对较短并且如果存储器116中的任意预留存储空间将消耗很少,而少量发送队列可能变得相对长并且是存储器116中预留存储空间中的最大消费者。因此,根据一个实施例,大多数发送队列将在任意特定时间完全保持在本地存储器148中,并且当发送队列变得相对长时,控制器184将发送队列中的分组描述符传送到存储器116,如上所述。根据一个实施例,存储器116中的存储量作为整体被预留用于多个发送队列,其中允许每个发送队列消耗存储器116中可用的尽可能多的预留存储空间。换句话说,根据一个实施例,每个发送队列不是仅为该单个发送队列预留的存储器116中的单独保证的存储空间,而是保证多个传输队列集合作为一个整体作为存储器中的共享存储量。
在另一实施例中,存储器116的相应部分被预留用于相应的发送队列,并且每个发送队列仅在对应的预留部分中消耗存储器116中的存储空间。例如根据一个实施例,至少一些发送队列中的每一个是在仅为该单个发送队列预留的存储器116中的单独保证的存储空间。
在一些实施例中,使用i)执行在一个或多个存储器中存储的机器可读指令的一个或多个处理器,ii)硬件电路(例如一个或多个硬件状态机),iii)或i)和ii)的组合来实现控制器184。
图2是根据一个实施例的用于处理网络设备中的分组的示例方法200的流程图。根据一个实施例,图1A和1B的网络设备104被配置为实现方法200,并且出于解释的目的,在网络设备104的上下文中描述了图2。然而,在其他实施例中,与网络设备104不同的另一合适的网络设备被配置为实现方法200。
在框204处,经由网络设备的多个网络接口接收分组。例如根据一个实施例,经由网络接口108接收分组。
在框208,将与在框204处接收的至少一些分组相对应的分组数据(例如至少分组的有效载荷)存储在诸如存储器116的存储器中。在一个实施例中,存储器具有超过100个字节的数据宽度,以促进对应于1000个或更多字节的分组的分组数据的高效的读取和写入。作为示意性实施例,存储器的数据宽度是128字节。在另一实施例中,存储器具有大于50字节的数据宽度。在一个实施例中,存储器包括具有大于100字节的数据宽度的读/写接口,以促进对应于1000或更多字节的分组的分组数据的高效的读取和写入。作为示意性实施例,读/写接口的数据宽度是128字节。在一个实施例中,读/写接口的数据宽度大于50字节。
在框212处,网络设备针对在框204处接收的至少一些分组生成与分组相关联的分组描述符。每个分组描述符包括关于相应分组的信息,诸如来自分组的报头的报头信息。根据一个实施例,每个分组描述符包括关于对应分组在存储器中的位置的位置信息。根据一个实施例,每个分组描述符具有比典型分组的长度短得多的数据长度。在示意性实施例中,一些分组描述符中的每一个具有50位和70位之间的合适长度。在另一实施例中,一些分组描述符中的每一个具有小于或等于50位的合适长度。在另一实施例中,一些分组描述符中的每一个具有小于或等于80位的合适长度。
在框216处,网络接口处理在框212处生成的分组描述符以确定将经由其发送对应分组的网络接口。根据一个实施例,例如分组处理器124处理如上所述的分组描述符。
在框220处,网络接口将对应于网络接口的多个发送队列中的至少一些分组描述符进行排队,对应的分组将经由所述网络接口被发送。在一个实施例中,多个发送队列利用与存储器(例如存储器116)分离的队列存储器(例如本地存储器148)来实现,并且在发送队列中对分组描述符进行排队包括将分组描述符存储在队列存储器中。在一个实施例中,分组描述符高速缓存单元144将分组描述符排队以发送队列,包括将分组描述符存储到本地存储器148。
在一个实施例中,在一个实施例中,队列存储器的读/写接口具有适合于读取/写入分组描述符的数据宽度,而不是分组。作为示意性实施例,读/写接口的数据宽度在50位和70位之间,包括50和70位。在一个实施例中,读/写接口的数据宽度小于或等于80位。在另一实施例中,读/写接口的数据宽度小于或等于50位。
在框224处,网络设备在队列存储器和存储器之间传送至少一些描述符。例如根据一个实施例,响应于检测到发送队列的长度满足阈值,发送队列中的至少一些分组描述符被传送到存储器。作为另一示例,根据一个实施例,响应于检测到发送队列的长度不再满足阈值(例如与上述相同的阈值或不同的阈值),对应于发送队列的PB/PD存储器中的至少一些分组描述符被从PB/PD存储器传送到队列存储器。在另一实施例中,响应于检测到队列存储器中的发送队列的一部分的长度满足阈值,将发送队列中的至少一些分组描述符传送到PB/PD存储器。在一个实施例中,响应于检测到发送队列的一部分的长度不再满足阈值(例如与上述相同的阈值或不同的阈值),根据一个实施例,对应于发送队列的PB/PD存储器中的至少一些分组描述符被从PB/PD存储器传送到队列存储器。根据一个实施例,使用控制器184和缓冲器188来实现框224。
在框228处,网络设备使来自发送队列的分组描述符出队。在一个实施例中,使分组描述符出队包括从队列存储器中取回分组描述符。在一个实施例中,分组描述符高速缓存单元144执行框228。
在框232处,结合在框228处分组描述符的出队,从PB/PD存储器取回分组数据(例如至少分组有效载荷),并且经由网络接口发送分组。例如在一个实施例中,在框228处使分组描述符出队指示应当发送相应的分组。在一些实施例中,分组描述符包括指示PB/PD存储器中存储分组的分组数据的位置的位置信息,并且框232包括使用分组描述符中的位置信息来从PB/PD存储器取回对应于分组的分组数据。根据一个实施例,框232由发送处理器152实现。
再次参考图1B,在一些实施例中,控制器184将分组描述符的发送队列维护为链表。在一些实施例中,控制器184维护具有多个部分的链表,例如头部、尾部和中间部分。在一些实施例中,链表的部分数目取决于链表的长度,例如链表中的多个分组描述符。根据一个实施例,图3A-C是由控制器184维护的分组描述符304的示例链表300的图。
在图3A中,由于链表300的长度,链表300仅包括头部并且完全存储在本地存储器148中。控制器184维护指向链表300的头部的指针(HEAD.head),以及指向链表300尾部的指针(TAIL.tail)。HEAD.head和TAIL.tail是指向本地存储器148中的位置的指针。经由接口168接收要排队的分组描述符304(图1B);接收的分组描述符304被添加到链表的尾部,并且控制器184更新TAIL.tail指针。换句话说,经由接口168接收的分组描述符304被存储在本地存储器148中。
类似地,要出队的分组描述符304被从链表300的头部移除,并被提供给接口176(图1B);并且控制器184更新HEAD.head指针。换句话说,从本地存储器148取回从链表300中出队的分组描述符304。
图3B示出了与图3A相比链表300增长之后的链表300。响应于链表300的增长,控制器184将链表300分成头部和尾部。例如响应于链表300的长度满足第一阈值,控制器184将链表300划分为头部和尾部。控制器184维护指向尾部的头部的指针(TAIL.head),以及指向头部的尾部的指针(HEAD.tail)。HEAD.head指针充当指向头部部分头部的指针,TAIL.tail充当指向尾部部分尾部的指针。
当链表300具有图3B中所示的形式时,经由接口168(图1B)接收的分组描述符304继续存储在本地存储器148中,并且从链表300中出队的分组描述符304继续从本地存储器148取回。
图3C示出了与图3B相比链表300增长之后的链表300。响应于链表300的增长,控制器184已将链表300划分为头部、尾部和中间(FRAG)部分。例如响应于链表300的长度满足大于第一阈值的第二阈值,控制器184将链表300划分为头部、尾部和中间部分。控制器184保持指向中间部分的头部的指针(FRAG.head),以及指向中间部分的尾部的指针(FRAG.tail)。另外,控制器184将中间部分传送到存储器116。因此,FRAG.head和FRAG.tail是指向存储器116中的位置的指针,每个位置包括链表的多个元素(相应的数据块)。在一个实施例中,控制器184还维护一个或多个指针,这些指针指向存储器116中对应于链表的后续数据块。例如图3C示出了与FRAG.head数据块相关联的指针,其指向存储器116中的后续数据块。另一方面,指针HEAD.head、HEAD.tail、TAIL.head和TAIL.tail是指向本地存储器148中的位置的指针。
当链表300具有图3C所示的形式时,经由接口168(图1B)接收的分组描述符304继续被存储在本地存储器148中,并且从链表300出队的分组描述符304继续从本地存储器148中被取回。另外,控制器184在本地存储器148和存储器116之间的中间部分传送分组描述符,这将在下面更详细地描述。
根据一个实施例,当链表300的长度减小时,链表300的部分以相反的方式合并,使得部分的数目减少。根据一个实施例,例如响应于链表300的长度不再满足第二阈值(或用于提供滞后的不同的第三阈值),控制器184仅将链表300合并到头部和尾部(例如,中间部分不包含描述符)。类似地,根据一个实施例,响应于链表300的长度不再满足第一阈值(或用于提供滞后的不同的第四阈值),控制器184仅将链表300合并到头部(例如,尾部或中间部分不包含描述符)。
再次参考图1B,根据一个实施例,为了考虑以高速率接收所接收的分组描述符172a的排队突发,分组描述符高速缓存单元144能够将中间部分中的分组描述符以速率从本地存储器148传送到存储器116,该速率至少等于分组描述符高速缓存单元144能够将本地存储器148中的分组描述符172a出队的速率。类似地,根据一个实施例,为了考虑分组描述符172b以高速率出队的出队突发,分组描述符高速缓存单元144能够将中间部分的分组描述符从存储器116以速率传送到本地存储器148,该速率至少等于分组描述符高速缓存单元144能够使分组描述符172b从本地存储器148出队的速率。
根据一个实施例,控制器184将诸如HEAD.head,HEAD.tail、TAIL.head、TAIL.tail、FRAG.head和FRAG.tail的链表参数存储在本地存储器148中。在另一实施例中,分组描述符高速缓存单元144包括或耦合到与本地存储器148和存储器116分离的另一存储器(未示出),并且控制器184将链表参数存储在另一存储器中。根据另一个实施例,分组描述符高速缓存单元144包括和/或耦合到多个寄存器(未示出),用于存储链表参数,诸如HEAD.head、HEAD.tail、TAIL.head、TAIL.tail、FRAG.head和FRAG.tail。
当链表300不包括或未使用中间部分时,FRAG.head和FRAG.tail指针被设置为预定值(例如空),其指示链表300不包括或不使用中间部分。类似地,当链表300不包括或不使用尾部时,HEAD.tail和TAIL.head指针被设置为预定值(例如null),其指示链表300不包括或不使用尾部。
图4A-D是根据一个实施例的分组描述符404的示例链表400的图,其示出了从本地存储器148传输到存储器116的分组描述符。图4A中所示的分组描述符404全部存储在本地存储器148中,并且控制器184已确定标记为1-20的分组描述符将被传送到存储器116。例如控制器184已确定标记为1-20的分组描述符将从链表400的尾部移动到中间部分(未示出)。
图4B示出了在控制器184将标记为1的分组描述符从本地存储器148移动到缓冲器188之一之后的链表400。控制器184还更新了指针TAIL.head以指向标记为2的分组描述符。
图4C示出了在控制器184将标记为2的分组描述符从本地存储器148移动到缓冲器188之后的链表400。控制器184还更新了指针TAIL.head以指向标记为3的分组描述符。
以类似的方式将分组描述符从本地存储器148传送到缓冲器188,直到缓冲器188包括合适数目的分组描述符,例如直到缓冲器188包括对应于数据块的大小的多个分组描述符为止。图4D示出了在控制器184将分组描述符3-20从本地存储器148移动到缓冲器188之后的链表400。控制器184还更新了指针TAILhead以指向链表400中的下一个分组描述符。
然后,图4D中的缓冲器188的内容经由存储器116的读/写接口存储到存储器116。另外,控制器184更新FRAG.tail指针以考虑标记为1-20的分组描述符存储在存储器116中。
在图4A-D所示的实施例中,将从链表400的尾部移除要传送到存储器116的分组描述符。
在一个实施例中,缓冲器188内的分组描述符的相对位置对应于链表400内的那些元素的顺序。根据一个实施例,结合将缓冲器188的内容传送到存储器116,控制器184更新与在存储器116中存储的链表元素相关联的指针(例如,FRAG.tail、从对应于链表400并且先前存储在存储器116中的另一数据块到存储器116中新存储的数据块的指针等)。
图5A-D是分组描述符504的示例链表500的图,其中链表500的一部分存储在本地存储器148中,链表500的另一部分存储在存储器116中,根据一个实施例。特别地,链表500的头部和尾部存储在本地存储器148中,而中间部分存储在存储器116中。
在图5A中,控制器184已经从存储器116中取回了中间部分中的分组描述符集合,并将该分组描述符集合存储到缓冲器188中的一个,并且缓冲器188中的分组描述符被标记为1-20。在一个实施例中,例如控制器184确定标记为1-20的分组描述符将从中间部分移动到头部分,并且控制器184响应于该确定将标记为1-20的分组描述符从存储器116传送到缓冲器188。在一个实施例中,控制器184还更新FRAG.head指针以反映从存储器116中移除标记为1-20的分组描述符。
图5B示出了在控制器184已将标记为1的分组描述符从缓冲器188移动到本地存储器148之后的链表500。具体地,控制器184将标记为1的分组描述符添加到链表500的头部。控制器184还更新了指针HEAD.tail以指向标记为1的分组描述符。
图5C示出了在控制器184已经将标记为2的分组描述符从缓冲器188移动到本地存储器148之后的链表500。具体地,控制器184将标记为2的分组描述符添加到链表500的头部。控制器184还更新了指针HEAD.tail以指向标记为2的分组描述符。
以类似的方式将分组描述符从缓冲器188传送到本地存储器,直到缓冲器188为空。图5D示出了在控制器184已经将分组描述符3-20从缓冲器188移动到本地存储器148之后的链表500。控制器184还更新了指针HEAD.tail以指向标记为20的分组描述符。
在图5A-D所示的实施例中,从存储器116传送的分组描述符被添加到链表500的头部。
在一个实施例中,缓冲器188内的分组描述符的相对位置对应于链表500内的那些元素的顺序。因此,根据一个实施例,控制器184基于缓冲器188内的分组描述符的相对位置,更新存储在本地存储器148中的链表500的元素的指针。根据一个实施例,结合将内容从缓冲器188传送到本地存储器148,控制器184更新与存储在本地存储器148中的链表元素相关联的指针(例如,HEAD.tail、链表500中的元素与链接列表500中的后续元素的指针等)。
在图4A-D和5A-D所示的场景中,链表有时在第一存储器(例如本地存储器148)和第二存储器(例如存储器116)之间分叉。根据一个实施例,例如控制器184的控制器维护链表参数(例如指向链表的部分的头部和尾部的指针、链表的元素之间的指针、数据块之间的指针(每个包括多个链表元素)等),其至少当链表在不同存储器之间分叉时,对应于不同存储器(例如第一存储器和第二存储器)。
图6是根据一个实施例的用于在多个存储器设备中维护链表的示例方法600的流程图。根据一个实施例,图1A和1B的分组描述符高速缓存单元144被配置为实现方法600,并且出于解释的目的,在分组描述符高速缓存单元144的上下文中描述了图6。然而,在其他实施例中,与分组描述符高速缓存单元144不同的另一设备被配置为实现方法600。在其他实施例中,诸如个人计算机、智能电话、服务器等的计算机中的设备被配置为实现方法600。
在框604,链表的至少一些元素存储在具有第一读/写接口的第一存储器中,其中至少一些元素包括链表的头元素和链表的尾元素。例如分组描述符高速缓存单元144维护分组描述符的链表,并且链表的至少一些元素存储在本地存储器148中。
在框608,将新数据元素添加到链表的尾部的链表中,包括经由第一读/写接口将新数据元素存储在第一存储器中。例如分组描述符高速缓存单元144将经由接口168接收的分组描述符172a添加到链表的尾部,包括经由本地存储器148的读/写接口将接收的分组描述符172a存储在本地存储器148中。根据一个实施例,框608包括更新与第一存储器相对应的链表参数(例如链表指针)。
在框612,从链表中在链表的头部处移除数据元素,包括经由第一读/写接口从第一存储器取回数据元素。例如分组描述符高速缓存单元144使分组描述符172b从链表的头部出队,包括经由本地存储器148的读/写接口从本地存储器148中取回分组描述符172b。根据一个实施例,框612包括更新对应于第一存储器的链表参数(例如链表指针)。
链表的长度(例如链表中的数据元素的数目)将随着将元素被添加到链表的尾部的第一速率(框608)和从链表的头部移除元素的第二速率(框612)的变化而动态地变化。
在框616,头部和尾部之间的链表中的数据元素被从第一存储器移动到第二存储器,第二存储器与第一存储器分离,具有与第一读/写接口分离的第二读/写接口。
在一个实施例中,响应于链表的长度满足阈值,移动数据元素。在另一实施例中,响应于链表的一部分的长度满足阈值,移动数据元素。根据一个实施例,例如如上面结合图3A-C所讨论的,链表可以被划分为多个部分(例如头部、尾部和中间部分),并且满足阈值的链表(例如,尾部)的一部分的长度可以是用于将数据元素从第一存储器移动到第二存储器的触发器。在一个实施例中,分组描述符高速缓存单元144被配置为将链表中的分组描述符从本地存储器148移动到存储器116,如上所述。
如上所述,链表的长度(例如链表中的元素的数目)将随着时间的推移而变化,因为数据元素被添加到链表的尾部并且数据元素被从链表的头部移除(例如因为元素被添加到链表尾部的第一速率和从链表头部移除元素的第二个速率随时间变化)。因此,当链表的长度达到合适的阈值时,数据元素将从第一存储器传送到第二存储器。
根据一个实施例,框616包括更新与第二存储器相对应的链表参数(例如链表指针)。根据一个实施例,框616还包括更新与第一存储器相对应的链表参数(例如链表指针)。例如在链表的尾部的链表元素被移动到第二存储器的实施例中,TAIL.head指针被更新为指向在第一存储器中仍然剩余的链表元素;更新FRAG.tail指针以指向第二存储器中移动来自第一存储器的多个链表元素(新数据块)的位置;并且如果链表的先前数据块已经存储在第二存储器中,则更新从先前数据块到第二存储器中的新数据块的指针。
在执行框616时,链表至少在一段时间内在第一存储器(例如本地存储器148)和第二存储器(例如存储器116)之间分叉。根据一个实施例,当链表如此分叉时,例如控制器184的控制器维护与第一存储器和第二存储器两者相对应的链表参数(例如指向链表的部分的头部和尾部的指针、链表的元素之间的指针、数据块之间的指针(每个包括多个链表元素)等)。
在一些实施例中,框616包括使用以上结合图4A-D讨论的技术。
在框620处,将头部和尾部之间的链表中的数据元素从第二存储器移动到第一存储器。在一个实施例中,响应于链表会议的长度不再满足阈值而移动数据元素。在一个实施例中,例如在框620处使用的阈值不同于在框616处用于实现滞后的阈值。在另一实施例中,在框620处使用的阈值与在框616处使用的阈值相同。
在另一实施例中,响应于链表的一部分的长度满足阈值,在框620处移动数据元素。根据一个实施例,例如如上面结合图3A-C所讨论的,链表可以被划分为多个部分(例如头部、尾部和中间部分),以及不再满足阈值的链表的一部分的长度(例如头部)可以是用于将数据元素从第二存储器移动到第一存储器的触发器。在一个实施例中,例如在框620处使用的阈值不同于在框616处使用的用于实现滞后的阈值。在另一实施例中,在框620处使用的阈值与在框616处使用的阈值相同。
在一个实施例中,为了确保从链表头部移除数据元素对应于从第一存储器(例如不是第二存储器)取回数据元素,在那些数据元素到达链表头部之前,存储在第二存储器中的数据元素被移动第一个存储器。因此,在一个实施例中,当头部的长度下降到合适的阈值以下并且如果数据元素被存储在第二存储器中时,来自第二存储器的数据元素从第二存储器被移动到第一存储器中的链表的头部,使得当从链表的头部移除数据元素时,那些数据元素将在第一存储器中(例如,不在第二存储器中)。
根据一个实施例,框620包括更新与第二存储器相对应的链表参数(例如链表指针)。根据一个实施例,框620还包括更新与第一存储器相对应的链表参数(例如链表指针)。例如在一个实施例中,如果从第二存储器移动到第一存储器的链表元素(在旧数据块中)与指向第二存储器中的下一数据块的指针相关联,则FRAG.head指针被更新为指向第二存储器中的下一个数据块的地址。根据一个实施例,如果不存在第二存储器中剩余的链表中的其他元素,则更新FRAG.head指针(例如设置为预定值)以指示不存在第二存储器中剩余的链表中的其他元素。作为另一示例,在链表元素从第二存储器移动到第一存储器中的链表的头部的实施例中,HEAD.tail指针被更新以指向从第二个存储器移动到第一个存储器的链表元素;当它们被存储在第二存储器中时,基于数据元素的第二存储器的行内的相对位置来设置从第二存储器移动到第一存储器的元素之间的指针。
如上所述,链表的长度(例如链表中的元素的数目)将随着时间的推移而变化,因为数据元素被添加到链表的尾部并且数据元素被从链表的头部移除(例如因为元素被添加到链表尾部的第一速率和元素被从链表头部移除的第二速率随时间变化)。因此,根据一个实施例,当链表的长度降落到低于合适的阈值时,数据元素从第一存储器到第二存储器的传送中止,并且链表至少在某一点完全存储在第一存储器(例如没有数据元素被存储在第二存储器中)。
在一些实施例中,框620包括使用以上结合图5A-D讨论的技术。
至少在一些实施例中,与使用单个存储器来完全存储所有多个链表的系统相比,方法600的使用通过允许更小的相对快速和/或低延迟的第一存储器来降低总成本。根据一个实施例,例如利用方法600,使用相对快速和/或低延迟(但更小)的第一存储器来执行通常需要较少延迟的以下动作:将数据元素添加到链表的尾部并从链接中移除数据元素。另一方面,根据一个实施例,头部和尾部之间的非活动(例如,在将来时间之前不需要被访问)的数据元素被移动(例如,至少当链表的长度满足阈值时)到相对较慢和/或较高的延迟(但是更大和/或更便宜)第二存储器。根据一个实施例,在存储在第二存储器中的数据元素到达链表的头部之前,数据元素被移动到相对快速的第一存储器。
至少在一些实施例中(例如在响应于链表的长度满足阈值而在框616处传送数据元素的实施例中),方法600的使用允许多个链表动态地共享第二存储器中的存储空间,而不必在第二存储器中为链表中的每一个预留的专用存储空间。至少在一些实施例中,例如在需要维护相对大量链表的系统中,但是其中在任意给定的时间很可能只有少量链表将具有较大的长度(例如相对高数目的数据元素),方法600提供第二存储器的高效使用。例如至少在一些实施例中,与针对每个链表在第二存储器中需要分离的专用存储空间的系统相比,方法600允许更小尺寸的第二存储器的使用。
至少在一些实施例中(例如在框620处响应于头部与第二存储器中的元素之间的长度下降到阈值之下而传送数据元素的实施例中),方法600防止“高速缓存未命中”,其中需要从链表头部取回的数据元素不在第一存储器中,而是必须从相对较慢和/或较高延迟的第二存储器中取回。
在一个实施例中,第二读/写接口的数据宽度宽于第一读/写接口的数据宽度,使得可以使用单个写操作将多个数据元素存储在第二存储器中和/或可以使用单个读取操作从第二存储器取回多个数据元素。在一个实施例中,将数据元素从第一存储器移动到第二存储器包括:使用多个读取操作从第一存储器取回链表的多个数据元素;将多个数据元素聚合到数据块中;并使用单个写操作将数据块存储到第二存储器。在一个实施例中,将数据元素从第二存储器移动到第一存储器包括:使用单个读取操作从第二存储器读取数据块,该数据块包括链表的多个数据元素;并使用多个写操作将多个数据元素分别存储到第一存储器。
在一个实施例中,分组描述符高速缓存单元144被配置为移动存储器116和本地存储器148之间的链表中分组描述符,如上所述。
在一些实施例中,与在完全在单个存储器内维护链表的存储的系统相比,在框616和620处在第一存储器和第二存储器之间传送数据元素允许更小的第一存储器的使用。根据一个实施例,例如链表用于需要相对快速地将数据元素存储到链表尾部和/或从链表头部快速读取数据元素的系统中,因此第一存储器需要相对快速的读/写访问时间以适应系统要求。另一方面,根据一个实施例,第二存储器具有较慢的读/写访问时间,因此通常比第一存储器更便宜(每单位存储容量)。在一些实施例中,第二存储器还用于与存储在链表和第一存储器中的数据不同的其他类型的数据的存储。根据一个实施例,由于更昂贵(每单位存储容量)第一存储器的尺寸减小,因此总成本降低。
在一些实施例中,与第一存储器的访问速率/延迟相比,第二存储器具有较慢的访问速率和/或较高的延迟。在一些实施例中,第二存储器明显大于第一存储器。在一些实施例中,第一存储器是静态随机存取存储器(SRAM),而第二存储器是动态随机存取存储器(DRAM)或闪存。在一些实施例中,第一存储器是上面讨论的本地存储器148,第二存储器是上面讨论的存储器116。
在一个实施例中,一种装置包括:第一存储器设备,被配置为存储:(i)先进先出(FIFO)队列的头部,FIFO队列结构化为按照LL元素被添加到FIFO队列的顺序布置的LL元素的链表(LL),头部包括第一多个LL元素,这些LL元素被布置为按照LL元素被添加到FIFO队列的顺序从FIFO队列中取回,以及(ii)FIFO队列的尾部,尾部包括第二多个LL元素,第二多个LL元素被布置为对应于其中第二多个LL元素被添加到FIFO队列的顺序。该装置还包括与第一存储器分离的第二存储器设备,第二存储器被配置为存储FIFO队列的中间部分,中间部分包括按顺序在头部之后并按顺序在尾部之前的第三多个LL元素。该装置还包括队列控制器,该队列控制器被配置为:根据顺序从第一存储器设备取回头部中的LL元素,在头部变空之前,将中间部分中的LL元素从第二存储设备移动到第一存储设备中的头部,并更新与移动的LL元素相对应的LL参数,以指示移动的LL元素的存储从第二存储器设备改变到第一存储器设备。
在其他实施例中,该装置包括以下特征中的一种或两种或更多种中的任意合适组合。
队列控制器还被配置为:响应于头部中的LL元素的数目下降到阈值以下,将中间部分中的LL元素从第二存储器设备移动到第一存储器设备中的头部。
LL参数包括指向存储LL元素的存储器位置的指针;并且队列控制器被配置为更新与从中间部分移动到尾部的LL元素相对应的指针,以指向第一存储器中的位置。
队列控制器还被配置为:将新LL元素存储到第一存储器设备中的尾部,更新对应于尾部的LL参数以反映将新LL元素添加到链表,将按顺序在新LL元素之前的尾部中的LL元素从第一存储器设备移动到第二存储器设备中的中间部分,并且更新对应于从尾部移动到中间部分的LL元素的LL参数,以指示从尾部移动到中间部分的LL元素的存储已从第一存储器设备改变到第二存储器设备。
队列控制器还被配置为:响应于i)尾部中的LL元素的数目满足第一阈值,以及ii)LL中的LL元素的数目满足第二阈值,将按顺序在新LL元素之前的尾部中的LL元素从第一存储设备移动到第二存储设备中的中间部分。
LL参数包括指向存储LL元素的存储器位置的指针;以及队列控制器被配置为更新与从尾部到中间部分移动的LL元素相对应的一个或多个指针,以指向第二存储器中的一个或多个位置。
队列控制器还被配置为:更新对应于头部的LL参数,以结合根据顺序从第一存储器设备中取回头部中的LL元素,反映从链表中移除LL元素。
在另一实施例中,一种方法包括在第一存储器设备中存储:(i)先进先出(FIFO)队列的头部,FIFO队列被结构化为链表(LL)元素的LL,LL元素被布置为按照LL元素被添加到FIFO队列的顺序,头部包括第一多个LL元素,第一多个LL元素被布置为按照LL元素被添加到FIFO队列的顺序从FIFO队列中取回,以及(ii)FIFO队列的尾部,尾部包括第二多个LL元素,第二多个LL元素被布置为对应于其中第二多个LL元素被添加到FIFO队列的顺序。该方法还包括:在与第一存储器分离的第二存储器设备中存储FIFO队列的中间部分,中间部分包括按顺序在头部之后并按顺序在尾部之前的第三多个LL元素;以及根据顺序从第一存储器设备取回头部中的LL元素;利用队列控制器,在头部变空之前,将中间部分中的LL元素从第二存储设备移动到第一存储设备中的头部;以及利用队列控制器,更新与移动的LL元素相对应的LL参数,以指示移动的LL元素的存储从第二存储器设备改变到第一存储器设备。
在其他实施例中,该方法包括以下特征中的一个或两个或更多个中的任意合适组合。
响应于在队列控制器处确定头部中的LL元素的数目下降到阈值以下,将中间部分中的LL元素从第二存储器设备移动到第一存储器设备中的头部。
LL参数包括指向存储LL元素的存储器位置的指针;该方法还包括利用队列控制器更新与从中间部分移动到尾部的LL元素相对应的指针,以指向第一存储器中的位置。
该方法还包括:将新LL元素存储到第一存储器设备中的尾部,利用队列控制器更新对应于尾部的LL参数以反映将新LL元素添加到链表;利用队列控制器,将按顺序在新LL元素之前的尾部中的LL元素从第一存储器设备移动到第二存储器设备中的中间部分;以及利用队列控制器,更新对应于从尾部移动到中间部分的LL元素的LL参数,以指示从尾部移动到中间部分的LL元素的存储已从第一存储器设备改变到第二存储器设备。
该方法还包括:响应于i)尾部中的LL元素的数目满足第一阈值,以及ii)LL中的LL元素的数目满足第二阈值,利用队列控制器,将按顺序在新LL元素之前的尾部中的LL元素从第一存储器设备移动到第二存储器设备中的中间部分。
LL参数包括指向存储LL元素的存储器位置的指针;并且所述方法还包括:利用队列控制器,更新与从尾部到中间部分移动的LL元素相对应的一个或多个指针,以指向第二存储器中的一个或多个位置。
在又一个实施例中,一种装置包括:多个网络接口,被配置为耦合到多个网络链路;以及分组处理器,被配置为处理经由多个网络接口接收的分组,并确定要将所接收的分组转发到的网络接口。该装置还包括第一存储器设备,被配置为存储:(i)与网络接口中的至少一个相对应的先进先出(FIFO)发送队列的头部,该FIFO发送队列用于存储对应于要经由至少一个网络接口发送的分组的分组描述符,FIFO发送队列结构化为链表(LL)元素的LL,LL元素被布置为按照LL元素被添加到FIFO队列的顺序,头部包括第一多个LL元素,第一多个LL元素被布置为按照LL元素被添加到FIFO队列的顺序从FIFO队列中取回,以及(ii)FIFO队列的尾部,尾部包括第二多个LL元素,第二多个LL元素被布置为对应于其中第二多个LL元素被添加到FIFO队列的顺序。该装置还包括与第一存储器分离的第二存储器设备,所述第二存储器被配置为存储FIFO队列的中间部分,中间部分包括按顺序在头部之后并按顺序在尾部之前的第三多个LL元素;以及队列控制器,被配置为:结合新分组描述符被添加到发送队列,根据所述顺序,将尾部中的新LL元素存储到第一存储器设备;结合与经由至少一个网络接口传输对应于发送队列中的分组描述符的分组,根据所述顺序,从第一存储器设备取回头部中的LL元素;在头部变空之前,将中间部分中的LL元素从第二存储器设备移动到第一存储器设备中的头部;以及更新与移动的LL元素相对应的LL参数,以指示移动的LL元素的存储从第二存储器设备变到第一存储器设备。
在其他实施例中,该装置包括以下特征中的一个或两个或更多个中的任意合适组合。
队列控制器还被配置为:响应于头部中的LL元素的数目下降到阈值以下,将中间部分中的LL元素从第二存储器设备移动到第一存储器设备中的头部。
队列控制器还被配置为:将按顺序在新的LL元素之前的尾部中的LL元素从第一存储器设备移动到第二存储器设备中的中间部分,并更新对应于从尾部移动到中间部分的LL元素的LL参数,以指示从尾部移动到中间部分的LL元素的存储已经从第一存储器设备改变到第二存储器设备。
该装置还包括:耦合到第二存储器设备的接收处理器,接收器处理器被配置为:i)将对应于经由一个或多个网络接口接收的分组的分组数据存储到第二存储器设备,以及ii)生成针对经由网络接口接收的分组的分组描述符,其中分组数据至少包括分组的有效载荷;以及发送处理器,其耦合到第二存储器设备,发送处理器,被配置为i)接收由队列控制器从发送队列中移除的分组描述符,ii)从第二存储器设备取回与所接收的分组描述符相对应的分组数据,以及iii)将分组提供给至少一个网络接口以进行传输。
第一存储器设备包括第一读/写接口;第二存储器设备包括与第一读/写接口分离的第二读/写接口;接收处理器,被配置为使用第二读/写接口将与经由一个或多个网络接口接收的分组相对应的分组数据存储到第二存储器设备;发送处理器,被配置为使用第二读/写接口从第二存储器设备取回分组数据;以及队列控制器,被配置为:使用第一读/写接口将尾部中的新LL元素存储到第一存储器设备,使用第一读/写接口从第一存储器设备取回头部中的LL元素,使用第二读/写接口从第二存储器设备取回中间部分中的LL元素,以及使用第一读/写接口将从中间部分取回的LL元素存储到第一存储器设备中的头部。
在又一个实施例中,一种方法包括经由网络设备的多个网络接口接收分组;在网络设备处确定接收到的分组要被转发到的网络接口;并且在第一存储器设备中存储:(i)与网络接口中的至少一个相对应的先进先出(FIFO)发送队列的头部,该FIFO发送队列用于存储对应于要经由至少一个网络接口发送的分组的分组描述符,FIFO队列结构化为链表(LL)元素的LL,LL元素被布置为按照LL元素被添加到FIFO队列的顺序,头部包括第一多个LL元素,第一多个LL元素被布置为按照LL元素被添加到FIFO队列的顺序从FIFO队列中取回,以及(ii)FIFO队列的尾部,尾部包括第二多个LL元素,第二多个LL元素被布置为对应于其中第二多个LL元素被添加到FIFO队列的顺序。该方法还包括在与第一存储器分离的第二存储器设备中存储FIFO队列的中间部分,中间部分包括按顺序在头部之后并按顺序在尾部之前的第三多个LL元素;结合与经由至少一个网络接口传输与发送队列中的分组描述符相对应的分组,根据所述顺序,从第一存储器设备中取回头部中的LL元素;利用队列控制器,在头部变空之前,将中间部分中的LL元素从第二存储器设备移动到第一存储器设备中的头部;以及利用队列控制器,更新与移动的LL元素相对应的LL参数,以指示移动的LL元素的存储从第二存储器设备改变到第一存储器设备。
在其他实施例中,该方法包括以下特征中的一个或两个或更多个中的任意合适的组合。
响应于在队列控制器处确定头部中的LL元素的数目下降到阈值以下,将中间部分中的LL元素从第二存储器设备移动到第一存储器设备中的头部。
该方法还包括:利用队列控制器,将按顺序在新的LL元素之前的尾部中的LL元素从第一存储器设备移动到第二存储器设备中的中间部分;并且利用队列控制器,更新对应于从尾部移动到中间部分的LL元素的LL参数,以指示从尾部移动到中间部分的LL元素的存储已经从第一存储器设备改变到第二存储器设备。
该方法还包括:将与经由一个或多个网络接口接收的分组相对应的分组数据存储到第二存储器设备,其中分组数据至少包括分组的有效载荷;在网络设备处生成经由网络接口接收的分组的分组描述符;从第二存储器设备取回与从发送队列取回的分组描述符相对应的分组数据;并且将分组提供给至少一个网络接口以进行传输。
第一存储器设备包括第一读/写接口;第二存储器设备包括与第一读/写接口分离的第二读/写接口;将与经由一个或多个网络接口接收的分组相对应的分组数据存储到第二存储设备包括使用第二读/写接口;从第二存储器设备取回分组数据包括使用第二读/写接口;将尾部中的新LL元素存储到第一存储器设备包括使用第一读/写接口;从第一存储器设备取回头部中的LL元素包括使用第一读/写接口;从第二存储器设备取回中间部分中的LL元素包括使用第二读/写接口;以及将从中间部分取回的LL元素存储到第一存储器设备中的头部包括使用第一读/写接口。
在另一实施例中,一种网络设备包括:多个网络接口,被配置为耦合到多个网络链路;第一存储器设备,具有读/写接口;接收处理器,耦合到第一存储器设备,所述接收器处理器被配置为i)使用第一存储器设备的读/写接口将对应于经由一个或多个网络接口接收的分组的分组数据存储到第一存储器设备,以及ii)生成经由网络接口接收的分组的分组描述符,其中分组数据至少包括分组的有效载荷;分组处理器,被配置为处理分组描述符以确定要经由其发送分组的网络接口;以及分组描述符高速缓存单元,其耦合到第一存储器设备,分组描述符高速缓存单元被配置为:使用第一存储器设备的读/写接口将队列中的分组描述符存储到第一存储器设备,包括在单个写操作中将多个包描述符存储到第一存储器,以及使用第一存储器设备的读/写接口从第一存储器设备取回队列中的分组描述符,包括在单个读操作中从第一存储器设备取回多个分组描述符。该网络设备还包括耦合到第一存储器设备的发送处理器,该发送处理器被配置为:i)接收由分组描述符高速缓存单元从一个或多个队列中移除的分组描述符,ii)使用第一存储器设备的读/写接口从第一存储器设备取回与接收的分组描述符相对应的分组数据,以及iii)将分组提供给一个或多个网络接口以进行传输。
在其他实施例中,网络设备包括以下特征中的一个或的两个或更多个中的任意合适组合。
网络设备还包括:第二存储器设备,具有读/写接口;分组描述符高速缓存单元耦合到第二存储器设备;并且分组描述符高速缓存单元被配置为使用第二存储器设备的读/写接口将分组描述符排队并将分组描述符出队到第二存储器设备。
网络设备还包括:多个缓冲区;分组描述符高速缓存单元耦合到多个缓冲器;所述分组描述符高速缓存单元,被配置为:使用所述第二存储设备的读/写接口,将与所述第一队列相对应的多个分组描述符集合从所述第二存储设备传送到第一缓冲区,使用第一存储器设备的读/写接口将所述多个分组描述符集合从第一缓冲器传输到第一存储器设备,使用第一存储器设备的读/写接口将多个分组描述符集合从第一存储器设备传送到第一缓冲器或第二缓冲器,并使用第二存储器设备的读/写接口将多个分组描述符的集合从第一缓冲器或第二缓冲器传送到第二存储器设备。
分组描述符高速缓存单元包括控制器,该控制器被配置为:维护与多个队列相对应的多个链表,其中链表的头部和尾部被存储在第二存储器设备中;通过将分组描述符排队到链表的尾部,将分组描述符排队到队列;通过从链表头部出队分组描述符,使队列中的分组描述符出队;通过将来自第二存储器设备的队列的头部和尾部之间的多个分组描述符的集合传送到第一存储器设备,将队列中的分组描述符存储到第一存储器设备;以及通过将来自第一存储器设备的队列的头部和尾部之间的多个分组描述符的集合传送到第二存储器设备,从第一存储器设备取回队列中的分组描述符。
控制器被配置为:维护至少一个队列:i)队列的头部包括多个分组描述符,ii)队列的尾部包括多个分组描述符,以及iii)队列的中间部分包括多个分组描述符;其中与存储在第一存储设备中的至少一个队列相对应的分组描述符对应于队列的中间部分。
在又一个实施例中,一种方法包括:使用第一存储器设备的读/写接口在第一存储器设备中存储分组数据,该分组数据对应于经由网络设备的网络接口接收的分组,分组数据至少包括分组的有效载荷;在网络设备处生成用于经由网络接口接收的分组的分组描述符;通过处理分组描述符,在网络设备处确定要经由其发送分组的网络接口;使用第一存储器设备的读/写接口将队列中的分组描述符存储到第一存储器设备,包括在单个写操作中将多个分组描述符存储到第一存储器设备;使用第一存储器设备的读/写接口从第一存储器设备取回队列中的分组描述符,包括在单个读取操作中从第一存储器设备取回多个分组描述符;响应于从队列中出队的分组描述符,使用第一存储器设备的读/写接口取回来自第一存储器设备的分组数据;以及在网络设备处,将分组提供给一个或多个网络接口以进行传输。
在其他实施例中,该方法包括以下特征中的一个或两个或更多个中的任意合适组合。
该方法还包括:将分组描述符排队到队列,包括使用第二存储器设备的读/写接口将分组描述符存储到与第一存储器设备分离的第二存储器设备;使分组描述符从队列出队,包括使用第二存储器设备的读/写接口从第二存储器设备中取回分组描述符。
该方法还包括:使用第二存储器设备的读/写接口,将对应于第一队列的多个分组描述符集合从第二存储器设备传送到第一缓冲器;使用第一存储器设备的读/写接口将多个分组描述符集合从第一缓冲器传送到第一存储器设备;使用第一存储器设备的读/写接口将多个分组描述符集合从第一存储器设备传送到第一缓冲器或第二缓冲器;使用第二存储设备的读/写接口将多个分组描述符集合从第一缓冲器或第二缓冲器传送到第二存储器设备。
该方法还包括:在网络设备处维护与多个队列对应的多个链表,其中链表的头部和尾部被存储在第二存储器设备中;通过将分组描述符排队到链表的尾部,将分组描述符排队到队列;
通过使分组描述符从链表的头部出队,使分组描述符从队列中出队;通过将队列的头部和尾部之间的多个分组描述符的集合从第二存储器设备传送到第一存储器设备,将队列中的分组描述符存储到第一存储器设备;通过将队列的头部和尾部之间的多个分组描述符的集合从第一存储器设备传送到第二存储器设备在,从第一存储器设备取回队列中的分组描述符。
维护多个链表包括:针对至少一个队列维护:i)队列的头部,包括多个分组描述符,ii)队列的尾部,包括多个分组描述符,以及iii)中间部分,包括多个分组描述符;并维护指向第一存储器设备中的一个或多个存储器位置的中间部分的头指针和尾指针。
在又一个实施例中,一种装置包括:第一存储器设备;第二存储设备;控制器,被配置为:维护具有头部和尾部的链表,在第一存储器设备中至少存储头部和尾部,将新数据元素添加到链表的头部,包括将新数据元素存储到第一存储器设备,从链表的尾部移除数据元素,包括从第一存储器设备取回数据元素,将头部和尾部之间的链表中的数据元素从第一存储器设备移动到第二存储器设备,并将头部和尾部之间的链表中的数据元素从第二存储设备移动到第一存储设备。
在其他实施例中,该装置包括以下特征中的一个或两个或更多个中的任意合适组合。
控制器被配置为:响应于确定i)链表或ii)链接列表的第一部分之一的长度满足第一阈值,将头部和尾部之间的链表中的数据元素从第一存储器设备移动到第二存储器设备。
控制器被配置为:响应于确定i)链表,ii)链接列表的第一部分或iii)链接列表的第二部分之一的长度不再满足第二阈值,将头和尾之间的链表中的数据元素从第二存储设备移动到第一存储设备。
第一阈值不同于第二阈值。
控制器被配置为:维护链表的头部,其中链表的头部包括存储在第一存储器中的多个数据元素的第一集合,维护链表的尾部,其中链表的尾部包括存储在第一存储器中的多个数据元素的第二集合,并维护链表的中间部分,其中链表的中间部分包括存储在第二个存储器中的多个数据元素的第三集合。
在另一实施例中,一种方法包括:利用控制器维护具有头部和尾部的链表;在第一存储设备中至少存储头部和尾部;使用控制器将新数据元素添加到链表的头部,包括将新数据元素存储到第一存储器设备;利用控制器从链表的尾部移除数据元素,包括从第一存储设备中取回数据元素;利用控制器,将头部和尾部之间的链表中的数据元素从第一存储设备移动到第二存储设备;并且利用控制器将头部和尾部之间的链表中的数据元素从第二存储设备移动到第一存储设备。
在其他实施例中,该方法包括以下特征中的一个或两个或更多个中的任意合适组合。
将头部和尾部之间的链表中的数据元素从第一存储器设备移动到第二存储器设备是响应于在控制器处确定i)链表,或ii)链表的第一部分中之一的长度满足第一阈值。
将头部和尾部之间的链表中的数据元素从第二存储器设备移动到第一存储器设备是响应于在控制器处确定i)链表,ii)链接列表的第一部分或iii)链接列表的第二部分之一的长度不再满足第二阈值
第一阈值不同于第二阈值。
该方法还包括:利用控制器维护链表的头部,其中链表的头部包括存储在第一存储器中的多个数据元素的第一集合;利用控制器维护链表的尾部,其中链表的尾部包括存储在第一存储器中的多个数据元素的第二集合;并利用控制器维护链表的中间部分,其中链表的中间部分包括存储在第二个存储器中的多个数据元素的第三集合。
可以利用硬件、执行固件指令的处理器、执行软件指令的处理器或其任意组合来实现上述各种框、操作和技术中的至少一些。当利用执行软件或固件指令的处理器实现时,软件或固件指令可以存储在任意计算机可读存储器中,诸如在磁盘、光盘或其他存储介质上,在RAM或ROM或闪存中、处理器、硬盘驱动器、光盘驱动器、磁带机等中。软件或固件指令可以包括机器可读指令,机器可读指令当由一个或多个处理器执行时,使得一个或多个处理器执行各种动作。
当以硬件实现时,硬件可包括分立组件、集成电路、专用集成电路(ASIC)、可编程逻辑器件(PLD)等中的一个或多个。
尽管已经参考具体实施例描述了本发明,这些实施例仅用于说明而不是对本发明的限制,在不脱离本发明的范围的情况下,可以对所公开的实施例进行改变、添加和/或删除。
Claims (23)
1.一种装置包括:
第一存储器设备,被配置为存储:
(i)先进先出(FIFO)队列的头部,所述FIFO队列被结构化为链表(LL)元素的LL,所述LL元素按照所述LL元素被添加到所述FIFO队列的顺序被布置,所述头部包括第一多个LL元素,所述第一多个LL元素被布置为按照所述LL元素被添加到所述FIFO队列的顺序从所述FIFO队列中取回,以及
(ii)所述FIFO队列的尾部,所述尾部包括第二多个LL元素,所述第二多个LL元素被布置为对应于所述第二多个LL元素被添加到所述FIFO队列的顺序;
第二存储器设备,与所述第一存储器分离,所述第二存储器被配置为存储所述FIFO队列的中间部分,所述中间部分包括按照所述顺序在所述头部之后并且按照所述顺序在所述尾部之前的第三多个LL元素;以及
队列控制器,被配置为:
根据所述顺序,从所述第一存储器设备取回所述头部中的LL元素;
在所述头部变空之前,将所述中间部分中的LL元素从所述第二存储器设备移动到所述第一存储器设备中的所述头部,以及
更新对应于所移动的所述LL元素的LL参数,以指示所移动的所述LL元素的存储从所述第二存储器设备改变到所述第一存储器设备。
2.根据权利要求1所述的装置,其中所述队列控制器还被配置为:
响应于所述头部中的LL元素的数目下降到阈值以下,将所述中间部分中的LL元素从所述第二存储器设备移动到所述第一存储器设备中的所述头部。
3.根据权利要求1所述的装置,其中:
所述LL参数包括到LL元素被存储的存储器位置的指针;以及
所述队列控制器被配置为更新对应于从所述中间部分被移动到所述尾部的所述LL元素的指针,以指向所述第一存储器中的位置。
4.根据权利要求1所述的装置,其中所述队列控制器还被配置为:
将新LL元素存储到所述第一存储器设备中的所述尾部,
更新对应于所述尾部的LL参数,以反映所述新LL元素到所述链表的添加,
将所述尾部中的、按照所述顺序在所述新LL元素之前的LL元素从所述第一存储器设备移动到所述第二存储器设备中的所述中间部分,以及
更新对应于从所述尾部被移动到所述中间部分的所述LL元素的LL参数,以指示从所述尾部被移动到所述中间部分的所述LL元素的存储已经从所述第一存储器设备改变到所述第二存储器设备。
5.根据权利要求4所述的装置,其中所述队列控制器还被配置为:
响应于i)所述尾部中的LL元素的数目满足第一阈值,以及ii)所述LL中的LL元素的数目满足第二阈值,将按照所述顺序在所述新LL元素之前的所述尾部中的LL元素从所述第一存储设备移动到所述第二存储设备中的所述中间部分。
6.根据权利要求1所述的装置,其中:
所述LL参数包括到LL元素被存储的存储器位置的指针;以及
所述队列控制器被配置为更新对应于从所述尾部被移动到所述中间部分的所述LL元素的一个或多个指针,以指向所述第二存储器中的一个或多个位置。
7.根据权利要求1所述的装置,其中所述队列控制器还被配置为:
更新对应于所述头部的LL参数,以结合根据所述顺序从所述第一存储器设备中取回所述头部中的LL元素,来反映从所述链表移除所述LL元素。
8.一种方法,包括:
在第一存储器设备中存储:
(i)先进先出(FIFO)队列的头部,所述FIFO队列被结构化为链表(LL)元素的LL,所述LL元素按照所述LL元素被添加到所述FIFO队列的顺序被布置,所述头部包括第一多个LL元素,所述第一多个LL元素被布置为按照所述LL元素被添加到所述FIFO队列的顺序从所述FIFO队列中取回,以及
(ii)所述FIFO队列的尾部,所述尾部包括第二多个LL元素,所述第二多个LL元素被布置为对应于所述第二多个LL元素被添加到所述FIFO队列的顺序;
在与所述第一存储器分离的第二存储器设备中存储所述FIFO队列的中间部分,所述中间部分包括按照所述顺序在所述头部之后并且按照所述顺序在所述尾部之前的第三多个LL元素;
根据所述顺序从所述第一存储器设备取回所述头部中的LL元素;
利用队列控制器,在所述头部变空之前,将所述中间部分中的LL元素从所述第二存储设备移动到所述第一存储设备中的所述头部;以及
利用所述队列控制器,更新对应于所移动的所述LL元素的LL参数,以指示所移动的所述LL元素的存储从所述第二存储器设备改变到所述第一存储器设备。
9.根据权利要求8所述的方法,其中将所述中间部分中的LL元素从所述第二存储器设备移动到所述第一存储器设备中的所述头部是响应于在所述队列控制器处确定所述头部中的LL元素的数目下降到阈值以下。
10.根据权利要求8所述的方法,其中:
所述LL参数包括到LL元素被存储的存储器位置的指针;以及
所述方法还包括利用所述队列控制器来更新对应于从所述中间部分被移动到所述尾部的所述LL元素的指针,以指向所述第一存储器中的位置。
11.根据权利要求8所述的方法,还包括:
将新LL元素存储到所述第一存储器设备中的所述尾部;
利用所述队列控制器更新对应于所述尾部的LL参数,以反映所述新LL元素到所述链表的添加;
利用所述队列控制器,将所述尾部中的、按照所述顺序在所述新LL元素之前的LL元素从所述第一存储器设备移动到所述第二存储器设备中的所述中间部分;以及
利用所述队列控制器,更新对应于从所述尾部被移动到所述中间部分的所述LL元素的LL参数,以指示从所述尾部被移动到所述中间部分的所述LL元素的存储已从所述第一存储器设备改变到所述第二存储器设备。
12.根据权利要求11所述的方法,还包括:
响应于i)所述尾部中的LL元素的数目满足第一阈值,以及ii)所述LL中的LL元素的数目满足第二阈值,利用所述队列控制器,将所述尾部中的、按照所述顺序在所述新LL元素之前的LL元素从所述第一存储设备移动到所述第二存储设备中的所述中间部分。
13.根据权利要求8所述的方法,其中:
所述LL参数包括到LL元素被存储的存储器位置的指针;以及
所述方法还包括:利用所述队列控制器,更新对应于从所述尾部被移动到所述中间部分的所述LL元素的一个或多个指针,以指向所述第二存储器中的一个或多个位置。
14.一种装置包括:
多个网络接口,被配置为耦合到多个网络链路;
分组处理器,被配置为处理经由所述多个网络接口接收的分组,并且确定所接收的分组要被转发到的网络接口;
第一存储器设备,被配置为存储:
(i)先进先出(FIFO)发送队列的头部,所述FIFO发送队列对应于所述网络接口中的至少一个网络接口,所述FIFO发送队列用于存储对应于要经由所述至少一个网络接口发送的分组的分组描述符,所述FIFO发送队列被结构化为链表(LL)元素的LL,所述LL元素按照所述LL元素被添加到所述FIFO队列的顺序被布置,所述头部包括第一多个LL元素,所述第一多个LL元素被布置为按照所述LL元素被添加到所述FIFO队列的顺序从所述FIFO队列中取回,以及
(ii)所述FIFO队列的尾部,所述尾部包括第二多个LL元素,所述第二多个LL元素被布置为对应于所述第二多个LL元素被添加到所述FIFO队列的顺序;
第二存储器设备,与所述第一存储器分离,所述第二存储器被配置为存储所述FIFO队列的中间部分,所述中间部分包括按照所述顺序在所述头部之后并且按照所述顺序在所述尾部之前的第三多个LL元素;以及
队列控制器,被配置为:
结合新分组描述符被添加到所述发送队列,根据所述顺序,将所述尾部中的新LL元素存储到所述第一存储器设备,
结合经由所述至少一个网络接口传输对应于所述发送队列中的分组描述符的分组,根据所述顺序,从所述第一存储器设备取回所述头部中的LL元素,
在所述头部变空之前,将所述中间部分中的LL元素从所述第二存储器设备移动到所述第一存储器设备中的所述头部,以及
更新对应于所移动的所述LL元素的LL参数,以指示所移动的所述LL元素的存储从所述第二存储器设备改变到所述第一存储器设备。
15.根据权利要求14所述的装置,其中所述队列控制器还被配置为:
响应于所述头部中的LL元素的数目下降到阈值以下,将所述中间部分中的LL元素从所述第二存储器设备移动到所述第一存储器设备中的所述头部。
16.根据权利要求14所述的装置,其中所述队列控制器还被配置为:
将所述尾部中的、按所述顺序在所述新LL元素之前的LL元素从所述第一存储器设备移动到所述第二存储器设备中的所述中间部分,以及
更新对应于从所述尾部被移动到所述中间部分的所述LL元素的LL参数,以指示从所述尾部被移动到所述中间部分的所述LL元素的存储已经从所述第一存储器设备改变到所述第二存储器设备。
17.根据权利要求14所述的装置,还包括:
接收处理器,被耦合到所述第二存储器设备,所述接收器处理器被配置为:i)将对应于经由一个或多个网络接口接收的分组的分组数据存储到所述第二存储器设备,以及ii)生成针对经由网络接口接收的分组的分组描述符,其中所述分组数据至少包括分组的有效载荷;以及
发送处理器,被耦合到所述第二存储器设备,所述发送处理器被配置为i)接收由所述队列控制器从所述发送队列中移除的分组描述符,ii)从所述第二存储器设备取回对应于所接收的所述分组描述符的分组数据,以及iii)将分组提供给所述至少一个网络接口以用于传输。
18.根据权利要求17所述的装置,其中:
所述第一存储器设备包括第一读/写接口;
所述第二存储器设备包括与所述第一读/写接口分离的第二读/写接口;
所述接收处理器被配置为使用所述第二读/写接口将对应于经由一个或多个网络接口接收的分组的分组数据存储到所述第二存储设备;
所述发送处理器被配置为使用所述第二读/写接口从所述第二存储器设备取回分组数据;以及
所述队列控制器被配置为:
使用所述第一读/写接口将所述尾部中的新LL元素存储到所述第一存储器设备,
使用所述第一读/写接口从所述第一存储器设备取回所述头部中的LL元素,
使用所述第二读/写接口从所述第二存储器设备取回所述中间部分中的LL元素,以及使用所述第一读/写接口将从所述中间部分取回的所述LL元素存储到所述第一存储器设备中的所述头部。
19.一种方法,包括:
经由网络设备的多个网络接口接收分组;
在所述网络设备处确定接收到的分组要被转发到的网络接口;
在第一存储器设备中存储:
(i)先进先出(FIFO)发送队列的头部,所述FIFO发送队列对应于所述网络接口中的至少一个网络接口,所述FIFO发送队列用于存储对应于经由所述至少一个网络接口要被发送的分组的分组描述符,所述FIFO发送队列被结构化为链表(LL)元素的LL,所述LL元素按照所述LL元素被添加到所述FIFO队列的顺序被布置,所述头部包括第一多个LL元素,所述第一多个LL元素被布置为按照所述LL元素被添加到所述FIFO队列的顺序从所述FIFO队列中取回,以及
(ii)所述FIFO队列的尾部,所述尾部包括第二多个LL元素,所述第二多个LL元素被布置为对应于所述第二多个LL元素被添加到所述FIFO队列的顺序;
在与所述第一存储器分离的第二存储器设备中存储所述FIFO队列的中间部分,所述中间部分包括按照所述顺序在所述头部之后并且按照所述顺序在所述尾部之前的第三多个LL元素;以及
结合经由所述至少一个网络接口传输对应于所述发送队列中的分组描述符的分组,根据所述顺序,从所述第一存储器设备中取回所述头部中的LL元素;
利用队列控制器,在所述头部变空之前,将所述中间部分中的LL元素从所述第二存储设备移动到所述第一存储设备中的所述头部;以及
利用所述队列控制器,更新对应于所移动的所述LL元素的LL参数,以指示所移动的所述LL元素的存储从所述第二存储器设备改变到所述第一存储器设备。
20.根据权利要求19所述的方法,其中将所述中间部分中的LL元素从所述第二存储器设备移动到所述第一存储器设备中的所述头部是响应于在所述队列控制器处确定所述头部中的LL元素的数目下降到阈值以下。
21.根据权利要求19所述的方法,还包括:
利用所述队列控制器,将所述尾部中的、按照所述顺序在所述新LL元素之前的LL元素从所述第一存储器设备移动到所述第二存储器设备中的所述中间部分;以及
利用所述队列控制器,更新对应于从所述尾部被移动到所述中间部分的所述LL元素的LL参数,以指示从所述尾部被移动到所述中间部分的所述LL元素的存储已经从所述第一存储器设备改变到所述第二存储器设备。
22.根据权利要求19所述的方法,还包括:
将对应于经由一个或多个网络接口接收的分组的分组数据存储到所述第二存储器设备,其中所述分组数据至少包括分组的有效载荷;
在所述网络设备处生成针对经由网络接口接收的分组的分组描述符;
从所述第二存储器设备取回对应于从所述发送队列取回的分组描述符的分组数据;以及
将分组提供给所述至少一个网络接口以用于传输。
23.根据权利要求22所述的方法,其中:
所述第一存储器设备包括第一读/写接口;
所述第二存储器设备包括与所述第一读/写接口分离的第二读/写接口;
使用所述第二读/写接口将对应于经由一个或多个网络接口接收的分组的分组数据存储到所述第二存储器设备;
从所述第二存储器设备取回分组数据包括使用所述第二读/写接口;
将所述尾部中的新LL元素存储到所述第一存储器设备包括使用所述第一读/写接口;
从所述第一存储器设备取回所述头部中的LL元素包括使用所述第一读/写接口;
从所述第二存储器设备取回所述中间部分中的LL元素包括使用所述第二读/写接口;以及
将从所述中间部分取回的所述LL元素存储到所述第一存储器设备中的所述头部包括使用所述第一读/写接口。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662344604P | 2016-06-02 | 2016-06-02 | |
US62/344,604 | 2016-06-02 | ||
PCT/IB2017/053223 WO2017208182A1 (en) | 2016-06-02 | 2017-06-01 | Packet descriptor storage in packet memory with cache |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109565455A true CN109565455A (zh) | 2019-04-02 |
CN109565455B CN109565455B (zh) | 2023-09-26 |
Family
ID=60479321
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780048619.1A Active CN109565455B (zh) | 2016-06-02 | 2017-06-01 | 具有高速缓存的分组存储器中的分组描述符存储 |
Country Status (3)
Country | Link |
---|---|
US (2) | US10200313B2 (zh) |
CN (1) | CN109565455B (zh) |
WO (1) | WO2017208182A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115934004A (zh) * | 2023-03-09 | 2023-04-07 | 摩尔线程智能科技(北京)有限责任公司 | 链表形式的队列管理电路、方法、存储装置及电子设备 |
CN117971746A (zh) * | 2024-03-28 | 2024-05-03 | 深圳鲲云信息科技有限公司 | 用于控制直接内存访问控制器的方法及计算设备 |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10701002B1 (en) | 2016-12-07 | 2020-06-30 | Marvell International Ltd. | System and method for memory deallocation |
US10523576B1 (en) | 2018-05-02 | 2019-12-31 | Innovium, Inc. | High-performance garbage collection in a network device |
US10999223B1 (en) * | 2019-04-08 | 2021-05-04 | Innovium, Inc. | Instantaneous garbage collection of network data units |
TWI714055B (zh) * | 2019-04-16 | 2020-12-21 | 瑞昱半導體股份有限公司 | 資料傳輸方法及資料傳輸系統 |
US11797333B2 (en) * | 2019-12-11 | 2023-10-24 | Intel Corporation | Efficient receive interrupt signaling |
WO2021186399A1 (en) | 2020-03-18 | 2021-09-23 | Marvell Israel (M.I.S.L) Ltd. | Packet buffer spill-over in network devices |
US11621923B2 (en) | 2020-04-10 | 2023-04-04 | Marvell Asia Pte Ltd | Queueing system with head-of-line block avoidance |
US11455575B1 (en) | 2020-04-30 | 2022-09-27 | Marvell Asia Pte Ltd | System and methods for mesh architecture for high bandwidth multicast and broadcast network |
CN117795930A (zh) * | 2021-07-08 | 2024-03-29 | 马维尔以色列(M.I.S.L.)有限公司 | 利用数据包分组的网络设备 |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6249793B1 (en) * | 1999-06-10 | 2001-06-19 | Sun Microsystems, Inc. | Mostly concurrent compaction in a garbage collection system |
CN1677952A (zh) * | 2004-03-30 | 2005-10-05 | 武汉烽火网络有限责任公司 | 线速分组并行转发方法和装置 |
US20050240745A1 (en) * | 2003-12-18 | 2005-10-27 | Sundar Iyer | High speed memory control and I/O processor system |
CN101149714A (zh) * | 2006-09-18 | 2008-03-26 | 国际商业机器公司 | 用于执行直接存储器存取的方法和系统 |
CN101176076A (zh) * | 2005-05-13 | 2008-05-07 | 英特尔公司 | 用于直接高速缓存访问的直接存储器存取重新排序 |
CN101895460A (zh) * | 2009-05-20 | 2010-11-24 | 智微科技股份有限公司 | 网络分组接收管理方法与具有网络分组接收管理功能的网络控制电路 |
CN102195874A (zh) * | 2010-03-02 | 2011-09-21 | 马维尔以色列(M.I.S.L.)有限公司 | 数据分组的预提取 |
US20120294315A1 (en) * | 2010-01-18 | 2012-11-22 | Xelerated Newco Ab | Packet buffer comprising a data section and a data description section |
CN102971997A (zh) * | 2010-01-18 | 2013-03-13 | 马维尔国际有限公司 | 包括数据分段和数据描述分段的分组缓冲器 |
CN103222242A (zh) * | 2010-11-18 | 2013-07-24 | 思科技术公司 | 用于避免线端阻塞的动态流重新分布 |
US20140307740A1 (en) * | 2003-12-19 | 2014-10-16 | Net Navigation Systems, Llc | Traffic Manager with Programmable Queuing |
CN104809077A (zh) * | 2014-01-29 | 2015-07-29 | 马维尔以色列(M.I.S.L.)有限公司 | 经由队列与缓冲器管理器对接 |
CN104821887A (zh) * | 2014-01-30 | 2015-08-05 | 马维尔以色列(M.I.S.L.)有限公司 | 通过使用具有不同延迟的存储器来进行分组处理的设备和方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7089326B2 (en) | 1997-10-14 | 2006-08-08 | Alacritech, Inc. | Fast-path processing for receiving data on TCP connection offload devices |
US7236489B1 (en) * | 2000-04-27 | 2007-06-26 | Mosaid Technologies, Inc. | Port packet queuing |
US8578380B1 (en) | 2003-12-17 | 2013-11-05 | Vmware, Inc. | Program concurrency control using condition variables |
US7606236B2 (en) * | 2004-05-21 | 2009-10-20 | Intel Corporation | Forwarding information base lookup method |
US9112708B1 (en) | 2012-01-27 | 2015-08-18 | Marvell Israel (M.I.S.L) Ltd. | Processing multicast packets in a network device |
WO2014096964A1 (en) | 2012-12-17 | 2014-06-26 | Marvell Israel (M.I.S.L. ) Ltd. | Maintaining packet order in a parallel processing network device |
US9306876B1 (en) * | 2013-04-01 | 2016-04-05 | Marvell Israel (M.I.S.L) Ltd. | Multibank egress queuing system in a network device |
-
2017
- 2017-06-01 WO PCT/IB2017/053223 patent/WO2017208182A1/en active Application Filing
- 2017-06-01 CN CN201780048619.1A patent/CN109565455B/zh active Active
- 2017-06-01 US US15/610,909 patent/US10200313B2/en active Active
-
2019
- 2019-02-04 US US16/266,968 patent/US20190173809A1/en not_active Abandoned
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6249793B1 (en) * | 1999-06-10 | 2001-06-19 | Sun Microsystems, Inc. | Mostly concurrent compaction in a garbage collection system |
US20050240745A1 (en) * | 2003-12-18 | 2005-10-27 | Sundar Iyer | High speed memory control and I/O processor system |
US20140307740A1 (en) * | 2003-12-19 | 2014-10-16 | Net Navigation Systems, Llc | Traffic Manager with Programmable Queuing |
CN1677952A (zh) * | 2004-03-30 | 2005-10-05 | 武汉烽火网络有限责任公司 | 线速分组并行转发方法和装置 |
CN101176076A (zh) * | 2005-05-13 | 2008-05-07 | 英特尔公司 | 用于直接高速缓存访问的直接存储器存取重新排序 |
CN101149714A (zh) * | 2006-09-18 | 2008-03-26 | 国际商业机器公司 | 用于执行直接存储器存取的方法和系统 |
CN101895460A (zh) * | 2009-05-20 | 2010-11-24 | 智微科技股份有限公司 | 网络分组接收管理方法与具有网络分组接收管理功能的网络控制电路 |
US20120294315A1 (en) * | 2010-01-18 | 2012-11-22 | Xelerated Newco Ab | Packet buffer comprising a data section and a data description section |
CN102971997A (zh) * | 2010-01-18 | 2013-03-13 | 马维尔国际有限公司 | 包括数据分段和数据描述分段的分组缓冲器 |
CN102195874A (zh) * | 2010-03-02 | 2011-09-21 | 马维尔以色列(M.I.S.L.)有限公司 | 数据分组的预提取 |
CN103222242A (zh) * | 2010-11-18 | 2013-07-24 | 思科技术公司 | 用于避免线端阻塞的动态流重新分布 |
CN104809077A (zh) * | 2014-01-29 | 2015-07-29 | 马维尔以色列(M.I.S.L.)有限公司 | 经由队列与缓冲器管理器对接 |
CN104821887A (zh) * | 2014-01-30 | 2015-08-05 | 马维尔以色列(M.I.S.L.)有限公司 | 通过使用具有不同延迟的存储器来进行分组处理的设备和方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115934004A (zh) * | 2023-03-09 | 2023-04-07 | 摩尔线程智能科技(北京)有限责任公司 | 链表形式的队列管理电路、方法、存储装置及电子设备 |
CN117971746A (zh) * | 2024-03-28 | 2024-05-03 | 深圳鲲云信息科技有限公司 | 用于控制直接内存访问控制器的方法及计算设备 |
Also Published As
Publication number | Publication date |
---|---|
US20170353403A1 (en) | 2017-12-07 |
US10200313B2 (en) | 2019-02-05 |
CN109565455B (zh) | 2023-09-26 |
US20190173809A1 (en) | 2019-06-06 |
WO2017208182A1 (en) | 2017-12-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109565455A (zh) | 具有高速缓存的分组存储器中的分组描述符存储 | |
USRE45097E1 (en) | High speed memory and input/output processor subsystem for efficiently allocating and using high-speed memory and slower-speed memory | |
US7773630B2 (en) | High performance memory based communications interface | |
CN103946803B (zh) | 具有高效工作排队的处理器 | |
US20090067431A1 (en) | High performance network adapter (hpna) | |
US8077727B2 (en) | Processing of partial frames and partial superframes | |
US20040151170A1 (en) | Management of received data within host device using linked lists | |
CN112084136B (zh) | 队列缓存管理方法、系统、存储介质、计算机设备及应用 | |
US9769092B2 (en) | Packet buffer comprising a data section and a data description section | |
US7433364B2 (en) | Method for optimizing queuing performance | |
TWI526927B (zh) | 資料緩衝器記憶體、資料緩衝器記憶體系統及其資料儲存方法 | |
CN112953967A (zh) | 网络协议卸载装置和数据传输系统 | |
US8990422B1 (en) | TCP segmentation offload (TSO) using a hybrid approach of manipulating memory pointers and actual packet data | |
CN105099957A (zh) | 一种基于软件查表的数据包转发方法 | |
US7577133B1 (en) | Scalable central memory switching fabric | |
CN110519180A (zh) | 网卡虚拟化队列调度方法及系统 | |
US7944930B2 (en) | Memory buffering with fast packet information access for a network device | |
US9736069B1 (en) | Method for storing and retrieving packets in high bandwidth and low latency packet processing devices | |
WO2003088047A1 (en) | System and method for memory management within a network processor architecture | |
US7603539B2 (en) | Systems and methods for multi-frame control blocks | |
US10069767B1 (en) | Method of dynamically allocating buffers for packet data received onto a networking device | |
US11520718B2 (en) | Managing hazards in a memory controller | |
US20230013473A1 (en) | Network device that utilizes packet grouping | |
US20230010161A1 (en) | Expandable Queue | |
CN117834570A (zh) | 传输系统的数据包处理方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |