CN113722074A - 一种数据处理方法、装置及相关设备 - Google Patents
一种数据处理方法、装置及相关设备 Download PDFInfo
- Publication number
- CN113722074A CN113722074A CN202111080052.0A CN202111080052A CN113722074A CN 113722074 A CN113722074 A CN 113722074A CN 202111080052 A CN202111080052 A CN 202111080052A CN 113722074 A CN113722074 A CN 113722074A
- Authority
- CN
- China
- Prior art keywords
- current
- queue
- processing
- backoff parameter
- data packets
- 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
Links
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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本公开提供一种数据处理方法、装置及相关设备,用于处理网卡中的多个接收队列,该方法包括:获取当前队列的当前退避参数;若所述当前退避参数不大于零,则接收所述当前队列所包含的数据包,在对所述数据包进行处理后,获取当前队列被处理的数据包的个数;基于所述数据包的个数,对所述当前队列的当前退避参数进行动态更新;存储所述当前队列的动态更新后的当前退避参数,以用于在对下一循环的多个接收队列进行处理时,判断是否对该队列进行轮询处理。该方法可提高CPU轮询处理队列的效率,从而减少了延时,增大了吞吐。
Description
技术领域
本公开涉及互联网技术领域,尤其涉及一种数据处理方法、装置及相关设备。
背景技术
在网络转发或者IO处理中,一般有两种数据包接收方式:一种为中断触发,另一种方式为轮询。中断触发在流量较小时效率较高,CPU使用率较低,但处理性能较弱,延时较大;为解决处理性能较弱,延时较大的技术问题,可采用轮询方式,但是轮询方式存在一直占用大量CPU的技术问题。
发明内容
本公开提供一种数据处理方法、装置及相关设备,用以解决现有技术中轮询方式中,转发程序循环遍历所有接收队列,一直占用大量CPU的缺陷,实现将CPU处理时间花在大概率忙碌的队列,从而减少了延时,增大了吞吐量。
第一方面,本公开提供一种数据处理方法,用于处理网卡中的多个接收队列,包括:获取当前队列的当前退避参数;若所述当前退避参数不大于零,则接收所述当前队列所包含的数据包,在对所述数据包进行处理后,获取当前队列被处理的数据包的个数;基于所述数据包的个数,对所述当前队列的当前退避参数进行动态更新;存储所述当前队列的动态更新后的当前退避参数,以用于在对下一循环的多个接收队列进行处理时,判断是否对该队列进行轮询处理。
根据本公开提供的一种数据处理方法,所述基于所述数据包的个数,对所述当前队列的当前退避参数进行动态更新进一步包括:若所述数据包的个数大于零,则减小所述当前退避参数,若所述数据包的个数为零,则增大所述当前退避参数。
根据本公开提供的一种数据处理方法,所述方法还包括:若所述当前退避参数大于零,则减小所述当前退避参数,并忽略对所述当前队列的轮询处理。
根据本公开提供的一种数据处理方法,所述减小所述当前退避参数,忽略对所述当前队列的轮询处理进一步包括:若所述当前退避参数为N,则:每次轮询时,将所述当前队列的所述当前退避参数减1,连续N次轮询忽略对所述当前队列的轮询处理;其中,N为自然数。
根据本公开提供的一种数据处理方法,在所述若所述数据包的个数大于零,则减小所述当前退避参数后还包括:对所述当前队列的收包记录进行标记,将用于表征接收到当前队列的数据包的标记存放于当前队列。
根据本公开提供的一种数据处理方法,所述若所述数据包的个数为零,则增大所述当前退避参数进一步包括:判断所述当前队列是否存在用于表征接收到当前队列的数据包的标记,若是,则控制所述当前退避参数呈线性增大;若否,则控制所述当前退避参数呈非线性快速增长。
根据本公开提供的一种数据处理方法,所述非线性快速增长为指数增长。
第二方面,本公开还提供一种数据处理装置,用于处理网卡中多个的接收队列,包括:获取模块、接收处理模块、动态更新模块和存储模块。其中,获取模块,用于获取当前队列的当前退避参数;接收处理模块,用于若所述当前退避参数不大于零,则接收所述当前队列所包含的数据包,在对所述数据包进行处理后,获取当前队列被处理的数据包的个数;动态更新模块,用于基于所述数据包的个数,对所述当前队列的当前退避参数进行动态更新;存储模块,用于存储所述当前队列的动态更新后的当前退避参数,以用于在对下一循环的多个接收队列进行处理时,判断是否对该队列进行轮询处理。
根据本公开提供的一种数据处理装置,所述动态更新模块进一步包括:动态更新单元,用于若所述数据包的个数大于零,则减小所述当前退避参数,若所述数据包的个数为零,则增大所述当前退避参数。
根据本公开提供的一种数据处理装置,所述装置还包括减数忽略模块,所述减数忽略模块,用于若所述当前退避参数大于零,则减小所述当前退避参数,并忽略对所述当前队列的轮询处理。
第三方面,本公开还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述数据处理方法的步骤。
第四方面,本公开还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述数据处理方法的步骤。
第五方面,本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述数据处理方法的步骤。
本公开提供的一种数据处理方法、装置及相关设备,通过判断获取到的当前队列的当前退避参数是否为零,若是,则接收当前队列所包含的数据包,在对数据包进行处理后,获取当前队列被处理的数据包的个数;基于数据包的个数,对当前队列的当前退避参数进行动态更新;存储当前队列的动态更新后的当前退避参数,以用于在对下一循环的多个接收队列进行处理时,判断是否对该队列进行轮询处理。可以看出:
该方法利用本次获取的数据包的个数动态更新退避参数,动态更新后的当前退避参数用于在下一循环时判断是否对当前队列进行轮询处理,通过每次获取到的当前队列的当前退避参数的数值估测该队列的需要处理的可能性,换句话说,每次轮询时只处理退避参数符合条件的队列。
通过这种方式,当网卡中存在大量接收队列需要进行轮询处理时,本申请并不会对每一个队列都进行处理,这使得实际处理的队列数量小于网卡中总的队列数量,因此,CPU处理每一队列的间隔时间变短,从而减少了延时,增大了吞吐量。并且,进一步地,对于轮询时数据需要处理可能性较小的队列,在每次轮询后退避参数也会减小,按照种方式,退避参数满足条件时,也会被CPU处理,从而保证每个队列在一定时间内都会被CPU处理。
附图说明
为了更清楚地说明本公开或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本公开提供的数据处理方法的流程示意图之一;
图2是本公开提供的数据处理方法的流程示意图之二;
图3是本公开提供的数据处理方法的流程示意图之一中基于获取的数据包的个数,对当前队列的当前退避参数进行动态更新的步骤流程示意图;
图4是本公开提供的数据处理方法具体实施的流程示意图;
图5是本公开提供的数据处理装置的结构示意图之一;
图6是本公开提供的数据处理装置的结构示意图之二;
图7是本公开提供的电子设备的结构示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开实施例一部分实施例,而不是全部的实施例。基于本公开实施例中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开实施例保护的范围。
在网络转发或者IO处理中,一般有两种数据包接收方式:一种为中断触发,另一种方式为轮询。中断触发为网卡收到数据包后产生中断,软件响应中断,逐包处理,轮询方式一般使用DPDK,也可以采取其他方式,实现高效率的数据收发,即遍历每个网卡接口的接收队列,如果有数据包,则从该队列接收一定数目的数据包处理;如果查询没有待处理数据包,则继续处理下一个队列。中断触发在流量较小时效率较高,CPU使用率较低,但处理性能较弱,延时较大;轮询方式中,转发程序会循环遍历所有队列,一直占用大量CPU,但一般延迟较小,吞吐量较高。
现有轮询方式一直占用大量CPU是因为转发程序会循环遍历所有队列,而遍历一次所有接口队列的时间会随着队列个数线性增长,如果接口队列很多,比如数百个甚至更多,遍历所有队列需要的时间就很长,造成吞吐性能大幅下降,延迟增大。而在大多数网络中,并不是所有队列都一直同时有很多包待处理,有数据包供处理的队列数小于甚于远小于队列个数,所以遍历每个队列会花费很多时间处理事实上的空闲队列,花费在忙碌队列的时间相应减少。
DPDK是Data Plane Development Kit的缩写,包含了用于加速数据包处理的很多库。
吞吐量是指在一定时间内可以从一个位置传输到另一个位置的数据量。吞吐量测试测量DUT发送的测试帧数等于测试设备发送给它的帧数的最大速率。或者换句话说,它决定了被测设备在零丢包情况下数据传输的速率。这种测量粗略地转化为可用带宽。
延时(延迟)是一帧从发送方到目的地所花费的时间。它是通过网络设备或通过网络并返回测试端口时处理和传播延时的总和。为了测量延时,测试帧通过包含时间戳的网络传输,并且在接收到帧时检查该时间戳。
解决现有技术中轮询方式中,转发程序循环遍历所有接收队列,一直占用大量CPU的缺陷,本公开提供了一种数据处理方法,用于处理网卡中多个的接收队列,参照图1,图1为本公开提供的数据处理方法的流程示意图之一,包括:
步骤S101、获取当前队列的当前退避参数;
步骤S103、若当前退避参数不大于零,则接收当前队列所包含的数据包,在对数据包进行处理后,获取当前队列被处理的数据包的个数;
步骤S105、基于数据包的个数,对当前队列的当前退避参数进行动态更新;
步骤S107、存储当前队列的动态更新后的当前退避参数,以用于在对下一循环的多个接收队列进行处理时,判断是否对该队列进行轮询处理。
本公开实施例提供的数据处理方法,通过判断获取到的当前队列的当前退避参数是否为零,若是,则接收当前队列所包含的数据包,在对数据包进行处理后,获取当前队列被处理的数据包的个数;基于数据包的个数,对当前队列的当前退避参数进行动态更新;存储当前队列的动态更新后的当前退避参数,以用于在对下一循环的多个接收队列进行处理时,判断是否对该队列进行轮询处理。可以看出:
该方法利用本次获取的数据包的个数动态更新退避参数,动态更新后的当前退避参数用于在下一循环时判断是否对当前队列进行轮询处理,通过每次获取到的当前队列的当前退避参数的数值估测该队列的需要处理的可能性,换句话说,每次轮询时只处理退避参数符合条件的队列。
通过这种方式,当网卡中存在大量接收队列需要进行轮询处理时,本申请并不会对每一个队列都进行处理,这使得实际处理的队列数量小于网卡中总的队列数量,因此,CPU处理每一队列的间隔时间变短,从而减少了延时,增大了吞吐量。并且,进一步地,对于轮询时数据需要处理可能性较小的队列,在每次轮询后退避参数也会减小,按照种方式,退避参数满足条件时,也会被CPU处理,从而保证每个队列在一定时间内都会被CPU处理。
下面结合图1对本公开实施例的各个步骤进行解释。
步骤S101、获取当前队列的当前退避参数;
具体来说,当前退避参数的大小依据从当前队列获取的数据包的数量的历史记录预先确定。获取到的当前队列的当前退避参数用于决定这次轮询是否对此队列进行处理。
步骤S103、若当前退避参数不大于零,则接收当前队列所包含的数据包,在对数据包进行处理后,获取当前队列被处理的数据包的个数;
具体来说,数据包由虚拟机或者物理机上的系统生成,发送到网络中,最后到达虚拟网卡或真实网卡的接收队列,排队等候处理。数据包的接收、处理和获取当前队列被处理的数据包的个数均由处理函数实现。
在一个具体实施例中,如received_packets=rxq_handler(q)。这里rxq_handler就是处理函数之一,received_packets就是返回值,即表征的是收到的数据包个数。系统临时内存记录队列q接收到的数据包个数,这个个数会随着处理队列的不同更新。
由于队列可以有很多数据包,但是每次可以只处理一部分,即当前队例所包含的数据包个数可以大于或等于本次处理的当前队列的数据包个数。
步骤S105、基于数据包的个数,对当前队列的当前退避参数进行动态更新;
具体来说,虽然当前退避函数符合条件,但依然存在接收队列中并不存在排队等待处理的数据包,根据数据包的情况调整退避参数,以用于下一次轮询时判断接收队列实时忙碌情况,让CPU仅处理下一次轮询时忙碌可能性大的队列和多次轮询未处理的队列,减少CPU轮询一次需要花费的时间。在具体实施中,数据包个数大于零,说明当前队列存在排队等待处理的数据包,即当前队列此时处于忙碌状态,那么下次轮询时也处于忙碌状态的概率较大,此时应减小当前退避参数,以保证下次轮询时该接收队列仍能被处理。若数据包个数为零,说明当前队列不存在排队等待处理的数据包,即当前队列此时处于空闲状态,那么下次轮询时也处于空闲状态的概率较大,此时应增大当前退避参数,以减少下次轮询时该接收队列被处理的概率。
步骤S107、存储当前队列的动态更新后的当前退避参数,以用于在对下一循环的多个接收队列进行处理时,判断是否对该队列进行轮询处理。
具体来说,动态更新后的当前退避参数用于判断下一循环时是否对当前队列进行轮询处理。轮询处理是指步骤S103、步骤S105的过程。
在一种可选的实施例中,步骤S105进一步包括:
步骤S1051、若数据包的个数大于零,则减小当前退避参数,若数据包的个数为零,则增大当前退避参数。
参照图2,图2为本公开提供的数据处理方法的流程示意图之二,本公开实施例提供的数据处理方法包括:
步骤S201、获取当前队列的当前退避参数;
具体来说,当前退避参数的大小依据从当前队列获取的数据包的数量的历史记录预先确定。获取到的当前队列的当前退避参数用于决定这次轮询是否对此队列进行处理。
步骤S203、判断当前退避参数是否大于零;若是,执行步骤S205,若否,依次执行步骤S207和步骤S209;
具体来说,当前退避参数大于零,则该队列在此次轮询中无需被处理,只需调整该队列的当前退避参数,而当前退避参数小于或等于零时,说明当前队列当前收到数据包的概率较大,需要对该队列进行处理。
步骤S205、减小当前退避参数,并忽略对当前队列的轮询处理;
具体来说,当前退避参数大于零,则该队列在此次轮询中无需被处理,只需调整该队列的当前退避参数,以保证不会有接收队列一直无法被CPU处理。
步骤S207、接收当前队列所包含的数据包,在对数据包进行处理后,获取当前队列被处理的数据包的个数;
具体来说,数据包由虚拟机或者物理机上的系统生成,发送到网络中,最后到达虚拟网卡或真实网卡的接收队列,排队等候处理。数据包的接收、处理和获取当前队列被处理的数据包的个数均由处理函数实现。
在一个具体实施例中,如received_packets=rxq_handler(q)。这里rxq_handler就是处理函数之一,received_packets就是返回值,即表征的是收到的数据包个数。系统临时内存记录队列q接收到的数据包个数,这个个数会随着处理队列的不同更新。
步骤S209、基于数据包的个数,对当前队列的当前退避参数进行动态更新;
具体来说,虽然当前退避函数为零,但依然存在接收队列中并不存在排队等待处理的数据包,根据数据包的情况调整退避参数,判断接收队列实时忙碌情况,让CPU处理时间花在当前大概率忙碌的队列上。动态更新一般是基于接收队列被处理的数据包的个数,即若数据包的个数大于零,则减小当前退避参数,若数据包的个数为零,则增大当前退避参数。
步骤S211、存储当前队列的动态更新后的当前退避参数,以用于在对下一循环的多个接收队列进行处理时,判断是否对该队列进行轮询处理。
具体来说,存储当前队列的当前退避参数用于决定下次轮询是否对此队列进行处理。轮询处理是指步骤S207、步骤S206的过程。需要强调的是,轮询与轮询处理并不相同。这里的轮询是指转发程序循环遍历所有队列的过程,基于步骤S201和步骤S203的结果判断是否进行轮询处理。不管是否进行轮询处理,存储变更后的当前退避参数,用于下一次轮询时基于步骤S201和步骤S203的结果判断是否进行轮询处理。
在一个具体实施例中,步骤S205进一步包括:
步骤S2051、若当前退避参数为N,则每次轮询时,将当前队列的当前退避参数减1,连续N次轮询忽略对当前队列的轮询处理。
在一种具体实施例举例,假设某一接收队例当前退避参数为N,N为大于零的任意一个自然数,每次轮询到该接收队列时,因为当前退避参数大于零,所以每次轮询时都不对该接收队列进行处理,但是有可能在N次后该接收队列有排队处理的数据包,这时,需要对该接受队例进行处理,以保证在一定的时间后,每个数据包都可以被接收。由此,在每次轮询时,将当前队列的当前退避参数减1,这样在N次轮询后,当前退避参数不再大于零,此时可对接收队列进行轮询处理。
在一种可选实施例中,参照图3,图3为本公开提供的数据处理方法的流程示意图之一中基于数据包的个数,对当前队列的当前退避参数进行动态更新的步骤流程示意图,步骤S105具体包括:
步骤S301、判断获取的数据包的个数是否大于零;若是,则执行步骤S303,若否,则执行步骤S305;
具体来说,数据包由虚拟机或者物理机上的系统生成,发送到网络中,最后到达虚拟网卡或真实网卡的接收队列,排队等候处理。数据包的接收、处理和获取当前队列被处理的数据包的个数均由处理函数实现。
在一个具体实施例中,如received_packets=rxq_handler(q)。这里rxq_handler就是处理函数之一,received_packets就是返回值,即表征的是收到的数据包个数。系统临时内存记录队列q接收到的数据包个数,这个个数会随着处理队列的不同更新。
数据包个数大于零则表明,当前队列处于忙碌状态,数据包个数等于零则表明,当前队列处于空闲状态。
步骤S303、减小当前退避参数,对当前队列的收包记录进行标记,将用于表征接收到当前队列的数据包的标记存放于当前队列;
具体实施中,将当前队列的收包记录标记设定为true,用于表征接收到当前队列的数据包。当前队列的收包记录放置在队列的flag里,作为标记。
步骤S305、判断当前队列是否存在用于表征接收到当前队列的数据包的标记,若是,执行步骤S307,若否,则执行步骤S309;
具体来说,当前队列存在之前的收包记录标记true,说明仅为本次轮询未收到数据包,若多次不轮询该队列,队列里可能存在大量等待处理的数据包,而当前队列不存在之前的收包记录标记true,说明多次轮询未收到数据包,该队列中收到等待处理的数据包概率较低,此时可以考虑非线性快速增大当前退避参数,使得多次轮询都可忽略该接收队列,将CPU处理时间花在其他大概率忙碌的队列上。
步骤S307、控制当前退避参数呈线性增大;
具体来说,线性增大一般为每次加一个固定值,固定值可根据实际需要,自行设定。
步骤S309、控制当前退避参数呈非线性快速增长。
具体来说,非线性快速增长可为指数增长或多次增长,但是需要设定当前退避参数最大阈值,超过该阈值后,当前退避参数不再增加,以保证多次轮询后,CPU会对该队列进行轮询处理。
在一种可选实施例中,步骤S309中的非线性快速增长为指数增长。
参照图4,图4为本公开提供的数据处理方法具体实施的流程示意图,在具体应用中,首先(虚拟机或者物理机上的系统)生成一个数据包,这个数据包会发送到网络中,最后到达虚拟网卡或真实网卡的接收队列,排队等候处理。CPU进行轮询时,转发程序循环遍历各个接收队列,并根据各个接收队列的收包情况确定各个接收队列的退避参数,在下一次遍历时,只处理退避参数不大于零的队列,对于退避参数大于零的队列减少其退避参数后就继续处理下一个队列。对于退避参数不大于零的队列,接收其排队等待处理的数据包并返回数据包个数,若队列存在排队等待处理的数据包,减少退避参数并将以前收包记录设为true,若队列不存在排队等待处理的数据包,判断是否多次未收到数据包,若是,则快速增长其退避参数,若否,则线性增长其退避参数。这样,每次轮询的队列总数小于甚至远小于存在的队列总数,将CPU处理时间花在大概率忙碌的队列,从而减少了延时,增大了吞吐量。
需要说明的是,对于退避的队列,只有首包处理略有延迟,后续流量启动后,退避取消,不再有较大延时。这是因为,数据包T1时间首先到达接收队列q并等待处理,在T2时间接收处理函数从队列q中拿出数据包并开始处理,然后T3时间处理完毕,则总的延迟是(T2-T1)+(T3-T2),也就是T3-T1。
对于退避的队列,即使数据包首包已经到达了接收队列,因为后续几次都不会处理这个队列,所以T2-T1就相对较大,所以说略有延时。
流量启动,指的是有源源不断的数据包产生,因为每次都能接收到数据包,所以退避参数会快速减少甚至归零,也就是说这个队列不再退避,每次都会处理这个队列,所以对后续数据包每次处理T2-T1就相对首包而言较小,所以说不再有较大的延迟。
下面对本公开实施例提供的数据处理装置进行描述,下文描述的数据处理装置与上文描述的数据处理方法可相互对应参照。
参照图5,图5为本公开提供的数据处理装置的结构示意图之一,本公开还提供一种数据处理装置,用于处理网卡中多个的接收队列,包括:获取模块52、接收处理模块54、动态更新模块56和存储模块58。其中,获取模块52,用于获取当前队列的当前退避参数;接收处理模块54,用于若当前退避参数不大于零,则接收当前队列所包含的数据包,在对数据包进行处理后,获取当前队列被处理的数据包的个数;动态更新模块56,用于基于数据包的个数,对当前队列的当前退避参数进行动态更新;存储模块58,用于存储当前队列的动态更新后的当前退避参数,以用于在对下一循环的多个接收队列进行处理时,判断是否对该队列进行轮询处理。
本公开实施例提供的数据处理装置,通过判断获取模块52获取到的当前队列的当前退避参数是否为零,若是,则接收处理模块54接收当前队列所包含的数据包,在对数据包进行处理后,获取当前队列被处理的数据包的个数;基于数据包的个数,动态更新模块56对当前队列的当前退避参数进行动态更新;存储模块58存储当前队列的动态更新后的当前退避参数,以用于在对下一循环的多个接收队列进行处理时,判断是否对该队列进行轮询处理。可以看出:
该装置利用本次获取的数据包的个数动态更新退避参数,动态更新后的当前退避参数用于在下一循环时判断是否对当前队列进行轮询处理,通过每次获取到的当前队列的当前退避参数的数值估测该队列的需要处理的可能性,换句话说,每次轮询时只处理退避参数符合条件的队列。
通过这种装置,当网卡中存在大量接收队列需要进行轮询处理时,本公开实施例并不会对每一个队列都进行处理,这使得实际处理的队列数量小于网卡中总的队列数量,因此,CPU处理每一队列的间隔时间变短,从而减少了延时,增大了吞吐量。并且,进一步地,对于轮询时数据需要处理可能性较小的队列,在每次轮询后退避参数也会减小,按照种方式,退避参数满足条件时,也会被CPU处理,从而保证每个队列在一定时间内都会被CPU处理。
下面结合图5对本公开实施例的各个模块进行解释。
获取模块52中的当前退避参数的大小依据从当前队列获取的数据包的数量的历史记录预先确定。获取到的当前队列的当前退避参数用于决定这次轮询是否对此队列进行处理。
接收处理模块54中的数据包由虚拟机或者物理机上的系统生成,发送到网络中,最后到达虚拟网卡或真实网卡的接收队列,排队等候处理。。数据包的接收、处理和获取当前队列被处理的数据包的个数均由处理函数实现。
在一个具体实施例中,如received_packets=rxq_handler(q)。这里rxq_handler就是处理函数之一,received_packets就是返回值,即表征的是收到的数据包个数。系统临时内存记录队列q接收到的数据包个数,这个个数会随着处理队列的不同更新。
具体来说,虽然当前退避函数为零,但依然存在接收队列中并不存在排队等待处理的数据包,需要动态更新模块56根据数据包的情况调整退避参数,判断接收队列实时忙碌情况,让CPU处理时间花在当前大概率忙碌的队列上。
在一种可选实施例中,动态更新模块56具体包括:
动态更新单元561,用于若数据包的个数大于零,则减小当前退避参数,若数据包的个数为零,则增大当前退避参数。
具体来说,数据包个数大于零,说明当前队列存在排队等待处理的数据包,即当前队列此时处于忙碌状态,那么下次轮询时也处于忙碌状态的概率较大,此时应减小当前退避参数,以保证下次轮询时该接收队列仍能被处理。若数据包个数为零,说明当前队列不存在排队等待处理的数据包,即当前队列此时处于空闲状态,那么下次轮询时也处于空闲状态的概率较大,此时应增大当前退避参数,以减少下次轮询时该接收队列被处理的概率。
参照图6,图6为本公开提供的数据处理装置的结构示意图之二,本公开实施例提供的数据处理装置包括:
获取模块60,用于获取当前队列的当前退避参数;
具体来说,当前退避参数的大小依据从当前队列获取的数据包的数量的历史记录预先确定。获取到的当前队列的当前退避参数用于决定这次轮询是否对此队列进行处理。
判断模块62,用于判断当前退避参数是否大于零;若是,执行减少忽略模块64,若否,依次执行接收处理模块66和动态更新模块68;
具体来说,当前退避参数大于零,则该队列在此次轮询中无需被处理,只需调整该队列的当前退避参数,而当前退避参数小于或等于零时,说明当前队列当前收到数据包的概率较大,需要对该队列进行处理。
减少忽略模块64,用于减小当前退避参数,并忽略对当前队列的轮询处理;
具体来说,当前退避参数大于零,则该队列在此次轮询中无需被处理,只需调整该队列的当前退避参数,以保证不会有接收队列一直无法被CPU处理。
接收处理模块66,用于接收当前队列所包含的数据包,在对数据包进行处理后,获取当前队列被处理的数据包的个数;
具体来说,数据包由虚拟机或者物理机上的系统生成,发送到网络中,最后到达虚拟网卡或真实网卡的接收队列,排队等候处理。数据包的接收、处理和获取当前队列被处理的数据包的个数均由处理函数实现。
在一个具体实施例中,如received_packets=rxq_handler(q)。这里rxq_handler就是处理函数之一,received_packets就是返回值,即表征的是收到的数据包个数。系统临时内存记录队列q接收到的数据包个数,这个个数会随着处理队列的不同更新。
动态更新模块68,用于基于数据包的个数,对当前队列的当前退避参数进行动态更新;
具体来说,虽然当前退避函数为零,但依然存在接收队列中并不存在排队等待处理的数据包,根据数据包的情况调整退避参数,判断接收队列实时忙碌情况,让CPU处理时间花在当前大概率忙碌的队列上。动态更新一般是基于接收队列被处理的数据包的个数,即若数据包的个数大于零,则减小当前退避参数,若数据包的个数为零,则增大当前退避参数。
存储模块69,用于存储当前队列的当前退避参数,并进行下一循环的轮询处理。
具体来说,存储当前队列的当前退避参数用于决定下次轮询是否对此队列进行处理。进行下一循环轮询处理是指处理下一个接收队列。
同样的,动态更新模块68包括:
动态更新单元681,用于若数据包的个数大于零,则减小当前退避参数,若数据包的个数为零,则增大当前退避参数。
在一个具体实施例中,减少忽略模块64具体用于若当前退避参数为N,则每次轮询时,将当前队列的当前退避参数减1,连续N次轮询忽略对当前队列的轮询处理。
在一种具体实施例举例,假设某一接收队例当前退避参数为N,N为大于零的任意一个自然数,每次轮询到该接收队列时,因为当前退避参数大于零,所以每次轮询时都不对该接收队列进行处理,但是有可能在N次后该接收队列有排队处理的数据包,这时,需要对该接受队例进行处理,以保证在一定的时间后,每个数据包都可以被接收。由此,在每次轮询时,将当前队列的当前退避参数减1,这样在N次轮询后,当前退避参数不再大于零,此时可对接收队列进行轮询处理。
在一种可选实施例中,动态更新单元681包括:
动态减少子单元6811,用于减小当前退避参数,对当前队列的收包记录进行标记,将用于表征接收到当前队列的数据包的标记存放于当前队列。
具体来说,将当前队列的收包记录标记设定为true放置在队列的flag里,作为标记。
在一种可选实施例中,动态更新单元681还包括:
动态增加判断子单元6831,用于若数据包的个数为零,判断当前队列是否存在用于表征接收到当前队列的数据包的标记,若是,执行线性增大子单元6833,若否,则执行快速增长子单元6835;
具体来说,当前队列存在之前的收包记录标记true,说明仅为本次轮询未收到数据包,若多次不轮询该队列,队列里可能存在大量等待处理的数据包,而当前队列不存在之前的收包记录标记true,说明多次轮询未收到数据包,该队列中收到等待处理的数据包概率较低,此时可以考虑非线性快速增大当前退避参数,使得多次轮询都可忽略该接收队列,将CPU处理时间花在其他大概率忙碌的队列上。
线性增大子单元6833,用于控制当前退避参数呈线性增大;
具体来说,线性增大一般为每次加一个固定值,固定值可根据实际需要,自行设定。
快速增长子单元6835,用于控制当前退避参数呈非线性快速增长。
具体来说,非线性快速增长可为指数增长或多次增长,但是需要设定当前退避参数最大阈值,超过该阈值后,当前退避参数不再增加,以保证多次轮询后,CPU会对该队列进行轮询处理。
在一种可选实施例中,快速增长单元6835中的非线性快速增长为指数增长。
图7示例了一种电子设备的实体结构示意图,如图7所示,该电子设备可以包括:处理器(processor)710、通信接口(Communications Interface)720、存储器(memory)730和通信总线740,其中,处理器710,通信接口720,存储器730通过通信总线740完成相互间的通信。处理器710可以调用存储器730中的逻辑指令,以执行数据处理方法。
此外,上述的存储器730中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本公开实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本公开还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的数据处理方法。
又一方面,本公开还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的数据处理方法。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本公开的技术方案,而非对其限制;尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本公开各实施例技术方案的精神和范围。
Claims (13)
1.一种数据处理方法,用于处理网卡中的多个接收队列,其特征在于,包括如下步骤:
获取当前队列的当前退避参数;
若所述当前退避参数不大于零,则接收所述当前队列所包含的数据包,在对所述数据包进行处理后,获取当前队列被处理的数据包的个数;
基于所述数据包的个数,对所述当前队列的当前退避参数进行动态更新;
存储所述当前队列的动态更新后的当前退避参数,以用于在对下一循环的多个接收队列进行处理时,判断是否对该队列进行轮询处理。
2.根据权利要求1所述的数据处理方法,其特征在于,所述基于所述数据包的个数,对所述当前队列的当前退避参数进行动态更新进一步包括:
若所述数据包的个数大于零,则减小所述当前退避参数,若所述数据包的个数为零,则增大所述当前退避参数。
3.根据权利要求2所述的数据处理方法,其特征在于,所述方法还包括:
若所述当前退避参数大于零,则减小所述当前退避参数,并忽略对所述当前队列的轮询处理。
4.根据权利要求3所述的数据处理方法,其特征在于,所述减小所述当前退避参数,忽略对所述当前队列的轮询处理进一步包括:
若所述当前退避参数为N,则每次轮询时,将所述当前队列的所述当前退避参数减1,连续N次轮询忽略对所述当前队列的轮询处理;
其中,N为自然数。
5.根据权利要求2所述的数据处理方法,其特征在于,在所述若所述数据包的个数大于零,则减小所述当前退避参数后还包括:
对所述当前队列的收包记录进行标记,将用于表征接收到当前队列的数据包的标记存放于当前队列。
6.根据权利要求2所述的数据处理方法,其特征在于,所述若所述数据包的个数为零,则增大所述当前退避参数进一步包括:
判断所述当前队列是否存在用于表征接收到当前队列的数据包的标记,若是,则控制所述当前退避参数呈线性增大;
若否,则控制所述当前退避参数呈非线性快速增长。
7.根据权利要求6所述的数据处理方法,其特征在于,
所述非线性快速增长为指数增长。
8.一种数据处理装置,用于处理网卡中的多个接收队列,其特征在于,包括:
获取模块,用于获取当前队列的当前退避参数;
接收处理模块,用于若所述当前退避参数不大于零,则接收所述当前队列所包含的数据包,在对所述数据包进行处理后,获取当前队列被处理的数据包的个数;
动态更新模块,用于基于获取的所述数据包的个数,对所述当前队列的当前退避参数进行动态更新;
存储模块,用于存储所述当前队列的动态更新后的当前退避参数,以用于在对下一循环的多个接收队列进行处理时,判断是否对该队列进行轮询处理。
9.根据权利要求8所述的数据处理装置,其特征在于,所述动态更新模块进一步包括:
动态更新单元,用于若所述数据包的个数大于零,则减小所述当前退避参数,若所述数据包的个数为零,则增大所述当前退避参数。
10.根据权利要求9所述的数据处理装置,其特征在于,所述装置还包括:
减数忽略模块,用于若所述当前退避参数大于零,则减小所述当前退避参数,并忽略对所述当前队列的轮询处理。
11.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述数据处理方法的步骤。
12.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述数据处理的步骤。
13.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述数据处理的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111080052.0A CN113722074A (zh) | 2021-09-15 | 2021-09-15 | 一种数据处理方法、装置及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111080052.0A CN113722074A (zh) | 2021-09-15 | 2021-09-15 | 一种数据处理方法、装置及相关设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113722074A true CN113722074A (zh) | 2021-11-30 |
Family
ID=78683884
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111080052.0A Pending CN113722074A (zh) | 2021-09-15 | 2021-09-15 | 一种数据处理方法、装置及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113722074A (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090225767A1 (en) * | 2008-03-05 | 2009-09-10 | Inventec Corporation | Network packet capturing method |
US20140259018A1 (en) * | 2013-03-08 | 2014-09-11 | Oracle International Corporation | Backoff Job Queue Polling Mechanism |
CN108628684A (zh) * | 2017-03-20 | 2018-10-09 | 华为技术有限公司 | 一种基于dpdk的报文处理方法及计算机设备 |
CN110022267A (zh) * | 2018-01-09 | 2019-07-16 | 阿里巴巴集团控股有限公司 | 网络数据包处理方法及装置 |
CN110968402A (zh) * | 2018-09-28 | 2020-04-07 | 深信服科技股份有限公司 | 一种cpu工作控制方法、装置、设备及存储介质 |
CN111385744A (zh) * | 2018-12-27 | 2020-07-07 | 杭州潇楠科技有限公司 | 一种基于轮询的动态信道接入方法 |
US20210075745A1 (en) * | 2019-09-10 | 2021-03-11 | GigaIO Networks, Inc. | Methods and apparatus for improved polling efficiency in network interface fabrics |
-
2021
- 2021-09-15 CN CN202111080052.0A patent/CN113722074A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090225767A1 (en) * | 2008-03-05 | 2009-09-10 | Inventec Corporation | Network packet capturing method |
US20140259018A1 (en) * | 2013-03-08 | 2014-09-11 | Oracle International Corporation | Backoff Job Queue Polling Mechanism |
CN108628684A (zh) * | 2017-03-20 | 2018-10-09 | 华为技术有限公司 | 一种基于dpdk的报文处理方法及计算机设备 |
CN110022267A (zh) * | 2018-01-09 | 2019-07-16 | 阿里巴巴集团控股有限公司 | 网络数据包处理方法及装置 |
CN110968402A (zh) * | 2018-09-28 | 2020-04-07 | 深信服科技股份有限公司 | 一种cpu工作控制方法、装置、设备及存储介质 |
CN111385744A (zh) * | 2018-12-27 | 2020-07-07 | 杭州潇楠科技有限公司 | 一种基于轮询的动态信道接入方法 |
US20210075745A1 (en) * | 2019-09-10 | 2021-03-11 | GigaIO Networks, Inc. | Methods and apparatus for improved polling efficiency in network interface fabrics |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106850402B (zh) | 消息的传输方法和装置 | |
CN110061924B (zh) | 一种报文转发方法、装置及相关产品 | |
CN112104562A (zh) | 拥塞控制方法及装置、通信网络、计算机存储介质 | |
CN112395067A (zh) | 任务调度方法、系统、设备及介质 | |
WO2021208682A1 (zh) | 网络设备的数据采样方法、装置、设备及介质 | |
CN108965066B (zh) | 一种对传输路径进行探测的方法和装置 | |
CN109391522B (zh) | 基于rdma的网络流量确定方法、转发设备、分析服务器和存储介质 | |
JP7348293B2 (ja) | データ処理方法及び機器 | |
US10467161B2 (en) | Dynamically-tuned interrupt moderation | |
WO2016149945A1 (zh) | 一种生命周期事件的处理方法及vnfm | |
WO2019109902A1 (zh) | 队列调度方法及装置、通信设备、存储介质 | |
US20160294926A1 (en) | Using a single work item to send multiple messages | |
CN110557341A (zh) | 数据限流的方法和装置 | |
CN113722074A (zh) | 一种数据处理方法、装置及相关设备 | |
CN117097679A (zh) | 一种网络中断的聚合方法、装置及网络通信设备 | |
CN110740078A (zh) | 一种服务器的代理监测方法及相关产品 | |
CN113157465B (zh) | 基于指针链表的消息发送方法及装置 | |
CN113094305B (zh) | 一种异步通信处理方法、装置和存储介质 | |
CN114567566A (zh) | 一种报文处理方法、装置、终端设备及存储介质 | |
CN114168315A (zh) | 基于多核的报文处理方法、装置、电子设备及存储介质 | |
CN111385219B (zh) | 借用硬件中断实现高性能高精度软件tcp限速的方法 | |
CN103517342A (zh) | 一种自适应的Trap消息处理方法和装置 | |
US8699347B2 (en) | Communication apparatus, communication system, communication method, and a computer-readable medium | |
CN115037802B (zh) | 一种请求处理方法、装置、电子设备和存储介质 | |
CN111130968A (zh) | 一种解决Modbus总线通信粘包的方法及终端 |
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 |