【技术实现步骤摘要】
一种基于动态预测的网络驱动层数据包接收方法和系统
本专利技术属于网络
,更具体地,涉及一种基于动态预测的网络驱动层数据包接收方法和系统。
技术介绍
网络驱动在接收数据包的过程中采用两种方式,传统中断I/O方式和NAPI (NewAPI)方式。传统中断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)解除当前接收描述符对应的数据包缓存,并将新数据包缓存挂载到该接收描 ...
【技术特征摘要】
1.一种基于动态预测的网络驱动层数据包接收方法,其特征在于,包括以下步骤: (1)建立空白链表和循环队列,并创建内核线程和内核定时器,其中空白链表用于保存内核线程分配的数据包缓存,循环队列用于保存每次网络设备中断所产生的状态数据,内核线程用于分配数据包缓存和进行错误处理,并将数据包缓存插入空白链表,内核定时器用于定时唤醒内核线程; (2)接收网络设备中断,执行中断处理程序,并在进入中断处理程序后立即停止接收网络设备中断; (3)判断网络设备中断指令的类型是接收指令还是错误指令,如果是接收指令,则转入步骤(4),如果是错误指令,则转入步骤(10); (4)判断接收指令的接收描述符中数据到达位是否为0,如果是则过程结束,转入步骤(12),如果不是则转入步骤(5); (5)判断空白链表中数据包缓存的数量是否低于阈值,如果是则转入步骤(6),如果不是则转入步骤(7); (6)设置数据包缓存分配标志,并唤醒内核线程,以分配数据包缓存: (7)从空白链表中获取一个新数据包缓存, 判断是否成功获取,如果是则转入步骤(8),如果不是则转入步骤(9); (8)解除当前接收描述符对应的数据包缓存,并将新数据包缓存挂载到该接收描述符; (9)统计当前接收描述符对应的数据包缓存中有效数据的长度,并丢弃有效数据,不改变当前接收描述符数据包缓存; (10)判断错误指令的类型,如果是致命错误,则转入步骤(11),否则统计错误数据; (11)停止接收上层发送的数据包,设置网络设备错误标志,唤醒内核线程以进行错误处理; (12)在循环队列中保存本次的状态数据,打开网络设备中断。2.根据权利要求1所述的网络驱动层数据包接收方法,其特征在于, 空白链表包括一个数据包缓存的指针和一个计数器,指针指向链表的第一个元素,初始时为空; 计数器用于记录链表中元素的数量,初始时为O ; 循环队列是由η个元素的环形数组组成,用于保存状态数据; 每个状态数据包括三个组成部分,分别用于记录一次中断当中接收到的数据包数量的计数器,用于记录开始接收第一个数据包的时间的变量,以及用于记录接收完最后一个数据包的时间的变量,初始时循环队列置为O。3.根据权利要求1所述的网络驱动层数据包接收方法,其特征在于,内核线程和内核定时器在驱动程序加载时被创建,内核线程在完成数据包缓存分配或错误处理后,进入休眠状态,内核定时器时间到期后,唤醒休眠状态的内核线程,以进行数据包缓存分配,并修改定时器时间,以在下一次时间到期后再次唤醒内核线程。4.根据权利要求1所述的网络驱动层数据包接收方法,其特征在于,步骤(6)中分配数据包缓存的步骤包括以下子步骤: (6-1)根据循环队列保存的状态数据,计算需要分配的数据包缓存数量(6-2)根据步骤(6-1)计算的需要分配的数据包缓存数量,分配对应数量的数据...
【专利技术属性】
技术研发人员:陈进才,刘玉虎,周功业,周可,张英男,余乐,陈涛,
申请(专利权)人:华中科技大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。