[发明专利]一种基于动态预测的网络驱动层数据包接收方法和系统有效
| 申请号: | 201310628565.X | 申请日: | 2013-11-29 |
| 公开(公告)号: | CN103634230A | 公开(公告)日: | 2014-03-12 |
| 发明(设计)人: | 陈进才;刘玉虎;周功业;周可;张英男;余乐;陈涛 | 申请(专利权)人: | 华中科技大学 |
| 主分类号: | H04L12/861 | 分类号: | H04L12/861;G06F9/50 |
| 代理公司: | 华中科技大学专利中心 42201 | 代理人: | 朱仁玲 |
| 地址: | 430074 湖北*** | 国省代码: | 湖北;42 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 动态 预测 网络 驱动 数据包 接收 方法 系统 | ||
技术领域
本发明属于网络技术领域,更具体地,涉及一种基于动态预测的网络驱动层数据包接收方法和系统。
背景技术
网络驱动在接收数据包的过程中采用两种方式,传统中断I/O方式和NAPI(New API)方式。
传统中断I/O方式在每次网络设备中断过程中仅处理一个数据包,优点是在数据流量不是很大的情况下,响应及时,节省系统资源;然而,如果数据流量较大,高频的中断调用将会过多的占用CPU时间,影响服务器的性能。
NAPI(NEW API)是Linux系统中采用的有别于传统方式的数据包接收方式,NAPI方式结合中断触发和主动轮询方式接收数据,减少了数据包接收中断的频率以及高频中断调度造成的系统开销;在数据流量较高并且数据包较小时具有较高的效率;但其仍然存在一些缺点:由于采用了软件中断的方式,会有一定的延迟,当数据流量较低时,NAPI方式比传统中断I/O方式效率更低,并且当数据包较大时,申请数据包缓存和复制数据将占用大量的处理时间。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种基于动态预测的网络驱动层数据包接收方法和系统,其目的在于,加速网络设备中断处理过程,使得每次数据包接收中断不需要申请数据包缓存来拷贝数据,并在每次中断过程中尽可能多的接收数据包,降低网络设备的中断频率,通过记录每次中断过程中接收到的数据包数量,来动态预测网络流量的高低,并动态计算预分配数据包缓存的数量,以适应网络流量的变化,防止在数据流量较低时耗费过多内存。
为实现上述目的,按照本发明的一个方面,提供了一种基于动态预测的网络驱动层数据包接收方法,包括以下步骤:
(1)建立空白链表和循环队列,并创建内核线程和内核定时器,其中空白链表用于保存内核线程分配的数据包缓存,循环队列用于保存每次网络设备中断所产生的状态数据,内核线程用于分配数据包缓存和进行错误处理,并将数据包缓存插入空白链表,内核定时器用于定时唤醒内核线程;
(2)接收网络设备中断,执行中断处理程序,并在进入中断处理程序后立即停止接收网络设备中断;
(3)判断网络设备中断指令的类型是接收指令还是错误指令,如果是接收指令,则转入步骤(4),如果是错误指令,则转入步骤(10);
(4)判断接收指令的接收描述符中数据到达位是否为0,如果是则过程结束,转入步骤(12),如果不是则转入步骤(5);
(5)判断空白链表中数据包缓存的数量是否低于阈值,如果是则转入步骤(6),如果不是则转入步骤(7);
(6)设置数据包缓存分配标志,并唤醒内核线程,以分配数据包缓存:
(7)从空白链表中获取一个新数据包缓存,判断是否成功获取,如果是则转入步骤(8),如果不是则转入步骤(9);
(8)解除当前接收描述符对应的数据包缓存,并将新数据包缓存挂载到该接收描述符;
(9)统计当前接收描述符对应的数据包缓存中有效数据的长度,并丢弃有效数据,不改变当前接收描述符数据包缓存;
(10)判断错误指令的类型,如果是致命错误,则转入步骤(11),否则统计错误数据;
(11)停止接收上层发送的数据包,设置网络设备错误标志,唤醒内核线程以进行错误处理;
(12)在循环队列中保存本次的状态数据,打开网络设备中断。
优选地,空白链表包括一个数据包缓存的指针和一个计数器,指针指向链表的第一个元素,初始时为空,计数器用于记录链表中元素的数量,初始时为0,循环队列是由n个元素的环形数组组成,用于保存状态数据,每个状态数据包括三个组成部分,分别用于记录一次中断当中接收到的数据包数量的计数器,用于记录开始接收第一个数据包的时间的变量,以及用于记录接收完最后一个数据包的时间的变量,初始时循环队列置为0。
优选地,内核线程和内核定时器在驱动程序加载时被创建,内核线程在完成数据包缓存分配或错误处理后,进入休眠状态,内核定时器时间到期后,唤醒休眠状态的内核线程,以进行数据包缓存分配,并修改定时器时间,以在下一次时间到期后再次唤醒内核线程。
优选地,步骤(6)中分配数据包缓存的步骤包括以下子步骤:
(6-1)根据循环队列保存的状态数据,计算需要分配的数据包缓存数量
(6-2)根据步骤(6-1)计算的需要分配的数据包缓存数量,分配对应数量的数据包缓存,对于分配的每一个数据包缓存,将其插入空白链表;
(6-3)清除数据包缓存分配标志,内核线程进入休眠状态。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华中科技大学,未经华中科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310628565.X/2.html,转载请声明来源钻瓜专利网。





