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进行处理,这样大量的性能消耗都浪费在中断上面了,往往会出现丢包的情况。鉴于此,克服该现有技术所存在的缺陷是本
亟待解决的问题。
技术实现思路
本专利技术要解决的技术问题是解决传统网卡收包在处理大流量尤其是网络小包的时候,出现吞吐低,延迟大,丢包厉害的情况本专利技术采用如下技术方案:第一方面,本专利技术提供了一种网络数据包处理方法,网卡驱动 ...
【技术保护点】
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
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。