[发明专利]零拷贝网络报文发送、接收方法和装置有效
申请号: | 200910242100.4 | 申请日: | 2009-12-04 |
公开(公告)号: | CN101707565A | 公开(公告)日: | 2010-05-12 |
发明(设计)人: | 邵宗有;聂华;历军;李永成 | 申请(专利权)人: | 曙光信息产业(北京)有限公司 |
主分类号: | H04L12/56 | 分类号: | H04L12/56;G06F13/28 |
代理公司: | 北京市德恒律师事务所 11306 | 代理人: | 梁永 |
地址: | 100084 北*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 拷贝 网络 报文 发送 接收 方法 装置 | ||
技术领域
本发明涉及零拷贝网络报文发送、接收领域,尤其涉及一种在内核 空间申请可映射到用户空间的连续内存空间作为发送、接收报文DMA 缓冲区的零拷贝网络报文发送、接收方法和装置。
背景技术
零拷贝(zero-copy)是指在某节点的网络报文收发过程中不会出现任 何内存间的拷贝,发送时数据包由应用程序的用户缓冲区直接经过网络接口 到达外部网络。中国专利文献CN101150487A公开了一种零拷贝网络报文 发送方法,包括如下操作步骤:A.应用程序调用接口库提供的函数打开设 备接口;B.打开设备接口函数在用户空间内存中申请一片连续的内存作为 报文缓冲区,并把报文缓冲区首地址传送给内核驱动;C.内核驱动根据缓 冲区首地址及缓冲区大小,构造缓冲区控制结构,并把控制结构的物理地址 传送给接口函数,结构包括报文缓冲区队列的信息及队列中每个缓冲区的物 理地址;D.接口函数根据缓冲区控制结构的地址,通过内存映射得到缓冲 区控制结构中的信息;E.网卡驱动程序从缓冲区队列中取空闲缓冲区作为 发送报文的DMA缓冲区,并把发送的报文数据不经内核空间直接DMA传 送到报文缓冲区中;F.应用程序处理用户内存中报文发送缓冲区的报文数 据。
中国专利文献CN101150488A公开了一种零拷贝网络报文接收方法, 包括如下操作步骤:A.应用程序调用接口库提供的函数打开设备接口;B.打 开设备接口函数在用户空间内存中申请一片连续的内存作为报文缓冲区,并 把报文缓冲区首地址传送给内核驱动;C.内核驱动根据缓冲区首地址及缓 冲区大小,构造缓冲区控制结构,并把控制结构的物理地址传送给接口函数, 所述结构包括报文缓冲区队列的信息及队列中每个缓冲区的物理地址;D.接 口函数根据缓冲区控制结构的地址,通过内存映射得到缓冲区控制结构中的 信息;E.网卡驱动程序从缓冲区队列中取空闲缓冲区作为接收报文的DMA 缓冲区,并把接收到的报文数据不经内核空间直接DMA传送到报文缓冲区 中;F.应用程序处理用户内存中报文接收缓冲区的报文数据。
上述现有技术存在的共同问题是:在步骤B中,打开设备接口函数在 用户空间内存申请的连续的内存可能在内核空间中并不是连续的内存地 址,这样就需要将内存地址按页面(内存空间被分为若干个长度相等的区 域,每个区域即本申请文件中所说的页面)大小转换成DMA(直接存储器 访问)操作所需的物理地址;而且网卡硬件在进行DMA操作时,数据报 文长度受页面大小限制,比如页面大小为4K字节,那么数据报文长度将 被限制在4K字节内。此外,中国专利文献CN101150487A公开的一种零 拷贝网络报文发送方法还存在的问题是,驱动程序需要使用中断方式与网 卡硬件通讯以获得网卡进行报文传输后的硬件状态,为后续的报文接收 准备报文DMA缓冲区,占用CPU资源。中国专利文献CN101150488A 公开的一种零拷贝网络报文接收方法还存在的问题是,在网卡驱动程序中, 需要使用中断或轮询方式进行数据报文接收,造成CPU资源使用率过高; 特别是在接收大流量64字节短数据报文情况下,应用程序无法快速处理 这些报文;这样网卡无法接收后续的数据报文,就出现了报文丢弃的现 象。
发明内容
针对现有技术在零拷贝网络报文发送、接收过程中需要将内存地址 进行转换、网卡硬件在进行DMA操作时数据报文长度受页面大小限制、 占用CPU资源的问题,本发明的目的是提供一种零拷贝网络报文发送、 接收方法和装置,以解决上述问题中的至少之一。
为实现上述目的,根据本发明的一个方面,提供了一种零拷贝网络 报文发送方法,包括下列步骤:使用内存分配函数在网卡驱动程序中不 断地申请特定大小的连续内存直至网卡驱动程序中空闲的内存空间不足 够申请;从申请到的连续内存中确定一块连续内存地址空间;以及使用 连续内存地址空间进行网络报文发送。其中,从申请到的连续内存中确 定一块连续内存地址空间的具体步骤包括:将申请到的每片连续内存的 首地址存储到地址数组;将地址数组中的连续内存的首地址根据大小进 行排序;在地址数组中根据排序后的首地址确定一块连续内存地址空间。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于曙光信息产业(北京)有限公司,未经曙光信息产业(北京)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200910242100.4/2.html,转载请声明来源钻瓜专利网。