CN113411262B - 一种大型接收卸载功能的设置方法和装置 - Google Patents
一种大型接收卸载功能的设置方法和装置 Download PDFInfo
- Publication number
- CN113411262B CN113411262B CN202110527602.2A CN202110527602A CN113411262B CN 113411262 B CN113411262 B CN 113411262B CN 202110527602 A CN202110527602 A CN 202110527602A CN 113411262 B CN113411262 B CN 113411262B
- Authority
- CN
- China
- Prior art keywords
- receiving queue
- lro
- message
- queue
- function
- 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
- 238000000034 method Methods 0.000 title claims abstract description 124
- 230000006870 function Effects 0.000 title claims description 161
- 230000002776 aggregation Effects 0.000 claims description 131
- 238000004220 aggregation Methods 0.000 claims description 131
- 230000008569 process Effects 0.000 claims description 62
- 230000015654 memory Effects 0.000 claims description 26
- 238000004891 communication Methods 0.000 description 26
- 238000012545 processing Methods 0.000 description 23
- 230000000694 effects Effects 0.000 description 17
- 238000003860 storage Methods 0.000 description 15
- 238000010586 diagram Methods 0.000 description 13
- 238000004590 computer program Methods 0.000 description 6
- 230000009286 beneficial effect Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000013507 mapping Methods 0.000 description 3
- 238000003672 processing method Methods 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 2
- 230000004931 aggregating effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000005520 cutting process Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000005111 flow chemistry technique Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000006116 polymerization reaction Methods 0.000 description 1
- 230000002035 prolonged effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/19—Flow control; Congestion control at layers above the network layer
- H04L47/193—Flow control; Congestion control at layers above the network layer at the transport layer, e.g. TCP related
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请公开了一种大型接收卸载功能的设置方法和装置。该方法包括:确定接收队列的大型接收卸载LRO功能的启停信息,该启停信息用于指示开启或停止该接收队列的LRO功能;根据该启停信息,设置该接收队列的LRO功能,以此提高***的整体性能。
Description
技术领域
本申请涉及通信技术领域,尤其涉及一种大型接收卸载(large receiveoffload,LRO)功能的设置方法和装置。
背景技术
LRO是一种卸载技术,由网卡(network interface card,NIC)实现,例如,将传输控制协议(Transmission Control Protocol,TCP)报文切片(segment)的聚合处理过程由处理器卸载到网卡。具体的,当网卡开启或停止LRO功能时,所有接收队列同时开启或停止该功能。当网卡开启LRO功能时,由网卡将接收到的属于同一数据流的TCP报文切片聚合成一个TCP报文或一个大的TCP报文切片。以网卡驱动所在的服务器采用的操作***是Linux操作***为例,网卡驱动可以将聚合得到的TCP报文或大的TCP报文切片转换成套接字缓存(socket buffer,SKB)结构的数据,然后,将SKB结构的数据发送给处理器,再由处理器完成协议栈(如TCP/IP协议栈)的后续处理过程。这样,不需要由处理器执行报文切片的聚合行为以及SKB结构的转换操作,减少处理器的处理开销。
然而,如果聚合效果不好,则开启LRO功能后,会因网卡执行TCP报文切片聚合而导致TCP报文的处理时间延长。因此,如何设置LRO功能的启停从而提高***的整体性能,成为亟待解决的技术问题。
发明内容
本申请提供了一种LRO功能的设置方法和装置,有助于提高***的整体性能。
第一方面,本申请提供了一种LRO功能的设置方法,该方法可以包括:确定接收队列的LRO功能的启停信息,该启停信息用于指示开启或停止该接收队列的LRO功能;根据该启停信息,设置该接收队列的LRO功能。具体的,当该启停信息用于表示开启该接收队列的LRO功能时,开启该接收队列的LRO功能。当该启停信息用于表示停止该接收队列的LRO功能时,停止该接收队列的LRO功能。该技术方案,是基于接收队列粒度设置LRO功能的,这样,通过设置合理的开启或停止接收队列的LRO功能的条件,有助于平衡报文切片的聚合效果与报文切片的处理时长,从而提升***的处理效率和整体性能。
其中,开启接收队列的LRO功能,包括:开启对该接收队列中的属于同一数据流的报文切片进行聚合。可以理解的是,报文切片是否能够进行聚合,还需要看属于同一数据流的报文切片是否满足聚合条件。
可选地,如果接收队列中的连续的多个报文切片属于同一数据流,且序号连续,则该多个报文切片满足聚合条件,否则,该多个报文切片不满足聚合条件。
在一种可能的实现方式中,确定接收队列的LRO功能的启停信息,包括:在该接收队列的LRO功能开启的情况下,统计该接收队列的聚合过程中断的概率;其中,针对该接收队列执行LRO功能后得到的目标对象包括:该接收队列中的报文、该接收队列中的不能参与聚合的报文切片、和/或该接收队列中的多个报文切片聚合后得到的报文切片或报文,如果一个该目标对象是报文切片、且不是所属报文中的最后一个报文切片、且长度小于或等于第一阈值,则该接收队列的聚合过程中断一次;当该接收队列的聚合过程中断的概率大于或等于第二阈值时,确定该启停信息用于指示停止该接收队列的LRO功能。当一个接收队列的聚合过程中断的概率大于或等于第二阈值时,可以认为该接收队列的聚合过程频繁中断,进而可以推测出该接收队列中的属于多个数据流的报文切片之间交织严重。该情况下,由于中断次数较多,可能出现聚合的报文切片数量较少,如果继续针对该接收队列执行LRO功能,不能较好的发挥执行LRO功能所带来的降低CPU占用率的效果,反而会因执行LRO功能,网卡需要逐个判断接收的报文切片是否满足聚合条件而导致对数据的处理速度变慢,从而影响***的整体性能。因此,此时,可以停止该接收队列的LRO功能。
可以理解的是,目标对象具体包括哪一种报文和/或报文切片是根据该接收队列中的对象确定的。可选地,第一阈值和第二阈值中的至少一个是可配置的。第一阈值可以根据接收端服务器的网卡的聚合能力确定,第二阈值可以根据接收队列中报文切片的聚合效果和接收端服务器的网卡处理报文/报文切片的时长来确定。
在一种可能的实现方式中,统计该接收队列的聚合过程中断的概率,包括:统计第一预设时间段内该接收队列的聚合过程中断的次数,以及第一预设时间段内针对该接收队列执行LRO功能后得到的目标对象的数量;根据第一预设时间段内该接收队列的聚合过程中断的次数(标记为x),以及第一预设时间段内针对该接收队列执行LRO功能后得到的目标对象的数量(标记为y),确定该接收队列的聚合过程中断的概率。例如该概率可以根据x除以y求得。当然本申请实施例不限于此。
在一种可能的实现方式中,该方法还包括:从多种阈值组中选择一个阈值组,每个阈值组包括一个第三阈值和一个第四阈值;将所选择的阈值组包括的第三阈值作为所述第一阈值,将所选择的阈值组包括的第四阈值作为所述第二阈值。这样,有助于实现为不同待处理业务(即接收队列中的对象所属的业务),选择不同的阈值,从而有助于提高***的整体性能。
在一种可能的实现方式中,确定接收队列的LRO功能的启停信息,包括:在该接收队列的LRO功能停止的情况下,统计该接收队列中的对象所属的数据流是多流的概率,对象包括报文和/或报文切片;如果统计的该接收队列中的对象所属的数据流是多流的概率小于或等于第五阈值,则确定该启停信息用于指示开启该接收队列的LRO功能。可选地,第五阈值是可配置的。当一个接收队列中的对象所属的数据流是多流的概率小于或等于第五阈值时,可以认为该接收队列的多个数据流之间交织不严重。该情况下,针对该接收队列执行LRO功能,对属于同一数据流的报文切片进行聚合时中断概率较低,可能出现聚合的报文切片数量较多,可以很好地发挥执行LRO功能带来的降低CPU占用率的效果,从而提高***的整体性能。
在一种可能的实现方式中,统计该接收队列中的对象所属的数据流是多流的概率,包括:统计第二预设时间段内该接收队列中的对象所属的数据流是多流的次数和第二预设时间段内该接收队列的对象的数量;其中,如果该接收队列中的相邻两个对象的哈希值不同,则该接收队列的对象所属的数据流是多流的次数加1;根据第二预设时间段内该接收队列中的对象所属的数据流是多流的次数(标记为c)和第二预设时间段内该接收队列的对象的数量(标记为d),确定该接收队列中的对象所属的数据流是多流的概率。例如,该概率可以根据c除以d求得,当然本申请实施例不限于此。
在一种可能的实现方式中,该方法还可以包括:从多个阈值中选择一个阈值,并将所选择的阈值作为所述第五阈值。这样,有助于实现为不同待处理业务(即接收队列中的对象所属的业务),选择不同的阈值,从而有助于提高***的整体性能。
上述第一方面或上述第一方面的任一种可能的实现方式的执行主体可以是接收端服务器,或者是接收端服务器的网卡。其中,接收端服务器是指用于接收数据(包括报文和报文切片)的服务器。对于一个服务器来说,当该服务器用于发送数据时,该服务器被称为是发送端服务器,当该服务器用于接收数据时,该服务器被称为是接收端服务器。
第二方面,本申请提供了一种大型接收卸载LRO功能的设置装置,所述装置包括用于执行第一方面或第一方面任一种可能实现方式中的LRO功能的设置方法的各个模块。
第三方面,本申请提供了一种大型接收卸载LRO功能的设置装置,该装置包括存储器和处理器,存储器用于用于存储计算机执行指令,所述装置运行时,所述处理器执行所述存储器中的计算机执行指令以利用所述LRO功能的设置装置中的硬件资源执行第一方面或第一方面任一种可能实现方式中所述方法的操作步骤。该装置具体可以是接收端服务器,或者是接收端服务器的网卡。
第四方面,本申请还提供了一种计算机可读存储介质,其上储存有计算机程序,当该计算机程序在计算机上运行时,使得计算机执行上述第一方面或第一方面任一种可能的实现方式中任一种可能的方法的操作步骤。
第五方面,本申请还提供了一种计算机程序产品,当其在计算机上运行时,使得第一方面或第一方面任一种可能的实现方式中的任一种可能的方法的操作步骤。
可以理解的是,上述提供的任一种装置或计算机可读存储介质或计算机程序产品等均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考对应的方法中的有益效果,此处不再赘述。
附图说明
图1为本申请实施例提供的一种通信***的结构示意图;
图2为本申请实施例提供的一种缓存区和缓存区描述符、接收队列和对象之间的对应关系的示意图;
图3为本申请实施例提供的一种网卡、端口和接收队列之间的对应关系的示意图;
图4为本申请实施例提供的一种对象和目标对象之间的关系的示意图;
图5为本申请实施例提供的一种LRO功能的设置方法的流程示意图;
图6为本申请实施例提供的另一种LRO功能的设置方法的流程示意图;
图7为本申请实施例提供的一种数据处理方法的流程示意图;
图8为本申请实施例提供的一种LRO功能的设置装置的结构示意图;
图9为本申请实施例提供的一种网卡的硬件结构示意图;
图10为本申请实施例提供的一种服务器的硬件结构示意图。
具体实施方式
下面结合附图进一步介绍本申请提供的技术方案。
图1为本申请实施例提供的一种通信***的结构示意图。如图所示,通信***包括服务器100和服务器200。服务器100和服务器200之间可以通过网络300进行消息通信,网络300包括以太网,也就是说服务器之间使用TCP/IP协议进行通信。发送数据(包括报文和报文切片)的服务器又称为发送端服务器,接收数据的服务器又称为接收端服务器。对于一个服务器来说,当该服务器用于发送数据时,该服务器被称为是发送端服务器,当该服务器用于接收数据时,该服务器被称为是接收端服务器。
服务器100和服务器200中的每个服务器均包括硬件层和软件层,图1中仅示意出了服务器100的结构。其中,服务器100的硬件层包括网卡、存储器以及一个或多个处理器,如中央处理器(central processing unit,CPU)。软件层是运行在硬件层上的程序代码。具体地,软件层又可以分成若干个层,层与层之间通过软件接口通信。软件层从上至下包括应用层、操作***层和驱动层。其中,应用层包括一系列运行应用程序的程序代码。操作***层包括操作***程序代码和协议栈。操作***可以是Linux、Windows或vxWarks等。协议栈是指按照通信协议所涉及的不同层级划分,并处理对应层级数据处理的程序代码的集合。为了便于描述,本申请实施例的以下描述中以操作***是Linux操作***,协议栈是TCP/IP协议栈,且TCP/IP协议栈处理的数据结构是SKB结构为例进行描述。驱动层用于实现硬件层和软件层之间消息交互。驱动层包含网卡驱动等。
为了更好理解本申请实施例提供的技术方案,首先,对本申请实施例涉及的术语和技术进行简单说明。
1)报文、报文切片、对象
本申请实施例中涉及的报文可以是TCP报文或用户数据报协议(user datagramprotocol,UDP)报文等。不同报文的长度可以相同,也可以不同。
将一个报文切分成若干段之后,每段被称为一个报文切片。具体的,发送端服务器中的网卡在接收到来自该发送端服务器的处理器的数据指令后,如果确定发送该数据指令的报文的长度大于阈值,则按照最大传输单元(maximum transmission unit,MTU)如1500B等将该数据指令划分成若干个数据段,每个数据段利用一个报文传输,传输一个数据段的报文可以称为一个报文切片,并依次为每个报文切片分配序号,相邻两个报文切片的序号连续;然后,网卡再将各个报文切片发送至接收端服务器。
为了方便描述,本申请实施例中将发送端服务器中的网卡所发送的报文和报文切片统称为“对象”,或者说,接收端服务器中的网卡所接收的报文和报文切片统称为“对象”。
2)数据流
数据流,是指五元组相同的报文和/或报文切片构成的集合。五元组是指源网络之间互连的协议(internet protocol,IP)、目的IP、源端口号、目的端口号、协议号。也就是说,同一数据流中各个报文和/或报文切片的五元组信息相同,不同数据流的五元组不同。两个五元组不同可以理解为这两个五元组中的至少一项信息不同。
3)缓存区(buffer)和缓存区描述符(buffer descriptor)
缓存区,是用于缓存对象的存储空间。可选地,缓存区可以是网卡中的存储空间。可选地,缓存区也可以是在服务器的其他存储器中划分的存储空间,用于实现缓存对象的功能。
缓存区描述符,是用于描述缓存区的信息,例如,缓存区是否空闲,缓存区的大小等。
4)接收队列(receive queue,RQ)
接收队列,是缓存区描述符构成的序列,接收端服务器可以将接收到的对象存储至接收队列的缓存区描述符所描述的缓存区。为了便于描述,本申请实施例中,将这些对象称为归属于接收队列的对象或接收队列中的对象。一个缓存区中可以存储一个或多个对象,一个对象也可以存储在多个缓存区中。
图2为本申请实施例提供的一种缓存区和缓存区描述符、接收队列和对象之间的对应关系的示意图。如图所示,带双箭头的虚线所连接的缓存区描述符,用于描述该虚线所连接的缓存区。接收队列1上方向右的箭头表示接收队列中缓存区描述符的先后顺序。图2中是以归属于接收队列1的对象包括对象1~对象w,且每个对象存储在一个缓存区中为例进行说明的,其中,w是大于或等于1的整数。
一个接收队列中的不同对象所属的数据流可以相同,也可以不同。在一种可能的实现方式中,对于接收端服务器的网卡来说,可以利用预置哈希算法对各个对象的五元组进行计算获得哈希值,利用哈希值判断一个接收队列中相邻两个对象是否属于同一数据流。如果确定一个接收队列中相邻两个对象的哈希值相同,则认为这两个对象属于同一数据流;如果确定这两个对象的哈希值不同,则认为这两个对象不属于同一数据流。作为另一个可能的实施例,对于接收端服务器的网卡,也可以通过其他方式判断同一接收队列的相邻两个对象是否属于同一数据流,例如,每个对象中携带一个标识数据流的字段,当然本申请实施例不限于此。
5)网卡和物理功能(physical function,PF)
网卡,也可以称为网络接口卡,其主要功能是将多个服务器连接至网络,使得服务器之间能够通过网络互相通信。网卡可以通过外接光纤、电缆等连接到网络中。网卡可以插于计算机的高速通用串行总线(peripheral component interconnect express,PCIe)插槽上,并通过PCIe与服务器连接。或者网卡可以通过某种特定的(或私有的)总线与服务器连接,本申请实施例对此不进行限定。可以理解的是,在物理实现上,网卡可以作为服务器的一部分,也可以是独立于服务器的一个器件/设备。为了便于描述,下文中均将网卡描述为服务器的网卡。
网卡可以包括一个或多个端口,具体是指用于接收数据的端口。通常,每个端口对应一个PF。当然,也可能存在一个端口对应多个PF或多个端口对应一个PF的场景。一个PF可以理解为是一个逻辑上的网卡,其能够完成一个网卡的所有逻辑功能。
一个PF可以支持一个或多个接收队列。其中,一个PF支持哪几个接收队列可以是预定义的。一个PF支持的接收队列,可以认为是该PF管理的接收队列。
图3为本申请实施例提供的一种网卡、端口和接收队列之间的对应关系的示意图。如图所示,网卡包括端口1~n,n是大于或等于1的整数,一个端口对应一个PF。PF1支持m个接收队列(标记为接收队列11~1m),PF2支持k个接收队列(标记为接收队列21~1k),……,PFn支持t个接收队列(标记为接收队列n1~nt),m、k和t均是大于或等于1的整数。
每个PF可以对应一个哈希算法,不同PF对应的哈希算法可以相同,也可以不同。网卡可以根据一个PF对应的哈希算法,对从该PF对应的端口接收到的对象进行哈希运算,得到该对象的哈希值;然后,根据预设的多个哈希值与多个接收队列(即该PF对应的多个接收队列)之间的映射关系,确定该对象对应的接收队列,并将该对象作为该接收队列中的对象。
作为一个可能的实施例,当服务器支持单根输入/输出虚拟化(single-root I/Ovirtualization,SR-IOV)功能时,每个PF还可以对应多个虚拟功能(virtual function,VF),此时,每个VF对应一个或多个接收队列,不同数据流可以分别存储至一个或多个接收队列中。
值得说明的是,本申请实施例对于上述PF和VF的情况处理过程类似,为了便于表述,以一个PF支持一个或多个接收队列为例进行描述。
6)LRO和目标对象
LRO是网卡加速技术,具体是通过接收端服务器的网卡实现报文切片的聚合。网卡的LRO功能开启之后,CPU不需要再执行报文切片的聚合操作,因此可以降低CPU的占用率。
其中,网卡针对一个接收队列执行LRO功能包括如下几个步骤:
步骤1:网卡判断接收队列中的对象是否需要进行聚合操作。
具体的,如果该对象是报文,则网卡不需要对其进行聚合处理,也就是说,如果接收端服务器的网卡接收的报文包含一个完整的数据指令,则不需要进行聚合操作。如果接收端服务器的网卡接收的对象是报文切片,则网卡需要对多个报文切片进行聚合处理。或者说仅有报文切片需要进行聚合操作。
步骤2:如果该对象需要执行LRO流程处理,则判断该对象是否能够参与聚合。
具体的,首先,判断接收队列中的多个报文切片是否满足聚合条件,如果满足,则该多个报文切片均能够参与聚合。其中,如果该多个报文切片是接收队列中连续的多个报文切片,且属于同一数据流且序号连续,则满足聚合条件。更具体的,判断相邻两个报文切片是否满足聚合条件,如果满足,则这两个报文切片均能够参与聚合。其中,这两个报文切片中的在前的报文切片可以是归属于该接收队列的报文切片,也可以是归属于该接收队列的多个报文切片执行聚合之后得到的报文切片;在后的报文切片是归属于该接收队列报文切片。如果这两个报文切片属于同一数据流且序号连续,则满足聚合条件,反之,则不满足聚合条件。
例如,假设接收端服务器的网卡接收到归属于一个接收队列的对象依次包括:报文切片11、报文切片12、报文切片13,且这3个报文切片均是报文1切分所得,则执行LRO功能时,网卡可以先将报文切片11和报文切片12聚合,得到报文切片11+12,再将报文切片11+12与报文切片13聚合。
可选地,聚合条件还包括:聚合后得到的报文切片或报文的长度不超过网卡可支持的最大聚合长度。其中网卡可支持的最大聚合长度可以是一个缓存区的大小(如64k),也可以将其他预设长度作为网卡可支持的最大聚合长度,本申请实施例不限于此。示例的,如果一个报文的长度是128K,且该报文被切分成了8个报文切片,每个报文切片是16K,那么,当一个接收队列中包括的连续的8个对象是该8个报文切片,且接收端服务器的网卡接收的该8个报文切片的序号依次连续时,网卡可以将前4个报文切片和后4个报文切片分别进行聚合。为了方便描述,下文中均以聚合后得到的报文切片或报文的长度不超过网卡可支持的最大聚合长度为例进行说明,在此统一说明,下文不再赘述。
可选地,对于满足聚合条件的多个报文切片,可以每次仅执行两个报文切片的聚合操作,也可以每次执行两个以上报文切片的聚合操作,还可以一次将所有报文切片聚合为一个大的报文切片。
在一种可能的实现方式中,如果一个报文切片的前后相邻的对象与该报文切片均不属于同一数据流,则该报文切片不能参与聚合。
在另一种可能的实现方式中,虽然一个报文切片的前后相邻的对象与该报文切片属于同一数据流;但是,该前后相邻的对象均是报文,或者,该前后相邻的对象均是报文切片但序号与该报文切片的序号不连续,或者,该前后相邻的对象的其中之一是报文,另一个是报文切片但序号与该报文切片的序号不连续,则该报文切片不能参与聚合。
步骤3:网卡对能够参与聚合的对象进行聚合。
目标对象,是针对接收队列中的一个或多个对象执行LRO功能之后得到的。其中,目标对象包括:该接收队列中的报文、该接收队列中的不能参与聚合的报文切片、和/或该接收队列中的多个报文切片聚合后得到的报文切片或报文。也就是说,如果一个对象不需要进行聚合操作,则将该对象作为一个目标对象。如果一个对象需要进行聚合操作,但是不能参与聚合,则将该对象作为一个目标对象。如果一个对象能够参与聚合,则将能够与该对象聚合的所有报文切片和该对象聚合后得到的报文切片或报文作为一个目标对象。
如图4所示,为本申请实施例提供的一种对象和目标对象之间的关系的示意图。图4中,接收队列1中的对象依次包括:报文切片11、报文切片12、报文切片21、报文切片22、报文切片23、报文切片13、报文3。其中,报文切片11~13为报文1切分获得,且报文切片13是报文1的最后一个报文切片;报文切片21~23为报文2切分获得,且报文切片23是报文2的最后一个报文切片。针对接收队列1执行LRO功能之后,得到的目标对象依次是:报文切片11+12、报文2、报文切片13、报文3。其中,报文切片11+12是报文切片11和报文切片12聚合后得到的报文切片。
7)TCP切片卸载(TCP segment offload,TSO)
TSO,是发送端服务器将报文分割成报文切片的过程。TSO功能与LRO功能相配合,共同实现图1所示服务器***的业务加速。具体的:
对于发送端服务器来说,当处理器完成TCP/IP协议栈中处理,要发送报文时,由于TSO功能开启,因此处理器可以将SKB结构的TCP报文发送给网卡驱动,网卡驱动依次将待发送的TCP报文存储至发送队列(send queue,SQ)的缓存区描述符所描述的缓存区,并通知网卡将TCP报文发送出去。网卡接收到通知后,如果确定TCP报文的长度大于阈值,则将TCP报文分割成若干个TCP报文切片,并将TCP报文切片封装新的报文头并发送出去。其中,发送队列是非空闲缓存区的描述符构成的序列,用于发送端服务器发送数据,例如服务器可以依次发送队列的缓存区描述符所描述的缓存区中存储的数据。
对于接收端服务器来说,网卡接收到TCP报文切片后,由于LRO功能开启,因此网卡对TCP报文切片进行聚合,然后利用直接内存访问(direct memory access,DMA)技术将聚合后的TCP报文或大的TCP报文切片存储至接收队列的缓存区描述符所描述的缓存区,当完成将一个或多个TCP报文或TCP报文切片DMA到缓存区中之后,网卡可以通过中断机制通知网卡驱动。网卡驱动可以将接收队列的缓存区描述符所描述的缓存区中的TCP报文或TCP报文切片整合成SKB结构,发送给处理器,由处理器继续完成TCP/IP协议栈的处理,由于处理器直接接收了TCP报文或大的TCP报文切片,减少了处理器聚合报文切片的工作量,可以节省聚合TCP报文切片而造成的CPU开销。
8)其他术语
本申请实施例中的术语“至少一个(种)”包括一个(种)或多个(种)。“多个(种)”是指两个(种)或两个(种)以上。例如,A、B和C中的至少一种,包括:单独存在A、单独存在B、同时存在A和B、同时存在A和C、同时存在B和C,以及同时存在A、B和C。在本申请的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。“多个”是指两个或多于两个。另外,为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
传统技术中是基于网卡粒度对所有接收队列统一开启或停止LRO功能的,也就是说,如果一个网卡支持多个接收队列,则网卡只能同时开启或同时停止该多个接收队列的LRO功能。假设一个网卡支持多个接收队列,那么,可能存在:对于该多个接收队列中的部分接收队列来说,因属于不同数据流的报文切片交叉而造成聚合过程频繁中断而达不到很好的聚合效果;对于另一部分接收队列来说,聚合效果很好。如果采用传统技术,则无论开启还是停止该网卡的LRO功能,均不能有效提高***的整体性能。其中,因属于不同数据流的报文切片交叉而造成聚合过程频繁中断而达不到很好的聚合效果的一种示例为:极端情况下,一个接收队列中的任意相邻两个报文切片均不满足聚合条件,该情况下,会由于每个报文切片都进入聚合流程,而拖慢报文切片经过网卡的时间,从而影响***的整体性能。
本申请实施例提供的技术方案基于接收队列粒度开启或停止LRO功能。对于同一网卡中的任意一个接收队列来说,可以根据该接收队列中可聚合报文切片的情况分别动态设置各个接收队列的LRO功能。同一时刻,可以仅开启部分接收队列的LRO功能,对于另一部分接收队列关闭其LRO功能。通过分别动态自适应设置各个接收队列是否支持LRO功能,可以有效保证接收端网卡的聚合效果,避免不同数据流的报文切片交叉而造成聚合过程频繁中断而达不到很好的聚合效果的问题,提升接收端服务器的网卡的聚合效果和数据处理效率,进而提升整个***的性能。
接下来,结合附图对本申请实施例提供的LRO功能的设置方法进行详细说明。
如图5所示,为本申请实施例提供的一种LRO功能的设置方法的流程示意图。图5所示的方法的执行主体可以是接收端服务器。本申请实施例可以针对接收端服务器的网卡的各个接收队列分别开启或停止LRO功能,对于各个接收队列的开启和停止的方法相同,为便于描述,以一个处理多个数据流的接收队列为例进行描述。图5所示的方法包括如下步骤:
S101:在接收队列的LRO功能开启的情况下,统计第一预设时间段内该接收队列的聚合过程中断的次数x,以及第一预设时间段内针对该接收队列执行LRO功能得到的目标对象的数量y。目标对象包括:该接收队列中的报文、该接收队列中的不能参与聚合的报文切片、和/或该接收队列中的多个报文切片聚合后得到的报文切片或报文。
其中,如果接收队列中的一个目标对象是报文切片、且不是所属报文中的最后一个报文切片、且长度小于或等于第一阈值,则该接收队列的聚合过程中断一次。据此,可以确定第一预设时间段内该接收队列的聚合过程中断的次数x。其中,使得接收队列的聚合过程中断一次的报文切片,可以是该接收队列中的没有参与聚合的报文切片,或者可以是参与聚合后得到的且长度小于或等于第一阈值的报文切片。
S102:根据第一预设时间段内该接收队列的聚合过程中断的次数x和第一预设时间段内针对该接收队列执行LRO功能得到的目标对象的数量y,确定该接收队列的聚合过程中断的概率。例如,可以通过x除以y获得该接收队列的聚合过程中断的概率。
S103:当该接收队列的聚合过程中断的概率大于或等于第二阈值时,确定启停信息用于指示停止该接收队列的LRO功能。
当一个接收队列的聚合过程中断的概率大于或等于第二阈值时,可以认为该接收队列的聚合过程频繁中断,进而可以推测出该接收队列中的属于多个数据流的报文切片之间交织严重。该情况下,由于中断次数较多,可能出现聚合的报文切片数量较少,如果继续针对该接收队列执行LRO功能,不能较好的发挥执行LRO功能所带来的降低CPU占用率的效果,反而会因执行LRO功能,网卡需要逐个判断接收的报文切片是否满足聚合条件而导致对数据的处理速度变慢,从而影响***的整体性能。因此,此时,可以停止该接收队列的LRO功能。
可以理解的是,当一个接收队列的聚合过程中断的概率小于第二阈值时,可以继续针对该接收队列执行LRO功能。此时,可以重新开始计时,并重新统计第一预设时间段内该接收队列的聚合过程中断的概率,依此类推,在某一次统计周期内得到的该接收队列的聚合过程中断的概率大于或等于第二阈值时,停止该接收队列的LRO功能。
上述S101~S102可以认为是统计该接收队列的聚合过程中断的概率的一种可能的实现方式。上述S101~S103可以认为是确定接收队列的LRO功能的启停信息的一种可能的实现方式。S104是根据启停信息设置该接收队列的LRO功能的一种可能的实现方式。
S104:根据启停信息,停止该接收队列的LRO功能。
如图6所示,为本申请实施例提供的一种LRO功能的设置方法的流程示意图。图6所示的方法的执行主体可以是接收端服务器。图6所示的方法包括如下步骤:
S201:在接收队列的LRO功能停止的情况下,统计第二预设时间段内该接收队列中的对象所属的数据流是多流的次数c,以及第二预设时间段内归属于该接收队列的对象的数量d。其中,如果该接收队列中的相邻两个对象的哈希值不同,说明这两个对象所属的数据流不同,则该接收队列的对象所属的数据流是多流的次数加1。其中,对象是报文切片和报文的统称。
例如,假设第二预设时间段内该接收队列中的对象依次为:报文切片11、报文切片21、报文切片12、报文切片22,且报文切片11~12所属的数据流是数据流1,报文切片21~22所属的数据流是数据流2,则第二预设时间段内该接收队列所属的数据流是多流的次数是3。
S202:根据第二预设时间段内该接收队列中的对象所属的数据流是多流的次数c和第二预设时间段内归属于该接收队列的对象的数量d,确定该接收队列中的对象所属的数据流是多流的概率。例如,可以通过c除以d获得该接收队列中的对象所属的数据流是多流的概率。
S203:如果该接收队列中的对象所属的数据流是多流的概率小于或等于第五阈值,则确定启停信息用于指示开启该接收队列的LRO功能。
当一个接收队列中的对象所属的数据流是多流的概率小于或等于第五阈值时,可以认为该接收队列的多个数据流之间交织不严重。该情况下,针对该接收队列执行LRO功能,对属于同一数据流的报文切片进行聚合时中断概率较低,可能出现聚合的报文切片数量较多,因此可以很好地发挥执行LRO功能带来的降低CPU占用率的效果,从而提高***的整体性能。
可以理解的,当一个接收队列中的对象所属的数据流是多流的概率大于第五阈值时,可以认为该接收队列的多个数据流之间交织严重。此时,可以重新开始计时,并重新统计第二预设时间段内该接收队列中的对象所属的数据流是多流的概率,依此类推,在某一次统计周期内得到的该接收队列中的对象所属的数据流是多流的概率小于或等于第五阈值时,确定开启该接收队列的LRO功能。
S204:根据启停信息,开启该接收队列的LRO功能。
S201~S202可以认为是统计该接收队列的中的对象所属的数据流是多流的概率的一种可能的实现方式。上述S201~S203可以认为是确定接收队列的LRO功能的启停信息的另一种可能的实现方式,S204是根据启停信息设置该接收队列的LRO功能的另一种可能的实现方式。
根据图5和图6所示的实施例可知,本申请实施例提供的LRO功能的设置方法是基于接收队列粒度设置LRO功能的。这样通过设置合理的开启或停止接收队列的LRO功能的条件,有助于平衡报文切片的聚合效果与报文切片的处理时长,从而有助于提高***的整体性能。
可选地,上文中的第一阈值、第二阈值和第五阈值均是可配置的,如根据待处理业务的特征、CPU占用率和LRO功能的聚合效果等信息进行配置。当然,这些阈值中的一个或多个也可以是预定义的。本申请实施例对此不进行限定。
作为一种可选地实现方式,预定义多个阈值组,每个阈值组包括一个第三阈值和一个第四阈值。基于此,在执行S101之前,该方法还可以包括:从该多个阈值组中选择一个阈值组;并将所选择的阈值组包括的第三阈值作为第一阈值,将所选择的阈值组包括的第四阈值作为第二阈值。
作为另一种可能的实现方式,预定义多个阈值。基于此,在执行S201之前,该方法还可以包括:从该多个阈值中选择一个作为第五阈值。
作为另一种可能的实现方式,可以预定义多个阈值组,每个阈值组包括一个第三阈值、一个第四阈值以及一个第六阈值。基于此,该方法还可以包括:从多个阈值组中选择一个阈值组;并将所选择的阈值组包括的第三阈值作为上述第一阈值,将该阈值组包括的第四阈值作为上述第二阈值,并将该阈值组包括的第六阈值作为上述第五阈值。
例如,假设第一阈值标记为pkt.len.threshold,第二阈值标记为lro.interrupt.rate,第五阈值标记为multiple.flow.rate。那么,接收端服务器中预定义的多个阈值组可以如表1所示:
表1
阈值组 | pkt.len.threshold | lro.interrupt.rate | multiple.flow.rate |
阈值组一 | 32K | 50% | 5% |
阈值组二 | 16K | 50% | 15% |
…… | …… | …… | …… |
阈值组N | 8K | 50% | 10% |
可以理解的是,网卡在工作时,可以感知端口的带宽能力,也可以获取定时器的配置信息(如第一预设时间段和第二预设时间段的大小等),而待处理业务不同时,网卡所感知或获取的信息可能不能,因此,可以根据不同业务的特点,预定义不同的阈值组,并在设置接收队列的LRO功能时,根据接收队列中的对象所属的业务的特点,从多个阈值组中选择合适的阈值组,并根据所选择的阈值组设置该接收队列的LRO功能,以达到***性能最大化的目的。
可选地,服务器预定义每个阈值组中的阈值的大小时可以参考但不限于如下至少一种因素:端口速率(如10GE、25GE、40GE、50GE、100GE或200GE等),业务典型IO大小,LRO聚合参数(如缓存区大小和定时器的配置信息)。
上述通过预定义多个阈值,并从该多个阈值中选择其中之一作为第一阈值(或第二阈值或第五阈值),这样,有助于实现为不同待处理业务(即接收队列中的对象所属的业务),选择不同的阈值,也就是说,为不同待处理业务提供个性化服务。基于此,通过预定义合理的阈值,以及合理的选择阈值的方式,有助于提高***的整体性能。
下面,通过一个具体的示例,对上文中描述的LRO功能的设置方法进行具体说明。
如图7所示,为本申请实施例提供的一种数据处理方法的示意图。该数据处理方法包括LRO功能的设置方法。图7所示的方法包括如下步骤:
S300:发送端服务器的处理器在需要向接收端服务器发送报文时,将该报文发送给发送端服务器的网卡。
S301:发送端服务器的网卡接收到报文之后,生成对象。
具体的,如果确定该报文的长度大于阈值,则将该报文切分成若干个报文切片,使得每个报文切片的长度小于该阈值,并为每个报文切片封装报文头,并将封装报文头后的报文切片作为一个对象。如果该报文的长度小于或等于该阈值,则将该报文作为一个对象。
每个对象包括头信息,该头信息包括该对象的描述信息,如用于表示该对象是报文切片或者报文的信息。另外,对于一个报文中的最后一个报文切片来说,该报文切片的头信息还可以包括结束标记,用于标记该报文切片是该报文切片所属的报文的最后一个报文切片。后续,接收端服务器的网卡可以根据对象的头信息识别该对象是报文切片还是报文。以及一个报文切片是否是其所属的报文的最后一个报文切片。
S302:发送端服务器的网卡将对象发送至接收端服务器。
S303:接收端服务器的网卡通过N个端口接收对象。N≥1,N是整数。
S304:对于通过目标PF对应的端口接收的每个对象来说,接收端服务器的网卡根据目标PF对应的哈希算法计算该对象的哈希值,并根据多个哈希值与多个接收队列之间的映射关系,确定该对象的哈希值对应的接收队列。后续认为该对象归属于该接收队列。
目标PF可以是接收端服务器的网卡支持的任意一个PF。一个端口可以支持一个或多个PF,或者,多个端口可以支持一个PF。不同PF对应的哈希算法可以相同,也可以不同。
多个哈希值与多个接收队列之间的映射关系均可以是预定义的。接收队列的数量可以是目标PF对应的接收队列的数量。哈希值的数量可以是目标PF对应的哈希算法的哈希值的数量。例如,假设目标PF对应的接收队列是接收队列1~16,目标PF对应的哈希算法的哈希值包括哈希值1~32,则哈希值与接收队列之间的对应关系可以是哈希值a和哈希值16+a对应接收队列a,其中,1≤a≤16,a是整数。
S305:对于目标接收队列来说,接收端服务器的网卡可以依次将归属于目标接收队列的每个对象存储至该接收队列包含的缓存区描述符所描述的缓存区。其中,一个缓存区中可以存储一个或多个对象,一个对象也可以存储在多个缓存区中。
如果目标接收队列的LRO功能已开启,则执行S306。
如果目标接收队列的LRO功能已停止,则执行S313。
S306:对于归属于目标接收队列的对象,接收端服务器的网卡执行LRO功能。
例如,对于归属于目标接收队列的连续多个报文切片来说,如果满足聚合条件,则执行聚合,否则,不执行聚合。其中,目标接收队列可以是目标PF对应的任意一个接收队列。当然,可能存在归属于目标接收队列的每个报文切片均不满足聚合条件的情况。
本申请实施例对S305和S306的先后顺序不进行限定。例如可以在执行S305的过程中执行S306,示例的,网卡每确定一个对象所归属的接收队列,就将该对象存储至该接收队列包含的缓存区描述符所描述的缓存区,并同时或先后确定该对象是否需要进行聚合操作。
S307:在针对目标接收队列执行LRO功能的过程中,接收端设备的网卡生成一个或多个目标对象的完成队列元素(complete queue element,CQE)。
接收端设备的网卡在确定每个目标对象之后,生成该目标对象的CQE。其中,一个目标对象是目标接收队列中的报文,或者是目标接收队列中的多个报文切片聚合后得到的报文切片或报文,或者是目标接收队列中的不能参与聚合的报文切片。
接收端设备的网卡可以判断并记录每个目标对象是否需要进行聚合操作。其中,如果当前目标对象是报文,则不需要进行聚合操作。如果当前目标对象是报文切片,则需要进行聚合操作。
接收端设备的网卡可以判断并记录当前报文切片是否是其所属报文中的最后一个报文切片。例如,根据当前报文切片的头信息中是否包含结束标记,来确定当前报文切片是否是其所属报文中的最后一个报文切片。
接收端设备的网卡可以判断并记录每个目标对象的长度。
可选地,当前目标对象的CQE可以包括:表示当前目标对象是否需要进行聚合操作的信息,例如,该信息可以标记为Lro_flag。具体的,如果当前目标对象需要进行聚合操作则Lro_flag=1,否则,Lro_flag=0。
进一步的,如果当前目标对象需要进行聚合操作,则该CQE还可以包括表示当前目标对象是否是其所属报文中的最后一个报文切片的信息。例如,表示当前目标对象是否是所属报文中的最后一个报文切片的信息可以标记为push_flag,具体的,如果是所属报文中的最后一个报文切片,则push_flag=1,否则,push_flag=0。
更进一步的,如果当前目标对象不是其所属报文中的最后一个报文切片,则该CQE还可以包括表示当前目标对象的长度的信息。可选地,该信息可以是当前目标对象的长度,或者是当前目标对象的长度是否小于或等于第一目标预设阈值的信息。例如,表示当前目标对象的长度的信息可以标记为Lro_lenth。当Lro_lenth是当前目标对象的长度是否大于或等于第一目标预设阈值的信息时,如果当前目标对象的长度小于或等于第一目标预设阈值,则Lro_lenth=1,否则,Lro_lenth=0。
S308:接收端设备的网卡生成预设数量个目标对象的CQE之后,向接收端设备的处理器发送通知消息。其中,预设数量的具体取值可以是预定义的,例如通过协议预定义的。
S309:接收端设备的处理器接收到该通知消息之后,从接收端设备的网卡中读取该预设数量个目标对象的CQE。
S310:接收端设备的处理器解析第一预设时间段内读取的目标对象的CQE,并根据解析得到的信息,统计目标接收队列的聚合过程中断的概率。如果该概率大于或等于第二阈值,则处理器确定停止目标接收队列的LRO功能。
该概率是第一预设时间段内接收队列的聚合过程中断的次数,除以第一预设时间段内读取的目标对象的CQE所指示的目标对象的数量(即第一预设时间段内读取的目标对象的CQE数量)得到的。
基于S307中的示例,接收端设备的处理器获得是第一预设时间段内接收队列的聚合过程中断的次数,可以通过如下方式1或方式2实现:
方式1:如果Lro_lenth是当前目标对象的长度,那么,当接收端设备的处理器解析当前目标对象的CQE得到Lro_flag=1、push_flag=0,且Lro_lenth的值小于或等于第一预设阈值时,确定当前目标对象导致目标接收队列的聚合过程中断。否则,确定当前目标对象没有导致目标接收队列的聚合过程中断。
方式2:如果Lro_lenth是当前目标对象的长度是否大于或等于第一预设阈值的信息,那么,当处理器解析当前目标对象的CQE得到Lro_flag=1、push_flag=0,且Lro_lenth=1时,确定当前目标对象导致目标接收队列的聚合过程中断。否则,确定当前目标对象没有导致目标接收队列的聚合过程中断。
依照上述方式1或方式2,可以确定第一预设时间段内取到的每个CQE所指示的目标对象是否导致目标接收队列的聚合过程中断,从而统计出第一预设时间段内目标接收队列的聚合过程中断的概率。
S311:接收端设备的处理器向网卡发送第一指示信息,用于指示停止目标接收队列的LRO功能。
S312:接收端设备的网卡根据第一指示信息,停止目标接收队列的LRO功能。
执行S312之后,则针对如何停止目标接收队列的LRO功能的过程结束。
S313:接收端设备的网卡生成目标接收队列中的一个或多个对象的CQE。
当前目标对象的CQE可以包括:当前对象的哈希值信息。
在一种实现方式中,当前对象的哈希值信息可以是当前对象的哈希值。在另一种实现方式中,当前对象的哈希值信息可以是当前对象的哈希值相对当前对象的前一个对象的哈希值是否有改变。
S314:接收端设备的网卡生成预设数量个目标对象的CQE之后,向接收端设备的处理器发送通知消息。
其中,预设数量的具体取值可以是预定义的,例如通过协议预定义的。
S315:接收端设备的处理器接收到该通知消息之后,从接收端设备的网卡中读取该预设数量个目标对象的CQE。
S316:接收端设备的处理器解析第二预设时间段内读取的目标对象的CQE,并根据解析得到的信息,统计接收队列中的对象所属的数据流是多流的概率。如果该概率小于或等于第五阈值,则接收端设备的处理器确定开启目标接收队列的LRO功能。其中,该概率是第二预设时间段内统计的目标接收队列中的对象所属的数据流是多流的次数,除以第二预设时间段内目标接收队列的对象的数量得到的值。
S317:接收端设备的处理器向接收端设备的网卡发送第二指示信息,用于指示开启目标接收队列的LRO功能。
S318:接收端设备的网卡根据第二指示信息,开启目标接收队列的LRO功能。
执行S318之后,则针对如何开启目标接收队列的LRO功能的过程结束。
需要说明的是,具体实现的过程中,上述步骤S303~S318中的由接收端设备的处理器执行的步骤,可以均被替换为由接收端设备的网卡执行,该情况下,上述步骤S303~S318中的网卡和处理器交互的步骤可以不执行,从而得到一个新的实施例,为了简洁,此处不再描述。
上述主要从方法的角度对本申请实施例提供的方案进行了介绍。为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对LRO功能的设置装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
上文中结合图5至图7,详细描述了根据本申请实施例所提供的LRO功能的设置方法,下面将结合图8至图10,描述根据本申请实施例所提供的LRO功能的设置装置、网卡和服务器。
图8为本申请实施例提供的一种LRO功能的设置装置80的结构示意图。该装置80可以用于执行图5至图7任一附图所示的LRO功能的设置方法。该装置80可以包括:确定单元801和设置单元802。其中,确定单元801,用于确定接收队列的LRO功能的启停信息,所述启停信息用于指示开启或停止该接收队列的LRO功能。设置单元802,用于根据该启停信息,设置该接收队列的LRO功能。例如,结合图5,确定单元801可以用于执行S101~S102,设置单元802可以用于执行S103。又如,结合图6,确定单元801可以用于执行S201~S202,设置单元802可以用于执行S203。
在一种可能的实现方式中,设置单元802具体用于,根据启停信息,开启该接收队列的LRO功能;其中,开启该接收队列的LRO功能,包括:开启对该接收队列中的属于同一数据流的多个报文切片进行聚合。
在一种可能的实现方式中,确定单元801具体用于:在该接收队列的LRO功能开启的情况下,统计该接收队列的聚合过程中断的概率;其中,针对该接收队列执行LRO功能后得到的目标对象包括:该接收队列中的报文、该接收队列中的不能参与聚合的报文切片、和/或该接收队列中的多个报文切片聚合后得到的报文切片或报文,如果一个目标对象是报文切片、且不是所属报文中的最后一个报文切片、且长度小于或等于第一阈值,则该接收队列的聚合过程中断一次;当该接收队列的聚合过程中断的概率大于或等于第二阈值时,确定启停信息用于指示停止该接收队列的LRO功能。例如,结合图5,确定单元801可以用于执行S101~S102。
在一种可能的实现方式中,确定单元801具体用于:统计第一预设时间段内该接收队列的聚合过程中断的次数,以及第一预设时间段内针对该接收队列执行LRO功能后得到的目标对象的数量;根据第一预设时间段内该接收队列的聚合过程中断的次数,以及第一预设时间段内针对该接收队列执行LRO功能后得到的目标对象的数量,确定该接收队列的聚合过程中断的概率。例如,结合图5,确定单元801可以用于执行S101。
在一种可能的实现方式中,该装置80还包括选择单元803,用于:从多种阈值组中选择一个阈值组,每个阈值组包括一个第三阈值和一个第四阈值;将所选择的阈值组包括的第三阈值作为第一阈值,将所选择的阈值组包括的第四阈值作为第二阈值。
在一种可能的实现方式中,确定单元801具体用于:在该接收队列的LRO功能停止的情况下,统计该接收队列中的对象所属的数据流是多流的概率,对象包括报文和/或报文切片;如果统计的该接收队列中的对象所属的数据流是多流的概率小于或等于第五阈值,则确定启停信息用于指示开启该接收队列的LRO功能。例如,结合图6,确定单元801可以用于执行S201~S202。
在一种可能的实现方式中,确定单元801具体用于:统计第二预设时间段内该接收队列中的对象所属的数据流是多流的次数和第二预设时间段内该接收队列的对象的数量;其中,如果该接收队列中的相邻两个对象的哈希值不同,则该接收队列的对象所属的数据流是多流的次数加1;根据第二预设时间段内该接收队列中的对象所属的数据流是多流的次数和第二预设时间段内该接收队列的对象的数量,确定该接收队列中的对象所属的数据流是多流的概率。又如,结合图6,确定单元801可以用于执行S201。
在一种可能的实现方式中,该装置80还包括选择单元803,用于从多个阈值中选择一个阈值,并将所选择的阈值作为第五阈值。
应理解的是,本申请实施例的装置80可以通过专用集成电路(application-specific integrated circuit,ASIC)实现,或可编程逻辑器件(programmable logicdevice,PLD)实现,上述PLD可以是复杂程序逻辑器件(complex programmable logicaldevice,CPLD),现场可编程门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。也可以通过软件实现图5-图6所示的方法时,装置80及其各个模块也可以为软件模块。
本实施例中相关内容的解释以及有益效果的描述等均可参考上述方法实施例。
图9为本申请实施例提供的一种网卡90的硬件结构示意图。如图所示,网卡90包括:至少一个处理器901、通信线路902、存储器903以及通信接口904。其中,通信线路902可以包括一通路,用于在该至少一个处理器901、存储器903以及通信接口904之间传送信息。这里的通信接口904用于网卡90与其他设备或器件进行通信。通信接口904可以包括有线收发器或无线收发器。无线收发器可以包括通信芯片。其中,至少一个处理器901与通信芯片可以集成在一起,也可以是独立设置的。存储器903用于存储执行本申请方案的计算机执行指令,并由处理器901来控制执行。处理器901用于执行存储器903中存储的计算机执行指令,从而实现本申请上述实施例提供的LRO功能的设置方法。本实施例中相关内容的解释以及有益效果的描述等均可参考上述方法实施例。
图10为本申请实施例提供的一种服务器1000的结构示意图。如图所示,服务器1000包括至少一个处理器1001、通信线路1002、存储器1003、网卡1004以及通信接口1005。通信接口1005可以包括有线收发器或无线收发器。无线收发器可以包括通信芯片。其中,至少一个处理器1001与通信芯片可以集成在一起,也可以是独立设置的。
处理器1001可以是一个通用CPU,该处理器1001还可以是其他通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者是任何常规的处理器等。处理器1001还可以是图形处理器(graphics processing unit,GPU)、神经网络处理器(neural network processing unit,NPU)、微处理器、特定应用集成电路(application-specific integrated circuit,ASIC)、或一个或多个用于控制本申请方案程序执行的集成电路。
通信线路1002可以包括一通路,用于在上述组件(如处理器1001、存储器1003、网卡1004和通信接口1005)之间传送信息。
存储器1003可以是只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electrically erasable programmable read-only memory,EEPROM)、只读光盘(compactdisc read-only memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器1003可以是独立存在的,通过通信线路1002与处理器1001相连接。存储器1003也可以和处理器1001集成在一起。本申请实施例提供的存储器1003通常可以具有非易失性。存储器1003用于存储执行本申请方案的计算机执行指令,并由处理器1001来控制执行。处理器1001用于执行存储器1003中存储的计算机执行指令,从而实现本申请上述实施例提供的LRO功能的设置方法。
网卡1004的结构可以参考上述图9,此处不再描述。
通信接口1005,可以是任何收发器一类的装置,用于服务器1000与其他设备通信。
可选地,本申请实施例中的计算机执行指令也可以称之为应用程序代码。
作为一个示例,处理器1001可以包括一个或多个CPU。作为一个示例,服务器1000可以包括多个处理器。这些处理器中的每一个可以是一个单核(single-CPU)处理器,也可以是一个多核(multi-CPU)处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。
上述服务器1000可以是一个通用设备或者是一个专用设备。例如,服务器1000可以是基于X86、ARM的服务器,也可以为其他的专用服务器,如策略控制和计费(policycontrol and charging,PCC)服务器等。本申请实施例不限定服务器1000的类型。ARM是高级精简指令处理器(advanced RISC machines)的英文缩写,RISC是精简指令集计算机(reduced instruction set compute)的英文缩写。
本申请实施例还提供了一种通信***,该通信***可以包括服务器1000,其中服务器1000可以作为接收端服务器。另外,该通信***还包括发送端服务器,用于向接收端服务器发送对象,以使得接收端设备执行上文所述的LRO功能的设置方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机执行指令时,全部或部分地产生按照本申请实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(digitalsubscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,DVD)、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
以上所述,仅为本申请的具体实施方式。熟悉本技术领域的技术人员根据本申请提供的具体实施方式,可想到变化或替换,都应涵盖在本申请的保护范围之内。
Claims (17)
1.一种大型接收卸载LRO功能的设置方法,其特征在于,所述方法包括:
获取网卡中第一接收队列聚合过程的中断概率,所述第一接收队列为多个接收队列中任意一个;根据LRO开启条件和所述中断概率确定所述第一接收队列的启停信息,在接收队列的LRO功能开启的情况下,统计所述接收队列的聚合过程的中断概率;其中,针对所述接收队列执行LRO功能后得到的目标对象包括:所述接收队列中的报文、所述接收队列中的不能参与聚合的报文切片、和/或所述接收队列中的多个报文切片聚合后得到的报文切片或报文,如果一个所述目标对象是报文切片、且不是所属报文中的最后一个报文切片、且长度小于或等于第一阈值,则所述接收队列的聚合过程中断一次;当所述接收队列的聚合过程的中断概率大于或等于第二阈值时,确定所述启停信息用于指示停止所述接收队列的LRO功能;所述LRO开启条件用于指示所述网卡中接收队列开启或关闭LRO功能的规则;
根据所述启停信息设置所述网卡的LRO功能。
2.根据权利要求1所述的方法,其特征在于,所述网卡中包括多个接收队列,每个接收队列可以分别设置所述LRO开启条件。
3.根据权利要求1或2所述的方法,其特征在于,所述启停信息包括开启LRO功能和关闭LRO功能,所述开启LRO功能用于指示开启第一队列中属于同一数据流的多个报文切片进行聚合,所述关闭LRO功能用于指示关闭属于同一数据流的多个报文切片进行聚合。
4.根据权利要求1所述的方法,其特征在于,所述统计所述接收队列的聚合过程中断的概率,包括:
统计第一预设时间段内所述接收队列的聚合过程中断的次数,以及所述第一预设时间段内针对所述接收队列执行LRO功能后得到的目标对象的数量;
根据所述第一预设时间段内所述接收队列的聚合过程中断的次数,以及所述第一预设时间段内针对所述接收队列执行LRO功能后得到的目标对象的数量,确定所述接收队列的聚合过程中断的概率。
5.根据权利要求1或4所述的方法,其特征在于,所述方法还包括:
从多种阈值组中选择一个阈值组,每个阈值组包括一个第三阈值和一个第四阈值;
将所选择的阈值组包括的第三阈值作为所述第一阈值,将所选择的阈值组包括的第四阈值作为所述第二阈值。
6.根据权利要求1所述的方法,其特征在于,所述根据所述LRO开启条件和所述中断概率确定所述第一接收队列的启停信息,包括:
在所述接收队列的LRO功能停止的情况下,统计所述接收队列中的对象所属的数据流是多流的概率,所述对象包括报文和/或报文切片;
如果统计的所述接收队列中的对象所属的数据流是多流的概率小于或等于第五阈值,则确定所述启停信息用于指示开启所述接收队列的LRO功能。
7.根据权利要求6所述的方法,其特征在于,所述统计所述接收队列中的对象所属的数据流是多流的概率,包括:
统计第二预设时间段内所述接收队列中的对象所属的数据流是多流的次数和所述第二预设时间段内所述接收队列的对象的数量;其中,如果所述接收队列中的相邻两个对象的哈希值不同,则所述接收队列的对象所属的数据流是多流的次数加1;
根据所述第二预设时间段内所述接收队列中的对象所属的数据流是多流的次数和所述第二预设时间段内所述接收队列的对象的数量,确定所述接收队列中的对象所属的数据流是多流的概率。
8.根据权利要求6或7所述的方法,其特征在于,所述方法还包括:
从多个阈值中选择一个阈值,并将所选择的阈值作为所述第五阈值。
9.一种大型接收卸载LRO功能的设置装置,其特征在于,所述装置包括:
确定单元,用于获取网卡中第一接收队列聚合过程的中断概率,所述第一接收队列为多个接收队列中任意一个;根据LRO开启条件和所述中断概率确定所述第一接收队列的启停信息,在接收队列的LRO功能开启的情况下,统计所述接收队列的聚合过程的中断概率;其中,针对所述接收队列执行LRO功能后得到的目标对象包括:所述接收队列中的报文、所述接收队列中的不能参与聚合的报文切片、和/或所述接收队列中的多个报文切片聚合后得到的报文切片或报文,如果一个所述目标对象是报文切片、且不是所属报文中的最后一个报文切片、且长度小于或等于第一阈值,则所述接收队列的聚合过程中断一次;以及,当所述接收队列的聚合过程的中断概率大于或等于第二阈值时,确定所述启停信息用于指示停止所述接收队列的LRO功能;所述LRO开启条件用于指示所述网卡中接收队列开启或关闭LRO功能的规则;
设置单元,用于根据所述启停信息设置所述网卡的LRO功能。
10.根据权利要求9所述的装置,其特征在于,所述网卡中包括多个接收队列,每个接收队列可以分别设置所述LRO开启条件。
11.根据权利要求9或10所述的装置,其特征在于,所述启停信息包括开启LRO功能和关闭LRO功能,所述开启LRO功能用于指示开启第一队列中属于同一数据流的多个报文切片进行聚合,所述关闭LRO功能用于指示关闭属于同一数据流的多个报文切片进行聚合。
12.根据权利要求9所述的装置,其特征在于,
所述确定单元,还用于统计第一预设时间段内所述接收队列的聚合过程中断的次数,以及所述第一预设时间段内针对所述接收队列执行LRO功能后得到的目标对象的数量;以及,根据所述第一预设时间段内所述接收队列的聚合过程中断的次数,以及所述第一预设时间段内针对所述接收队列执行LRO功能后得到的目标对象的数量,确定所述接收队列的聚合过程中断的概率。
13.根据权利要求9或10所述的装置,其特征在于,
所述确定单元,还用于从多种阈值组中选择一个阈值组,每个阈值组包括一个第三阈值和一个第四阈值;将所选择的阈值组包括的第三阈值作为所述第一阈值,将所选择的阈值组包括的第四阈值作为所述第二阈值。
14.根据权利要求9所述的装置,其特征在于,
所述确定单元,还用于在所述接收队列的LRO功能停止的情况下,统计所述接收队列中的对象所属的数据流是多流的概率,所述对象包括报文和/或报文切片;如果统计的所述接收队列中的对象所属的数据流是多流的概率小于或等于第五阈值,则确定所述启停信息用于指示开启所述接收队列的LRO功能。
15.根据权利要求14所述的装置,其特征在于,
所述确定单元,还用于统计第二预设时间段内所述接收队列中的对象所属的数据流是多流的次数和所述第二预设时间段内所述接收队列的对象的数量;其中,如果所述接收队列中的相邻两个对象的哈希值不同,则所述接收队列的对象所属的数据流是多流的次数加1;根据所述第二预设时间段内所述接收队列中的对象所属的数据流是多流的次数和所述第二预设时间段内所述接收队列的对象的数量,确定所述接收队列中的对象所属的数据流是多流的概率。
16.根据权利要求14或15所述的装置,其特征在于,所述装置还包括选择单元,用于从多个阈值中选择一个阈值,并将所选择的阈值作为所述第五阈值。
17.一种大型接收卸载LRO功能的设置装置,其特征在于,所述装置包括存储器和处理器,所述存储器用于存储计算机执行指令,所述处理器用于调用所述计算机执行指令,使得所述装置运行时,执行所述计算机执行指令以实现如权利要求1至8任一项所述的方法的操作步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110527602.2A CN113411262B (zh) | 2018-11-14 | 2018-11-14 | 一种大型接收卸载功能的设置方法和装置 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811356753.0A CN109688063B (zh) | 2018-11-14 | 2018-11-14 | 一种大型接收卸载功能的设置方法和装置 |
CN202110527602.2A CN113411262B (zh) | 2018-11-14 | 2018-11-14 | 一种大型接收卸载功能的设置方法和装置 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811356753.0A Division CN109688063B (zh) | 2018-11-14 | 2018-11-14 | 一种大型接收卸载功能的设置方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113411262A CN113411262A (zh) | 2021-09-17 |
CN113411262B true CN113411262B (zh) | 2023-09-05 |
Family
ID=66184666
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811356753.0A Active CN109688063B (zh) | 2018-11-14 | 2018-11-14 | 一种大型接收卸载功能的设置方法和装置 |
CN202110527602.2A Active CN113411262B (zh) | 2018-11-14 | 2018-11-14 | 一种大型接收卸载功能的设置方法和装置 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811356753.0A Active CN109688063B (zh) | 2018-11-14 | 2018-11-14 | 一种大型接收卸载功能的设置方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN109688063B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111694781A (zh) * | 2020-04-21 | 2020-09-22 | 恒信大友(北京)科技有限公司 | 基于数据采集***的arm主控板 |
CN112214968A (zh) * | 2020-10-12 | 2021-01-12 | 中国民航信息网络股份有限公司 | 报文转换方法、装置及电子设备 |
CN115733897A (zh) * | 2021-08-27 | 2023-03-03 | 华为技术有限公司 | 数据处理的方法和装置 |
CN114448916A (zh) * | 2021-12-24 | 2022-05-06 | 锐捷网络股份有限公司 | Tipc报文处理方法、装置、设备和存储介质 |
CN115665073B (zh) * | 2022-12-06 | 2023-04-07 | 江苏为是科技有限公司 | 报文处理方法及装置 |
CN117354254B (zh) * | 2023-10-17 | 2024-04-02 | 无锡众星微***技术有限公司 | 一种基于lro超时和中断itr超时的联合中断控制方法和装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6529911B1 (en) * | 1998-05-27 | 2003-03-04 | Thomas C. Mielenhausen | Data processing system and method for organizing, analyzing, recording, storing and reporting research results |
CN101841545A (zh) * | 2010-05-14 | 2010-09-22 | 中国科学院计算技术研究所 | 一种tcp流重组拼包方法和装置 |
US8386644B1 (en) * | 2010-10-11 | 2013-02-26 | Qlogic, Corporation | Systems and methods for efficiently processing large data segments |
EP2843891A1 (en) * | 2013-08-26 | 2015-03-04 | VMWare, Inc. | Traffic and load aware dynamic queue management |
JP2016012801A (ja) * | 2014-06-27 | 2016-01-21 | 富士通株式会社 | 通信装置、通信システム及び通信装置制御方法 |
CN108337188A (zh) * | 2013-08-26 | 2018-07-27 | Vm维尔股份有限公司 | 通信量和负载感知动态队列管理 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090232137A1 (en) * | 2008-03-12 | 2009-09-17 | Dell Products L.P. | System and Method for Enhancing TCP Large Send and Large Receive Offload Performance |
US9384033B2 (en) * | 2014-03-11 | 2016-07-05 | Vmware, Inc. | Large receive offload for virtual machines |
US9742682B2 (en) * | 2014-03-11 | 2017-08-22 | Vmware, Inc. | Large receive offload for virtual machines |
-
2018
- 2018-11-14 CN CN201811356753.0A patent/CN109688063B/zh active Active
- 2018-11-14 CN CN202110527602.2A patent/CN113411262B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6529911B1 (en) * | 1998-05-27 | 2003-03-04 | Thomas C. Mielenhausen | Data processing system and method for organizing, analyzing, recording, storing and reporting research results |
CN101841545A (zh) * | 2010-05-14 | 2010-09-22 | 中国科学院计算技术研究所 | 一种tcp流重组拼包方法和装置 |
US8386644B1 (en) * | 2010-10-11 | 2013-02-26 | Qlogic, Corporation | Systems and methods for efficiently processing large data segments |
EP2843891A1 (en) * | 2013-08-26 | 2015-03-04 | VMWare, Inc. | Traffic and load aware dynamic queue management |
CN108337188A (zh) * | 2013-08-26 | 2018-07-27 | Vm维尔股份有限公司 | 通信量和负载感知动态队列管理 |
JP2016012801A (ja) * | 2014-06-27 | 2016-01-21 | 富士通株式会社 | 通信装置、通信システム及び通信装置制御方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113411262A (zh) | 2021-09-17 |
CN109688063B (zh) | 2021-05-18 |
CN109688063A (zh) | 2019-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113411262B (zh) | 一种大型接收卸载功能的设置方法和装置 | |
US9965441B2 (en) | Adaptive coalescing of remote direct memory access acknowledgements based on I/O characteristics | |
CN107003905B (zh) | 针对可配置计算资源的本地服务链而动态分配资源的技术 | |
US9313047B2 (en) | Handling high throughput and low latency network data packets in a traffic management device | |
US12047478B2 (en) | Message segmentation | |
US11620227B2 (en) | Data processing method, network interface card, and server | |
CN113014508A (zh) | 一种报文处理方法及装置 | |
WO2021208092A1 (zh) | 一种有状态业务的处理方法及装置 | |
CN105978821B (zh) | 网络拥塞避免的方法及装置 | |
US11303571B2 (en) | Data communication method and data communications network | |
US11876859B2 (en) | Controlling packet delivery based on application level information | |
CN117157957A (zh) | 交换机引发的拥塞消息 | |
WO2023186046A1 (zh) | 一种发送报文的方法和装置 | |
WO2023107208A1 (en) | Congestion control | |
EP3709164A1 (en) | Software assisted hashing to improve distribution of a load balancer | |
US20220103479A1 (en) | Transmit rate based on detected available bandwidth | |
CN115242726A (zh) | 队列的调度方法和装置及电子设备 | |
CN113328953A (zh) | 网络拥塞调整的方法、装置和存储介质 | |
US20220179805A1 (en) | Adaptive pipeline selection for accelerating memory copy operations | |
WO2015032430A1 (en) | Scheduling of virtual machines | |
CN117097679A (zh) | 一种网络中断的聚合方法、装置及网络通信设备 | |
US20230029796A1 (en) | Stateful service processing method and apparatus | |
CN115514708B (zh) | 拥塞控制方法及装置 | |
US20190007317A1 (en) | Technologies for efficiently determining a root of congestion with a multi-stage network switch | |
EP3016333B1 (en) | Handling high throughput and low latency network data packets in a traffic management device |
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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20211223 Address after: 450046 Floor 9, building 1, Zhengshang Boya Plaza, Longzihu wisdom Island, Zhengdong New Area, Zhengzhou City, Henan Province Applicant after: xFusion Digital Technologies Co., Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Applicant before: HUAWEI TECHNOLOGIES Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |