用于零拷贝缓冲区队列网络数据发送和接收的处理方法和装置制造方法及图纸

技术编号:4269500 阅读:542 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供一种用于零拷贝缓冲区队列网络数据发送和接收的处理方法和装置,其中,该数据发送的处理方法包括:在网卡驱动程序中申请预定大小的连续内存作为用于报文发送的缓冲区队列;将所申请的连续内存的首地址转换为物理地址并将物理地址和内存的大小存储到网卡相关寄存器中;以及在网卡寄存器中设置用于缓冲区队列的读指针寄存器和写指针寄存器,在发送报文时,根据所要发送的报文、物理地址以及内存的大小更新读指针寄存器和写指针寄存器。

【技术实现步骤摘要】

本专利技术涉及通信领域,尤其涉及一种用于零拷贝缓冲区队列网络数据发送和接收的处理方法和装置
技术介绍
相关技术中公开了一种零拷贝缓冲区队列网络数据发送的管理方法,属于网络数 据零拷贝的数据缓冲区队列的管理方法领域。该技术方案包括如下操作步骤A、在用户空 间分配连续的内存作为报文的DMA缓冲区;B、在内核驱动中建立缓冲区的控制句柄;C、应 用程序通过接口库映射控制句柄,实现对缓冲区的操作;D、发送报文时,驱动把满缓冲区的 物理地址写入网卡,应用从满缓冲区队列取出一个填充了报文的缓冲区,发送报文内容后 把缓冲区放入空缓冲区队列。 该技术存在以下问题 (1)网卡驱动程序使用缓冲区描述符进行报文发送时DMA操作的效率很低; (2)需要采用中断作为驱动程序与网卡硬件之间的通讯方式; (3)发送的数据报文不是连续存储在报文DMA缓冲区中的,而是按照页面大小,比 如4K字节,分别对发送的数据报文进行存储。 上述问题的根本原因是,在用户空间申请的连续内存空间可能在内核空间并不是 连续的内存地址。这样,它需要将用户空间内存地址按页面大小转换成DMA操作所需的物 理地址。而且,网卡硬件在做DMA操作时,数据报文长度限制在页面大小范围内,比如4K字 节。驱动程序也需要使用中断方式与网卡硬件通讯,获得网卡进行报文传输后的硬件状态, 为后续的报文发送准备报文DMA缓冲区。
技术实现思路
针对相关技术中存在的一个或多个问题,本专利技术的目的在于提供一种用于零拷贝 缓冲区队列网络数据发送和接收的处理方法和装置,以解决上述问题中的至少之一。 为实现上述目的,根据本专利技术的一个方面,提供了一种用于零拷贝缓冲区队列网 络数据发送的处理方法,该方法包括在网卡驱动程序中申请预定大小的连续内存作为用 于报文发送的缓冲区队列;将所申请的连续内存的首地址转换为物理地址并将物理地址和 内存的大小存储到网卡相关寄存器中;以及在网卡寄存器中设置用于缓冲区队列的读指针 寄存器和写指针寄存器,在发送报文时,根据所要发送的报文、物理地址以及内存的大小更 新读指针寄存器和写指针寄存器。 为实现上述目的,根据本专利技术的另一个方面,提供了一种用于零拷贝缓冲区队列 网络数据发送的处理装置,其特征在于,装置包括内存申请单元,用于在网卡驱动程序中 申请预定大小的连续内存作为用于报文发送的缓冲区队列;转换单元,用于将所申请的连 续内存的首地址转换为物理地址并将物理地址和内存的大小存储到网卡相关寄存器中;以及寄存器设置和更新单元,用于在网卡寄存器中设置用于缓冲区队列的读指针寄存器和写 指针寄存器,在发送报文时,根据所要发送的报文、物理地址以及内存的大小更新读指针寄 存器和写指针寄存器。 为实现上述目的,根据本专利技术的再一个方面,提供了一种用于零拷贝缓冲区队列 网络数据接收的处理方法,该方法包括在网卡驱动程序中申请预定大小的连续内存作为 用于报文接收的缓冲区队列;将所申请的连续内存的首地址转换为物理地址并将物理地址 和内存的大小存储到网卡相关寄存器中;以及在网卡寄存器中设置用于缓冲区队列的读指 针寄存器和写指针寄存器,在接收报文时,根据所接收的报文、物理地址和内存的大小更新 读指针寄存器和写指针寄存器。 为实现上述目的,根据本专利技术的又一个方面,提供了一种用于零拷贝缓冲区队列 网络数据接收的处理装置,包括内存申请单元,用于在网卡驱动程序中申请预定大小的连 续内存作为用于报文接收的缓冲区队列;转换单元,用于将所申请的连续内存的首地址转 换为物理地址并将物理地址和内存的大小存储到网卡相关寄存器中;寄存器设置和更新单 元,用于在网卡寄存器中设置用于缓冲区队列的读指针寄存器和写指针寄存器,并且在接 收报文时,根据所接收的报文、物理地址和内存的大小更新读指针寄存器和写指针寄存器。 借助本专利技术上述至少一个技术方案,通过将所申请的内存的首地址转换成物理地 址存储到相关寄存器中,并在发送和接收报文时及时地更新相关寄存器中的指针位置,这 样不需要采用中断方式通知驱动程序数据报文发送和接收情况,并且不占用CPU资源,也 不需要将用户空间内存地址按页面大小转换成DMA操作所需的物理地址,并且网卡硬件在 做DMA操作及发送和接收的数据报文在存储时,不受页面大小限制,比如4K字节,不需要使 用缓冲区描述符进行缓冲区队列的管理。附图说明 图1是根据本专利技术的用于零拷贝缓冲区队列网络数据发送的处理方法的流程以及 图2是根据本专利技术的用于零拷贝缓冲区队列网络数据发送的处理装置的框图; 图3是根据本专利技术的用于零拷贝缓冲区队列网络数据接收的处理方法的流程图; 以及 图4是根据本专利技术的用于零拷贝缓冲区队列网络数据接收的处理装置的框图。具体实施方式 功能概述 考虑到相关技术中存在的的问题,本专利技术提出用于零拷贝缓冲区队列网络数据发 送和接收的处理方法和装置,通过申请连续的内存作为发送或接收报文的缓冲区队列,将 所申请的内存的首地址转换成物理地址存储到相关寄存器中,并在发送或接收报文时及时 地更新相关寄存器中的指针位置,这样不需要采用中断方式通知驱动程序数据报文发送或 接收情况,并且不占用CPU资源,也不需要将用户空间内存地址按页面大小转换成DMA操作 所需的物理地址,并且网卡硬件在做DMA操作及发送和接收的数据报文在存储时,不受页 面大小限制,比如4K字节,不需要使用缓冲区描述符进行缓冲区队列的管理。 图1是根据本专利技术的用于零拷贝缓冲区队列网络数据发送的处理方法的流程图。 如图1所示,根据本专利技术的用于零拷贝缓冲区队列网络数据发送的处理方法包括 以下步骤 步骤S102,在网卡驱动程序中申请预定大小的连续内存作为用于报文发送的缓冲 区队列; 步骤S104,将所申请的连续内存的首地址转换为物理地址并将物理地址和内存的 大小存储到网卡相关寄存器中;以及 步骤S106,在网卡寄存器中设置用于缓冲区队列的读指针寄存器和写指针寄存 器,在发送报文时,根据所要发送的报文、物理地址以及内存的大小更新读指针寄存器和写 指针寄存器。 其中,可以通过配置文件指定所申请的连续内存的大小,也可以在驱动程序进行 加载时通过参数指定所申请的连续内存的大小。内存的大小需要根据计算机的内存大小确 定,例如32MB,64MB等。网卡相关寄存器可以为发送缓冲区首地址配置寄存器,其可以是64 位大小的。网卡寄存器本身就是一个存储32位数的内存空间。 在发送报文时,可以通过应用程序更新写指针寄存器,并且可以通过网卡更新读 指针寄存器。 在应用程序发送报文时,将读指针寄存器和写指针寄存器进行比较,如果写指针 寄存器的数值加上数据报文的长度不等于读指针寄存器的数值,则将报文存储在缓冲区中 的写指针寄存器的数值所在的偏移地址上,并将写指针寄存器的数值加上报文的总长度后 写到写指针寄存器中。 在网卡发送报文时,将读指针寄存器和写指针寄存器进行比较,如果读指针寄存 器的数值不等于写指针寄存器的数值,则将缓冲区队列中读指针寄存器的数值所在的偏移 地址作为报文头进行报文发送操作,并将读指针寄存器的数值加上报文的总长度之后写到 读指针寄存器中。 图2是根据本专利技术的用于零拷贝缓冲区队列网络数据发送的处理装置的框图。 如图2所示,根据本专利技术的用于零拷贝缓冲区本文档来自技高网...

【技术保护点】
一种用于零拷贝缓冲区队列网络数据发送的处理方法,其特征在于,包括:    在网卡驱动程序中申请预定大小的连续内存作为用于报文发送的缓冲区队列;    将所申请的连续内存的首地址转换为物理地址并将所述物理地址和所述内存的大小存储到网卡相关寄存器中;以及    在网卡寄存器中设置用于缓冲区队列的读指针寄存器和写指针寄存器,在发送报文时,根据所要发送的报文、所述物理地址以及所述内存的大小更新所述读指针寄存器和所述写指针寄存器。

【技术特征摘要】
一种用于零拷贝缓冲区队列网络数据发送的处理方法,其特征在于,包括在网卡驱动程序中申请预定大小的连续内存作为用于报文发送的缓冲区队列;将所申请的连续内存的首地址转换为物理地址并将所述物理地址和所述内存的大小存储到网卡相关寄存器中;以及在网卡寄存器中设置用于缓冲区队列的读指针寄存器和写指针寄存器,在发送报文时,根据所要发送的报文、所述物理地址以及所述内存的大小更新所述读指针寄存器和所述写指针寄存器。2. 根据权利要求1所述的方法,其特征在于,通过配置文件指定所申请的连续内存的 大小,或在驱动程序进行加载时通过参数指定所申请的连续内存的大小。3. 根据权利要求1所述的方法,其特征在于,在发送报文时,通过应用程序更新写指针 寄存器,并且通过网卡更新读指针寄存器,在应用程序发送报文时,将所述读指针寄存器和所述写指针寄存器进行比较,如果所 述写指针寄存器的数值加上数据报文长度不等于所述读指针寄存器的数值,则将所述报文 存储在所述缓冲区中的所述写指针寄存器的数值所在的偏移地址上,并将所述写指针寄存 器的数值加上报文的总长度后写到所述写指针寄存器中;在所述网卡发送报文时,将所述读指针寄存器和所述写指针寄存器进行比较,如果所 述读指针寄存器的数值不等于所述写指针寄存器的数值,则将所述缓冲区队列中所述读指 针寄存器的数值所在的偏移地址作为报文头进行报文发送操作,并将所述读指针寄存器的 数值加上报文的总长度之后写到所述读指针寄存器中。4. 一种用于零拷贝缓冲区队列网络数据发送的处理装置,其特征在于,所述装置包括内存申请单元,用于在网卡驱动程序中申请预定大小的连续内存作为用于报文发送的 缓冲区队列;转换单元,用于将所申请的连续内存的首地址转换为物理地址并将所述物理地址和所 述内存的大小存储到网卡相关寄存器中;以及寄存器设置和更新单元,用于在网卡寄存器中设置用于缓冲区队列的读指针寄存器和 写指针寄存器,在发送报文时,根据所要发送的报文、所述物理地址以及所述内存的大小更 新所述读指针寄存器和所述写指针寄存器。5. 根据权利要求4所述的方法,其特征在于,通过配置文件指定所申请的连续内存的 大小,或在驱动程序进行加载时通过参数指定所申请的连续内存的大小。6. 根据权利要求5所述的方法,其特征在于在应用程序发送报文时,寄存器设置和更新单元将所述读指针寄存器和所述写指针 寄存器进行比较,如果所述写指针寄存器的数值加上数据报文长度不等于所述读指针寄存 器的数值,则将所述报文存储在所述缓冲区中的所述写指针寄存器的数值所在的偏移地址 上,并将所述写指针寄存器的数值加上报文的总长度后写到所述写指针寄存器中;以及在所述网卡发送报文时,寄存器设置和更新单元将所述读指针寄存器和所述写指针寄 存器进行比较,如果所述读指针寄存器的数值不等于所述写指针寄存器的数值,则将所述 缓冲区队列中所述读指针寄存器的数值所在的偏移地址作为报文头进行报文发送操作,并 将所述读指针寄存器的数...

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

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

1