[发明专利]一种支持多类型网卡链路聚合的零拷贝方法有效
申请号: | 200810114690.8 | 申请日: | 2008-06-06 |
公开(公告)号: | CN101540720A | 公开(公告)日: | 2009-09-23 |
发明(设计)人: | 曾宇;历军;聂华;刘朝辉 | 申请(专利权)人: | 曙光信息产业(北京)有限公司 |
主分类号: | H04L12/56 | 分类号: | H04L12/56;H04L12/02;G06F13/28 |
代理公司: | 北京安博达知识产权代理有限公司 | 代理人: | 徐国文 |
地址: | 100084*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 支持 类型 网卡 聚合 拷贝 方法 | ||
技术领域
本发明涉及一种零拷贝捕包方法,具体地说是一种可支持多类型网卡、实现链路聚合功能的零拷贝方法。
背景技术
在高速网络环境中,进行侦听,检测等工作的应用软件需要高效的报文捕获方式,也就是零拷贝捕包方式,在传统的零拷贝捕包软件中,一般采用内核驱动和应用接口库两层结构。内核驱动负责向报文缓冲区中写入报文,应用接口库负责把报文缓冲区提交给应用,当应用软件处理完报文后,会再把缓冲区通过应用接口库释放,以便内核驱动向缓冲区写入新的报文。
在传统的零拷贝软件中,当一个应用在一块网卡上捕包时,应用通过零拷贝接口库和内核缓冲区共同操作一个缓冲区队列。但是随着CPU计算能力的增强,现在一台服务器已经有能力处理多块网卡上的流量,所以需要零拷贝软件提供链路聚合功能,把多个网卡的流量聚合成一个数据流提交给应用软件。
实现链路聚合的一般方法是,在接口库中建立一系列缓冲队列,对应每个网卡设备有一个队列,当接口库向应用提交报文缓冲区时,接口库对每个网卡进行轮询,并寻找一个缓冲区给应用;当应用释放缓冲区时,接口库根据缓冲区的位置计算缓冲区属于哪个网卡,把缓冲区放入该网卡的空闲队列。
随着应用需求的发展,现有技术方案出现了可扩展性不好的缺点,因为很多高速网上的报文处理应用需要特殊的定制化的网卡硬件,在这些定制网卡上,往往要对原始的网络报文做一些预处理,常见的是在原始报文结构前面增强一个额外的数据结构,或者把多个小报文拼合在一个缓冲区内。由于不同的捕包网卡上传的报文结构不同,现有的技术方案中,应用接口库把缓冲区和报文作为一致的数据结构处理,导致一套接口库只能在一种类型的网卡设备上使用,无法解决一个应用使用多种网卡的问题。
发明内容
本发明的目的在于解决现有技术方案的缺点,从而提供一种通过将现有技术中的捕包应用接口层划分为缓冲区接口层和报文接口层的分层结构实现对多类型网卡的报文的聚合、对应用提供分流、过滤等附加功能的零拷贝方法。
为实现上述发明目的,本发明通过如下技术方案实现:一种支持多类型网卡链路聚合的零拷贝方法,包括如下步骤:
A)应用程序调用接口库提供的缓冲区接口层函数打开设备接口,对各网卡指定一个用于区分不同类型网卡的类型号码,将各类型号码记录在设备类型列表中;在各网卡的内核驱动中都增加一个用于返回网卡类型号码的系统调用命令;
B)缓冲区接口层提供的打开设备接口函数在用户空间中申请一片连续的内存作为缓冲区,并将缓冲区首地址传给内核驱动;
C)内核驱动申请连续的页面来构造缓冲区队列的控制结构,并把控制结构的物理地址传给缓冲区接口层函数;
D)接口函数根据缓冲区控制结构的地址,通过内存映射得到缓冲区控制结构中的信息;
E)应用程序调用接口库提供的报文接口层函数打开设备接口,通过各网卡设备的系统调用命令获得各网卡设备的类型号码,并将记录所有号码的设备类型列表记录在一个全局数据结构中,报文接口层根据类型号码对相应网卡设备的缓冲区进行操作;
F)在用户空间中为应用新建报文指针队列,将从缓冲区中提取出的报文指针放入报文指针队列,应用程序对报文指针队列中的报文数据进行处理。
所述步骤B中缓冲区的大小为2KB,为保证在用户空间申请的缓冲区位于连续的内存页面上,接口库函数申请的内存为共享内存,因为在linux操作系统中,共享内存位于连续的物理页面上,具体操作为:
B1)接口库函数在用户空间中请共享缓冲区,并连接到共享缓冲区;
B2)接口库函数把共享缓冲区的首地址通过ioctl系统调用命令传给内核驱动。
B3)内核驱动计算缓冲区队列中每个缓冲区的物理地址,并将所述地址保存在一张物理地址表中以便DMA使用;
所述步骤C中的缓冲区控制结构包括缓冲区队列,此队列包括空闲队列、接收缓冲区队列、描述驱动工作模式的正常模式和直接拷贝模式,用于进程同步及互斥的变量等。
所述步骤D的具体步骤为:
D1)用户接口库函数从系统调用返回的数据结构中获得内核驱动中构造的缓冲区队列控制结构的物理地址;
D2)用户接口库函数打开内存设备文件;
D3)用户接口库函数通过系统调用把内核中的缓冲区控制结构映射到自己的地址空间。
所述步骤F的具体步骤为:
F1)报文接口层提供的打开设备接口函数在用户空间中新建报文指针队列;
F2)报文接口库的报文提取函数通过设备类型列表判断各网卡的缓冲区中的结构,从而提取出报文指针,放入报文指针队列中。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于曙光信息产业(北京)有限公司,未经曙光信息产业(北京)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200810114690.8/2.html,转载请声明来源钻瓜专利网。
- 上一篇:数据传输方法和装置
- 下一篇:一种用于监控家用计算机使用的装置