一种网络数据包处理方法和装置制造方法及图纸

技术编号:20118960 阅读:28 留言:0更新日期:2019-01-16 12:16
本发明专利技术涉及计算机技术领域,提供了一种网络数据包处理方法和装置。其中创建收包线程,通过所述收包线程中的遍历操作,判断网卡驱动中对应的各网卡队列下是否有收到数据包;其中,收包线程内部包含休眠调度策略函数,所述休眠调度策略函数设置有预设访问次数,以便在包线程中确认没有接收到数据包时,仍然执行所述预设访问次数的各网卡队列下是否有收到数据包的遍历操作后,才执行判断结果;其中,若判断结果为确认网卡中没有收到数据包,则调用接收数据处理策略函数会将收包线程阻塞。本发明专利技术通过在收包线程中增加了预设访问次数的重复遍历机制,克服了现有技术中收包线程频繁被挂起,并且频繁触发终端的问题。

A Network Packet Processing Method and Device

The invention relates to the field of computer technology, and provides a network data packet processing method and device. A receiving thread is created to determine whether or not a packet is received under the corresponding network card queue in the network card driver by traversal operation in the receiving thread. The receiving thread contains a dormant scheduling policy function which sets a preset number of visits so that the presupposition can still be executed when the packet thread confirms that no packet has been received. Whether there is a traversal operation of receiving data packets in each network card queue with the number of visits is performed before the judgment result is executed. If the judgment result is to confirm that no data packets have been received in the network card, the receiving thread will be blocked by calling the receiving data processing strategy function. The invention overcomes the problem of frequent suspension of receiving threads and frequent triggering of terminals in the prior art by adding a repetitive traversal mechanism of preset access times in receiving threads.

【技术实现步骤摘要】
一种网络数据包处理方法和装置
本专利技术涉及计算机
,特别是涉及一种网络数据包处理方法和装置。
技术介绍
互联网上面存在大量的设备,其中,以网络服务器为例,其最底层网卡驱动会把网络上面收到的数据包交给系统上层的程序(例如:http服务、dpi服务)。其中,网卡收到数据包之后把数据包交给上层程序进一步处理,这是目前计算机操作的基本步骤。网卡芯片在收到一堆数据包之后会发出中断、通知CPU开始接受、整理数据包、再把数据包送到协议栈中去。传统的处理方法如图1所示,硬件中断(InterruptRequest,简写为:IRQ)执行中断请求的动作,唤醒网卡驱动函数Napi_schedule,Napi_schedule进一步的将网卡中用于存储各数据包的网卡队列清单Poll_list导入,然后激活软中断,从而将网卡驱动获取的数据包经由软中断转交给协议栈TCP/IPstack进行数据包解析(即利用图1中的Net_rx_action函数完成),然后驱动poll函数完成数据的进行解析出来后数据的I/O操作。现有技术,在某些情况下有如下弊端:如果网络上面流量很大,同时又是小包(例如:64字节),此时网卡会频繁的产生中断通知CPU进行处理,这样大量的性能消耗都浪费在中断上面了,往往会出现丢包的情况。鉴于此,克服该现有技术所存在的缺陷是本
亟待解决的问题。
技术实现思路
本专利技术要解决的技术问题是解决传统网卡收包在处理大流量尤其是网络小包的时候,出现吞吐低,延迟大,丢包厉害的情况本专利技术采用如下技术方案:第一方面,本专利技术提供了一种网络数据包处理方法,网卡驱动状态默认的初始化,网卡开始工作,其特征在于,方法包括:创建收包线程rx_thread,通过所述收包线程rx_thread中的遍历操作,判断网卡驱动中对应的各网卡队列下是否有收到数据包;其中,收包线程内部包含休眠调度策略函数rx_schedu_policy,所述休眠调度策略函数rx_schedu_policy设置有预设访问次数,以便在包线程rx_thread中确认没有接收到数据包时,仍然执行所述预设访问次数的各网卡队列下是否有收到数据包的遍历操作后,才执行判断结果;其中,若判断结果为确认网卡中有收到数据包,则调用接收数据处理策略函数,将相应收到的数据包交由预设的协议栈或者应用程序处理;若判断结果为确认网卡中没有收到数据包,则调用接收数据处理策略函数会将收包线程阻塞,以便放弃对CPU的使用。优选的,所述收包线程rx_thread的主体函数内容为死循环函数,其中,所述死循环函数的跳出机制设定为根据所述休眠调度策略函数rx_schedu_policy的返回参数值作为条件设置的,以if判断该条件后执行阻塞操作;具体的:一旦休眠调度策略函数rx_schedu_policy返回的值满足第一预设条件,便执行if判断内的收包线程的阻塞操作;其中,每次rx_thread内部调用一次所述休眠调度策略函数rx_schedu_policy,所述rx_schedu_policy的内部计数变量schedu_times便执行自加1操作;直到满足所述计数变量schedu_times与预设访问次数相同,便返回满足第一预设条件的参数值。优选的,所述通过所述收包线程rx_thread中遍历网卡驱动中对应的各网卡队列下是否有收到数据包,具体包括收包线程rx_thread预先建立网卡队列结构体变量rx_ring,具体的:在一轮遍历过程中,通过网卡队列结构体变量rx_ring获取网卡驱动中各网卡队列的数据包接收情况;并将所述网卡队列结构体变量rx_ring,作为输入参数导入Poll方法函数poll_proc_packet,以便通过逐一的将网卡队列结构体变量rx_ring中各队列位的状态字节与标识是否收到数据包的标识STAT_DD进行与逻辑运算,若运算结果为真,则执行数据包计数变量rx_cnt的自加操作,以便Poll方法函数poll_proc_packet的最后根据所述数据包计数变量rx_cnt确定是否将数据包交由预设的协议栈或者应用程序处理。优选的,所述Poll方法函数poll_proc_packet确定将数据包交由预设的协议栈或者应用程序处理,具体是分别通过函数push_pkt_statck()和push_pkt_app()完成。优选的,rx_schedu_policy函数中设置的计数变量schedu_times为静态变量;直到包线程rx_thread被阻塞为止,所述计数变量schedu_times才被内存释放。优选的,所述预设访问次数的参数值的取值范围位于区间[64,256]之间。优选的,当物理网卡接收到数据包的时候,网卡驱动向cpu发送中断,此时中断处理服务程序把收包线程唤醒。优选的,所述方法还包括:以系统程序软件触发方式或者硬件触发方式,周期性的进行收包线程rx_thread的状态判断,若判断结果为收包线程rx_thread处于阻塞状态,则激活相应的收包线程rx_thread。优选的,所述激活相应的收包线程rx_thread的函数为wake_up_interruptible。第二方面,本专利技术还提供了一种网络数据包处理装置,用于实现第一方面所述的网络数据包处理方法,所述装置包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行第一方面所述的网络数据包处理方法。第三方面,本专利技术还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,用于完成第一方面所述的网络数据包处理方法。本专利技术通过在收包线程rx_thread中增加了预设访问次数的重复遍历机制,从而克服了现有技术中收包线程频繁被挂起,并且频繁触发终端的问题,例如:避免了现有技术中,在网络上面流量很大,同时又是小包(64字节),此时网卡会频繁的产生中断通知CPU做事情,这样大量的性能消耗都浪费在中断上面了,往往会出现丢包的问题。进一步的,本专利技术对在提升性能、增加功能方面,可以适当的增加硬件功能,使软件+硬件共同完成某些功能。例如,本专利技术优选方案中,采用的硬件驱动的收包线程rx_thread的唤醒机制。【附图说明】为了更清楚地说明本专利技术实施例的技术方案,下面将对本专利技术实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是现有的一种基于软中断实现的数据包接收和处理方法流程图;图2是本专利技术实施例提供的一种网络数据包处理方法的简约流程图;图3是本专利技术实施例提供的一种网络数据包处理方法详尽流程信令图;图4是本专利技术实施例提供的一种网络数据包处理装置的结构示意图。【具体实施方式】为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本专利技术,并不用于限定本专利技术。在本专利技术的描述中,术语“内”、“外”、“纵向”、“横向”、“上”、“下”、“顶”、“底”等指示的方位或位置关系为基于附图所示的方位本文档来自技高网...

【技术保护点】
1.一种网络数据包处理方法,网卡驱动状态默认的初始化,网卡开始工作,其特征在于,方法包括:创建收包线程rx_thread,通过所述收包线程rx_thread中的遍历操作,判断网卡驱动中对应的各网卡队列下是否有收到数据包;其中,收包线程内部包含休眠调度策略函数rx_schedu_policy,所述休眠调度策略函数rx_schedu_policy设置有预设访问次数,以便在包线程rx_thread中确认没有接收到数据包时,仍然执行所述预设访问次数的各网卡队列下是否有收到数据包的遍历操作后,才执行判断结果;其中,若判断结果为确认网卡中有收到数据包,则调用接收数据处理策略函数,将相应收到的数据包交由预设的协议栈或者应用程序处理;若判断结果为确认网卡中没有收到数据包,则调用接收数据处理策略函数会将收包线程阻塞。

【技术特征摘要】
1.一种网络数据包处理方法,网卡驱动状态默认的初始化,网卡开始工作,其特征在于,方法包括:创建收包线程rx_thread,通过所述收包线程rx_thread中的遍历操作,判断网卡驱动中对应的各网卡队列下是否有收到数据包;其中,收包线程内部包含休眠调度策略函数rx_schedu_policy,所述休眠调度策略函数rx_schedu_policy设置有预设访问次数,以便在包线程rx_thread中确认没有接收到数据包时,仍然执行所述预设访问次数的各网卡队列下是否有收到数据包的遍历操作后,才执行判断结果;其中,若判断结果为确认网卡中有收到数据包,则调用接收数据处理策略函数,将相应收到的数据包交由预设的协议栈或者应用程序处理;若判断结果为确认网卡中没有收到数据包,则调用接收数据处理策略函数会将收包线程阻塞。2.根据权利要求1所述的网络数据包处理方法,其特征在于,所述收包线程rx_thread的主体函数内容为死循环函数,其中,所述死循环函数的跳出机制设定为根据所述休眠调度策略函数rx_schedu_policy的返回参数值作为条件设置的,以if判断该条件后执行阻塞操作;具体的:一旦休眠调度策略函数rx_schedu_policy返回的值满足第一预设条件,便执行if判断内的收包线程的阻塞操作;其中,每次rx_thread内部调用一次所述休眠调度策略函数rx_schedu_policy,所述rx_schedu_policy的内部计数变量schedu_times便执行自加1操作;直到满足所述计数变量schedu_times与预设访问次数相同,便返回满足第一预设条件的参数值。3.根据权利要求1所述的网络数据包处理方法,其特征在于,所述通过所述收包线程rx_thread中遍历网卡驱动中对应的各网卡队列下是否有收到数据包,具体包括收包线程rx_thread预先建立网卡队列结构体变量rx_ring,具体的:在一轮遍历过程中,通过网卡队列结构体变量rx_ring获取网卡驱动中各网卡队列的数据包接收情况;并将所述网卡队列结构体变量rx_ring,作为输入参数导入Pol...

【专利技术属性】
技术研发人员:姜海辉
申请(专利权)人:武汉绿色网络信息服务有限责任公司
类型:发明
国别省市:湖北,42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1