CN113079114B - 一种数据包接收方法、装置、终端及存储介质 - Google Patents
一种数据包接收方法、装置、终端及存储介质 Download PDFInfo
- Publication number
- CN113079114B CN113079114B CN202110624163.7A CN202110624163A CN113079114B CN 113079114 B CN113079114 B CN 113079114B CN 202110624163 A CN202110624163 A CN 202110624163A CN 113079114 B CN113079114 B CN 113079114B
- Authority
- CN
- China
- Prior art keywords
- reading
- time
- polling
- data packet
- detection period
- 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
Images
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/50—Queue scheduling
- H04L47/62—Queue scheduling characterised by scheduling criteria
- H04L47/622—Queue service order
- H04L47/6225—Fixed service order, e.g. Round Robin
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Communication Control (AREA)
Abstract
本发明公开了一种数据包接收方法、装置、终端及存储介质,方法包括:根据当前的轮询时间确定目标读取时长,根据所述目标读取时长从缓冲区中读取数据包;获取从所述缓冲区中读取数据包的过程中的读取信息,根据所述读取信息对所述轮询时间进行更新;其中,所述读取信息包括等待次数和读取次数,所述读取次数在尝试读取数据包时更新,所述等待次数在未读取到数据包时更新。本发明能够根据网络流量中数据包的速率和系统的实际读取能力动态调节从缓冲区中读取数据包的时长,防止了在接收低速率的网络流量的数据包时多次触发接收中断进入轮询状态,提升了数据包接收效率。
Description
技术领域
本发明涉及互联网技术领域,特别涉及一种数据包接收方法、装置、终端及存储介质。
背景技术
现有的Linux操作系统中接收数据包时采用NAPI机制,该机制将终端方式与轮询机制相结合,在数据包到来时,首先通过网卡将数据包存入缓冲区,然后激活网卡接收中断。进入收包中断处理例程,在收包中断处理例程中,首先关闭网卡收包中断,然后等待网卡对应的轮询函数被调度,当网卡的对应轮询函数被调度后,每次读取M个数据包,如果读取完M个数据包后缓冲区还有多余的数据包,则等待下次调度轮询函数时读取,若缓冲区中数据包接收完毕,则退出轮询。
在上述收包方法中,对于大数据包低速率的流量情况而言,刚接收到一个数据包后,由于此时还没有新的数据包到来,则直接退出轮询状态,在很短的时间间隔内又到来一个新的数据包,系统再次进入中断并进入轮询状态接收这一个数据包,会导致接收中断急剧增加,每次中断只能接收很少的数据包,工作效率低。
因此,现有技术还有待改进和提高。
发明内容
针对现有技术的上述缺陷,本发明提供一种数据包接收方法、装置、终端及存储介质,旨在解决现有技术中数据包接收方法中对于低速率的流量的数据包接收效率低的问题。
为了解决上述技术问题,本发明所采用的技术方案如下:
本发明的第一方面,提供一种数据包接收方法,所述方法包括:
根据当前的轮询时间确定目标读取时长,根据所述目标读取时长从缓冲区中读取数据包;
获取从所述缓冲区中读取数据包的过程中的读取信息,根据所述读取信息对所述轮询时间进行更新;
其中,所述读取信息包括等待次数和读取次数,所述读取次数在尝试读取数据包时更新,所述等待次数在未读取到数据包时更新。
所述的数据包接收方法,其中,所述根据当前的轮询时间确定目标读取时长,包括:
根据预设系数确定第一目标读取时长和第二目标读取时长;
其中,所述第一目标读取时长小于当前的所述轮询时间,所述第二目标读取时长大于当前的所述轮询时间。
所述的数据包接收方法,其中,所述根据所述目标读取时长从缓冲区中读取数据包,包括:
在第一探测周期内根据所述第一目标读取时长从所述缓冲区中读取数据包,在第二探测周期内根据所述第二目标读取时长从所述缓冲区中读取数据包,其中,所述第一探测周期和所述第二探测周期为相邻的两个探测周期;
在目标探测周期内:
当接收中断开启后,关闭接收中断并调用轮询函数,在调用所述轮询函数后尝试读取数据包,每次尝试读取数据包时将所述读取次数加一,若未读取到数据包,则将所述等待次数加一并等待预设时长后重复尝试读取数据包直至调用所述轮询函数后的时长达到所述目标探测周期对应的目标读取时长;
在调用轮询函数后的时长达到所述目标探测周期对应的目标读取时长后等待接收中断重新开启直至所述目标探测周期结束,进入下一个探测周期。
所述的数据包接收方法,其中,所述根据当前的轮询时间确定目标读取时长之前,包括:
当接收中断开启后,若不存在所述轮询时间,则不断读取所述缓冲区中的数据包,每读取到一个数据包,将收包数量加一;
若所述收包数量达到预设阈值前,所述缓冲区中的所有数据包已经读取完,则记录接收完所述缓冲区中的所有数据包的耗时为所述轮询时间的初始值;
若所述收包数量达到所述预设阈值时,所述缓冲区中的所有数据包未读取完,则记录所述收包数量达到所述预设阈值的耗时为所述轮询时间的初始值。
所述的数据包接收方法,其中,所述根据所述读取信息对所述轮询时间进行更新,包括:
根据探测时段内的所述等待次数和所述读取次数对所述轮询时间进行更新,其中,所述探测时段内包括至少一个探测周期对,每个探测周期对包括一个所述第一探测周期和一个所述第二探测周期。
所述的数据包接收方法,其中,所述根据探测时段内的所述等待次数和所述读取次数对所述轮询时间进行更新,包括:
分别获取所述探测时段内的目标探测周期对中所述第一探测周期内的所述等待次数和所述读取次数,以及所述目标探测周期对中所述第二探测周期内的所述等待次数和所述读取次数;
根据所述目标探测周期对中所述第一探测周期内的所述等待次数和所述读取次数确定第一轮询时间效用值,根据所述目标探测周期对中所述第二探测周期内的所述等待次数和所述读取次数确定第二轮询时间效用值;
根据所述第一轮询时间效用值和所述第二轮询时间效用值对所述轮询时间进行更新。
所述的数据包接收方法,其中,所述根据所述第一轮询时间效用值和所述第二轮询时间效用值对所述轮询时间进行更新,包括:
若所述探测时段内每个探测周期对内的所述第一轮询时间效用值均大于所述第二轮询时间效用值,则将所述轮询时间更新为所述第一目标读取时长;
若所述探测时段内每个探测周期对内的所述第一轮询时间效用值均小于所述第二轮询时间效用值,则将所述轮询时间更新为所述第二目标读取时长;
若所述探测时段内每个探测周期对内的所述第一轮询时间效用值和所述第二轮询时间效用值的大小关系不一致,则维持所述轮询时间不变。
本发明的第二方面,提供一种数据包接收装置,包括:
收包模块,所述收包模块用于根据当前的轮询时间确定目标读取时长,根据所述目标读取时长从缓冲区中读取数据包;
更新模块,所述更新模块用于获取根据所述目标读取时长从所述缓冲区中读取数据包的过程中的读取信息,根据所述读取信息对所述轮询时间进行更新,其中,所述读取信息包括等待次数和读取次数,所述读取次数在尝试读取数据包时更新,所述等待次数在未读取到数据包时更新。
本发明的第三方面,提供一种终端,所述终端包括处理器、与处理器通信连接的计算机可读存储介质,所述计算机可读存储介质适于存储多条指令,所述处理器适于调用所述计算机可读存储介质中的指令,以执行实现上述任一项所述的数据包接收方法的步骤。
本发明的第四方面,提供一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现上述任一项所述的数据包接收方法的步骤。
与现有技术相比,本发明提供了一种数据包接收方法、装置、终端及存储介质,所述的数据包接收方法,根据当前的轮询时间确定从缓冲区中读取数据包的目标读取时长,并根据在目标读取时长内从缓冲区内读取数据包过程中尝试读取数据包的读取次数和未读取到数据包的等待次数对轮询时间进行更新,读取次数和等待次数反映了每次进入轮询状态后从缓冲区中读取数据包的速度以及缓冲区内数据包的数量情况,根据读取次数和等待次数对轮询时间进行更新,从而实现了根据网络流量中数据包的速率和系统的实际读取能力动态调节从缓冲区中读取数据包的时长,防止了在接收低速率的网络流量的数据包时多次触发接收中断进入轮询状态,提升了数据包接收效率。
附图说明
图1为本发明提供的数据包接收方法的实施例的流程图;
图2为现有的数据包接收方法的流程图;
图3为本发明提供的数据包接收方法的实施例的逻辑框图;
图4为本发明提供的数据包接收方法的实施例中更新轮询时间的逻辑框图;
图5为本发明提供的数据包接收装置的实施例的结构原理图;
图6为本发明提供的终端的实施例的原理示意图。
具体实施方式
为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本发明提供的数据包接收方法,可以是由使用Linux系统的终端执行,终端可以但不限于是个人计算机、服务器、移动终端等。
实施例一
如图1所示,所述数据包接收方法的一个实施例中,包括步骤:
S100、根据当前的轮询时间确定目标读取时长,根据所述目标读取时长从缓冲区中读取数据包;
S200、获取从所述缓冲区中读取数据包的过程中的读取信息,根据所述读取信息对所述轮询时间进行更新;
其中,所述读取信息包括等待次数和读取次数,所述读取次数在尝试读取数据包时更新,所述等待次数在未读取到数据包时更新。
具体地,终端通过网卡接收数据包,网卡从网络中接收到数据包后将数据包存储至缓冲区中,终端的处理器从缓冲区中读取数据包至上层协议,完成终端接收数据包的过程。如图2所示,在现有技术中,每次网卡接收到数据包,首先由网卡的DMA引擎将数据包存储至缓冲区中(DMA是计算机组成原理领域的一种快速传送数据的机制,通过该机制,数据可以不经过处理器而直接在内存和内存、内存和外设之间进行数据传输),接着触发接收中断,收包中断开启后开始执行中断处理程序,在中断处理程序中,首先关闭接收中断,接着调用函数netif-schedule()将网卡注册到轮询队列(poll-list)上,同时触发一个软中断,等待轮询函数被系统内核调度并执行,当轮询函数被调用后,首先设置一个配额M,表示此次最多可以接收M个数据包,如果接收完M个数据包后缓冲区中还有多余的数据包,则将网卡再次加入轮询队列的尾部,等待下次轮询,而如果缓冲区中数据包接收完毕,则调用函数napi-complete()将网卡从轮询列表中删除,退出轮询,等网卡再次接收到数据包存储至缓冲区后重新开启接收中断,在这种方法中,若数据包到达速率低,在系统从缓冲区接收完一个数据包后,新的数据包没有及时到来,那么直接退出轮询,在很短的时间间隔内网卡又接收到新的数据包,需要重启开启接收中断去读取这个数据包,导致接收中断次数急剧增加,效率低。
在本实施例中,设置轮询时间这一变量,具体地,当网卡接收到数据包后,将数据包存储至缓冲区中,所述轮询时间是用于确定每次进入轮询状态后从所述缓冲区中读取数据包的时长的变量,所述轮询时间在系统运行过程中可动态更新,使得从所述缓冲区中读取数据包的时长根据网络流量的数据包传输速率进行适应性改变。
所述根据当前的轮询时间确定目标读取时长,包括:
根据预设系数确定第一目标读取时长和第二目标读取时长。
所述第一目标读取时长小于当前的所述轮询时间,所述第二目标读取时长大于当前的所述轮询时间。
在一种可能的实现方式中,当不对所述轮询时间进行更新时,可以直接将当前的所述轮询时间作为每次从所述缓冲区中读取数据包的目标读取时长,而对所述轮询时间进行更新时,通过在多个探测周期中使用不同的读取时长从所述缓冲区中读取数据包的效用来确定所述轮询时间的更新方向。所述第一目标读取时长和所述第二目标读取时长可以分别表示为和,其中为所述预设系数,可以取0.2、0.3、0.5等,为当前的所述轮询时间。
所述轮询时间的初始值可以是直接预先设置,也可以是根据接收数据包的实际情况来确定,具体地,所述根据当前的轮询时间确定目标读取时长之前,本实施例提供的数据包接收方法还包括所述轮询时间的初始值的确定步骤,具体包括:
当接收中断开启后,若不存在所述轮询时间,则不断读取所述缓冲区中的数据包,每读取到一个数据包,将收包数量加一;
若所述收包数量达到预设阈值前,所述缓冲区中的所有数据包已经接收完,则记录接收完所述缓冲区中的所有数据包的耗时为所述轮数时间的初始值;
若所述收包数量达到所述预设阈值时,所述缓冲区中的所有数据包未接收完,则记录所述数量数量达到所述预设阈值的耗时为所述轮询时间的初始值。
具体地,系统中可以设置所述轮询时间的变量,当接收中断开启后,进入中断处理程序,从所述缓冲区中读取数据包,此时先读取所述轮询时间的变量的值作为当前的所述轮询时间以确定目标读取时间,当所述轮询时间的变量的值为0时,认为不存在所述轮询时间,此时需要确定所述轮询时间的初始值赋给所述轮询时间的变量。具体地,如图3所示,进入中断处理程序后,先关闭网卡的接收中断,接着调用函数将当前网卡注册到轮询列表上并处罚系统软中断,当当前网卡上注册的轮询函数被调用后,开始从所述缓冲区中读取数据包并记录此时的时间戳为第一时间戳,若此时不存在所述轮询时间,那么需要确定所述轮询时间的初始值,进入初始轮询时间探测阶段,在该阶段中,不断读取所述缓冲区中的数据包并将收包数量的初始值设置为0,每读取到一个数据包,就将收包数量加一。若所述收包数量达到预设阈值前所述缓冲区中的所有数据包已经接收完,则将当前网卡从轮询列表中删除并记录此时的时间戳为第二时间戳,获取第二时间戳和第一时间戳的差值作为所述轮询时间的初始值。若所述收包数量达到预设阈值时所述缓冲区中仍存在未被读取的数据包,则将当前网卡放到轮询队列,等待下次轮询,并记录所述收包数量达到所述预设阈值时的时间戳为第三时间戳,获取第三时间戳和第一时间戳的差值作为所述轮询时间的初始值。
若当接收中断开启后存在所述轮询时间,根据当前的所述轮询时间确定目标读取时长,确定所述目标读取时长后,根据所述目标读取时长从所述缓冲区中读取数据包,具体包括:
在第一探测周期内根据所述第一目标读取时长从所述缓冲区中读取数据包,在第二探测周期内根据所述第二目标读取时长从所述缓冲区中读取数据包,其中,所述第一探测周期和所述第二探测周期为相邻的两个探测周期。
为了确定所述轮询时间的更新方向(需要增大所述轮询时间还是减少所述轮询时间),分别采用大于当前的所述轮询时间的读取时长和小于当前的所述轮询时间的读取时长从所述缓冲区中读取数据包。下面对每个探测周期内根据目标读取时长从缓冲区中读取数据包进行详细说明:
在目标探测周期内:
当接收中断开启后,关闭接收中断并调用轮询函数,在调用所述轮询函数后尝试读取数据包,每次尝试读取数据包时将所述读取次数加一,若未读取到数据包,则将所述等待次数加一并等待预设时长后重复尝试读取数据包直至调用所述轮询函数后的时长达到所述目标探测周期对应的目标读取时长;
在调用轮询函数后的时长达到所述目标探测周期对应的目标读取时长后等待接收中断重新开启直至所述目标探测周期结束,进入下一个探测周期。
所述目标探测周期可以是任一个探测周期,每个探测周期的时长可以根据经验值设定,在所述目标探测周期内,所述等待次数和所述读取次数的初始值为0,当网卡接收到数据包,将数据包存储于所述缓冲区后,开启接收中断,进入中断处理程序,在中断处理程序中从所述缓冲区中读取数据,具体地,在中断处理程序中,首先关闭接收中断,接着调用注册函数netif-schedule()将当前网卡(即触发了接收中断的网卡)注册到轮询列表上,同时触发软中断,当当前网卡注册的轮询函数被调用后,开始计时并尝试读取所述缓冲区中的数据包,每次尝试读取数据包时将所述读取次数加一,每次尝试读取数据包时有两个可能:所述缓冲区中有数据包和所述缓冲区中没有数据包,分别对应两个步骤:1)若所述缓冲区中有数据包则读取数据包,读取完毕后再次尝试读取数据包;2)若尝试读取数据包时所述缓冲区中没有数据包则将所述等待次数加一并等待预设时长,在所述预设时长后重复尝试读取数据包,重复步骤1)和2)直至调用所述轮询函数后的时长达到所述目标探测周期对应的目标读取时长。当调用所述轮询函数后的时长达到所述目标探测周期对应的目标读取时长后,视为一次从所述缓冲区中读取数据包的过程结束,此时若所述目标探测周期尚未结束,则调用函数napi-complete()将当前网卡从轮询列表中删除,等待接收中断重新开启,即等待网卡接收到新的数据包触发接收中断直至所述目标探测周期结束,记录所述目标探测周期结束时的所述等待次数和所述读取次数,进入下一个探测周期。
获取各个探测周期中的所述读取信息后,根据所述读取信息对所述轮询时间进行更新,具体包括:
根据探测时段内的所述等待次数和所述读取次数对所述轮询时间进行更新,其中,所述探测时段内包括至少一个探测周期对,每个探测周期对包括一个所述第一探测周期和一个所述第二探测周期。
在本实施例提供的数据包接收方法中,在对所述轮询时间进行更新时,根据一个探测时段内的所述读取信息确定新的所述轮询时间,具体地,所述根据探测时段内的所述等待次数和所述读取次数对所述轮询时间进行更新,包括:
S210、分别获取所述探测时段内的目标探测周期对中所述第一探测周期内的所述等待次数和所述读取次数,以及所述目标探测周期对中所述第二探测周期内的所述等待次数和所述读取次数。
对于所述探测时段内的每个探测周期对,都作为所述目标探测周期对获取其中的所述读取信息。具体地,目标探测周期对内包括一个所述第一探测周期和一个所述第二探测周期,即包括一个目标读取时长为所述第一目标读取时长的探测周期和一个目标读取时长为所述第二目标读取时长的探测周期。分别获取所述目标探测周期对中所述第一探测周期内的所述等待次数和所述读取次数(即所述第一探测周期结束时记录的所述等待次数和所述读取次数),以及所述目标探测周期对中所述第二探测周期内的所述等待次数和所述读取次数(即所述第二探测周期结束时记录的所述等待次数和所述读取次数)。
S220、根据所述目标探测周期对中所述第一探测周期内的所述等待次数和所述读取次数确定第一轮询时间效用值,根据所述目标探测周期对中所述第二探测周期内的所述等待次数和所述读取次数确定第二轮询时间效用值;
具体地,根据目标探测周期内的所述等待次数和所述读取次数确定所述目标探测周期对应的轮询时间的效应值可以是根据预先设置的效用函数来获取轮询时间的效用值(Utility),所述效用函数可以表示为,其中,表示轮询时间效用值,表示所述读取次数,表示所述等待次数,、为可调权重,可以根据实际情况设置不同的常数。对于所述目标探测周期对内中的所述第一探测周期中的所述等待次数和所述读取次数,可以带入所述效用函数计算所述第一轮询时间效用值,对于所述目标探测周期对内中的所述第二探测周期中的所述等待次数和所述读取次数,可以带入所述效用函数计算所述第二轮询时间效用值。
S230、根据所述第一轮询时间效用值和所述第二轮询时间效用值对所述轮询时间进行更新。
所述第一轮询时间效用值和所述第二轮询时间效用值分别反映了从所述缓冲区读取数据包时采用较长的目标读取时长和较短的目标读取时长时的效用值,根据所述第一轮询时间效用值和所述第二轮询时间效用值对所述轮询时间进行更新,包括:
若所述探测时段内每个探测周期对内的所述第一轮询时间效用值均大于所述第二轮询时间效用值,则将所述轮询时间更新为所述第一目标读取时长;
若所述探测时段内每个探测周期对内的所述第一轮询时间效用值均小于所述第二轮询时间效用值,则将所述轮询时间更新为所述第二目标读取时长;
若所述探测时段内每个探测周期对内的所述第一轮询时间效用值和所述第二轮询时间效用值的大小关系不一致,则维持所述轮询时间不变。
如图4所示,以所述探测时段内包括两个探测周期对为例,每个探测周期对内所述第一轮询时间效用值记为,所述第二轮询时间效用值记为,若对于两个探测周期对,均成立,那么说明较短的目标读取时间产生的效用更大,将所述轮询时间更新为所述第一目标读取时长,若对于两个探测周期对,均成立,那么说明较长的目标读取时间产生的效用更大,将所述轮询时间更新为所述第二目标读取时长,若两个探测周期对中一个探测周期对中,另一个探测周期对中,那么维持当前的所述轮询时间不变。
综上所述,本实施例提供一种数据包接收方法,根据当前的轮询时间确定从缓冲区中读取数据包的目标读取时长,并根据在目标读取时长内从缓冲区内读取数据包过程中尝试读取数据包的读取次数和未读取到数据包的等待次数对轮询时间进行更新,读取次数和等待次数反映了每次进入轮询状态后从缓冲区中读取数据包的速度以及缓冲区内数据包的数量情况,根据读取次数和等待次数对轮询时间进行更新,从而实现了根据网络流量中数据包的速率和系统的实际读取能力动态调节从缓冲区中读取数据包的时长,防止了在接收低速率的网络流量的数据包时多次触发接收中断进入轮询状态,提升了数据包接收效率。
应该理解的是,虽然本发明说明书附图中给出的的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取计算机可读存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink) DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
实施例二
基于上述实施例,本发明还相应提供了一种数据包接收装置,如图5所示,所述数据包接收装置包括:
收包模块,所述收包模块用于根据当前的轮询时间确定目标读取时长,根据所述目标读取时长从缓冲区中读取数据包,具体如实施例一中所述;
更新模块,所述更新模块用于获取从所述缓冲区中读取数据包的过程中的读取信息,根据所述读取信息对所述轮询时间进行更新,其中,所述读取信息包括等待次数和读取次数,所述读取次数在尝试读取数据包时更新,所述等待次数在未读取到数据包时更新,具体如实施例一中所述。
实施例三
基于上述实施例,本发明还相应提供了一种终端,如图6所示,所述终端包括处理器10以及存储器20。图6仅示出了终端的部分组件,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
所述存储器20在一些实施例中可以是所述终端的内部存储单元,例如终端的硬盘或内存。所述存储器20在另一些实施例中也可以是所述终端的外部存储设备,例如所述终端上配备的插接式硬盘,智能存储卡(Smart Media Card, SMC),安全数字(SecureDigital, SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器20还可以既包括所述终端的内部存储单元也包括外部存储设备。所述存储器20用于存储安装于所述终端的应用软件及各类数据。所述存储器20还可以用于暂时地存储已经输出或者将要输出的数据。在一实施例中,存储器20上存储有数据包接收程序30,该数据包接收程序30可被处理器10所执行,从而实现本申请中数据包接收方法。
所述处理器10在一些实施例中可以是一中央处理器(Central Processing Unit,CPU),微处理器或其他芯片,用于运行所述存储器20中存储的程序代码或处理数据,例如执行所述数据包接收方法等。
在一实施例中,当处理器10执行所述存储器20中数据包接收程序30时实现以下步骤:
根据当前的轮询时间确定目标读取时长,根据所述目标读取时长从缓冲区中读取数据包;
获取从所述缓冲区中读取数据包的过程中的读取信息,根据所述读取信息对所述轮询时间进行更新;
其中,所述读取信息包括等待次数和读取次数,所述读取次数在尝试读取数据包时更新,所述等待次数在未读取到数据包时更新。
其中,所述根据当前的轮询时间确定目标读取时长,包括:
根据预设系数确定第一目标读取时长和第二目标读取时长;
其中,所述第一目标读取时长小于当前的所述轮询时间,所述第二目标读取时长大于当前的所述轮询时间。
其中,所述根据所述目标读取时长从缓冲区中读取数据包,包括:
在第一探测周期内根据所述第一目标读取时长从所述缓冲区中读取数据包,在第二探测周期内根据所述第二目标读取时长从所述缓冲区中读取数据包,其中,所述第一探测周期和所述第二探测周期为相邻的两个探测周期;
在目标探测周期内:
当接收中断开启后,关闭接收中断并调用轮询函数,在调用所述轮询函数后尝试读取数据包,每次尝试读取数据包时将所述读取次数加一,若未读取到数据包,则将所述等待次数加一并等待预设时长后重复尝试读取数据包直至调用所述轮询函数后的时长达到所述目标探测周期对应的目标读取时长;
在调用轮询函数后的时长达到所述目标探测周期对应的目标读取时长后等待接收中断重新开启直至所述目标探测周期结束,进入下一个探测周期。
其中,所述根据当前的轮询时间确定目标读取时长之前,包括:
当接收中断开启后,若不存在所述轮询时间,则不断读取所述缓冲区中的数据包,每读取到一个数据包,将收包数量加一;
若所述收包数量达到预设阈值前,所述缓冲区中的所有数据包已经读取完,则记录接收完所述缓冲区中的所有数据包的耗时为所述轮询时间的初始值;
若所述收包数量达到所述预设阈值时,所述缓冲区中的所有数据包未读取完,则记录所述收包数量达到所述预设阈值的耗时为所述轮询时间的初始值。
其中,所述根据所述读取信息对所述轮询时间进行更新,包括:
根据探测时段内的所述等待次数和所述读取次数对所述轮询时间进行更新,其中,所述探测时段内包括至少一个探测周期对,每个探测周期对包括一个所述第一探测周期和一个所述第二探测周期。
其中,所述根据探测时段内的所述等待次数和所述读取次数对所述轮询时间进行更新,包括:
分别获取所述探测时段内的目标探测周期对中所述第一探测周期内的所述等待次数和所述读取次数,以及所述目标探测周期对中所述第二探测周期内的所述等待次数和所述读取次数;
根据所述目标探测周期对中所述第一探测周期内的所述等待次数和所述读取次数确定第一轮询时间效用值,根据所述目标探测周期对中所述第二探测周期内的所述等待次数和所述读取次数确定第二轮询时间效用值;
根据所述第一轮询时间效用值和所述第二轮询时间效用值对所述轮询时间进行更新。
其中,所述根据所述第一轮询时间效用值和所述第二轮询时间效用值对所述轮询时间进行更新,包括:
若所述探测时段内每个探测周期对内的所述第一轮询时间效用值均大于所述第二轮询时间效用值,则将所述轮询时间更新为所述第一目标读取时长;
若所述探测时段内每个探测周期对内的所述第一轮询时间效用值均小于所述第二轮询时间效用值,则将所述轮询时间更新为所述第二目标读取时长;
若所述探测时段内每个探测周期对内的所述第一轮询时间效用值和所述第二轮询时间效用值的大小关系不一致,则维持所述轮询时间不变。
实施例四
本发明还提供一种计算机可读存储介质,其中,存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如上所述的数据包接收方法的步骤。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (9)
1.一种数据包接收方法,其特征在于,所述方法包括:
根据当前的轮询时间确定目标读取时长,根据所述目标读取时长从缓冲区中读取数据包,其中,所述轮询时间是用于确定每次进入轮询状态后从所述缓冲区中读取数据包的时长的变量,所述目标读取时长为进入轮询状态后从所述缓冲区中读取数据包的时长;
获取从所述缓冲区中读取数据包的过程中的读取信息,根据所述读取信息对所述轮询时间进行更新;
其中,所述读取信息包括等待次数和读取次数,所述读取次数在尝试读取数据包时更新,所述等待次数在未读取到数据包时更新;
所述根据当前的轮询时间确定目标读取时长,包括:
根据预设系数确定第一目标读取时长和第二目标读取时长;
其中,所述第一目标读取时长小于当前的所述轮询时间,所述第二目标读取时长大于当前的所述轮询时间。
2.根据权利要求1所述的数据包接收方法,其特征在于,所述根据所述目标读取时长从缓冲区中读取数据包,包括:
在第一探测周期内根据所述第一目标读取时长从所述缓冲区中读取数据包,在第二探测周期内根据所述第二目标读取时长从所述缓冲区中读取数据包,其中,所述第一探测周期和所述第二探测周期为相邻的两个探测周期;
在目标探测周期内:
当接收中断开启后,关闭接收中断并调用轮询函数,在调用所述轮询函数后尝试读取数据包,每次尝试读取数据包时将所述读取次数加一,若未读取到数据包,则将所述等待次数加一并等待预设时长后重复尝试读取数据包直至调用所述轮询函数后的时长达到所述目标探测周期对应的目标读取时长;
在调用轮询函数后的时长达到所述目标探测周期对应的目标读取时长后等待接收中断重新开启直至所述目标探测周期结束,进入下一个探测周期。
3.根据权利要求1所述的数据包接收方法,其特征在于,所述根据当前的轮询时间确定目标读取时长之前,包括:
当接收中断开启后,若不存在所述轮询时间,则不断读取所述缓冲区中的数据包,每读取到一个数据包,将收包数量加一;
若所述收包数量达到预设阈值前,所述缓冲区中的所有数据包已经读取完,则记录接收完所述缓冲区中的所有数据包的耗时为所述轮询时间的初始值;
若所述收包数量达到所述预设阈值时,所述缓冲区中的所有数据包未读取完,则记录所述收包数量达到所述预设阈值的耗时为所述轮询时间的初始值。
4.根据权利要求2所述的数据包接收方法,其特征在于,所述根据所述读取信息对所述轮询时间进行更新,包括:
根据探测时段内的所述等待次数和所述读取次数对所述轮询时间进行更新,其中,所述探测时段内包括至少一个探测周期对,每个探测周期对包括一个所述第一探测周期和一个所述第二探测周期。
5.根据权利要求4所述的数据包接收方法,其特征在于,所述根据探测时段内的所述等待次数和所述读取次数对所述轮询时间进行更新,包括:
分别获取所述探测时段内的目标探测周期对中所述第一探测周期内的所述等待次数和所述读取次数,以及所述目标探测周期对中所述第二探测周期内的所述等待次数和所述读取次数;
根据所述目标探测周期对中所述第一探测周期内的所述等待次数和所述读取次数确定第一轮询时间效用值,根据所述目标探测周期对中所述第二探测周期内的所述等待次数和所述读取次数确定第二轮询时间效用值;
根据所述第一轮询时间效用值和所述第二轮询时间效用值对所述轮询时间进行更新。
6.根据权利要求5所述的数据包接收方法,其特征在于,所述根据所述第一轮询时间效用值和所述第二轮询时间效用值对所述轮询时间进行更新,包括:
若所述探测时段内每个探测周期对内的所述第一轮询时间效用值均大于所述第二轮询时间效用值,则将所述轮询时间更新为所述第一目标读取时长;
若所述探测时段内每个探测周期对内的所述第一轮询时间效用值均小于所述第二轮询时间效用值,则将所述轮询时间更新为所述第二目标读取时长;
若所述探测时段内每个探测周期对内的所述第一轮询时间效用值和所述第二轮询时间效用值的大小关系不一致,则维持所述轮询时间不变。
7.一种数据包接收装置,其特征在于,包括:
收包模块,所述收包模块用于根据当前的轮询时间确定目标读取时长,根据所述目标读取时长从缓冲区中读取数据包,其中,所述轮询时间是用于确定每次进入轮询状态后从所述缓冲区中读取数据包的时长的变量,所述目标读取时长为进入轮询状态后从所述缓冲区中读取数据包的时长;
更新模块,所述更新模块用于获取从所述缓冲区中读取数据包的过程中的读取信息,根据所述读取信息对所述轮询时间进行更新,其中,所述读取信息包括等待次数和读取次数,所述读取次数在尝试读取数据包时更新,所述等待次数在未读取到数据包时更新;
所述根据当前的轮询时间确定目标读取时长,包括:
根据预设系数确定第一目标读取时长和第二目标读取时长;
其中,所述第一目标读取时长小于当前的所述轮询时间,所述第二目标读取时长大于当前的所述轮询时间。
8.一种终端,其特征在于,所述终端包括:处理器、与处理器通信连接的计算机可读存储介质,所述计算机可读存储介质适于存储多条指令,所述处理器适于调用所述计算机可读存储介质中的指令,以执行实现上述权利要求1-6任一项所述的数据包接收方法的步骤。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如权利要求1-6任一项所述的数据包接收方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110624163.7A CN113079114B (zh) | 2021-06-04 | 2021-06-04 | 一种数据包接收方法、装置、终端及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110624163.7A CN113079114B (zh) | 2021-06-04 | 2021-06-04 | 一种数据包接收方法、装置、终端及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113079114A CN113079114A (zh) | 2021-07-06 |
CN113079114B true CN113079114B (zh) | 2021-08-27 |
Family
ID=76617132
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110624163.7A Active CN113079114B (zh) | 2021-06-04 | 2021-06-04 | 一种数据包接收方法、装置、终端及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113079114B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113613058A (zh) * | 2021-07-19 | 2021-11-05 | 青岛海信移动通信技术股份有限公司 | 一种网络视频流本地存储方法、设备及介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106161593A (zh) * | 2016-06-21 | 2016-11-23 | 北京奇虎科技有限公司 | 消息轮询方法和服务器、通信系统 |
CN106375239A (zh) * | 2016-08-25 | 2017-02-01 | 北京智芯微电子科技有限公司 | 一种网络数据接收的处理方法及装置 |
CN106527653A (zh) * | 2016-10-12 | 2017-03-22 | 东软集团股份有限公司 | 调整cpu频率的方法及装置 |
CN110769046A (zh) * | 2019-10-17 | 2020-02-07 | 新华三信息安全技术有限公司 | 一种报文获取方法、装置、电子设备及机器可读存储介质 |
CN111580949A (zh) * | 2020-04-30 | 2020-08-25 | 成都安恒信息技术有限公司 | 一种网络收包模式自动调节方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10116806B2 (en) * | 2016-05-26 | 2018-10-30 | Qualcomm Innovation Center, Inc. | Bandwidth aware network statistics collection |
CN109889403A (zh) * | 2019-01-30 | 2019-06-14 | 北京云端智度科技有限公司 | 一种基于轮询机制的cdn网络流量检测方法 |
-
2021
- 2021-06-04 CN CN202110624163.7A patent/CN113079114B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106161593A (zh) * | 2016-06-21 | 2016-11-23 | 北京奇虎科技有限公司 | 消息轮询方法和服务器、通信系统 |
CN106375239A (zh) * | 2016-08-25 | 2017-02-01 | 北京智芯微电子科技有限公司 | 一种网络数据接收的处理方法及装置 |
CN106527653A (zh) * | 2016-10-12 | 2017-03-22 | 东软集团股份有限公司 | 调整cpu频率的方法及装置 |
CN110769046A (zh) * | 2019-10-17 | 2020-02-07 | 新华三信息安全技术有限公司 | 一种报文获取方法、装置、电子设备及机器可读存储介质 |
CN111580949A (zh) * | 2020-04-30 | 2020-08-25 | 成都安恒信息技术有限公司 | 一种网络收包模式自动调节方法 |
Non-Patent Citations (1)
Title |
---|
通用平台高性能可扩展网络地址转换系统;李峻峰等;《北京邮电大学学报》;20210309;14-19页 * |
Also Published As
Publication number | Publication date |
---|---|
CN113079114A (zh) | 2021-07-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2021017884A1 (zh) | 数据处理方法、装置及网关服务器 | |
US7050940B2 (en) | Method and system for maintaining and examining timers for network connections | |
CN111427859B (zh) | 一种消息处理方法、装置、电子设备及存储介质 | |
CN106886890B (zh) | 一种基于区块链的定时交易执行方法 | |
CN113079114B (zh) | 一种数据包接收方法、装置、终端及存储介质 | |
CN110532205A (zh) | 数据传输方法、装置、计算机设备和计算机可读存储介质 | |
WO2020168933A1 (zh) | 一种网络请求的处理方法、装置、终端及存储介质 | |
CN111381988A (zh) | 一种请求限速方法、装置、电子设备及存储介质 | |
JP2020080059A (ja) | 評価装置、評価方法および評価プログラム | |
CN108829498B (zh) | 业务数据访问方法和装置 | |
CN111782378B (zh) | 自适应性的处理性能调整方法、服务器及可读存储介质 | |
CN110910249B (zh) | 一种数据处理方法、装置、节点设备及存储介质 | |
US20230195352A1 (en) | Method for diluting cache space, and device and medium | |
CN110769046B (zh) | 一种报文获取方法、装置、电子设备及机器可读存储介质 | |
CN114385518A (zh) | 一种ats缓存索引同步加速方法和装置 | |
CN114064681A (zh) | 配置参数更新方法、装置及设备 | |
CN109660322B (zh) | 一种数据处理方法、装置及计算机存储介质 | |
CN113518082B (zh) | 一种消息处理方法、电子设备及存储介质 | |
CN112269720B (zh) | 一种异步状态变更通知方法、系统及装置 | |
CN110297602B (zh) | 一种实时数据的处理方法及装置 | |
CN115174446B (zh) | 一种网络流量统计的方法、装置及电子设备 | |
CN113296597B (zh) | 一种功耗控制方法及终端设备 | |
CN116340222A (zh) | 一种多核单片机的核心间通信方法及装置 | |
CN112508700A (zh) | 一种交易处理的调度方法、装置、计算机设备及存储介质 | |
CN116991598A (zh) | 数据传输方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |