[发明专利]一种支持多类型网卡链路聚合的零拷贝方法有效
申请号: | 200810114690.8 | 申请日: | 2008-06-06 |
公开(公告)号: | CN101540720A | 公开(公告)日: | 2009-09-23 |
发明(设计)人: | 曾宇;历军;聂华;刘朝辉 | 申请(专利权)人: | 曙光信息产业(北京)有限公司 |
主分类号: | H04L12/56 | 分类号: | H04L12/56;H04L12/02;G06F13/28 |
代理公司: | 北京安博达知识产权代理有限公司 | 代理人: | 徐国文 |
地址: | 100084*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 支持 类型 网卡 聚合 拷贝 方法 | ||
1.一种支持多类型网卡链路聚合的零拷贝方法,其特征在于,所述方法包括如下步骤:
A)应用程序调用接口库提供的缓冲区接口层函数打开设备接口,对各网卡指定一个用于区分不同类型网卡的类型号码,将各类型号码记录在设备类型列表中;在各网卡的内核驱动中都增加一个用于返回网卡类型号码的系统调用命令;
B)缓冲区接口层提供的打开设备接口函数在用户空间中申请一片连续的内存作为缓冲区,并将缓冲区首地址传给内核驱动;
C)内核驱动申请连续的页面来构造缓冲区控制结构,并把控制结构的物理地址传给打开设备接口函数;
D)打开设备接口函数根据缓冲区控制结构的物理地址,通过内存映射得到缓冲区控制结构中的信息;
E)应用程序调用接口库提供的报文接口层函数打开设备接口,通过各网卡设备的系统调用命令获得各网卡设备的类型号码,并将记录所有类型号码的设备类型列表记录在一个全局数据结构中,报文接口层根据类型号码对相应网卡设备的缓冲区进行操作;
F)在用户空间中为应用新建报文指针队列,将从缓冲区中提取出的报文指针放入报文指针队列,应用程序对报文指针队列中的报文数据进行处理。
2.根据权利要求1所述的零拷贝方法,其特征在于,所述步骤B中缓冲区的大小为2KB,为保证在用户空间申请的缓冲区位于连续的内存页面上,打开设备接口函数申请的内存为共享内存,因为在linux操作系统中,共享内存位于连续的物理页面上,具体操作为:
B1)打开设备接口函数在用户空间申请共享缓冲区,并连接到共享缓冲区;
B2)打开设备接口函数把共享缓冲区的首地址通过ioct1系统调用命令传给内核驱动;
B3)内核驱动计算缓冲区队列中每个缓冲区的物理地址,并将所述地址保存在一张物理地址表中以便DMA使用。
3.根据权利要求1所述的零拷贝方法,其特征在于:所述步骤C中的缓冲区控制结构包括缓冲区队列、描述驱动工作模式的正常模式和直接拷贝模式以及用于进程同步及互斥的变量,所述缓冲区队列包括空闲队列和接收缓冲区队列。
4.根据权利要求1所述的零拷贝方法,其特征在于,所述步骤D的具体步骤为:
D1)打开设备接口函数从系统调用返回的数据结构中获得内核驱动中构造的缓冲区控制结构的物理地址;
D2)打开设备接口函数打开内存设备文件;
D3)打开设备接口函数通过系统调用把内核中的缓冲区控制结构映射到自己的地址空间。
5.根据权利要求1所述的零拷贝方法,其特征在于,所述步骤F的具体步骤为:
F1)报文接口层提供的打开设备接口函数在用户空间中新建报文指针队列;
F2)报文接口层的报文获取接口函数通过设备类型列表判断各网卡的缓冲区中的结构,从而提取出报文指针,放入报文指针队列中;
F3)报文获取接口函数从全局数据结构中得到报文指针队列;
F4)当获取报文接口被应用程序调用时,报文接口层函数从接收报文指针队列中取出一报文,缓冲区接口层继续从填满报文的缓冲区中定位每个报文,以提取出报文首地址指针存入报文接口层的接收报文指针队列;
F5)当报文被应用程序使用完后即释放报文接口被应用程序调用时,报文接口层函数向释放报文指针队列中插入一报文,缓冲区接口层通过驱动把释放了报文的缓冲区传给相应的网卡设备,等待网卡设备再次向缓冲区中写入报文。
6.根据权利要求1或5所述的零拷贝方法,其特征在于:所述全局数据结构是在用户空间申请一块连续的内存所构建的,其成员包括接收报文指针队列和释放报文指针队列。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于曙光信息产业(北京)有限公司,未经曙光信息产业(北京)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200810114690.8/1.html,转载请声明来源钻瓜专利网。
- 上一篇:数据传输方法和装置
- 下一篇:一种用于监控家用计算机使用的装置