[发明专利]Linux系统上以太网卡快速捕包的方法无效
| 申请号: | 200710115379.0 | 申请日: | 2007-12-18 |
| 公开(公告)号: | CN101227341A | 公开(公告)日: | 2008-07-23 |
| 发明(设计)人: | 黄景昌;张会健;吴庆民;施培任 | 申请(专利权)人: | 浪潮电子信息产业股份有限公司 |
| 主分类号: | H04L12/26 | 分类号: | H04L12/26;H04L12/56;H04L12/02 |
| 代理公司: | 济南信达专利事务所有限公司 | 代理人: | 姜明 |
| 地址: | 250014山东*** | 国省代码: | 山东;37 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | linux 系统 以太 网卡 快速 方法 | ||
1、技术领域
本发明涉及计算机通信领域,具体涉及一种Linux系统上以太网卡快速捕包的方法。
2、技术背景
目前局域网应用十分广泛,以太网是局域网的一种,也是局域网的主流方式。在以太网上可传输ip包实现和tcp/ip互联网的连接。而在网络管理、网络检测中,需要对传输的网络数据包进行捕获,进而分析网络流量、对指定源地址和目的地址的通信进行监控和入侵检测等。为了提高监控速度等性能,需要对数据包完全或者尽可能完全的捕获。
在Linux系统上,传统的以太网卡驱动和内核的网络处理栈受到以太网卡中断调度、数据包在内核中和由内核向用户区复制次数过多的影响,收包速度还不十分理想。目前Linux系统上的链路包通用的捕获方式是通过PK_SOCKET类型的套接字(socket)进行数据包接收的,它是在Linux协议栈的底层的netif_receive_skb函数中将刚收自网卡的链路包复制一份,而使用该类型的套接字接收数据到用户区时还需要复制一次。此外目前Linux系统内核的网络协议栈兼顾速度和普遍通用性,它接收网卡设备数据包的一些方式,影响了对网卡设备进行捕包速度,具体表现在:
(1)非NAPI方式是完全由网卡中断触发对数据包的接收,在高频率来包时网卡中断处理调度需要较大的cpu资源消耗。
(2)NAPI方式结合网卡中断触发和主动查询接收,虽然大大减少了中断调度次数,但是每次轮询有固定时间(1个系统时钟周期jiffies)限制,超出该时间值将结束接收,这样难以保证轮询结束后不丢包。
(3)无论是非NAPI方式还是NAPI方式,对于每一个接收到DMA接收缓存区的数据包,都需要申请缓存空间,不能重复使用,而申请和释放缓存空间虽然由系统高效的内存管理模块完成,但其计算量也不可忽视。
(4)无论是非NAPI方式还是NAPI方式,接收到的数据包缓存队列长度十分有限,当数据包处理速度不均匀时很容易缓存区满而丢包,而如果在用户区增加扩大缓存,还需要做一次拷贝。
由于Linux系统的传统捕包方式在速度、性能上的局限性,需要一种更快更优的捕包方法。
3、发明内容
为了提高使用以太网卡捕包的收包率和性能,本发明提供了一种应用在Linux系统上的以太网卡快速捕包的方法。
本发明提供的以太网卡快速捕包方法的步骤为:
(1)在以太网卡驱动中,在模块加载时注册一个混杂设备(miscellaneous device),记为misc_dev,定义该设备的open,release,mmap,ioctl操作函数,其中mmap函数将用于将指定网卡的环形接收描述符缓存区和数据包接收缓存区映射给用户区的程序,ioctl函数用于为用户区程序提供移动指定网卡的环形接收描述符缓存区接收尾指针以使网卡能够持续收包的功能。相应的,在模块卸载时要注销该混杂设备。
(2)在以太网卡驱动中,在模块加载时定义一个全局结构变量,记为g_map_dev,用于保存该系列(驱动)的所有网卡设备的环形接收描述符个数及其缓存区虚拟地址、数据包接收缓存区的虚拟地址,在混杂设备misc_dev的mmap函数中使用该全局变量g_map_dev获取缓存区虚拟地址转换为物理地址并向用户区映射。相应的,在模块卸载时要释放该全局结构变量。
(3)在以太网卡驱动中,使用pci_alloc_consistent函数分配接收描述符缓存区和数据包接收缓存区,这种方式使缓存区可以同时从网卡和CPU两个方向访问。这两个缓存区对于网卡是可直接内存访问(Direct Memory Access)方式传输的。同时把缓存区的虚拟地址保存到步骤(2)中说明的全局结构变量g_map_dev中。相应的,释放缓存区的时候(停止网卡、重置网卡)使用pci_free_consistent函数。
(4)在用户区,定义一系列链表结构的缓存区,以实现数据包缓存的重复使用和减少包处理线程之间取包时的锁冲突。
缓存区分为两种组别:包接收缓存组和包处理缓存组。对于有N个网卡设备捕包和M个包处理缓存组的配置,将定义((2+M)×N+(4×M))个缓存区,即N个接收缓存组和M个包处理缓存组,每个接收缓存组包含2+M个缓存区,每个包处理缓存组包含4个缓存区。其中的每个缓存区是以链表结构组织,每个链表元素为一个固定大小的数据包缓存及其状态(实际接收的数据包长度)。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浪潮电子信息产业股份有限公司,未经浪潮电子信息产业股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200710115379.0/2.html,转载请声明来源钻瓜专利网。





