CN114024911A - 基于网络适配器生成的提示合并分组 - Google Patents

基于网络适配器生成的提示合并分组 Download PDF

Info

Publication number
CN114024911A
CN114024911A CN202110756878.8A CN202110756878A CN114024911A CN 114024911 A CN114024911 A CN 114024911A CN 202110756878 A CN202110756878 A CN 202110756878A CN 114024911 A CN114024911 A CN 114024911A
Authority
CN
China
Prior art keywords
payload
payloads
block
given
given block
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.)
Pending
Application number
CN202110756878.8A
Other languages
English (en)
Inventor
盖尔·雅菲特
阿维·乌尔万
吉尔·克雷默
利奥尔·纳尔基斯
鲍里斯·皮斯曼尼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mellanox Technologies Ltd
Original Assignee
Mellanox Technologies Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Mellanox Technologies Ltd filed Critical Mellanox Technologies Ltd
Publication of CN114024911A publication Critical patent/CN114024911A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/545Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9042Separate storage for different parts of the packet, e.g. header and payload
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/22Parsing or analysis of headers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/24Traffic characterised by specific attributes, e.g. priority or QoS
    • H04L47/2441Traffic characterised by specific attributes, e.g. priority or QoS relying on flow classification, e.g. using integrated services [IntServ]

Abstract

网络节点包括网络适配器和主机。网络适配器耦合到通信网络。主机包括运行客户端进程和通信栈的处理器,并被配置为从通信网络接收分组,并将接收到的分组分类为与接收缓冲器中的各个块相关联的各个流,以在块之间分发接收到的分组的净荷,以便将分类到给定流的分组的净荷存储在分配给给定流的给定块中,并将给定块中的净荷通知通信栈,以便将给定块中的净荷传输到客户端进程。

Description

基于网络适配器生成的提示合并分组
技术领域
本文描述的实施方式总体上涉及数据通信,并且具体地涉及用于基于网络适配器生成的提示来合并分组的方法和系统。
背景技术
在主机计算机上运行的客户端进程可以使用合适的通信协议访问通信网络。例如,客户端进程可以使用称为“套接字”的软件接口访问通信协议(例如传输控制协议(TCP))的传输层。
使用套接字对接传输层的方法在本领域中是已知的。例如,美国专利申请公开2014/0229946描述了用于实现对虚拟机的网络通信I/O操作的系统和方法。一种示例方法可以包括:识别发往由客户操作系统控制的虚拟进程的网络分组,识别与虚拟进程所使用的虚拟存储器位置对应的存储器位置,并将网络分组的数据复制到对应于虚拟存储器位置的存储器位置。另一个示例方法可以包括:从第一存储器位置检索要包括在网络分组中的数据,其中第一存储器位置对应于由客户操作系统控制的虚拟进程使用的虚拟存储器位置,从第二存储器位置,检索包含在网络分组中的报头,其中第二存储器位置对应于客户操作系统的内核缓冲器位置,并结合报头和数据以形成网络分组。
发明内容
本发明这里描述的实施方式提供了一种网络节点,包括网络适配器和主机。网络适配器耦合到通信网络。主机包括运行客户端进程和通信栈的处理器,并被配置为从所述通信网络接收分组,并将接收到的分组分类为与接收缓冲器中的相应块相关联的相应流,在所述块之间分配接收到的分组的净荷,以便将归类到给定流的分组的净荷存储在分配给所述给定流的给定块中,将所述给定块中的净荷通知所述通信栈,以将所述给定块中的净荷传输到所述客户端进程。
在一些实施方式中,处理器还被配置为运行在所述网络适配器和所述通信栈之间进行调解的驱动程序,其中所述网络适配器被配置为经由所述驱动程序将所述给定块中的净荷通知给所述通信栈。在其他实施方式中,所述驱动程序被配置为在所述给定块中构造包括两个或更多个连续净荷的合并净荷,并且将所述合并净荷通知给所述通信栈。在其他实施方式中,所述给定块中的净荷包括满足用于合并的匹配标准的第一净荷和第二净荷,并且其中所述驱动程序被配置为基于除了所述匹配标准之外的标准来避免合并所述第一净荷和第二净荷。
在一个实施方式中,所述给定块中的第一净荷和第二净荷属于不同的相应流的分组,并且其中所述网络适配器被配置为通知所述驱动程序所述第一净荷和第二净荷对于合并不匹配。在另一个实施方式中,响应于检测到所述给定块中可用的存储空间小于要存储在所述给定块中的净荷,所述网络适配器被配置为向所述给定流分配另一块,并将所述净荷存储在所述另一块中。在又一实施方式中,响应于检测到所述给定块中可用的存储空间小于要存储在所述给定块中的净荷,所述网络适配器被配置为向所述给定流分配另一块,并在所述块和所述另一块之间拆分存储所述净荷。
在一些实施方式中,接收到的分组至少属于第一流和第二流,并且其中所述网络适配器被配置为将所述接收缓冲器中的不同的相应块分配给所述第一流和第二流。在其他实施方式中,所述通信栈被配置为将连续存储在所述组块中的两个或更多个净荷的直接数据传输应用到用户空间。在其他实施方式中,所述接收缓冲器驻留在所述主机的存储器中,其中所述通信栈被配置为仅当所述两个或更多个净荷(i)在所述接收缓冲器中对齐到所述操作系统页面和(ii)具有操作系统页面粒度时才应用所述直接数据传输。
在一个实施方式中,所述通信栈包括在运行在内核空间中的操作系统的内核中,并且其中所述通信栈被配置为将所述给定块中的一个或多个净荷传输到用户空间中的所述客户端进程。在另一实施方式中,所述通信栈包括在用户空间中运行的通信程序,并且其中所述通信栈被配置为将所述给定块中的一个或多个净荷直接传输到所述用户空间中的客户端进程。在又一实施方式中,所述网络适配器被配置为将接收到的分组的报头存储在报头缓冲器中,并将与所述给定块中的接收到的分组的净荷相对应的所存储的报头通知给所述通信栈。在一些实施方式中,所述通信栈或在所述网络适配器和所述通信栈之间进行调解的驱动程序被配置为基于存储在所述报头缓冲器中的报头以及存储在所述给定块中的一个或多个净荷产生要传输到所述客户端进程的合并分组。
根据在此描述的实施方式,另外提供了一种通信方法,包括在包括耦合到通信网络的网络适配器的网络节点中,所述网络节点包括主机,所述主机包括运行客户端进程和通信栈的处理器,由所述网络适配器从所述通信网络接收分组,并将接收到的分组分类为与接收缓冲器中的相应块相关联的相应流。在所述块之间分配接收到的分组的净荷,以便将归类到给定流的分组的净荷存储在分配给所述给定流的给定块中。将所述给定块中的净荷通知所述通信栈,以将所述给定块中的净荷传输到所述客户端进程。
根据在此描述的实施方式,另外提供了一种网络适配器,其包括网络接口、主机接口和分组处理电路。网络接口被配置为连接到通信网络。主机接口耦合到主机,该主机包括运行客户端进程和通信栈的处理器。分组处理电路被配置为从所述通信网络接收分组,并将接收到的分组分类为与接收缓冲器中的相应块相关联的相应流,在所述块之间分配接收到的分组的净荷,以便将归类到给定流的分组存储在分配给所述给定流的给定块中,并将所述给定块中的净荷通知所述通信栈,以将所述给定块中的净荷传输到所述客户端进程。
根据在此描述的实施方式,另外提供了一种用于通信的方法,包括在连接到通信网络和主机的网络适配器中,所述主机包括运行客户端进程和通信栈的处理器,从所述通信网络接收分组,并将接收到的分组分类为与接收缓冲器中的相应块相关联的相应流。在所述块之间分配接收到的分组的净荷,以便将归类到给定流的分组存储在分配给所述给定流的给定块中。将所述给定块中的净荷通知所述通信栈,以将所述给定块中的净荷传输到所述客户端进程。
结合附图,从其实施方式的以下详细描述中将更全面地理解这些和其他实施方式,其中:
附图说明
图1是示意性地示出了根据在此描述的实施方式的计算系统的框图,其中网络适配器向主机提供用于合并接收的分组的提示;
图2是示意性地示出了根据在此描述的实施方式的被分成多个块以用于存储接收分组的净荷的接收缓冲器的图;
图3是示意性地示出了根据在此描述的实施方式的用于缓冲属于公共流的接收分组的方案的图;
图4是示意性地示出了根据在此描述的实施方式的用于缓冲属于多个流的接收分组的方案的图;以及
图5是示意性地示出了根据在此描述的实施方式的用于将分组合并成块的方法的流程图。
具体实施方式
概述
在此描述的实施方式提供了用于基于网络适配器生成的提示来合并分组的系统和方法。
网络节点通常包括使用网络适配器或网络接口控制器(NIC)耦合到通信网络的主机。主机包括诸如中央处理单元(CPU)和存储器的处理器。网络适配器从通信网络接收分组,并将接收到的分组转发到上层软件层。CPU通常运行通信栈、在网络适配器和通信栈之间进行调解的驱动程序,以及诸如用户应用程序的客户端进程。
通信栈可以包括在底层操作系统(OS)(例如,Linux OS)的内核程序中。在替代实施方式中,还可以使用数据平面开发套件(DPDK)。DPDK在用户空间中运行,并提供开源库和网络适配器驱动程序,用于从操作系统内核卸载分组处理。DPDK项目由Linux基金会管理。进一步替代地,也可以使用任何其他合适的通信栈。
在下面的描述中,假设用户应用程序、客户端进程和DPDK可以访问这里称为“用户空间”的存储器中的区域,并且内核程序可以访问存储器中的不同区域,这里称为“内核空间”。在基于内核的通信中,经由网络适配器从通信网络接收到的分组通常首先缓存在内核空间中,然后由内核程序传输到用户空间。在构造中,DPDK绕过内核程序,并且将接收到的数据直接传输到用户空间。
在基于内核的通信中,为了从通信网络接收数据,客户端进程向内核提供套接字缓冲器和要消耗的数据量。网络适配器从通信网络接收发往客户端进程的分组,并将它们存储在套接字缓冲器中。然后内核将数据从套接字缓冲器(或从套接字缓冲器指向的缓冲器)复制到客户端进程可访问的用户空间存储器。到用户空间的复制操作在CPU周期、通信吞吐量和延迟方面可能代价高昂。
从通信网络接收的分组通常具有有限的大小。称为最大传输单元(MTU)的大小限制定义了可以通过底层网络中的线路发送的最大分组的大小,例如1.5KB。处理小分组需要大量处理,会导致高延迟并降低吞吐量,因为分组的报头是单独处理的。
原则上,为了提高性能,例如,如在大型接收卸载(LRO)方法中,公共数据流的多个分组可以合并以产生更大的分组,以便由网络栈的更高层进行处理。LRO和类似方法的主要缺点是通信栈只接收合并的大分组,并且在控制分组合并过程方面没有灵活性。
在公开的实施方式中,网络适配器分别存储每个接收到的分组的报头和净荷。网络适配器向通信栈报告(例如,经由驱动程序)属于公共流的多个分组的净荷和相应的报头。通信栈或驱动程序可以组合一些或所有报告的净荷以创建包括两个或更多个报告的净荷的至少一个合并分组,其中合并分组的报头基于报告报头。
2018年8月的Linux 4.18版本引入了接收零复制功能。Linux功能仅支持对与操作系统页面对齐且大小等于操作系统页面大小的整数倍(例如,4KB)的连续存储器区域进行零复制。Linux零复制功能应用了存储器地址映射技术。在一些实施方式中,零复制功能在诸如传输控制协议(TCP)的底层通信协议内实现。
例如,可以通过传输净荷大小等于操作系统页面大小的分组来调用内核零复制传输。然而,这样的配置是有限的并且不包括重要的用例,例如使用4KB的操作系统页面大小和1.5KB的最大传输单元(MTU)。MTU通常被配置为1.5KB,这使得无法发送具有操作系统页面大小(例如,4KB)的分组。使用相对较小的MTU的一个缺点是,源需要将大量数据分成多个更小的单元,每个单元都在一个单独的分组中发送,以满足MTU约束。由于多个分组报头,这会消耗网络带宽和处理资源。
原则上,MTU值可以增加。然而,这在许多实际用例中通常是不可能的。此外,即使MTU可以被配置为大约4KB,使用内核零复制功能也需要仅将分组的净荷分散到套接字缓冲器(不包括报头),并与操作系统页面对齐。
在一些公开的实施方式中,通信栈被包括在内核程序中,该内核程序将零复制数据传输应用于用户空间,仅应用于在存储器中与操作系统页面对齐并且具有页面粒度的数据。网络适配器对传入的分组应用新颖的缓冲方案,以强制调用内核零复制功能。
在一些实施方式中,网络节点包括网络适配器和主机。网络适配器耦合到通信网络。主机包括运行客户端进程的处理器和通信栈。网络适配器将接收到的分组分类为与接收缓冲器中的相应块相关联的相应流。网络适配器将接收到的分组的净荷分配到块中,以便将分类到给定流的分组存储在分配给给定流的给定块中,并将给定块中的净荷通知通信栈,以传输合并的分组到客户端进程。
在本上下文中,“流”包括源自共同源并以共同目标为目的地的分组序列。流可以通过分组报头中的预定义的一个或多个字段来识别。
在一些实施方式中,处理器还被配置为运行在网络适配器和通信栈之间进行调解的驱动程序,并且网络适配器被配置为经由驱动程序将给定块中的净荷通知通信栈。驱动程序构造合并的净荷,其在给定的块中包含两个或更多个连续的负载,并将合并的净荷通知通信栈。在一个实施方式中,给定组块中的净荷包括满足用于合并的匹配标准的第一净荷和第二净荷,但是驱动程序基于除匹配标准之外的标准避免合并第一净荷和第二净荷。
在实施方式中,给定块中的第一净荷和第二净荷属于不同的相应流的分组。当多个流识别符被哈希成公共哈希结果时,可能会发生这种情况。在这种情况下,网络适配器会通知驱动程序第一净荷和第二净荷对于合并不匹配。网络适配器另外将接收到的分组的报头存储在报头缓冲器中,并将与给定块中接收到的分组的净荷相对应的存储报头通知通信栈。通信栈或在网络适配器和通信栈之间进行调解的驱动程序根据存储在报头缓冲器中的报头和存储在给定块中的一个或多个净荷,产生要传输到客户端进程的合并分组。
每个块在接收缓冲器中具有有限的存储空间。响应于检测到给定块中可用的存储空间小于给定块中要存储的净荷,网络适配器为给定流分配另一块,并将净荷存储在另一块中。或者,网络适配器在块和其他块之间拆分存储净荷。
在一些实施方式中,接收的分组至少属于第一流和第二流,并且网络适配器将接收缓冲器中的不同的相应块分配给第一流和第二流。
在实施方式中,通信栈将连续存储在块中的两个或更多个净荷的直接数据传输应用到用户空间。当接收缓冲器驻留在主机的存储器中时,仅当两个或更多个净荷(i)在接收缓冲器中与操作系统页面对齐以及(ii)具有操作系统页面粒度时,通信栈才可以应用直接数据传输(例如,零复制传输)。
在实施方式中,通信栈被包括在运行在内核空间中的操作系统的内核中,并且通信栈被配置为将给定块中的一个或多个净荷传输到用户空间中的客户端进程。在另一实施方式中,通信栈包括在用户空间中运行的通信程序,并且通信栈被配置为将给定块中的一个或多个净荷直接传输到用户空间中的客户端进程。
在所公开的技术中,网络适配器将接收的属于公共流的分组的净荷存储在相同块中。网络适配器例如经由驱动程序将块中的净荷和连续净荷之间的匹配提示报告给通信栈。通信栈或驱动程序可以灵活地根据报告的净荷构造一个或多个合并分组。处理包括相应合并的净荷的合并分组通常比处理单个分组更有效,因此通过使用所公开的实施方式,通信吞吐量增加。
系统描述
图1是示意性地示出了根据这里描述的实施方式的计算系统20的框图,其中网络适配器向主机提供用于合并接收的分组的提示。
在计算系统20中,网络节点24通过通信网络30与网络节点28通信。通信网络30可以包括任何合适的分组网络,例如以太网或IP网络,例如因特网。通信网络30可以使用任何合适的通信协议来操作,例如互联网协议(IP)、传输控制协议(TCP)或两者。在另一个实施方式中,通信网络包括无限宽带TM(IB)结构,在这种情况下,使用IB上的TCP和IP(IPoIB)协议来传输分组。
计算系统20可以用在网络节点交换大量数据的任何应用中,例如高性能计算(HPC)分布式计算和数据中心等。
网络节点24包括中央处理单元(CPU)32形式的处理器和存储器34,它们通过合适的总线36互连。在本示例中,总线36包括外围组件互连快速(PCIe)总线。网络节点24还包括用于连接到通信网络30的网络适配器38,例如网络接口卡(NIC)。CPU 32、存储器34和总线36(有或没有网络适配器)的组合也被称为“主机计算机”或为简洁起见简称为“主机”。存储器34也称为“主机存储器”或“系统存储器”。
网络适配器38包括耦合到通信网络30的网络接口42和经由总线36耦合到CPU 32和存储器34的主机接口44。耦合在网络接口42和主机接口44之间的分组处理电路46产生用于在通信网络30上传输的传出分组并处理从通信网络接收的传入分组,如下所述。在入口方向上,分组处理电路46对经由网络接口42在网络元件中接收的分组应用各种处理,例如验证分组净荷中的数据的正确性、分组分类和优先化以及路由。分组处理电路通常会检查分组的报头中的某些字段,以便进行分组分类和路由。报头字段包含寻址信息,例如源地址和目的地地址以及端口号,以及所使用的底层网络协议。
网络接口42、主机接口44和分组处理电路46通常包括专用硬件逻辑。替代地或附加地,分组处理电路46的至少一些功能可以在合适的可编程处理器上的软件中实现。
CPU 32运行通信程序50,其处理经由网络适配器38在网络通信30上的主机通信。通信程序50在本文中也被称为“通信栈”。通信栈50可以被包括在例如内核程序中,该内核程序是诸如“Linux”的操作系统(OS)(未示出)的一部分。或者,通信栈绕过内核程序,例如数据平面开发套件(DPDK)。DPDK是由Linux基金会管理的开源软件。与由网络适配器产生的中断驱动的Linux内核相比,DPDK实现了更高的分组吞吐量。
通信栈50包括通信协议,该通信协议包括传输层52,例如TCP。驱动程序54在传输层52之下运行并在通信栈50和网络适配器38之间进行调解。
在CPU 32上运行的客户端进程60(为了简洁也简称为“客户端”),例如由应用软件生成的进程,与在远程网络节点28上运行的对等客户端(未示出)通信。
如下文将详细描述的,在从通信网络30接收分组时,驱动程序54管理诸如缓冲器和队列的资源的分配,这些资源将被网络适配器38用于分组接收。在一些实施方式中,网络适配器38将多个分组的净荷存储在接收缓冲器64中,与操作系统页面对齐。驱动程序54监视接收缓冲器64中的分组接收,并例如经由通信缓冲器68启动从接收缓冲器到相关客户进程可访问的用户空间中的用户缓冲器72的数据传输。通信缓冲器68可以包括例如TCP套接字缓冲器(SKB)。在一些实施方式中,如下文将详细描述的,通信栈支持以与操作系统页面对齐和页面粒度存储的缓冲数据到用户空间的零复制数据传输。
图1中所示的计算系统、网络节点和网络适配器配置是示例配置,选择这些配置纯粹是为了概念清楚。在替代实施方式中,也可以使用任何其他合适的计算系统、网络节点和网络适配器配置。为清楚起见,图中省略了对于理解本发明的原理不是必需的元件,例如各种接口、寻址电路、定时和排序电路以及调试电路。
网络适配器38的一些元件(例如,分组处理46)可以在硬件中实现,例如,在一个或多个专用集成电路(ASIC)或FPGA中。附加地或替代地,可以使用软件或使用硬件和软件元件的组合来实现分组处理电路46。存储器34可以包括使用任何合适的存储技术的任何合适类型的存储器,例如随机存取存储器(RAM)、动态RAM(DRAM)、诸如闪存的非易失性存储器,或多种存储器类型的组合。
在一些实施方式中,网络适配器38的一些功能可以由通用处理器执行,例如分组处理电路46,其在软件中编程以执行这里描述的功能。该软件可以通过例如网络以电子形式下载到处理器,或者它可以替代地或附加地被提供和/或存储在非暂时性有形介质上,例如磁、光或电子存储器。
接收缓冲器管理
图2是示意性地示出了根据这里描述的实施方式的被划分为多个组块以用于存储接收分组的净荷的接收缓冲器的图。
在图2中,循环共享接收队列(SRQ)76包括多个工作队列元素(WQE)78,每个WQE包括指向相应接收缓冲器64的指针。在一些实施方式中,WQE存储关于块使用的信息,例如,当前正在使用的块的占用率和接收缓冲器中的下一个可用块。
在一些实施方式中,驱动程序54在初始化时创建SRQ 76,例如在重置之后,并且在开始分组接收之前将多个WQE 78发布到SRQ。然后网络适配器按顺序(并循环)执行发布的WQE。当当前使用的接收缓冲器已满时,网络适配器切换到指向空闲接收缓冲器的后续WQE。在一些实施方式中,网络适配器38自动将消耗的WQE重新发布到SRQ 76,从而使客户端免于参与发布WQE。在一些实施方式中,网络适配器38可以根据需要将WQE添加到SRQ 76或从SRQ76移除WEQ。
在一些实施方式中,接收缓冲器64包括(或分成)多个块80,其中每个块包括存储器34中的连续地址范围。在一些实施方式中,块80与操作系统页面对齐,这意味着存储器34中块80的起始地址与对应的操作系统页面的地址对齐。在之后的描述中,为简洁起见,“操作系统页面”简称为“页面”。
在本上下文中,其起始地址与操作系统的对应页面对齐的存储器34中的区域在本文中被称为“页对齐的”。当页面对齐区域的大小是操作系统页面大小的整数倍时,该区域也称为具有“页面粒度”。
在一些实施方式中,块80是页面对齐的并且具有页面粒度。在图2的示例中,接收缓冲器具有连续的地址范围,该地址范围被划分为多个块。在示例实施方式中,操作系统页面的大小为4KB,块大小为64KB(16个页面),并且接收缓冲器的大小为1MB(16个块)。
当块80是页面对齐的时,从该块的开头开始并且具有页面粒度的地址的连续区域将被通信栈50零复制到用户空间(例如,当零复制支持并启用时)。另一方面,当连续区域的大小不是操作系统页面大小的整数倍时,具有页面粒度的区域的第一部分将被零复制,而区域的其余部分(小于页面大小)将传统地复制到用户空间。因此,为了增加零复制的数据量,块80应该被配置为页面对齐并且具有页面粒度。
如下文将描述的,网络适配器38在块80中仅存储传入分组的净荷(并且单独存储传入分组的报头)。在所公开的实施方式中,可以使用任何合适的净荷大小,并且不同的分组可以具有相同或不同大小的净荷。
虽然在图2中所有的块80都有共同的大小,但是这个配置不是强制性的。在替代实施方式中,还可以使用不同大小的块。例如,块大小可以取决于数据速率和/或流的优先级。
分组缓冲和合并的方法
图3是示意性地示出了根据这里描述的实施方式的用于缓冲属于公共流的接收分组的方案的图。
在图3中,网络适配器38从通信网络30接收分组82,每个分组包括报头83和净荷84。网络适配器38处理分组82并将每个分组分成其报头和净荷,以分别存储。具体地,网络适配器在专用报头缓冲器86中分散报头83(例如,顺序地),并且在接收缓冲器64的块80中连续地分散相同流的净荷84。网络适配器在块的开始处存储第一净荷,紧跟在第一净荷之后存储第二净荷,依此类推。分散在相同块中的净荷形成大的合并净荷92。
在一些实施方式中,网络适配器选择报头缓冲器86中的报头83之一作为包括合并的净荷92的大分组的报头,并且相应地修改所选择的报头。或者,网络适配器独立于报头83生成用于合并的净荷92的报头。通过将多个净荷合并在块中,大量数据可以被通信栈有效地传输到用户空间,或者在单个数据传输操作中零复制。此外,底层传输层52(例如,TCP)接收大分组而不是多个小分组,从而减少了传输和处理所有分组报头所产生的开销。
请注意,在某些应用中,要通过通信网络发送大消息,分组的源需要将消息分解为多个净荷,以便在多个分组内传输,以满足网络的MTU限制。使用上述合并机制,接收端的网络适配器通过将相关净荷连续存储在块中来再现大消息(或其一部分),如上所述。
对于每个接收到的分组82,网络适配器38识别当前WQE 78指向的相关接收缓冲器。如下文将描述的,网络适配器将分组净荷散布在已分配给分组属于的流的接收缓冲器的块中。
在一些实施方式中,网络适配器38为每个分组82生成完成队列元素(CQE)88,并且将CQE写入完成队列(CQ)90,所述分组82已经被分成单独的报头和净荷并且如上所述被缓冲。对于给定的分组82,CQE 88可以存储诸如块识别符、块内每个净荷的起始地址、存储的净荷的大小等的信息。如下文将更详细地描述的,CQE还可以使用合适的匹配标准来存储净荷是否与用于合并的块中的先前净荷匹配的指示。CQE中的信息向驱动程序54提供提示以决定将块中的净荷合并为一个或多个合并的净荷(92)。
在一些实施方式中,驱动程序54监视CQE 88以决定关闭当前块并启动将块内容传输到用户空间。在一些实施方式中,当驱动程序54识别当前块变满或接近满时,驱动程序54分配指向(i)合并的净荷92和(ii)修改的报头83的套接字缓冲器(SKB)68。然后,通信栈50将合并的净荷92传输到用户空间。
当通信栈支持零复制数据传输并启用零复制时,通信栈将合并的净荷(或其具有页面粒度的部分)传输到用户空间。在合并的净荷92的大小不是页面大小的整数倍的情况下,具有页面粒度的合并的净荷的一部分将被零复制到用户空间,并且合并的净荷的剩余部分将被常规复制到用户空间。
图4是示意性地示出了根据这里描述的实施方式的用于缓冲属于多个流的接收分组的方案的图。
在图4的示例中,网络适配器38经由网络接口42从通信网络30接收属于表示为流1、流2和流3的多个(在本示例中为三个)流的分组。在实际应用中,根据底层应用,分组可能只属于几个并发流,也可能属于更多数量的并发流,例如成百上千个流。
在图4中,接收到的分组表示为分组(i,j),其中‘i’表示流识别符,j=0,1,2,...表示第i个流中的分组的序列号。在本示例中,网络适配器38接收的五个分组包括属于流1的分组(1,0)和分组(1,1),属于流2的分组(2,0)和分组(2,1),以及属于流3的分组(3,0)。在图4中,分组也由1…5范围内的索引引用,该索引表示接收分组的顺序。
在一些实施方式中,当前使用的WQE 78保持指向接收缓冲器64的指针和指向报头缓冲器86的另一个指针。这些指针可以由驱动程序54提供给网络适配器。
在一些实施方式中,驱动程序54为每个接收到的流分配相应的接收队列(RQ)94。RQ与保持由RQ服务的流的流识别符的相应流上下文相关联。在任何给定时间,网络适配器将接收缓冲器64中的相应块80分配给每个RQ(或该RQ服务的流)。RQ的流上下文保存当前块的块识别符。与块相关联的CQE保持有关已存储在当前块中的净荷的地址和大小的信息,以及用于在块中的连续净荷对之间合并的匹配信息。
网络适配器38将接收到的分组分类到它们属于的相应流,并且将分组引导到服务于这些流的相关RQ。网络适配器在报头缓冲器86中存储分组报头并且在当前使用的块中存储分组净荷。在一些实施方式中,网络适配器将属于公共流的分组的净荷连续地存储在相同块中。当关闭当前块并将新块分配给流时,网络适配器开始在新块中顺序且连续地存储后续分组的净荷。在图4中,如上文参考图3所述,相同流的净荷合并为大净荷。
尽管为清楚起见从图4中省略,但网络适配器写入指示存储的净荷的CQE,如上文参考图3所述。
在图4中,网络适配器将属于流1、流2和流3的分组的净荷存储在单独的相应块中,如下所示。在对应于流1的块中,网络存储了接收到的第一分组和第四分组。在对应于流2的块中,网络适配器存储了接收到的第二分组和第五分组。在对应于流3的块中,网络适配器存储了接收到的第三分组。
图5是示意性地示出了根据在此描述的实施方式的用于将分组合并在块中的方法的流程图。
在描述该方法时,假设网络适配器接收属于由相应RQ服务的一个或多个流的分组。此外,每个RQ在公共接收缓冲器64中被分配相应的块。假设块是页面对齐的并且具有页面粒度。
该方法将被描述为由网络适配器38(或更具体地由分组处理电路46)执行。
该方法开始于网络适配器38在分组接收步骤100经由网络接口42从通信网络30接收分组。分组可以包括例如TCP分组或TCP/IP分组。在另一个实施方式中,代替TCP,也可以使用用户数据报协议(UDP)。在RQ确定步骤104,网络适配器将分组引导到服务所接收分组属于的流的RQ。在一些实施方式中,网络适配器通过将哈希函数应用于分组报头中的一个或多个字段来确定RQ。哈希函数可以包括例如托普利兹哈希函数。例如,网络适配器将哈希函数应用于包括(协议、源地址、源端口、目的地地址、目的地端口)的报头中的五元组。
在块识别步骤108,网络适配器从RQ流上下文中提取用于由RQ服务的流的当前块的识别符(例如,指针或块索引)。进一步在步骤108,网络适配器将间隙变量设置为零值,这意味着在先前存储的净荷之后立即存储接收到的分组的净荷。在匹配检查步骤112,网络适配器检查当前分组是否匹配先前存储的用于合并的分组。匹配检查的目的是识别其净荷可以(由驱动程序)合并为大分组的分组序列。在步骤112检查匹配可以以各种方式执行。例如,当最近存储的净荷的分组和当前接收的分组具有连续的序列号时,就会发生匹配。
另一匹配标准检查由RQ服务的流(在步骤104确定)是否匹配(例如,具有相同的流识别符,例如五元组值)所接收的分组属于的流。这个匹配标准是必需的,因为哈希函数可能不完善并导致哈希冲突,这意味着哈希不同的五元组(或分组报头中的其他预定义字段)可能会导致相同的哈希结果,因此也具有相同的RQ。当RQ的数量小于支持的流数量时,也可能发生哈希冲突。
当在步骤112发生匹配时,网络适配器进行到匹配指示步骤114,在该步骤处网络适配器将CQE指示变量设置为“匹配”。在块占用检查步骤116,网络适配器检查当前块中的剩余存储空间是否足够大以存储接收到的分组的净荷(可能包括非零间隙)。如果是,并且如果间隙值为零,则网络适配器38在完整净荷存储步骤120将当前块中接收到的分组的整个净荷连续分散到已经存储的净荷(如果有的话)。
在报头存储步骤124,网络适配器将接收到的分组的报头分散在报头缓冲器86中。在完成步骤128,网络适配器将CQE写入CQ 90。在实施方式中,CQE存储指示是否在上面的步骤112发生匹配的状态或状态值。在步骤128,网络适配器将CQE中的状态值设置为CQE指示变量的当前值。在步骤128之后,该方法循环回到步骤100以接收后续分组。
在步骤116,当块中的剩余存储空间小于净荷大小时,在一个实施方式中,网络适配器38可以将整个净荷分散到新块,或者替代地,在步骤136、140和144将净荷在当前块和新块之间拆分,如本文所述。
在块填充步骤136,网络适配器连续地将部分净荷分散到当前块直到填充整个块(可能在非零间隙之后)。在新块分配步骤140,网络适配器关闭当前块,并将接收缓冲器中可用的新块分配给RQ。
在新块分散步骤144,网络适配器将未分散到封闭块的净荷的剩余部分分散到新块。在步骤144之后,该方法进行到步骤124,以写入接收到的分组的报头,接着在如上所述的步骤128写入CQE(具有当前CQE指示值)。
当在步骤112没有匹配发生时,网络适配器在间隙确定步骤152准备将分组净荷连续地(间隙值为零)存储在当前组块中或存储相对于先前存储的净荷的非零间隙。间隙大小可以被配置为例如一个或多个字节,或系统页面大小。在一些实施方式中,间隙被选择为使得当前分组的净荷将被存储与操作系统页面或系统缓存行对齐。当当前块中没有用于当前净荷的空间时,网络适配器关闭当前块并将接收缓冲器中的新块分配给RQ。当当前块包含两个不同流的分组时,只有两个流中与操作系统页面对齐并具有页面粒度的部分可以被通信栈零复制到用户空间。
注意,使用非零间隙不是强制性的。在替代实施方式中,当前分组的净荷可以与不同流的先前净荷连续地存储。无论有无间隙,CQE都会报告属于不同流的净荷的起始和结束地址,因此这两个净荷将分别复制到用户空间。在这些实施方式中,通信栈将数据传输从接收缓冲器应用到用户空间。网络适配器中的硬件电路将分类为给定流的分组的净荷连续存储在分配给给定流的接收缓冲器的块中,以便使通信栈将连续存储的净荷的整个块传输至用户空间。
在不匹配指示步骤156,网络适配器38设置网络适配器将CQE指示变量设置为“不匹配”。如上所述,将在步骤128在CQE的状态值中报告“不匹配”指示。在步骤160之后,该方法进行到步骤116和进一步的步骤以将接收到的分组的净荷和报头存储在当前块或新块中。
由驱动程序合并的分组
在上面提到的LRO方法中,传输层接收完整的合并分组。相反,驱动程序54从网络适配器38接收关于所接收的分组的净荷、报头和匹配提示的每分组信息。使用这样的详细信息,驱动程序54具有确定分组合并的灵活性,否则这是无法实现的。例如,即使网络适配器通知净荷匹配进行合并,驱动程序也可能决定不合并块中的连续净荷。通常,驱动程序不会合并不匹配的净荷,但可以自由地避免合并匹配净荷,例如,使用除网络适配器使用的匹配标准之外的标准。
在一个实施方式中,驱动程序根据CPU负载确定要合并的分组(或净荷)的数量。例如,驱动程序会随着CPU负载的增加而增加合并分组的数量。由于在所公开的技术中,网络适配器以“尽力而为”的方式合并分组,因此在网络适配器的接收缓冲器中具有未决分组而CPU可以自由处理它们的可能性显着降低。注意,网络适配器将处理和合并的分组与完成通知一起立即发送到主机,而无需在网络适配器中进一步存储。
在一些实施方式中,通信栈包括在支持新API(NAPI)的Linux内核中。使用NAPI的驱动程序向内核提供轮询方法,用于从网络适配器获取多个分组。在NAPI轮询周期中,内核因此经由驱动程序从网络适配器接收多个分组。
上述实施方式是作为示例给出的,也可以使用其他合适的实施方式。
尽管这里描述的实施方式主要解决存储从网络接收的分组的净荷,与系统页面对齐,以强制使用Linux零复制特性,但这里描述的方法和系统也可以用于其他应用,例如需要将数据快速传输到用户空间的其他应用,其中底层通信栈支持零复制数据传输。
在上述实施方式中,主要合并多个分组的净荷以产生大净荷,其当满足对齐和页面粒度条件时,如上所述,被有效地零复制到用户空间。报头与这个大净荷相关联,作为相应的大分组提供给TCP。在其他实施方式中,合并接收的分组的多个净荷以产生有效地提供给TCP的大分组与该大净荷在存储器中的对齐或大净荷是使用标准复制还是使用零复制传输到用户空间无关。
在上述实施方式中,用于存储传入分组的净荷的接收器缓冲器和用于存储传入分组的报头的报头缓冲器驻留在主机中。然而,这不是强制性的。在替代实施方式中,接收缓冲器和报头缓冲器可以驻留在网络适配器中、图形处理单元(GPU)中或任何其他元件的存储器中,使得接收器缓冲器和报头缓冲器可由网络适配器和主机访问。
应当理解,以上描述的实施方式是通过示例的方式引用的,并且以下权利要求不限于已经在上文中具体示出和描述的内容。相反,该范围包括上文描述的各种特征的组合和子组合,以及本领域技术人员在阅读上述描述后会想到的并且在现有技术中未公开的变化和修改。以引用方式并入本专利申请中的文件应被视为本申请的组成部分,除非在这些并入文件中以与本说明书中明确或隐含的定义相冲突的方式定义的任何术语,仅应考虑本说明书中的定义。

Claims (30)

1.一种网络节点,包括:
网络适配器,所述网络适配器耦合到通信网络;和
主机,所述主机包括运行客户端进程和通信栈的处理器;
其中所述网络适配器被配置为:
从所述通信网络接收分组,并将接收到的所述分组分类为与接收缓冲器中的相应块相关联的相应流;
在所述块之间分配接收到的所述分组的净荷,以便将归类到给定流的分组的所述净荷存储在分配给所述给定流的给定块中;以及
将所述给定块中的所述净荷通知所述通信栈,以将所述给定块中的所述净荷传输到所述客户端进程。
2.根据权利要求1所述的网络节点,其中所述处理器还被配置为运行在所述网络适配器和所述通信栈之间进行调解的驱动程序,其中所述网络适配器被配置为经由所述驱动程序将所述给定块中的所述净荷通知给所述通信栈。
3.根据权利要求2所述的网络节点,其中所述驱动程序被配置为在所述给定块中构造包括两个或更多个连续净荷的合并净荷,并且将所述合并净荷通知给所述通信栈。
4.根据权利要求2所述的网络节点,其中所述给定块中的所述净荷包括满足用于合并的匹配标准的第一净荷和第二净荷,并且其中所述驱动程序被配置为基于除了所述匹配标准之外的标准来避免合并所述第一净荷和第二净荷。
5.根据权利要求2所述的网络节点,其中所述给定块中的第一净荷和第二净荷属于不同的相应流的分组,并且其中所述网络适配器被配置为通知所述驱动程序所述第一净荷和第二净荷对于合并不匹配。
6.根据权利要求1所述的网络节点,其中响应于检测到所述给定块中可用的存储空间小于要存储在所述给定块中的净荷,所述网络适配器被配置为向所述给定流分配另一块,并将所述净荷存储在所述另一块中。
7.根据权利要求1所述的网络节点,其中响应于检测到所述给定块中可用的存储空间小于要存储在所述给定块中的净荷,所述网络适配器被配置为向所述给定流分配另一块,并在所述块和所述另一块之间拆分存储所述净荷。
8.根据权利要求1所述的网络节点,其中接收到的所述分组至少属于第一流和第二流,并且其中所述网络适配器被配置为将所述接收缓冲器中的不同的相应块分配给所述第一流和第二流。
9.根据权利要求1所述的网络节点,其中所述通信栈被配置为将连续存储在所述组块中的两个或更多个净荷的直接数据传输应用到用户空间。
10.根据权利要求9所述的网络节点,其中所述接收缓冲器驻留在所述主机的存储器中,其中所述通信栈被配置为仅当所述两个或更多个净荷(i)在所述接收缓冲器中对齐到所述操作系统页面和(ii)具有操作系统页面粒度时才应用所述直接数据传输。
11.根据权利要求1所述的网络节点,其中所述通信栈包括在运行在内核空间中的操作系统的内核中,并且其中所述通信栈被配置为将所述给定块中的一个或多个净荷传输到用户空间中的所述客户端进程。
12.根据权利要求1所述的网络节点,其中所述通信栈包括在用户空间中运行的通信程序,并且其中所述通信栈被配置为将所述给定块中的一个或多个净荷直接传输到所述用户空间中的所述客户端进程。
13.根据权利要求1所述的网络节点,其中所述网络适配器被配置为将接收到的所述分组的报头存储在报头缓冲器中,并将与所述给定块中的接收到的所述分组的净荷相对应的所存储的报头通知给所述通信栈。
14.根据权利要求13所述的网络节点,其中所述通信栈或在所述网络适配器和所述通信栈之间进行调解的驱动程序被配置为基于存储在所述报头缓冲器中的所述报头以及存储在所述给定块中的一个或多个净荷产生要传输到所述客户端进程的合并分组。
15.一种通信方法,包括:
在包括耦合到通信网络的网络适配器的网络节点中,所述网络节点包括主机,所述主机包括运行客户端进程和通信栈的处理器,
由所述网络适配器从所述通信网络接收分组,并将接收到的所述分组分类为与接收缓冲器中的相应块相关联的相应流;
在所述块之间分配接收到的所述分组的净荷,以便将归类到给定流的分组的净荷存储在分配给所述给定流的给定块中;以及
将所述给定块中的所述净荷通知所述通信栈,以将所述给定块中的所述净荷传输到所述客户端进程。
16.根据权利要求15所述的方法,并且包括由所述处理器运行在所述网络适配器和所述通信栈之间进行调解的驱动程序,其中通知所述通信栈包括经由所述驱动程序将所述给定块中的所述净荷通知给所述通信栈。
17.根据权利要求16所述的方法,并且包括由所述驱动程序在所述给定块中构造包括两个或更多个连续净荷的合并净荷,并且将所述合并净荷通知给所述通信栈。
18.根据权利要求16所述的方法,其中所述给定块中的所述净荷包括满足用于合并的匹配标准的第一净荷和第二净荷,并且其中构造所述合并净荷包括基于除了所述匹配标准之外的标准来避免合并所述第一净荷和第二净荷。
19.根据权利要求16所述的方法,其中所述给定块中的第一净荷和第二净荷属于不同的相应流的分组,并且其中通知通信栈包括经由所述驱动程序通知所述通信栈所述第一净荷和第二净荷对于合并不匹配。
20.根据权利要求15所述的方法,其中响应于检测到所述给定块中可用的存储空间小于要存储在所述给定块中的净荷,向所述给定流分配另一块,并将所述净荷存储在所述另一块中。
21.根据权利要求15所述的方法,其中响应于检测到所述给定块中可用的存储空间小于要存储在所述给定块中的净荷,向所述给定流分配另一块,并在所述块和所述另一块之间拆分存储所述净荷。
22.根据权利要求15所述的方法,其中接收到的分组至少属于第一流和第二流,并且包括将所述接收缓冲器中的不同的相应块分配给所述第一流和第二流。
23.根据权利要求15所述的方法,并且包括:通过所述通信栈将连续存储在所述组块中的两个或更多个净荷的直接数据传输应用到用户空间。
24.根据权利要求23所述的方法,其中所述接收缓冲器驻留在所述主机的存储器中,其中应用所述直接数据传输包括仅数据(i)在所述接收缓冲器中对齐到所述操作系统页面和(ii)具有操作系统页面粒度时才将所述直接数据传输应用到用户空间。
25.根据权利要求15所述的方法,其中所述通信栈包括在运行在内核空间中的操作系统的内核中,并且包括将所述给定块中的一个或多个净荷传输到用户空间中的所述客户端进程。
26.根据权利要求15所述的方法,其中所述通信栈包括在用户空间中运行的通信程序,并且包括将所述给定块中的一个或多个净荷直接传输到所述用户空间中的所述客户端进程。
27.根据权利要求15所述的方法,还包括将接收到的所述分组的报头存储在报头缓冲器中,并将与所述给定块中的接收到的所述分组的净荷相对应的所存储的报头通知给所述通信栈。
28.根据权利要求27所述的方法,还包括由所述通信栈或在所述网络适配器和所述通信栈之间进行调解的驱动程序基于存储在所述报头缓冲器中的所述报头以及存储在所述给定块中的一个或多个净荷产生要传输到所述客户端进程的合并分组。
29.一种网络适配器,包括:
网络接口,所述网络接口被配置为连接到通信网络;
耦合到主机的主机接口,所述主机包括运行客户端进程和通信栈的处理器;和
分组处理电路,所述分组处理电路被配置为:
从所述通信网络接收分组,并将接收到的所述分组分类为与接收缓冲器中的相应块相关联的相应流;
在所述块之间分配接收到的所述分组的净荷,以便将归类到给定流的分组的净荷存储在分配给所述给定流的给定块中;以及
将所述给定块中的所述净荷通知所述通信栈,以将所述给定块中的所述净荷传输到所述客户端进程。
30.一种通信方法,包括:
在连接到通信网络和主机的网络适配器中,所述主机包括运行客户端进程和通信栈的处理器,
从所述通信网络接收分组,并将接收到的所述分组分类为与接收缓冲器中的相应块相关联的相应流;
在所述块之间分配接收到的所述分组的净荷,以便将归类到给定流的分组的净荷存储在分配给所述给定流的给定块中;以及
将所述给定块中的所述净荷通知所述通信栈,以将所述给定块中的所述净荷传输到所述客户端进程。
CN202110756878.8A 2020-07-19 2021-07-05 基于网络适配器生成的提示合并分组 Pending CN114024911A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/932,765 2020-07-19
US16/932,765 US20220021629A1 (en) 2020-07-19 2020-07-19 Coalescing packets based on hints generated by network adapter

Publications (1)

Publication Number Publication Date
CN114024911A true CN114024911A (zh) 2022-02-08

Family

ID=79021386

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110756878.8A Pending CN114024911A (zh) 2020-07-19 2021-07-05 基于网络适配器生成的提示合并分组

Country Status (3)

Country Link
US (1) US20220021629A1 (zh)
CN (1) CN114024911A (zh)
DE (1) DE102021207394A1 (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11595472B2 (en) 2021-01-19 2023-02-28 Mellanox Technologies, Ltd. Controlling packet delivery based on application level information
US20230102614A1 (en) * 2021-09-27 2023-03-30 Qualcomm Incorporated Grouping data packets at a modem
US11757796B2 (en) * 2021-09-29 2023-09-12 Mellanox Technologies, Ltd. Zero-copy processing
US11792139B2 (en) 2022-01-24 2023-10-17 Mellanox Technologies, Ltd. Efficient packet reordering using hints

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101873255A (zh) * 2009-04-27 2010-10-27 阿瓦雅公司 分组网络中的相关媒体流的动态缓冲和同步
US7826469B1 (en) * 2009-03-09 2010-11-02 Juniper Networks, Inc. Memory utilization in a priority queuing system of a network device
CN103516622A (zh) * 2012-05-24 2014-01-15 马维尔国际贸易有限公司 网络交换机中的灵活队列
US20150172226A1 (en) * 2013-12-18 2015-06-18 Mellanox Technologies Ltd. Handling transport layer operations received out of order
CN104956633A (zh) * 2013-11-25 2015-09-30 华为技术有限公司 光线路终端、分配点单元、系统及数据流调度方法
US20180267919A1 (en) * 2017-03-16 2018-09-20 Mellanox Technologies, Ltd. Receive queue with stride-based data scattering
CN110225550A (zh) * 2014-03-06 2019-09-10 思科技术公司 实现反射式eps承载的系统和方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6728265B1 (en) * 1999-07-30 2004-04-27 Intel Corporation Controlling frame transmission
US6799200B1 (en) * 2000-07-18 2004-09-28 International Business Machines Corporaiton Mechanisms for efficient message passing with copy avoidance in a distributed system
US20060045109A1 (en) * 2004-08-30 2006-03-02 International Business Machines Corporation Early interrupt notification in RDMA and in DMA operations
US7721299B2 (en) 2005-08-05 2010-05-18 Red Hat, Inc. Zero-copy network I/O for virtual hosts
JP4942375B2 (ja) * 2006-03-27 2012-05-30 株式会社ソニー・コンピュータエンタテインメント ネットワーク処理装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7826469B1 (en) * 2009-03-09 2010-11-02 Juniper Networks, Inc. Memory utilization in a priority queuing system of a network device
CN101873255A (zh) * 2009-04-27 2010-10-27 阿瓦雅公司 分组网络中的相关媒体流的动态缓冲和同步
CN103516622A (zh) * 2012-05-24 2014-01-15 马维尔国际贸易有限公司 网络交换机中的灵活队列
CN104956633A (zh) * 2013-11-25 2015-09-30 华为技术有限公司 光线路终端、分配点单元、系统及数据流调度方法
US20150172226A1 (en) * 2013-12-18 2015-06-18 Mellanox Technologies Ltd. Handling transport layer operations received out of order
CN110225550A (zh) * 2014-03-06 2019-09-10 思科技术公司 实现反射式eps承载的系统和方法
US20180267919A1 (en) * 2017-03-16 2018-09-20 Mellanox Technologies, Ltd. Receive queue with stride-based data scattering

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李世星;杨惠;龙永新;刘三毛;: "基于端系统应用的分组I/O加速技术", 微型机与应用, no. 07, 10 April 2016 (2016-04-10) *

Also Published As

Publication number Publication date
DE102021207394A1 (de) 2022-01-20
US20220021629A1 (en) 2022-01-20

Similar Documents

Publication Publication Date Title
CN114024911A (zh) 基于网络适配器生成的提示合并分组
EP3706394B1 (en) Writes to multiple memory destinations
US9965441B2 (en) Adaptive coalescing of remote direct memory access acknowledgements based on I/O characteristics
JP5601601B2 (ja) 通信制御システム、スイッチノード、及び通信制御方法
JP4150336B2 (ja) 共有属性に基づいて圧縮キューペアから複数の仮想キューペアを作成する構成
CN107995129B (zh) 一种nfv报文转发方法和装置
EP2406723B1 (en) Scalable interface for connecting multiple computer systems which performs parallel mpi header matching
US8392565B2 (en) Network memory pools for packet destinations and virtual machines
US8660133B2 (en) Techniques to utilize queues for network interface devices
US9495324B2 (en) Efficient distribution of subnet administration data over an RDMA network
US8880632B1 (en) Method and apparatus for performing multiple DMA channel based network quality of service
US8406230B2 (en) Method and system for classifying packets in a network interface card and interface for performing the same
US8949472B2 (en) Data affinity based scheme for mapping connections to CPUs in I/O adapter
CN100448221C (zh) 在计算机服务器中共享以太网适配器的方法和装置
US8959265B2 (en) Reducing size of completion notifications
US8924605B2 (en) Efficient delivery of completion notifications
US9021125B2 (en) Control path I/O virtualisation
CN114153778A (zh) 跨网络桥接
US20230221874A1 (en) Method of efficiently receiving files over a network with a receive file command
US20230224356A1 (en) Zero-copy method for sending key values
Bencivenni et al. Performance of 10 gigabit ethernet using commodity hardware
US10616116B1 (en) Network traffic load balancing using rotating hash
US9137167B2 (en) Host ethernet adapter frame forwarding
US8041902B2 (en) Direct memory move of multiple buffers between logical partitions
US20220272052A1 (en) Gpu-native packet i/o method and apparatus for gpu application on commodity ethernet

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