嵌入式linux以太网卡动态轮询收包的方法及装置制造方法及图纸

技术编号:36536903 阅读:21 留言:0更新日期:2023-02-01 16:23
本发明专利技术提供了一种嵌入式linux以太网卡动态轮询收包的方法及装置。该方法包括:每当网卡接收到数据时,查询CPU使用率;计算CPU使用率与使用率阈值之间的误差;根据误差,通过PID算法计算轮询间隔时间;根据计算得到的轮询间隔时间,执行轮询。本发明专利技术提供的嵌入式linux以太网卡动态轮询收包的方法及装置能够解决轮询间隔时间设置固定的问题。询间隔时间设置固定的问题。询间隔时间设置固定的问题。

【技术实现步骤摘要】
嵌入式linux以太网卡动态轮询收包的方法及装置


[0001]本专利技术涉及存储系统
,特别是涉及一种嵌入式linux以太网卡动态轮询收包的方法及装置。

技术介绍

[0002]以太网用于进行计算机互联,它已是一种成熟的技术,最初是施乐(Xerox)公司的Robert Metcalfe于1973年专利技术的。Robert Metcalfe专利技术的第一个以太网以2.94Mbps速度运行,而第一个广泛采用的以太网技术以10Mbps速度运行。自此之后至今,以太网的速度翻了上千倍甚至更多。以太网已经成为国际电气电子工程师学会(IEEE)标准,并冠以IEEE的名义发布。以太网卡承担着向互联网发送接收数据的重要作用,是计算机个体与外界交互的桥梁。
[0003]以太网卡作为一种I/O设备,早期阶段都是通过CPU从网卡中接收数据,而由于CPU作为一种超高速设备与以太网卡存在速率不匹配问题,导致CPU在接收数据时无法进行其他操作,对CPU资源是极大的浪费。因此DMA的出现就是为了解决批量数据的输入/输出问题。DMA是指外部设备不通过CPU而直接与系统内存交换数据的接口技术。这样数据的传送速度就取决于存储器和外设的工作速度,可以极大减轻CPU的负担,提高CPU与I/O设备的交互速率。
[0004]现有方案主要包括两种:
[0005]1、物理网卡收到包后将数据包通过DMA的方式写入到指定的内存地址,该地址由网卡驱动分配并初始化。网卡通过硬件触发中断通知CPU(触发中断后,默认disable该中断),CPU根据中断表,调用已经注册的中断函数,这个中断函数会调用网卡驱动程序中相应的函数。中断上半部处理里将网卡设备的轮询列表加入到系统轮询列表中,然后触发软中断,软中断处理函数调用设备poll函数进行数据接收。系统会为软中断线程和poll分配一个额度值,配额机制是为了防止一次接收数据占用时间过长,导致其他程序无法得到调度。在一次轮询流程里,每接收一个报文就消耗一个额度,如果驱动消耗的额度等于poll分配的额度,说明此时网卡收到的报文比较多,因此需要继续下一次轮询,每次消耗的额度会累加,当超过软中断线程的额度时,退出本次软中断处理流程;当轮询消耗的额度没有达到poll的额度时,说明网卡报文不多,因此重新开启队列中断,进入中断模式。
[0006]2、物理网卡收到包后将数据包通过DMA的方式写入到指定的内存地址,该地址由网卡驱动分配并初始化。数据的接收采用无中断的方式,在驱动中将网卡DMA数据包到环形队列产生的接收中断屏蔽掉,驱动直接使用轮询方式读取DMA中的数据,两次间隔间进行一定时间的睡眠,通过不断轮询网卡设备,读取环形队列中的数据到内核的内存中。
[0007]结合现有技术,推导出现有技术存在的缺陷、缺点、不足之处,且所提出的不足之处需要是本专利技术创造能够解决的问题。
[0008]方案1缺点:
[0009]对于上层的应用程序而言,系统不能在每个数据包接收到的时候都可以及时地去
处理它,而且随着传输速度增加,累计的数据包将会耗费大量的内存。另外一个问题是对于大的数据包处理比较困难,原因是大的数据包传送到网络层上的时候耗费的时间比短数据包长很多(即使是采用DMA方式)。所以,中断轮询技术适用于对高速率的短长度数据包的处理,而对于海量数据的处理性能有限。
[0010]方案2缺点:
[0011]使用轮询方案时,两次查询间隔时间为固定值,比如通过带宽计算得出或者根据以往经验设置,由于不同产品使用场景不同,如果设置过小,会消耗大量CPU资源,特别是嵌入式设备CPU性能有限,一定程度会影响收到数据后的处理流程;如果设置过大,数据无法及时从网卡中取出,也会导致设备性能受到影响。

技术实现思路

[0012]本专利技术要解决的技术问题是提供一种嵌入式linux以太网卡动态轮询收包的方法及装置,能够解决轮询间隔时间设置固定的问题。
[0013]为解决上述技术问题,本专利技术提供了一种嵌入式linux以太网卡动态轮询收包的方法,所述方法包括:每当网卡接收到数据时,查询CPU使用率;计算CPU使用率与使用率阈值之间的误差;根据误差,通过PID算法计算轮询间隔时间;根据计算得到的轮询间隔时间,执行轮询。
[0014]在一些实施方式中,还包括:新建轮询线程。
[0015]在一些实施方式中,还包括:对DMA进行初始化。
[0016]在一些实施方式中,每当网卡接收到数据时,查询CPU使用率,包括:判断当前网卡是否接收到数据。
[0017]在一些实施方式中,每当网卡接收到数据时,查询CPU使用率,还包括:将接收到的数据发送至应用层。
[0018]在一些实施方式中,每当网卡接收到数据时,查询CPU使用率,还包括:判断数据接收量是否超出配额;当判断数据接收量未超出配额时,继续数据接收;当判断数据接收量超出配额时,结束数据接收。
[0019]此外,本专利技术还提供了一种嵌入式linux以太网卡动态轮询收包的装置,所述装置包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现根据前文所述的嵌入式linux以太网卡动态轮询收包的方法。
[0020]采用这样的设计后,本专利技术至少具有以下优点:
[0021]1、摒弃固定的轮询间隔,使用PID算法动态调整轮询间隔,在CPU资源与网卡利用率之间寻找到新的平衡点,最大化网卡利用率的同时不影响其他程序的调度;
[0022]2、轮询方案中加入配额机制,防止轮询时一直占用CPU资源导致其他程序挂死。
附图说明
[0023]上述仅是本专利技术技术方案的概述,为了能够更清楚了解本专利技术的技术手段,以下结合附图与具体实施方式对本专利技术作进一步的详细说明。
[0024]图1是方法的流程图。
具体实施方式
[0025]以下结合附图对本专利技术的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本专利技术,并不用于限定本专利技术。
[0026]第一实施例
[0027]本专利技术第一实施例提供的嵌入式linux以太网卡动态轮询收包的方法包括如下的操作步骤:
[0028]步骤一,每当网卡接收到数据时,查询CPU使用率。
[0029]步骤二,计算CPU使用率与使用率阈值之间的误差。
[0030]步骤三,根据误差,通过PID算法计算轮询间隔时间。
[0031]步骤四,根据计算得到的轮询间隔时间,执行轮询。
[0032]经过上述各个操作步骤的执行,本专利技术第一实施例摒弃了固定的轮询间隔,转而使用PID算法动态调整轮询间隔,能够在CPU资源与网卡利用率之间寻找到新的平衡点,最大化网卡利用率的同时不影响其他程序的调度。
[0033]第二实施例
[0034]第二实施例有如下一些要点:
[0035]1.网卡驱动开机后新建线程开始进行轮询,如果没有收到数据则进入睡眠,等待下一次轮询本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种嵌入式linux以太网卡动态轮询收包的方法,其特征在于,包括:每当网卡接收到数据时,查询CPU使用率;计算CPU使用率与使用率阈值之间的误差;根据误差,通过PID算法计算轮询间隔时间;根据计算得到的轮询间隔时间,执行轮询。2.根据权利要求1所述的嵌入式linux以太网卡动态轮询收包的方法,其特征在于,还包括:新建轮询线程。3.根据权利要求1所述的嵌入式linux以太网卡动态轮询收包的方法,其特征在于,还包括:对DMA进行初始化。4.根据权利要求1所述的嵌入式linux以太网卡动态轮询收包的方法,其特征在于,每当网卡接收到数据时,查询CPU使用率,包括:判断当前网卡是否接收到数据。5.根据权利要求4所述的嵌入式linux以太网...

【专利技术属性】
技术研发人员:姚湘陵文中领周泽湘刘皇保
申请(专利权)人:北京同有飞骥科技股份有限公司
类型:发明
国别省市:

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

1