[发明专利]一种应用于具有多CPU和网卡的系统的网卡驱动方法有效
申请号: | 201310309455.7 | 申请日: | 2013-07-23 |
公开(公告)号: | CN103440213A | 公开(公告)日: | 2013-12-11 |
发明(设计)人: | 刘炳伟;王金桂 | 申请(专利权)人: | 深圳市共进电子股份有限公司 |
主分类号: | G06F13/10 | 分类号: | G06F13/10 |
代理公司: | 深圳市凯达知识产权事务所 44256 | 代理人: | 王琦 |
地址: | 518067 广东省深圳市南山区南海*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 应用于 具有 cpu 网卡 系统 驱动 方法 | ||
技术领域
本发明涉及通信技术领域,尤其涉及一种应用于具有多CPU和网卡的系统的网卡驱动方法。
背景技术
通常,linux系统的网卡驱动过程主要包括两部分。
如图1所示,网卡驱动过程的上半部包括:
101、在来自通信对端的以太网数据传输到本端的网卡后,系统产生硬件中断,同时关闭硬件中断,即此时不会再接收网络中断。
102、硬件中断产生后,系统CPU调用上述网卡在open时注册的中断处理函数,进行以下中断处理:首先从网卡的数据寄存器中读取所接收的以太网数据;然后创建一块缓存(skb_buf),将以太网数据写入到该缓存中;之后将该缓存以结构链表的方式挂入到上述网卡的接收队列中。
网卡的接收队列其实就是一个链表,是用来临时存放skb_buf对象实例的;所有网卡在将接收到的数据写入skb_buf之后都会将此skb_buf链入到其接收队列中,接收队列中的各skb_buf将在网络驱动过程的下半部分被取出发送至协议栈。
103、在网卡设备接收完数据之后,将该网卡挂到当前CPU的设备队列中,然后设置软中断,等待在软中断中继续处理数据。CPU的设备队列用以维护当前所有需要处理的网络设备。
104、重新开启硬件中断,此时系统可再次响应硬件中断。
如图2所示,网卡驱动过程的下半部包括:
201、系统在进行软中断轮询时,由于在上半部设置了软中断,因此发现CPU的软中断被置位。
202、依次对CPU的设备队列中各网卡设备所接收到的以太网数据进行处理:首先从CPU的设备队列中取得网卡设备,再从该网卡设备的接收队列中取得数据包,根据包头内容做相应的处理之后就将该数据包送往网络协议栈。
203、数据处理完毕后,从CPU的设备队列中移出数据处理完毕的网卡设备,同时关闭软中断。
但是上述网卡驱动流程在应用于具有多个CPU和网卡的系统中时,上半部分中的关闭硬件中断、CPU申请内存及读取寄存器中的数据、将数据写入内存中、将内存以skb_buf结构的形式挂入设备队列、将该设备挂入到CPU维护的设备队列中等等这一系列的操作将会耗费大量时间,使得系统对下一次硬件中断处理将不及时。如果硬件中断很频繁,而此时系统处于硬件关中断状态,即使系统中有其他CPU处于空闲状态,那中断请求也得不到及时处理。因而,有必要对此驱动方法进行改进。
发明内容
本发明的目的在于提供一种网卡驱动方法,应用于具有多CPU和网卡的系统,缩短系统处于硬件中断关闭状态的时间,提高对新的硬件中断的响应速度。
本发明的目的是通过以下技术方案实现的:
一种应用于具有多CPU和网卡的系统的网卡驱动方法,包括网卡驱动过程一和网卡驱动过程二,还包括步骤:在各个CPU的数据结构中分别创建数据接收设备队列和数据发送设备队列,初始化为空;
所述网卡驱动过程一具体包括:
①在通信对端的以太网数据到达网卡时,产生硬件中断,同时关闭硬件中断,调用中断处理进程;
②将所述网卡添加至一CPU的数据接收设备队列中;
③重新开启硬件中断,同时设置所述网卡当前所处数据接收设备队列所属的CPU软中断,所述中断处理进程返回;
所述网卡驱动过程二具体包括:
进行软中断轮询;对于软中断置位的CPU,
先扫描其数据接收设备队列,依次对该数据接收设备队列中的每个网卡进行处理:先从设备寄存器中读取相应的数据,将数据打包后挂入当前网卡的数据接收链表中;然后从数据接收设备队列中摘除当前网卡,并将当前网卡挂入一CPU的数据发送设备队列中;
再依次对其数据发送设备队列中的设备进行处理:将当前网卡的数据接收链表中的数据处理后发送至协议栈。
其中,所述步骤②,将所述网卡添加至一CPU的数据接收设备队列的过程进一步包括:
所述中断处理进程轮询各CPU,查看所述网卡存在于当前CPU的数据接收设备队列还是数据发送设备队列中,
若存在于当前CPU的数据接收设备队列,则跳转至步骤③;
若存在于当前CPU的数据发送设备队列中,则将该网卡移到一CPU的数据接收设备队列后跳转至步骤③;
若不存在于任一CPU的数据接收设备队列及数据发送设备队列中,则将该网卡添加至一CPU的数据接收设备队列中,之后跳转至步骤③。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于深圳市共进电子股份有限公司,未经深圳市共进电子股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310309455.7/2.html,转载请声明来源钻瓜专利网。