[发明专利]一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法有效
| 申请号: | 201010279606.5 | 申请日: | 2010-09-13 |
| 公开(公告)号: | CN101917350A | 公开(公告)日: | 2010-12-15 |
| 发明(设计)人: | 姚文顶 | 申请(专利权)人: | 南京中兴特种软件有限责任公司 |
| 主分类号: | H04L12/56 | 分类号: | H04L12/56;H04L12/26 |
| 代理公司: | 南京天华专利代理有限责任公司 32218 | 代理人: | 夏平;瞿网兰 |
| 地址: | 211100 江苏省南京市江*** | 国省代码: | 江苏;32 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 linux 基于 网卡 驱动 拷贝 以太网 报文 捕获 发送 实现 方法 | ||
技术领域
本发明涉及一种Linux系统中实现高速收发包的方法,尤其是一种在报发收发过程中零拷贝的收发包方法,具体地说是一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法。
背景技术
在网络通信监控及流量分析等应用中,需要实现大流量的高性能的对报文进行捕获或者发送,通常所采用socket及libpcap等方式进行报文的捕获及发送的性能往往达不到系统所要求的性能需求,成为整个系统中的性能瓶颈。这些通用方案在报文到达网卡,有网卡驱动接收到报文后,会进行大量的处理及多次拷贝动作,包括从内核态向用户空间进行报文的拷贝,这些操作虽然保证了较好的通用性,但也导致了其性能不满足系统的需求。
发明内容
本发明的目的是针对现有的报文收发包均需进行反复拷贝才能完成收发过程造成速度难以提高的问题,发明一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法。
本发明的技术方案是:
一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法,其特征是它包括以下步骤:
首先,在内核态报文驱动模块中建立捕包队列、报文释放队列、报文缓存队列及发送队列以实现对报文的管理,并创建相应的报文填充线程、报文释放线程及报文发送线程;
其次,在加载网卡驱动且打开相应的网卡设备时,立即向前述报文驱动模块进行网卡设备注册,获得相应的报文发送接口;
第三,在用户进程中将整个物理内存映射到用户空间,使得用户进程可以直接访问整个物理内存;
第四,当用户进程需要进行报文捕获或者发送时,通过Linux下的/proc文件项方式通知内核态报文驱动模块进行初始化工作,创建相应资源及记录用户进程的初始配置,初始化成功后,用户进程即可进程报文捕获及发送;
最后,采用物理地址在用户态和内核态之间进行数据交互,在用户态使用过程中将用户态的物理地址转换为虚拟地址,在内核态使用过程时,将内核态的物理地址其转换为内核虚拟地址,以实现零拷贝的以太网报文捕获及发送。
所述的报文填充线程负责申请报文缓存,并将报文指针的物理地址放入报文缓存队列;所述的报文释放线程负责从报文释放队列中取出待释放报文指针,并相应缓存释放;所述的报文发送线程负责从报文发送队列中取出待释放报文指针,并将该报文发送出去;当网卡接收到报文,网卡驱动将报文上送到报文驱动模块,报文驱动模块将报文指针的物理地址放入相应的捕包队列中。
所述的用户进程通过dmesg启动信息或者/proc/iomem文件获取到当前物理地址的最大值,并将当前进程空间使用的内存大小设置为无限制(即当前进程空间可使用的内存大小没有上限设置),同时根据获取到的最大物理地址使用mmap将整个物理内存映射到用户进程空间。
所述的内核报文驱动模块注册初始化/proc文件项及其读写方法,然后由用户进程打开初始化/proc文件项,并向所述的初始化/proc文件项中写入初始配置项;内核态报文驱动模块获取到初始配置后,分配相应资源,设置捕包配置;内核初始化成功后,用户进程获取映射相应资源到用户空间,则用户进程可以通过相应资源捕获及发送报文。
所述的报文捕获方法是:当报文到达网卡时,网卡驱动接收报文并将其上送到报文驱动模块,报文驱动模块将报文的物理地址放入捕包队列中,用户进程从捕包队列中取到报文的物理地址,转换为用户进程空间的虚拟地址,即可实现对报文数据的访问。
所述的报文发送方法是:当用户进程需要发送报文时,首先从报文缓存队列中取出一个报文缓存的物理地址,转换为用户进程的虚拟地址,填充要发送的报文内容,然后将该报文物理地址放入相应发送队列,内核报文驱动模块从发送队列中取出待发送报文的物理地址,将其转换为内核态虚拟地址,调用网卡设备的发送接口,即可将该报文发送出去。
本发明的有益效果:
本发明直接将网卡驱动接收到的报文传递到用户空间,中间没有任何的拷贝动作,用户进程也可以将要发送的报文直接传递到网卡驱动进行报文的发送,中间也没有任何的拷贝动作,从而极大的提高了报文的捕获及发送速率,能够较好的满足网络通信监控及流量分析等应用对报文捕获及发送有高性能的要求。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京中兴特种软件有限责任公司,未经南京中兴特种软件有限责任公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010279606.5/2.html,转载请声明来源钻瓜专利网。
- 上一篇:肠道病毒及其应用
- 下一篇:一种谷氨酰胺转胺酶编码基因阻断吸水链霉菌及其应用





