CN108536543B - 具有基于跨步的数据分散的接收队列 - Google Patents
具有基于跨步的数据分散的接收队列 Download PDFInfo
- Publication number
- CN108536543B CN108536543B CN201810217976.2A CN201810217976A CN108536543B CN 108536543 B CN108536543 B CN 108536543B CN 201810217976 A CN201810217976 A CN 201810217976A CN 108536543 B CN108536543 B CN 108536543B
- Authority
- CN
- China
- Prior art keywords
- data
- buffer
- packet
- strides
- memory
- 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.)
- Active
Links
- 239000000872 buffer Substances 0.000 claims abstract description 160
- 238000000034 method Methods 0.000 claims abstract description 67
- 238000004891 communication Methods 0.000 claims abstract description 10
- 238000012545 processing Methods 0.000 claims description 42
- 230000004044 response Effects 0.000 claims description 15
- 230000005540 biological transmission Effects 0.000 claims description 8
- 238000012544 monitoring process Methods 0.000 claims description 2
- 238000004513 sizing Methods 0.000 claims description 2
- 238000013459 approach Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 239000004744 fabric Substances 0.000 description 4
- 239000000945 filler Substances 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000001152 differential interference contrast microscopy Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 239000003999 initiator Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4004—Coupling between buses
- G06F13/4027—Coupling between buses using bus bridges
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Information Transfer Systems (AREA)
- Computer And Data Communications (AREA)
Abstract
一种用于通信的方法包括在队列中公布工作项序列,所述工作项序列指向存储器中包括共同、固定大小的多个跨步的缓冲区。一种NIC从网络接收包含要向所述存储器推送的数据的数据分组。所述NIC从所述队列读取指向第一缓冲区的第一工作项,并且将来自第一分组的数据写入到所述第一缓冲区中的第一数目个跨步,而不消耗所述第一缓冲区中的所有跨步。所述NIC继而将来自第二分组的数据的至少一部分写入到第一缓冲区中的剩余跨步。当所述第一缓冲区中的所有跨步已被消耗时,所述NIC从所述队列读取指向第二缓冲区的第二工作项,并且将另外数据写入到所述第二缓冲区中的跨步。
Description
技术领域
本发明总体上涉及数据通信,并且具体涉及用于在计算设备与分组数据网络之间接合的设备。
背景技术
InfiniBandTM(IB)是广泛用于高性能计算的交换结构通信架构。其已由InfiniBand行业协会标准化。计算设备(主机处理器和外围设备)经由网络接口控制器(network interface controller,NIC)连接到IB结构,用IB用语讲该NIC称为通道适配器。主机处理器(或主机)使用主机通道适配器(host channel adapter,HCA),而外围设备使用目标通道适配器(target channel adapter,TCA)。
通过操纵由发送工作队列和接收工作队列组成的传输服务实例(称为“队列对”(queue pair,QP)),运行于主机处理器上的诸如软件应用进程等客户端进程(下文称为客户端)与IB结构的传输层进行通信。为了使用HCA通过网络发送和接收消息,客户端发起工作请求(work request,WR),该WR使得被称为工作队列元素(work queue element,WQE)的工作项被放置到适当的工作队列上。一般情况下,每个WR具有与之相关联的数据缓冲区,用于保存在执行WQE的过程中所要发送或接收的数据。HCA执行WQE,并且从而与链路另一端处的通道适配器的对应的QP进行通信。
IB通道适配器实施各种服务类型和传输操作,包括远程直接存储器存取(remotedirect memory access,RDMA)读取操作和写入操作,以及发送操作。RDMA写入请求和读取请求全都携带由通道适配器(称为请求者)所发送的数据,并使得另一通道适配器(响应者)将该数据写入到其自己链路端处的存储器地址。RDMA写入请求指定要将数据写入到的远程响应者的存储器中的地址,而发送请求依赖于响应者来确定请求目的地处的存储器位置。这种类型的发送操作有时被称为“推送”操作,原因在于数据传送的发起者向远程QP推送数据。
当接收寻址到某QP的发送请求时,目的地节点处的通道适配器将请求者所发送的数据放置到该QP的下一可用接收缓冲区中。为了指定要针对这样的传入发送请求而使用的接收缓冲区,主机计算设备上的客户端生成接收WQE,并将其放置在适当的QP的接收队列中。每次接收到有效的发送请求,目的地通道适配器从目的地QP的接收队列取出下一WQE,并将所接收到的数据放置在该WQE中所指定的存储器位置。因此,每个有效的传入发送请求产生由响应者进行的接收队列操作。
公开内容通过引用并入于此的美国专利7,263,103描述了一种用于网络通信的方法,其中在通过网络进行通信中所使用的多个传输服务实例之间共享描述器(WQE)池。所述池中的每个描述器包括分散列表,从而指示出本地存储器中可用的缓冲区。当在传输服务实例中之一上通过网络接收到包含要向本地存储器推送的数据的消息时,从池读取描述器中之一。将所述消息中包含的数据写入到该描述器中所包括的分散列表指示出的缓冲区。
公开内容通过引用并入于此的美国专利9,143,467描述了一种具有循环接收缓冲区的NIC。提供第一索引和第二索引来相应地指向集合中NIC所要进行写入的第一缓冲区以及该集合中要由运行于主机设备上的客户端进程从中读取的第二缓冲区。响应于接收到消息,将数据写入到第一索引指向的第一缓冲区,并且循环推进第一索引通过所述集合。当第二缓冲区中的数据已由客户端进程读取时,循环推进第二索引通过所述集合。在一些实施方式中,缓冲区全都是统一的大小,例如一个字节。
发明内容
下文中描述的本发明的实施方式提供了用于处理数据“推送”操作的高效方法和实施这样的方法的装置。
因此,根据本发明实施方式提供了一种用于通信的方法,该方法包括在队列中公布工作项序列,每个工作项指向存储器中包括共同、固定大小的多个跨步的至少一个缓冲区。在主机计算机的网络接口控制器(NIC)中从网络接收数据分组,所述数据分组至少包括第一分组和第二分组,所述第一分组和所述第二分组相应地至少包含要向所述存储器推送的第一数据和第二数据。从所述队列读取指向所述存储器中的第一缓冲区的第一工作项。将所述第一数据从所述NIC写入到所述第一缓冲区中足够用于包含所述第一数据的第一数目个跨步,而不消耗所述第一缓冲区中的所有跨步。将所述第二数据的至少第一部分从所述NIC写入到所述第一缓冲区中的剩余数目的跨步。当所述第一缓冲区中的所有跨步都已被消耗时,从所述队列读取指向所述存储器中的第二缓冲区的第二工作项,以及将所述数据分组中的另外数据从所述NIC写入到所述第二缓冲区中的另外数目的跨步。
在公开的实施方式中,写入所述另外数据包括将所述第二数据的第二部分写入到所述第二缓冲区。
通常,所述NIC在将来自所述分组中的每一个的数据写入到所述存储器时消耗整数个跨步。
在一个实施方式中,所述分组包含相应的序列号,并且其中所述NIC响应于所述相应的序列号来选择要将来自所述分组中的每一个的数据写入到的跨步。
附加地或备选地,公布所述工作项序列包括将所述跨步的大小设定成对应于在给定的传输服务实例上接收的分组的大小。通常,所述分组包括报头和净荷,并且在一个实施方式中,每个跨步包括第一部分和第二部分,所述第一部分映射到所述存储器的第一区域以接收给定分组的报头,而所述第二部分映射到所述存储器的不同的第二区域以接收所述给定分组的净荷。
在一些实施方式中,所述第一分组和所述第二分组属于由一个或多个对等设备通过所述网络传输到所述主机计算机的不同的第一消息和第二消息。所述第一消息和所述第二消息在不同的第一传输服务实例和第二传输服务实例上传输,所述第一传输服务实例和所述第二传输服务实例共享所述工作项的所述队列。附加地或备选地,所述第一消息和所述第二消息中的每一个以相应的最后一个分组结束,所述方法包括仅在将来自所述第一消息和所述第二消息中的每一个内的相应的最后一个分组的数据写入到所述存储器之后从所述NIC向所述存储器写入相应的完成报告。通常,所述完成报告包含所述消息中的每一个内的数据所写入到的跨步的指针。
在其他实施方式中,所述方法包括针对所述第一消息预留所述第一缓冲区中的跨步的连续分配,其中写入所述第一数据包括向所述连续分配内的第一数目个跨步写入,并且其中写入所述第二数据的至少第一部分包括向所述连续分配之后的剩余数目的跨步写入。在一个这样的实施方式中,所述方法包括当在消耗了所述连续分配后,或者在当所述连续分配在预留所述连续分配之后的预定超时期满的情况下未被完全消耗时在所述预定超时期满的时候,从所述NIC向所述存储器写入完成报告。
在另外实施方式中,所述方法包括针对所述第一消息预留所述第一缓冲区中的跨步的连续分配,其中写入所述第一数据包括向所述连续分配内的第一数目个跨步写入,以及即使在所述连续分配未被完全消耗时也从所述NIC向所述存储器写入填充物完成报告,以便释放所述第一缓冲区并使得后续消息被写入到所述第二缓冲区。
在一些实施方式中,所述方法包括响应于从所述网络接收的业务,在所述NIC中自动学习向所述主机计算机传输的消息的特征大小,以及针对所述第一消息预留所述第一缓冲区中的跨步的连续分配,同时响应于所述消息的所述特征大小来决定要将多少个跨步包括在所述连续分配中。在一个这样的实施方式中,自动学习所述特征大小包括估计要包括在大型接收卸载(LRO)操作中的连续分组的数目。附加地或备选地,当所述LRO操作应用于由所述NIC在第一流中接收的分组时,所述第一流至少与不同于所述第一流的第二流共享接收队列,所述方法可以包括:当在所述第一流中的分组消耗了所述连续分配中的所有跨步之前接收到来自所述第二流的分组时,发出关于已被所述第一流中的分组消耗的跨步的完成报告;以及将所述第二流中的分组写入到所述连续分配中剩余的一个或多个跨步。
在一些实施方式中,所述方法包括在将来自所述数据分组中的每一个的数据写入到所述存储器之后从所述NIC向所述存储器写入相应的完成报告。通常,所述完成报告包含关于与所述数据分组有关的传输状态信息的元数据。在一个实施方式中,所述元数据指示出由所述NIC执行的大型接收卸载(LRO)操作的状态。
在其他实施方式中,所述方法包括在将所述数据写入到属于每个工作项的最末跨步之后从所述NIC向所述存储器写入相应的完成报告。在这种情况下,所述完成报告可以包含向所述工作项所指向的所述至少一个缓冲区写入的数据分组的细节。
在又一实施方式中,所述方法包括当所述第一缓冲区中剩余的跨步的数目小于预定最小值时,在将所述数据写入到给定的跨步之后从所述NIC向所述存储器写入相应的完成报告。
附加地或备选地,公布所述工作项系列包括响应于向所述存储器写入的所述完成报告而监控所述工作项的消耗,以及当所述队列的剩余长度下降到低于指定的限度时向所述队列公布一个或多个另外的工作项。
根据本发明实施方式还提供了一种计算装置,该计算设备包括存储器和主机处理器,所述主机处理器被配置用于在队列中公布工作项序列,每个工作项指向所述存储器中的至少一个缓冲区,每个缓冲区包括共同、固定大小的多个跨步。网络接口控制器(NIC)被配置用于:从网络接收数据分组,所述数据分组至少包括第一分组和第二分组,所述第一分组和所述第二分组相应地至少包含要向所述存储器推送的第一数据和第二数据;从所述队列读取指向所述存储器中的第一缓冲区的第一工作项;将所述第一数据写入到所述第一缓冲区中足够用于包含所述第一数据的第一数目个跨步,而不消耗所述第一缓冲区中的所有跨步;将所述第二数据的至少第一部分从所述NIC写入到所述第一缓冲区中的剩余数目的跨步;以及当所述第一缓冲区中的所有跨步都已被消耗时,从所述队列读取指向所述存储器中的第二缓冲区的第二工作项,以及将所述数据分组中的另外数据从所述NIC写入到所述第二缓冲区中的另外数目的跨步。
根据本发明实施方式另外提供了一种网络接口控制器(NIC),所述NIC包括主机接口,所述主机接口被配置成经由主机总线连接到主机处理器,所述主机处理器被配置用于在队列中公布工作项序列以供由所述NIC访问,每个工作项指向存储器中的至少一个缓冲区,每个缓冲区包括共同、固定大小的多个跨步。网络接口被配置用于从网络接收数据分组,所述数据分组至少包括第一分组和第二分组,所述第一分组和所述第二分组相应地至少包含要向所述存储器推送的第一数据和第二数据。分组处理电路被配置用于:从所述队列读取指向所述存储器中的第一缓冲区的第一工作项;经由所述主机接口将所述第一数据写入到所述第一缓冲区中足够用于包含所述第一数据的第一数目个跨步,而不消耗所述第一缓冲区中的所有跨步;经由所述主机接口将所述第二数据的至少第一部分写入到所述第一缓冲区中的剩余数目的跨步;以及当所述第一缓冲区中的所有跨步都已被消耗时,从所述队列读取指向所述存储器中的第二缓冲区的第二工作项,以及经由主机接口将所述数据分组中的另外数据写入到所述第二缓冲区中的另外数目的跨步。
结合附图,从本发明实施方式的以下详细描述中将会更全面地理解本发明,在附图中:
附图说明
图1是示意性地图示根据本发明实施方式的数据通信系统的框图;
图2是示意性地图示根据本发明实施方式的存储器中的数据缓冲区的分配的框图;并且
图3是示意性地图示根据本发明实施方式的用于接收数据的方法的流程图。
具体实施方式
向分组网络中的远程节点推送数据——例如,使用发送操作——是许多数据传送操作的有用模型,但其会产生大量的开销:在常规实现方案中,接收主机设备上的客户端进程必须向适当的一个(或多个)接收队列持续公布WQE,并且NIC必须取出这些WQE中之一并使用其所包含的缓冲区信息用于其所处理的每个传入发送分组。接收队列中的WQE可能消耗大量的存储器,并且这些WQE的产生和消耗可能会在对所推送的数据的处理中增添延迟,并且消耗主机CPU的资源。
上述美国专利9,143,467中所述的方法据称会在经由适当配置的NIC从网络接收推送数据的过程中消除对WQE的需要。替代地,这样的方法请求客户端进程预先分配主机存储器中的连续、循环的缓冲区集合,以供由QP用于接收包含要向主机存储器推送的数据的分组。然而,为了避免缓冲区溢出(以及因此造成的频繁分组重传),所分配的缓冲区集合必须足够大以便处理大量突发数据——这在许多网络应用中是常见的。这些缓冲区分配因此可能造成相当大的存储器“占用”,该存储器占用在突发之间的静止期期间可能很大程度上未被使用。
本文所述的本发明实施方式提供了替代的解决方案,该解决方案使得在接收推送数据时能够实现更高效的主机资源利用,从而针对开销均衡存储器占用。在这些实施方式中,公布在接收队列中的工作项(诸如WQE)指向存储器中的相应的缓冲区,并且这些缓冲区中的每一个分成多个跨步(stride)。通常,主机处理器将会在接收队列中公布一系列此类工作项,用于处理包含要向存储器推送的数据的传入分组(诸如IB发送分组)。在下文所描述的实施方式中,假定所讨论的缓冲区位于主机存储器中;但备选地,这些基于跨步的缓冲区中的一些或所有缓冲区可以位于另一存储器中,诸如附接到或包含于NIC中的存储器。
在本说明书的上下文中以及权利要求书中,“跨步”是共同、固定大小的存储器区段,其长度可以小到1字节或者可以是许多字节。例如,可以有利地将跨步的大小设定成对应于给定传输服务实例上的预期分组大小(即,等于或略微大于预期分组大小)。区段在存储器地址空间中可以是连续的,但在一些应用中,非连续存储器区段可能是有利的。例如,为了容纳具有固定的相应大小的报头和净荷的一系列分组,每个跨步可以包括第一部分和第二部分,所述第一部分映射到存储器的一个区域用以接收报头,而所述第二部分映射到另一区域用以接收净荷。
本文所描述类型的基于跨步的接收队列可以有利地在多个传输服务实例(例如,多个QP)之间共享,但备选地,本文所描述的基于跨步的方法可以单独地应用于个别QP。基于跨步的接收队列可以与基本上任何类型的传输实例一起使用,所述任何类型包括可靠传输类型和不可靠传输类型。
当NIC在基于跨步的接收队列上从网络接收包含要向存储器推送的数据的分组时,其从队列读取下一工作项,并将来自分组的数据写入到该工作项所指示出的缓冲区。然而,与常规使用形成对比,数据写入操作并不一定消耗整个缓冲区和对应的工作项。确切地说,NIC仅向包含该数据所需数目的跨步进行写入,其中每个分组消耗整数个跨步(即使分组数据不完全填充所消耗的最后一个跨步)。任何剩余的跨步继而由NIC用于写入来自下一传入分组的数据,即使该下一分组属于与第一分组不同的消息(并且有可能属于不同的传输服务实例)。(在本说明书的上下文中以及权利要求书中,术语“消息”是指通过网络传送的数据的任何逻辑单元,并且可以包括在同一传输服务实例上传输的单个分组或多个分组)。例如,消息可以对应于InfiniBand RDMA或发送事务;或者,其可以包括由NIC在以太网大型接收卸载(large receive offload,LRO)会话中一起处理的分组序列,如下文所述。)因此,在接收来自单个大分组或来自两个或更多个较小分组的序列的数据和将该数据写入到存储器时,可消耗单个工作项及其对应的缓冲区。
NIC一般将会仅当第一缓冲区中的所有跨步都已被消耗时才读取和使用队列中的下一工作项。(备选地,在一些场景中,可以针对不同的接收会话而并行打开和使用多个WQE。)NIC继而将会以类似的方式处理该下一工作项及其对应的缓冲区,以及另外的工作项。如果给定的缓冲区具有数量不足的跨步剩余用于容纳给定分组中的所有数据,则NIC可以将该数据的第一部分写入到该缓冲区中的剩余跨步,并继而将该数据的其余部分写入到下一工作项所指示出的缓冲区。备选地,在接收对于纳入到给定工作项的剩余跨步中过长的分组时,NIC可以发出“填充物完成报告”(下文也称为“虚设CQE”)以便释放分配给该工作项的剩余跨步,并且可以继而将该分组写入到下一工作项所指示出的缓冲区。
主机处理器监控工作项的消耗,例如通过读取和处理由NIC在向存储器写入来自数据分组的数据之后向存储器写入的完成报告来进行监控,并且因此可以跟踪工作项队列的剩余长度。当该长度降至指定限度之下时,主机处理器向队列公布一个或多个另外工作项。因此,仅根据需要来写入工作项和预留对应的存储器缓冲区。这样的方法可以用于将关联于接收队列的存储器占用限制在不大于实际需要的大小,而同时确保缓冲区将会在需要时可用。
这一新颖接收队列模型在许多数据通信场景中可能是有用的,但其对于处理可能既包括小分组又包括大分组并且可能以不可预测的突发为特征的传入数据业务特别有利。基于跨步的缓冲区和工作项使得主机处理器和NIC能够在主机处理器和总线所产生的存储器占用和开销方面高效地处理这样的业务。
为了具体和清楚起见,下文参考附图描述的实施方式具体涉及IB网络并且使用取自IB标准的词汇。然而,本发明的原理类似地可适用于通过诸如以太网和因特网协议(Internet protocol,IP)网络等其他种类的分组网络进行的数据通信。特别地,可以在本领域已知的其他RDMA协议(诸如融合以太网上RDMA(RDMA over Converged Ethernet,RoCE)和因特网广域RDMA协议(Internet Wide Area RDMA Protocol,iWARP))所指定的上下文中,以及在诸如传输控制协议(Transmission Control Protocol,TCP)等其他种类的传输协议的上下文中,加以必要的变更而实现本文所描述的技术。
图1是示意性地图示根据本发明实施方式的数据通信系统20的框图。主机计算机22(也称为主机或主机设备)经由网络30(诸如IB交换结构)与其他主机24通信。如本领域中已知,计算机22包括处理器和主机存储器34(也称为系统存储器),该处理器的形式为中央处理单元(CPU)32,而主机存储器34由合适的总线36连接。诸如IB HCA等NIC 38将计算机22连接到网络30。
NIC 38包括网络接口42和主机接口40,网络接口40耦合到网络30,而主机接口40经由总线36连接到CPU 32和存储器34。耦合于网络接口42与主机接口40之间的分组处理电路44生成用于通过网络30传输的传出分组并处理从网络接收的传入分组,如下文所述。接口40和接口42以及电路44通常包括专用硬件逻辑,其细节在阅读过说明书后对于本领域技术人员将会显而易见。备选地或附加地,电路44的功能中的至少一些功能能够在合适的可编程处理器上以软件实现。
诸如由应用软件生成的进程等运行于CPU 32上的客户端进程(简称为客户端46)借助于NIC 38上的QP与运行在远程主机24上的客户端48通信。通常为每个客户端46指派多个QP,所述QP用于与各个远程主机上的不同客户端进行通信。如前文所述,这些QP中的一些QP可以根据哪个客户端46向WQE的发送队列和接收队列二者公布WQE,而按常规方式进行操作。然而,其他QP具有共享的接收队列,该接收队列包含指向基于跨步的缓冲区的WQE,如上文所定义。
在该后一种布置中,运行于CPU 32上的NIC驱动程序50分配缓冲区,用于接收从对等设备(主机24)上的客户端48向任何参与的QP的IB发送分组52所传递的推送数据。缓冲区分成一定的统一大小的跨步,该大小可由驱动程序设定。NIC 38被告知该QP配置——通常在QP初始化时被告知,并且相应地处理传入发送请求。
图2是示意性地图示根据本发明实施方式的主机存储器34中的数据缓冲区66的分配的框图。向客户端46指派相应的QP 60,QP 60经预先配置以使用在共享接收队列(sharedreceive queue,SRQ)62中排队的接收WQE 64。将QP 60到SRQ 62的指派例如记录在每个QP(图中未示出)的上下文中,其通常由存储器34保存,从而使得NIC 38中的分组处理电路44能够当在这些QP上从网络30接收分组时从SRQ识别和读取WQE 64。
每个WQE 64包括一个或多个分散条目(在图2中称为SE0、SE1等)。每个分散条目指向已在存储器34中预留的对应的缓冲区66的基地址。每个缓冲区66分成整数个预定大小的跨步68。跨步大小例如可以基于QP 60上的传入分组的预期数据大小来选择,使得小分组消耗单个跨步,而较大的分组消耗多个跨步。所有的缓冲区66可以常规地是相同大小并且因此包含相同数目的跨步,或者其可以是不同的大小。
在所图示的示例中,NIC 38在标记为QP1、QP2和QP3的QP 60上接收来自网络30的发送分组70的序列。每个分组70属于相应的消息,该消息是从对等设备(诸如主机24中之一)上的对应客户端48传输的。这些消息在图2中针对每个QP标记为消息1、消息2等。分组70中的一些分组包含用于向存储器34递送的长净荷数据。这样的分组有可能属于多分组消息(图中未示出),并且这些分组的报头通常包含指示出其为相应的消息的第一分组、最后一个分组还是中间分组的字段。其他分组可以包含短净荷数据,或者可以包含不具有要向存储器34分散的数据的命令。
当经由网络接口42接收序列中的第一发送分组70(对应于QP1上的消息1)时,NIC38中的处理电路44经由主机接口42从存储器34读取来自SRQ 62的第一WQE 64,并继而从该WQE读取分散条目SE0。处理电路44从该第一分组提取净荷数据并经由主机接口40将该净荷数据写入到SE0所指示出的缓冲区66,缓冲区66从基地址起始并延伸过足够数目的跨步68以便包含所有数据。每个分组消耗整数个跨步,并且如果分组数据未达到最后一个跨步的末端则用虚设数据填充该跨步。
如果该第一分组未消耗缓冲区66中的所有跨步,则处理电路44向这一相同的第一缓冲区66中的剩余跨步68写入来自下一分组70(QP3上的消息1)的净荷数据,如图2中所示。在图中所示的示例中,第一缓冲区中剩余了足够数目的跨步来容纳来自第二分组的所有数据。备选地,如果剩余的跨步数目不足,则可以将来自第二分组的数据的一部分写入到第一缓冲区中的剩余跨步,而将该分组数据的其余部分写入到下一缓冲区。
当第一缓冲区中的所有跨步都已被消耗时,处理电路44读取下一可用的分散条目,在本例中为来自SRQ 62中的第一WQE 64的SE1,并向SE1所指示出的缓冲区66的跨步写入下一个分组或多个分组。仅当第一WQE所指示出的所有的缓冲区都已耗尽时,处理电路44才读取来自SRQ 62的下一WQE 64。处理电路44使用该WQE中的一个分散条目或多个分散条目来将另外的分组数据写入到下一缓冲区中的适当数目的跨步68,并且只要有要在QP 60上处理的传入分组就以这样的方式继续。
在其已经完成将来自每个分组70的数据写入到适当的缓冲区66之后,处理电路44向存储器34中的完成队列72写入完成报告,诸如完成队列条目(completion queue entry,CQE)74。CQE 74指示出分组所寻址到的QP 60,并且在多分组消息的情况下,指示出分组是消息中的第一分组、中间分组还是最后一个分组。该信息由客户端46读取,客户端46继而能够读取和处理其对应的QP 60上向其发送的数据。
在备选实施方式中,处理电路44可以在决定何时向存储器34写入CQE的过程中应用其他准则。尤其是可以选择用于报告完成的准则,以便减少CPU 32所需处理的完成报告的数目。例如,在一个实施方式中,处理电路44在将来自每个消息的最后一个分组的数据写入到存储器34之后,每一消息仅写入一次CQE 74。在这种情况下,CQE通常包含分散列表,该分散列表包含一个或多个指针,所述指针指示出消息中的分组所写入到的跨步。附加地或备选地,处理电路44例如在向给定缓冲区66中最末跨步68写入数据之后每一分散条目写入一个CQE 74,或者在向属于WQE的最末跨步写入数据之后每一WQE 64写入一个CQE。
在该后一种情况下,CQE 74通常包含另外信息,以使得运行于CPU 32上的进程能够解析和处理已经写入到存储器34的数据。例如,CQE可以包含分散到所讨论的WQE指向的一个缓冲区或多个缓冲区的分组和/或消息的细节,诸如分组或消息与对应的传输服务实例(QP或LRO会话)之间的关联、跨步索引,以及对多分组消息中的每个分组是第一分组、最后一个分组还是中间分组的指示。作为一个示例,关于某一WQE的CQE可以包含以下信息:
●第一分组,QP 0x1,大小=1KB
●唯一分组,QP 0x2,大小=4KB
●中间分组,QP 0x1,大小=1KB
●第一分组,QP 0x3,大小=4KB
●最后分组,QP 0x1,大小=8B
●虚设填充物,大小=64B(由于存在剩余空间)
对于每个分组70,CQE 74指示出该分组所消耗的跨步68的数目。(为此目的,即使不包含净荷数据的命令分组也被视为消耗了单个跨步。)驱动程序50从CQE 74读取该信息,并且因此能够跟踪缓冲区66的消耗。当驱动程序50以这种方式发现来自SRQ 62的若干个WQE 64已被消耗从而使WQE的剩余数目低于一定限度(其可以用软件配置)时,驱动程序分配存储器34中的一个或多个额外的缓冲区66,并向SRQ写入指向这些缓冲区的一个或多个额外的WQE。因此,当程序参数设定正确时,SRQ 62应当总是包含足够数目的WQE 64来处理传入业务,同时保持存储器占用(在所分配的缓冲区66方面)不大于当前业务条件实际所需。
在一些情况下,诸如当在给定缓冲区66中仅剩余少量跨步可用时,处理电路44可以关于这些跨步写入“虚设CQE”,以便使得驱动程序50释放该缓冲区并写入新的WQE。处理电路44继而将会开始向下一缓冲区中的第一跨步写入来自下一分组的数据。当剩余的跨步数目小于某一预定最小值时,例如,当跨步的数目不足以用于下一分组或者由处理电路作出跨步分配时,该方法尤其有用。
附加地或备选地,处理电路44在CQE 74中并入关于与数据分组有关的传输状态信息的元数据。这些元数据例如可以包括关于对应的分组是给定消息中的分组、中间分组还是最后一个分组的指示。所讨论的“消息”例如可以是发送消息,或者其可以是在LRO操作中接收的分组序列。元数据因此使得客户端46和/或驱动程序50能够确定消息何时完成,以及应当从存储器34读取哪些数据作为消息的一部分。例如,当NIC 38向某一OP 60上的流分配针对LRO操作的上下文并且继而将属于该QP上的给定流的数据分组聚集到LRO中时,CQE中的元数据可以指示出LRO的上下文的状态。
在备选实施方式中(图中未示出),处理电路44针对每个消息70,或者至少针对某些消息(例如,某一个或多个QP 60上的消息)预留缓冲区66中的一个或多个缓冲区内的跨步68的连续分配。当接收属于预留的这样的分配所针对的消息的分组时,处理电路44将来自该分组的数据写入到该连续分配内的适当数目的跨步。当属于不同的消息或QP的分组在此期间到达时,处理电路44将来自该后一分组的数据写入到缓冲区中该连续分配之后的剩余数目的跨步。备选地,在这样的情况下,当该新消息对于容纳在当前缓冲区中过大时,处理电路44可以例如通过发出虚设(填充物)CQE来关闭该缓冲区,并且可以继而将来自分组的数据写入到下一缓冲区中最前面的一个或多个跨步。
这种方案对于携带恒定(或大致恒定)大小的消息的QP是有用的,并且还可以适于与以太网和IP网络中的大型接收卸载(LRO)一起使用。在这些情况下,处理电路44可以预留与消息的特征大小或与LRO预留大小相对应的多个跨步的连续分配。由分组处理电路44发起的每个新消息或LRO会话(其在本上下文中被视为一种类型的“消息”)在对应的缓冲区中预留包含一定数目跨步的固定大小的分配,并且每个这样的预留持有用于缓冲区释放的计时器。该计时器起始于预留缓冲区的时候,并终止于所预留的分配满的时候。当连续分配已被消耗时,或者当计时器期满时(当在预定超时期满的时候该连续分配尚未被完全消耗时),电路44发出CQE 74,使得CPU 32将会处理已写入到缓冲区的数据。给定的缓冲区中剩余的未使用跨步可由另一消息或后续会话来使用。多个消息或会话可以并行运行,其中每个消息或会话具有其自己的缓冲区,消息或会话的数目受限于可用缓冲区或队列中WQE的数目。
当预先分配多个跨步以容纳多分组消息中的分组时,处理电路44可以利用所述分配来将消息数据按正确顺序向CPU 32递送,即使当分组是无序地接收的或者是在共享同一SRQ的不同QP上间歇接收的时亦可按正确顺序递送。为此目的,处理电路44不必以分组到达的顺序将分组写入到跨步,而是根据分组报头中的分组序列号来进行写入。以这种方式,处理电路44根据相应的序列号来选择要将来自分组的数据写入到的跨步,从而使数据以正确顺序写入到分配的跨步。
上述预留方案对于减轻对CPU 32的负担也是有用的,原因在于其减少了CPU所需处理的CQE的数目并且使得客户端46能够通过从存储器34读取连续数据区段来访问所接收到的消息。分配大小可以根据在每个QP上向主机计算机22传输的消息的特征大小而在QP60之间改变——并且甚至在共享同一SQR 62的不同QP之间改变。当预先已知该特征消息大小时,可以通过软件,例如通过驱动程序50来针对每个QP固定每一消息的分配大小。备选地或附加地,驱动程序50或处理电路44可以基于从网络30接收的业务而自动学习每个QP的特征消息大小。在任一情况下,处理电路44继而将会基于消息的特征大小来决定要在每个分配中包括多少个跨步,使得每个消息在缓冲区中空间浪费最小的情况下纳入到其所分配数目的跨步中。
作为具体示例,处理电路44可以学习在最优LRO预留中应当包括多少个跨步68。一般而言,给定分组流的最优预留大小通过在来自不同的流的分组进入SRQ 62之前有可能从该给定分组流到达该SRQ的连续分组的数目来确定。(在本上下文中,“流”意指从对等主机24上的给定客户端48传输到NIC 38的分组序列,例如,具有相同的源地址和目的地地址、源端口和目的地端口以及协议的分组序列。)该连续分组的数目例如取决于所讨论的流的突发性以及SRQ 62上的其他流中的业务的速率。在跟踪和学习这些流特性之后,处理电路44可以继而估计有可能在给定突发中到达的连续分组的数目,并且通常将会把LRO预留大小设定成比容纳估计的突发大小所需更大的少量跨步。
通过使用这种方法,所讨论的流上由NIC 38接收的分组突发中的每一个将会消耗对应的LRO预留中的几乎所有跨步。如上文所解释,处理电路44继而可以通过发出虚设(填充物)CQE来释放预留中的任何剩余跨步。备选地,当来自另一流的分组在LRO预留已被消耗之前到达SRQ 62时,处理电路44可以通过发出仅与所作出的预留针对的流实际消耗的跨步有关的CQE来结束该预留,并且可以继而将该预留的其余部分用于其他流。
图3是示意性地图示根据本发明实施方式的用于由主机计算机22接收数据的方法的流程图。在分组接收步骤80,该方法在NIC 38经由网络接口42从网络30接收传入发送(推送数据)分组时开始。在QP检查步骤82,分组处理电路44检查分组的QP的上下文是否指向具有基于跨步的WQE的共享接收队列。如果不是,则在默认处理步骤84,NIC 38可以使用常规WQE、缓冲区和处理步骤来处理分组(这超出了本说明书的范围)。
如果分组的QP属于基于跨步的SRQ,则在WQE检查步骤86,分组处理电路44检查来自该SRQ 62的WQE是否已经打开并且具有可用于写入分组数据的跨步68。如果不是,则在WQE读取步骤88,电路从SRQ 62读取新的WQE 64。(如果在队列中无WQE可用,则NIC 38将会通过网络30向分组的发送者返回否定确认,而该发送者随后将会重新发送该分组。)在任一情况下,电路44继而从下一可用的跨步68(意指在步骤88读取新的WQE的情况中的第一跨步)开始,将来自分组的数据写入到存储器34中的缓冲区66。
当分组处理电路44已经完成向存储器34写入当前分组中的数据时,其在完成步骤92向完成队列72写入CQE 74。(备选地,在其他实施方式中,可以例如针对每个消息或WQE中的每个分散条目发出CQE,如上文所解释。)在CQE读取步骤94,驱动程序50读取CQE 74,并从而跟踪缓冲区66的使用和对应的WQE 64的消耗。驱动程序50还可以在定向到客户端46的相应QP 60的发送操作(包括多分组发送操作)完成时通知客户端46,从而客户端46从缓冲区66读取和处理数据,并继而释放缓冲区以供重复使用。备选地,客户端46可被编程用于直接读取和处理CQE 74,而无需驱动程序的干预。
在队列检查步骤96,驱动程序50定期检查SRQ 62中的剩余WQE 64的数目(或者等同地,可用缓冲区的数目)是否下降到低于预定阈值限度。该限度通常基于期望的存储器占用与参与的QP 60上的预期分组到达速率之间的权衡用软件设定。当剩余WQE的数目下降到低于该限度时,在WQE公布步骤98,驱动程序50预留一个或多个额外的缓冲区66并将对应的WQE 64写入到SRQ 62。在这个阶段,主机计算机22在分组到达步骤100准备好接收另外的发送分组。
应当明白,上述实施方式是以示例的方式引用的,并且本发明并不限于上文所具体示出和描述。确切地,本发明的范围包括上述各个特征的组合和子组合二者,以及本领域技术人员在阅读前文描述后将会想到且未在现有技术中公开的改变和更改。
Claims (35)
1.一种用于通信的方法,包括:
在队列中公布工作项序列,每个工作项指向存储器中包括共同、固定大小的多个跨步的至少一个缓冲区;
在主机计算机的网络接口控制器NIC中从网络接收数据分组,所述数据分组至少包括第一分组和第二分组,所述第一分组和所述第二分组相应地至少包含要向所述存储器推送的第一数据和第二数据;
从所述队列读取指向所述存储器中的第一缓冲区的第一工作项;
将所述第一数据从所述NIC写入到所述第一缓冲区中足够用于包含所述第一数据的第一数目个跨步,而不消耗所述第一缓冲区中的所有跨步;
将所述第二数据的至少第一部分从所述NIC写入到所述第一缓冲区中的剩余数目的跨步;以及
当所述第一缓冲区中的所有跨步都已被消耗时,从所述队列读取指向所述存储器中的第二缓冲区的第二工作项,以及将所述数据分组中的另外数据从所述NIC写入到所述第二缓冲区中的另外数目的跨步。
2.根据权利要求1所述的方法,其中写入所述另外数据包括将所述第二数据的第二部分写入到所述第二缓冲区。
3.根据权利要求1所述的方法,其中所述NIC在将来自所述分组中的每一个的数据写入到所述存储器时消耗整数个跨步。
4.根据权利要求1所述的方法,其中所述分组包含相应的序列号,并且其中所述NIC响应于所述相应的序列号来选择要将来自所述分组中的每一个的数据写入到的跨步。
5.根据权利要求1所述的方法,其中公布所述工作项序列包括将所述跨步的大小设定成对应于在给定的传输服务实例上接收的分组的大小。
6.根据权利要求5所述的方法,其中所述分组包括报头和净荷,并且其中每个跨步包括第一部分和第二部分,所述第一部分映射到所述存储器的第一区域以接收给定分组的报头,而所述第二部分映射到所述存储器的不同的第二区域以接收所述给定分组的净荷。
7.根据权利要求1所述的方法,其中所述第一分组和所述第二分组属于由一个或多个对等设备通过所述网络传输到所述主机计算机的不同的第一消息和第二消息。
8.根据权利要求7所述的方法,其中所述第一消息和所述第二消息在不同的第一传输服务实例和第二传输服务实例上传输,所述第一传输服务实例和所述第二传输服务实例共享所述工作项的所述队列。
9.根据权利要求7所述的方法,其中所述第一消息和所述第二消息中的每一个以相应的最后一个分组结束,并且其中所述方法包括仅在将来自所述第一消息和所述第二消息中的每一个内的相应的最后一个分组的数据写入到所述存储器之后从所述NIC向所述存储器写入相应的完成报告。
10.根据权利要求9所述的方法,其中所述完成报告包含所述消息中的每一个内的数据所写入到的跨步的指针。
11.根据权利要求7所述的方法,并且包括针对所述第一消息预留所述第一缓冲区中的跨步的连续分配,其中写入所述第一数据包括向所述连续分配内的第一数目个跨步写入,并且其中写入所述第二数据的至少第一部分包括向所述连续分配之后的剩余数目的跨步写入。
12.根据权利要求11所述的方法,并且包括当在消耗了所述连续分配后,或者在当所述连续分配在预留所述连续分配之后的预定超时期满的情况下未被完全消耗时在所述预定超时期满的时候,从所述NIC向所述存储器写入完成报告。
13.根据权利要求7所述的方法,并且包括针对所述第一消息预留所述第一缓冲区中的跨步的连续分配,其中写入所述第一数据包括向所述连续分配内的第一数目个跨步写入,以及即使在所述连续分配未被完全消耗时也从所述NIC向所述存储器写入填充物完成报告,以便释放所述第一缓冲区并使得后续消息被写入到所述第二缓冲区。
14.根据权利要求7所述的方法,并且包括响应于从所述网络接收的业务,在所述NIC中自动学习向所述主机计算机传输的消息的特征大小,以及针对所述第一消息预留所述第一缓冲区中的跨步的连续分配,同时响应于所述消息的所述特征大小来决定要将多少个跨步包括在所述连续分配中。
15.根据权利要求14所述的方法,其中自动学习所述特征大小包括估计要包括在大型接收卸载LRO操作中的连续分组的数目。
16.根据权利要求15所述的方法,其中所述LRO操作应用于由所述NIC在第一流中接收的分组,所述第一流至少与不同于所述第一流的第二流共享接收队列,并且其中所述方法包括:
当在所述第一流中的分组消耗了所述连续分配中的所有跨步之前接收到来自所述第二流的分组时,发出关于已被所述第一流中的分组消耗的跨步的完成报告;以及
将所述第二流中的分组写入到所述连续分配中剩余的一个或多个跨步。
17.根据权利要求1所述的方法,并且包括在将来自所述数据分组中的每一个的数据写入到所述存储器之后从所述NIC向所述存储器写入相应的完成报告。
18.根据权利要求17所述的方法,其中所述完成报告包含关于与所述数据分组有关的传输状态信息的元数据。
19.根据权利要求18所述的方法,其中所述元数据指示出由所述NIC执行的大型接收卸载LRO操作的状态。
20.根据权利要求1所述的方法,并且包括在将所述数据写入到属于每个工作项的最末跨步之后从所述NIC向所述存储器写入相应的完成报告。
21.根据权利要求20所述的方法,其中所述完成报告包含向所述工作项所指向的所述至少一个缓冲区写入的数据分组的细节。
22.根据权利要求1所述的方法,并且包括当所述第一缓冲区中剩余的跨步的数目小于预定最小值时,在将所述数据写入到给定的跨步之后从所述NIC向所述存储器写入相应的完成报告。
23.根据权利要求1所述的方法,并且包括响应于已将所述数据写入到所述存储器,从所述NIC向所述存储器写入完成报告,其中公布所述工作项系列包括响应于向所述存储器写入的所述完成报告而监控所述工作项的消耗,以及当所述队列的剩余长度下降到低于指定的限度时向所述队列公布一个或多个另外的工作项。
24.一种计算装置,包括:
存储器;
主机处理器,其被配置用于在队列中公布工作项序列,每个工作项指向所述存储器中的至少一个缓冲区,每个缓冲区包括共同、固定大小的多个跨步;以及
网络接口控制器NIC,其被配置用于:从网络接收数据分组,所述数据分组至少包括第一分组和第二分组,所述第一分组和所述第二分组相应地至少包含要向所述存储器推送的第一数据和第二数据;从所述队列读取指向所述存储器中的第一缓冲区的第一工作项;将所述第一数据写入到所述第一缓冲区中足够用于包含所述第一数据的第一数目个跨步,而不消耗所述第一缓冲区中的所有跨步;将所述第二数据的至少第一部分从所述NIC写入到所述第一缓冲区中的剩余数目的跨步;以及当所述第一缓冲区中的所有跨步都已被消耗时,从所述队列读取指向所述存储器中的第二缓冲区的第二工作项,以及将所述数据分组中的另外数据从所述NIC写入到所述第二缓冲区中的另外数目的跨步。
25.根据权利要求24所述的装置,其中由所述NIC写入的所述另外数据包括所述第二数据的第二部分。
26.根据权利要求24所述的装置,其中所述NIC在将来自所述分组中的每一个的数据写入到所述存储器时消耗整数个跨步。
27.根据权利要求24所述的装置,其中所述分组包含相应的序列号,并且其中所述NIC响应于所述相应的序列号来选择要将来自所述分组中的每一个的数据写入到的跨步。
28.根据权利要求24所述的装置,其中所述NIC被配置用于将所述跨步的大小设定成对应于在给定的传输服务实例上接收的分组的大小。
29.根据权利要求24所述的装置,其中所述第一分组和所述第二分组属于由一个或多个对等设备通过所述网络传输到所述计算装置的不同的第一消息和第二消息。
30.根据权利要求29所述的装置,其中所述NIC被配置用于响应于从所述网络接收的业务,自动学习向主机计算机传输的消息的特征大小,以及针对所述第一消息预留所述第一缓冲区中的跨步的连续分配,同时响应于所述消息的所述特征大小来决定要将多少个跨步包括在所述连续分配中。
31.根据权利要求24所述的装置,其中所述NIC被配置用于在将来自所述数据分组中的每一个的数据写入到所述存储器之后向所述存储器写入相应的完成报告。
32.根据权利要求24所述的装置,其中所述NIC被配置用于在将所述数据写入到属于每个工作项的最末跨步之后向所述存储器写入相应的完成报告。
33.根据权利要求24所述的装置,其中所述NIC被配置用于当所述第一缓冲区中剩余的跨步的数目小于预定最小值时,在将所述数据写入到给定的跨步之后向所述存储器写入相应的完成报告。
34.根据权利要求24所述的装置,其中所述NIC被配置用于响应于已将所述数据写入到所述存储器,向所述存储器写入完成报告,并且其中所述主机处理器被配置用于响应于向所述存储器写入的所述完成报告而监控所述工作项的消耗,以及当所述队列的剩余长度下降到低于指定的限度时向所述队列公布一个或多个另外工作项。
35.一种网络接口控制器NIC,包括:
主机接口,其被配置成经由主机总线连接到主机处理器,所述主机处理器被配置用于在队列中公布工作项序列以供由所述NIC访问,每个工作项指向存储器中的至少一个缓冲区,每个缓冲区包括共同、固定大小的多个跨步;
网络接口,其被配置用于从网络接收数据分组,所述数据分组至少包括第一分组和第二分组,所述第一分组和所述第二分组相应地至少包含要向所述存储器推送的第一数据和第二数据;以及
分组处理电路,其被配置用于:从所述队列读取指向所述存储器中的第一缓冲区的第一工作项;经由所述主机接口将所述第一数据写入到所述第一缓冲区中足够用于包含所述第一数据的第一数目个跨步,而不消耗所述第一缓冲区中的所有跨步;经由所述主机接口将所述第二数据的至少第一部分写入到所述第一缓冲区中的剩余数目的跨步;以及当所述第一缓冲区中的所有跨步都已被消耗时,从所述队列读取指向所述存储器中的第二缓冲区的第二工作项,以及经由主机接口将所述数据分组中的另外数据写入到所述第二缓冲区中的另外数目的跨步。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/460,251 US10210125B2 (en) | 2017-03-16 | 2017-03-16 | Receive queue with stride-based data scattering |
US15/460,251 | 2017-03-16 |
Publications (3)
Publication Number | Publication Date |
---|---|
CN108536543A CN108536543A (zh) | 2018-09-14 |
CN108536543B true CN108536543B (zh) | 2021-08-03 |
CN108536543B8 CN108536543B8 (zh) | 2021-09-03 |
Family
ID=63483831
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810217976.2A Active CN108536543B8 (zh) | 2017-03-16 | 2018-03-16 | 具有基于跨步的数据分散的接收队列 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10210125B2 (zh) |
CN (1) | CN108536543B8 (zh) |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11979340B2 (en) | 2017-02-12 | 2024-05-07 | Mellanox Technologies, Ltd. | Direct data placement |
US11252464B2 (en) | 2017-06-14 | 2022-02-15 | Mellanox Technologies, Ltd. | Regrouping of video data in host memory |
US11005771B2 (en) | 2017-10-16 | 2021-05-11 | Mellanox Technologies, Ltd. | Computational accelerator for packet payload operations |
US11502948B2 (en) | 2017-10-16 | 2022-11-15 | Mellanox Technologies, Ltd. | Computational accelerator for storage operations |
US10841243B2 (en) | 2017-11-08 | 2020-11-17 | Mellanox Technologies, Ltd. | NIC with programmable pipeline |
US10708240B2 (en) | 2017-12-14 | 2020-07-07 | Mellanox Technologies, Ltd. | Offloading communication security operations to a network interface controller |
US10824469B2 (en) | 2018-11-28 | 2020-11-03 | Mellanox Technologies, Ltd. | Reordering avoidance for flows during transition between slow-path handling and fast-path handling |
US11184439B2 (en) | 2019-04-01 | 2021-11-23 | Mellanox Technologies, Ltd. | Communication with accelerator via RDMA-based network adapter |
US20200371708A1 (en) * | 2019-05-20 | 2020-11-26 | Mellanox Technologies, Ltd. | Queueing Systems |
US11055222B2 (en) * | 2019-09-10 | 2021-07-06 | Mellanox Technologies, Ltd. | Prefetching of completion notifications and context |
CN114531936B (zh) * | 2019-09-25 | 2024-08-13 | 米沙洛公司 | 用于数据的鲁棒传输的包有效载荷映射 |
US20220021629A1 (en) * | 2020-07-19 | 2022-01-20 | Mellanox Technologies, Ltd. | Coalescing packets based on hints generated by network adapter |
CN114095153A (zh) | 2020-08-05 | 2022-02-25 | 迈络思科技有限公司 | 密码数据通信装置 |
IL276538B2 (en) | 2020-08-05 | 2023-08-01 | Mellanox Technologies Ltd | A cryptographic device for data communication |
US11757778B2 (en) * | 2020-12-07 | 2023-09-12 | Pensando Systems Inc. | Methods and systems for fairness across RDMA requesters using a shared receive queue |
US11595472B2 (en) | 2021-01-19 | 2023-02-28 | Mellanox Technologies, Ltd. | Controlling packet delivery based on application level information |
US11934658B2 (en) | 2021-03-25 | 2024-03-19 | Mellanox Technologies, Ltd. | Enhanced storage protocol emulation in a peripheral device |
EP4338406A1 (en) * | 2021-06-18 | 2024-03-20 | Huawei Technologies Co., Ltd. | A device and method for remote direct memory access |
US11792139B2 (en) | 2022-01-24 | 2023-10-17 | Mellanox Technologies, Ltd. | Efficient packet reordering using hints |
US11765237B1 (en) | 2022-04-20 | 2023-09-19 | Mellanox Technologies, Ltd. | Session-based remote direct memory access |
CN114827234B (zh) * | 2022-04-29 | 2024-09-06 | 广东浪潮智慧计算技术有限公司 | 一种数据传输方法、系统、装置及存储介质 |
US12086095B2 (en) | 2022-05-27 | 2024-09-10 | Nvidia Corporation | Remote promise and remote future for downstream components to update upstream states |
US12117948B2 (en) | 2022-10-31 | 2024-10-15 | Mellanox Technologies, Ltd. | Data processing unit with transparent root complex |
US12007921B2 (en) | 2022-11-02 | 2024-06-11 | Mellanox Technologies, Ltd. | Programmable user-defined peripheral-bus device implementation using data-plane accelerator (DPA) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101039256A (zh) * | 2006-03-17 | 2007-09-19 | 中兴通讯股份有限公司 | 分组控制单元帧分段传输方法 |
CN101146031A (zh) * | 2006-12-05 | 2008-03-19 | 中兴通讯股份有限公司 | 无线通讯系统中前向业务数据的存储方法及其处理方法 |
CN101340605A (zh) * | 2007-07-06 | 2009-01-07 | 中兴通讯股份有限公司 | 多载波增强上行接入系统调度信息上报方法 |
Family Cites Families (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4783698A (en) | 1987-04-13 | 1988-11-08 | Technology Inc., 64 | Interpolator for compressed video data |
US5668809A (en) * | 1993-10-20 | 1997-09-16 | Lsi Logic Corporation | Single chip network hub with dynamic window filter |
US6097734A (en) | 1997-04-30 | 2000-08-01 | Adaptec, Inc. | Programmable reassembly of data received in an ATM network |
US5949441A (en) | 1997-08-01 | 1999-09-07 | International Business Machines Corporation | Multimedia terminal with an encoder for converting analog video data to compressed digitized video data |
US6321276B1 (en) | 1998-08-04 | 2001-11-20 | Microsoft Corporation | Recoverable methods and systems for processing input/output requests including virtual memory addresses |
US6981027B1 (en) | 2000-04-10 | 2005-12-27 | International Business Machines Corporation | Method and system for memory management in a network processing system |
US7171484B1 (en) | 2000-05-24 | 2007-01-30 | Krause Michael R | Reliable datagram transport service |
US6766467B1 (en) | 2000-10-19 | 2004-07-20 | International Business Machines Corporation | Method and apparatus for pausing a send queue without causing sympathy errors |
US8051212B2 (en) | 2001-04-11 | 2011-11-01 | Mellanox Technologies Ltd. | Network interface adapter with shared data send resources |
US7155602B2 (en) | 2001-04-30 | 2006-12-26 | Src Computers, Inc. | Interface for integrating reconfigurable processors into a general purpose computing system |
US6789143B2 (en) | 2001-09-24 | 2004-09-07 | International Business Machines Corporation | Infiniband work and completion queue management via head and tail circular buffers with indirect work queue entries |
US7263103B2 (en) | 2002-07-23 | 2007-08-28 | Mellanox Technologies Ltd. | Receive queue descriptor pool |
US7299266B2 (en) | 2002-09-05 | 2007-11-20 | International Business Machines Corporation | Memory management offload for RDMA enabled network adapters |
GB2395307A (en) | 2002-11-15 | 2004-05-19 | Quadrics Ltd | Virtual to physical memory mapping in network interfaces |
GB2395308B (en) | 2002-11-18 | 2005-10-19 | Quadrics Ltd | Command scheduling in computer networks |
US7430623B2 (en) * | 2003-02-08 | 2008-09-30 | Hewlett-Packard Development Company, L.P. | System and method for buffering data received from a network |
US20050135395A1 (en) | 2003-12-22 | 2005-06-23 | Fan Kan F. | Method and system for pre-pending layer 2 (L2) frame descriptors |
US7930422B2 (en) * | 2004-07-14 | 2011-04-19 | International Business Machines Corporation | Apparatus and method for supporting memory management in an offload of network protocol processing |
DE602005003987T2 (de) | 2004-07-23 | 2008-12-11 | Stmicroelectronics S.A. | Verfahren zur Programmierung einer System auf Chip DMA Steuerung, sowie ein System auf Chip dafür. |
US20070124378A1 (en) | 2005-10-14 | 2007-05-31 | Uri Elzur | Method and system for indicate and post processing in a flow through data architecture |
CN101356783B (zh) | 2006-01-12 | 2014-06-04 | 博通以色列研发公司 | 虚拟化网络环境中具有i/o共享的协议卸载和直接i/o的方法和系统 |
US9001899B2 (en) | 2006-09-15 | 2015-04-07 | Freescale Semiconductor, Inc. | Video information processing system with selective chroma deblock filtering |
US9794378B2 (en) | 2006-11-08 | 2017-10-17 | Standard Microsystems Corporation | Network traffic controller (NTC) |
US8958486B2 (en) | 2007-07-31 | 2015-02-17 | Cisco Technology, Inc. | Simultaneous processing of media and redundancy streams for mitigating impairments |
US8176252B1 (en) | 2007-11-23 | 2012-05-08 | Pmc-Sierra Us, Inc. | DMA address translation scheme and cache with modified scatter gather element including SG list and descriptor tables |
US8495301B1 (en) | 2007-11-23 | 2013-07-23 | Pmc-Sierra Us, Inc. | System and method for scatter gather cache processing |
US20100121971A1 (en) | 2008-11-10 | 2010-05-13 | Samsung Electronics Co., Ltd. | Multipath transmission of three-dimensional video information in wireless communication systems |
DE102009016742B4 (de) | 2009-04-09 | 2011-03-10 | Technische Universität Braunschweig Carolo-Wilhelmina | Mehrprozessor-Computersystem |
US8255475B2 (en) | 2009-04-28 | 2012-08-28 | Mellanox Technologies Ltd. | Network interface device with memory management capabilities |
US8255593B2 (en) * | 2009-09-29 | 2012-08-28 | Oracle America, Inc. | Direct memory access with striding across memory |
JP2011109397A (ja) | 2009-11-17 | 2011-06-02 | Sony Corp | 画像送信方法、画像受信方法、画像送信装置、画像受信装置、及び画像伝送システム |
US9596447B2 (en) | 2010-07-21 | 2017-03-14 | Qualcomm Incorporated | Providing frame packing type information for video coding |
CN103098462A (zh) | 2010-08-06 | 2013-05-08 | 松下电器产业株式会社 | 编码方法、显示装置以及解码方法 |
US9270299B2 (en) | 2011-02-11 | 2016-02-23 | Qualcomm Incorporated | Encoding and decoding using elastic codes with flexible source block mapping |
US9098767B2 (en) | 2011-04-11 | 2015-08-04 | Hewlett-Packard Development Company, L.P. | System and method for determining the informative zone of an image |
US9143467B2 (en) * | 2011-10-25 | 2015-09-22 | Mellanox Technologies Ltd. | Network interface controller with circular receive buffer |
US8751701B2 (en) | 2011-12-26 | 2014-06-10 | Mellanox Technologies Ltd. | Host channel adapter with pattern-type DMA |
US9105078B2 (en) | 2012-05-31 | 2015-08-11 | Apple Inc. | Systems and methods for local tone mapping |
JP5935779B2 (ja) | 2013-09-30 | 2016-06-15 | カシオ計算機株式会社 | 画像処理装置、画像処理方法及びプログラム |
US9767529B1 (en) | 2013-12-18 | 2017-09-19 | Mediatek Inc. | Method and apparatus for accessing compressed data and/or uncompressed data of image frame in frame buffer |
US20150373075A1 (en) | 2014-06-23 | 2015-12-24 | Radia Perlman | Multiple network transport sessions to provide context adaptive video streaming |
-
2017
- 2017-03-16 US US15/460,251 patent/US10210125B2/en active Active
-
2018
- 2018-03-16 CN CN201810217976.2A patent/CN108536543B8/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101039256A (zh) * | 2006-03-17 | 2007-09-19 | 中兴通讯股份有限公司 | 分组控制单元帧分段传输方法 |
CN101146031A (zh) * | 2006-12-05 | 2008-03-19 | 中兴通讯股份有限公司 | 无线通讯系统中前向业务数据的存储方法及其处理方法 |
CN101340605A (zh) * | 2007-07-06 | 2009-01-07 | 中兴通讯股份有限公司 | 多载波增强上行接入系统调度信息上报方法 |
Also Published As
Publication number | Publication date |
---|---|
US10210125B2 (en) | 2019-02-19 |
CN108536543B8 (zh) | 2021-09-03 |
US20180267919A1 (en) | 2018-09-20 |
CN108536543A (zh) | 2018-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108536543B (zh) | 具有基于跨步的数据分散的接收队列 | |
EP3719657A1 (en) | Communication with accelerator via rdma-based network adapter | |
US20220214919A1 (en) | System and method for facilitating efficient load balancing in a network interface controller (nic) | |
US10129153B2 (en) | In-line network accelerator | |
US7295565B2 (en) | System and method for sharing a resource among multiple queues | |
EP3298739B1 (en) | Lightweight transport protocol | |
US11876859B2 (en) | Controlling packet delivery based on application level information | |
US20140223026A1 (en) | Flow control mechanism for a storage server | |
US10990447B1 (en) | System and method for controlling a flow of storage access requests | |
US11503140B2 (en) | Packet processing by programmable network interface | |
CN111404986A (zh) | 数据传输处理方法、设备和存储介质 | |
US9542356B2 (en) | Determining, at least in part, one or more respective amounts of buffer memory | |
KR102211005B1 (ko) | 효율적 메시지 처리를 제공하는 dds 미들웨어 장치 |
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 | ||
CI03 | Correction of invention patent |
Correction item: Inventor Correct: Eden Bostan False: Eden Bostan Number: 32-01 Page: The title page Volume: 37 Correction item: Inventor Correct: Eden Bostan False: Eden Bostan Number: 32-01 Volume: 37 |
|
CI03 | Correction of invention patent |