零拷贝网络报文发送、接收方法和装置制造方法及图纸

技术编号:4269504 阅读:215 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供一种零拷贝网络报文发送、接收方法和装置,其中发送方法包括下列步骤:使用内存分配函数在网卡驱动程序中不断地申请特定大小的连续内存直至网卡驱动程序中空闲的内存空间不足够申请;从申请到的连续内存中确定一块连续内存地址空间;使用连续内存地址空间进行网络报文发送。本发明专利技术的发送方法通过在网卡驱动程序中申请连续内存,发送的数据报文连续存储在报文DMA缓冲区中,因此网卡硬件在进行DMA操作时不受页面大小限制,网卡不需要采用中断方式通知网卡驱动程序数据报文发送完成的情况,不占用CPU资源。

【技术实现步骤摘要】

本专利技术涉及零拷贝网络报文发送、接收领域,尤其涉及一种在内核空间申请可映 射到用户空间的连续内存空间作为发送、接收报文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资源的问题,本专利技术的目 的是提供一种零拷贝网络报文发送、接收方法和装置,以解决上述问题中的至少之一。 为实现上述目的,根据本专利技术的一个方面,提供了一种零拷贝网络报文发送方法, 包括下列步骤使用内存分配函数在网卡驱动程序中不断地申请特定大小的连续内存直至 网卡驱动程序中空闲的内存空间不足够申请;从申请到的连续内存中确定一块连续内存地 址空间;以及使用连续内存地址空间进行网络报文发送。其中,从申请到的连续内存中确定 一块连续内存地址空间的具体步骤包括将申请到的每片连续内存的首地址存储到地址数 组;将地址数组中的连续内存的首地址根据大小进行排序;在地址数组中根据排序后的首 地址确定一块连续内存地址空间。 根据本专利技术,特定大小是指内存分配函数所能申请的连续内存的最大值;连续内 存地址空间大于或等于用户指定的发送报文DMA缓冲区的大小;地址数组包括用于存储小 于4G的首地址的低端地址数组和用于存储4G以上的首地址的高端地址数组,排序是根据 连续内存的首地址的大小,在确定连续内存地址空间时首先选择在低端地址数组中进行。 根据本专利技术,在确定了连续内存空间之后将连续内存地址空间的首地址及大小保 存至网卡驱动程序中,并按照页面大小将连续内存地址空间标记为保留页面,将其他申请 的未使用的连续内存释放。 相应地,本专利技术提供了一种零拷贝网络报文发送装置,包括申请模块,用于在网 卡驱动程序中申请连续内存;确定模块,用于从申请到的连续内存中确定一块连续内存地 址空间;以及发送模块,用于使用连续内存地址空间进行网络报文发送。其中,确定模块包 括地址数组模块,用于存储申请到的连续内存的首地址;排序模块,用于对首地址进行排 序;以及查找模块,用于查找连续内存地址空间。 根据本专利技术的另一个方面,提供了一种零拷贝网络报文接收方法,包括下列步骤 使用内存分配函数在网卡驱动程序中不断地申请特定大小的连续内存直至网卡驱动程序 中空闲的内存空间不足够申请;从申请到的连续内存中确定一块连续内存地址空间;以及 使用连续内存地址空间进行网络报文接收。其中,从申请到的连续内存中确定一块连续内 存地址空间的具体步骤包括将申请到的每片连续内存的首地址存储到地址数组;将地址 数组中的连续内存的首地址根据大小进行排序;在地址数组中根据排序后的首地址确定一 块连续内存地址空间。 根据本专利技术,特定大小是指内存分配函数所能申请的连续内存的最大值;连续内 存地址空间大于或等于用户指定的接收报文DMA缓冲区的大小;地址数组包括用于存储小 于4G的首地址的低端地址数组和用于存储4G以上的首地址的高端地址数组;在确定连续 内存地址至间时首先选择在低端地址数组中进行。 根据本专利技术,在确定了连续内存空间之后将连续内存地址空间的首地址及大小保 存至网卡驱动程序中,并按照页面大小将连续内存地址空间标记为保留页面,将其他申请的未使用的连续内存释放。 相应地,本专利技术提供了一种零拷贝网络报文接收装置,包括申请模块,用于在网 卡驱动程序中申请连续内存;确定模块,用于从申请到的连续内存中确定一块连续内存地 址空间;以及接收模块,用于使用连续内存地址空间进行网络报文接收。其中,确定模块包 括地址数组模块,用于存储申请到的连续内存的首地址;排序模块,用于对首地址进行排 序;以及查找模块,用于查找连续内存地址空间。 本专利技术的零拷贝网络报文发送方法和装置,通过在网卡驱动程序中申请连续内 存,发送的数据报文连续存储在报文DMA缓冲区中,因此网卡硬件在进行DMA操作时不受页 面大小限制,网卡不需要采用中断方式通知网卡驱动程序数据报文发送完成的情况,不占 用CPU资源。 本专利技术的零拷贝网络报文接收方法和装置,通过在网卡驱动程序中申请连续内 存,接收的数据报文连续存储在报文DMA缓冲区中,不需要将用户空间内存地址按页面大 小转换成DMA操作所需的物理地址,因此网卡硬件在本文档来自技高网
...

【技术保护点】
一种零拷贝网络报文发送方法,其特征在于,包括下列步骤:    使用内存分配函数在网卡驱动程序中不断地申请特定大小的连续内存直至所述网卡驱动程序中空闲的内存空间不足够申请;    从申请到的所述连续内存中确定一块连续内存地址空间;以及使用所述连续内存地址空间进行网络报文发送。

【技术特征摘要】
一种零拷贝网络报文发送方法,其特征在于,包括下列步骤使用内存分配函数在网卡驱动程序中不断地申请特定大小的连续内存直至所述网卡驱动程序中空闲的内存空间不足够申请;从申请到的所述连续内存中确定一块连续内存地址空间;以及使用所述连续内存地址空间进行网络报文发送。2. 根据权利要求1所述的发送方法,其特征在于,所述从申请到的所述连续内存中确 定一块连续内存地址空间的具体步骤包括将申请到的每片连续内存的首地址存储到地址数组; 将所述地址数组中的所述连续内存的所述首地址根据大小进行排序; 在所述地址数组中根据排序后的所述首地址确定一块所述连续内存地址空间。3. 根据权利要求2所述的发送方法,其特征在于,所述特定大小是指所述内存分配函 数所能申请的连续内存的最大值;所述连续内存地址空间大于或等于用户指定的发送报文 DMA缓冲区的大小;所述地址数组包括用于存储小于4G的首地址的低端地址数组和用于存 储4G以上的首地址的高端地址数组;在确定所述连续内存地址空间时首先选择在所述低 端地址数组中进行。4. 根据权利要求2或3所述的发送方法,其特征在于,在确定了所述连续内存空间之后 将所述连续内存地址空间的首地址及大小保存至所述网卡驱动程序中,并按照页面大小将 所述连续内存地址空间标记为保留页面,将其他申请的未使用的所述连续内存释放。5. —种零拷贝网络报文发送装置,其特征在于,包括 申请模块,用于在网卡驱动程序中申请连续内存;确定模块,用于从申请到的所述连续内存中确定一块连续内存地址空间;以及 发送模块,用于使用所述连续内存地址空间进行网络报文发送。6. 根据权利要求5所述的发送装置,其特征在于,所述确定模块包括地址数组模块, 用于存储申请到的所述连续内存的首地址;排序模块,用于对所述首地址进行排序;以及 查找模块,用于查找所述连续内存地址空间。7. —种零拷贝网络报文接收方法,其特征在于,包括下列步骤使用内存分配函数在网卡驱动程序中不断地申请特定大小的连续内存直至...

【专利技术属性】
技术研发人员:邵宗有聂华历军李永成
申请(专利权)人:曙光信息产业北京有限公司
类型:发明
国别省市:11[中国|北京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1