一种零拷贝缓冲区队列网络数据接收的管理方法

文档序号:7665176阅读:200来源:国知局
专利名称:一种零拷贝缓冲区队列网络数据接收的管理方法
技术领域
本发明涉及一种零拷贝緩冲区队列网络数据4妄收的管理方法,特别是涉及 一种通过分离句柄管理零拷贝数据緩冲区队列的网络数据接收的方法。
背景技术
在计算机的现有数据发送技术中,经常采用数据队列的数据结构来保存数 据,数据队列中的元素(数据)和队列的控制信息(队列控制项)是紧密耦合 在一起的,这样做便于增加软件的内聚,这对单进程操作十分有利。在零拷贝 的网络传送中,需要内核驱动程序及用户内存应用程序能够同时访问由报文緩 冲区构成的队列空间,这就带来了队列控制结构是在用户内存空间构造还是在 内核空间构造的问题,以及队列信息访问时的互斥问题。目前管理零拷贝緩冲 队列,采用的技术方法是在用户空间构造数据緩冲队列及其控制信息,这就需 要用内存拷贝将控制信息传给内核,并需要在队列控制信息中增加互斥标志, 即内核驱动程序及用户内存应用程序访问队列时都要查看并设置互斥标志,因 此这种将緩冲区队列和它的控制信息揉合在一起的数据緩冲区队列管理方法, 不便于内核驱动程序及用户内存应用程序对数据緩冲队列同时访问。目前采用 的通过互斥标志避免读写冲突的方法,虽然能够节省存贮资源,但无法满足零 拷贝对软件的高时效性要求。发明内容本发明针对目前网络数据发送中的数据緩冲队列管理方法采用的是数据队 列中的元素(数据)和队列的控制信息(队列控制项)是紧密耦合在一起的, 在内核驱动程序及用户内存应用程序访问队列时都要查看并设置互斥标志,无 法实现内核驱动程序及用户内存应用程序对对数据緩冲队列同时访问,并满足零拷贝对软件的高时效性要求的问题,提供了 一种在用户空间分配连续的内存作为报文的DMA緩冲区,同时在内核中建立緩冲区队列的控制句柄管理零拷贝緩冲队列的网络数据发送方法,实现内核驱动程序及用户内存应用程序对数据 緩冲队列的免锁同时访问,并满足零拷贝对软件的高时效性要求。为了实现上述发明目的,本发明采用下述技术方案一种零拷贝緩沖区队列网络数据接收的管理方法,其中,所述方法包括如 下操作步骤A、在用户空间分配连续的内存作为报文的DMA緩冲区;B、在内 核驱动中建立緩沖区的控制句柄,把緩冲区划分为4个环形队列来管理,发送 和接收报文有两个队列,避免使用互斥锁,在控制句柄中设置DMA物理地址表, 计算并保存每个DMA緩沖区的物理地址;C、应用程序通过接口库映射控制句柄, 实现对緩冲区的操作;D、接收报文时,驱动从接收报文的空緩冲区队列取出一 个空緩冲区索引,查找物理地址表,把空緩冲区的物理地址写入网卡,当网卡 把緩冲区填充了报文后,驱动把填满报文的緩沖区索引放入满緩冲区队列,应 用从满缓冲区队列取出 一个填充了报文的缓冲区,分析报文内容后把緩冲区放 入空緩冲区队列。一种优选的零拷贝緩冲区队列网络数据接收的管理方法,其中,所述操作 步骤A具体操作过程如下Al、应用程序用一系列参数调用接口库打开设备函 数,参数中有应用所需要的报文緩冲区的总容量,以及其中发送緩冲区占的百 分比;A2、接口库函数根据緩冲区参数申请一片连续的内存,但不对这片内存 划分緩冲区队列,不构造管理结构,而是把緩沖区地址和参数传给内核驱动。一种进一步优选的零拷贝緩冲区队列网络数据接收的管理方法,其中,所 述操作步骤B具体操作过程如下Bl、内核驱动根据緩冲区内存的大小计算管 理句柄的大小,申请一片连续的空间作为句柄结构;B2、驱动根据緩冲区参数, 初始化句柄中的4个队列,把整个緩沖区内存划分为多个2K字节大小的緩冲区, 把每个緩冲区的索引保存在句柄的队列中,从而可以通过句柄控制用户空间的 整个緩沖区内存,因为句柄中的队列会被应用和驱动同时访问,接收和发送分 别实现两个队列,可以避免使用互斥锁,减少系统开销;B3、驱动根据緩冲区
大小构造緩冲区的物理地址表,把每个緩冲区的物理地址计算出来保存到表中,以便设置网卡DMA时使用;B4、驱动把句柄物理地址返回给接口库函数。一种进一步优选的零拷贝緩冲区队列网络数据接收的管理方法,其中,所 述操作步骤C具体操作过程如下Cl、接口库函数根据驱动返回的句柄的物理 地址,通过内存映射把句柄映射到用户空间;C2、接口库函数通过验证句柄开 始和结束部分的魔数,确认句柄映射是否成功;C3、接口库获得句柄后,可以 通过句柄操作緩冲区队列。一种进一步优选的零拷贝緩冲区队列网络数据发送的管理方法,其中,所 述操作步骤D具体操作过程如下Dl、驱动从句柄中的空緩冲区队列取出一个 空緩沖区的索引;D2、驱动根据索引查找缓沖区物理地址表,得到緩沖区的物 理地址;D3、驱动4巴緩沖区物理地址写入硬件网卡,由网卡填充l艮文并发中断 信号给驱动;D4、驱动响应网卡中断,把填充了报文的緩沖区索引放入句柄中 的满緩冲区队列,供应用取出使用;D5、应用通过接口库中映射的句柄结构访 问緩冲区队列,从漫緩冲区中取出一个填充了报文的緩冲区的索引;D6、应用 根据索引获得緩冲区,分析緩冲区里面的报文;D7、应用把分析完的緩冲区放 入空緩冲区队列,以便驱动取出使用。本发明的上述技术方案,由于在网络数据传送中采用将用户空间的零拷贝 緩冲区队列与内核空间的队列控制句柄分离,从而避免零拷贝驱动在满/空两个 队列中设置互斥锁的方法,使数据队列结构与现有技术相比变得更加灵活,可 方便地监视各个緩沖区队列的状态、改变緩沖区队列的长度;由于双队列免锁, 应用程序和驱动程序可同时对网络传送中的数据进行操作,减少了驱动程序和 应用程序的互斥开销,大大提高了网络数据发送的时效性,运用本发明可满足 高速网对数据传送效率的要求,提高零拷贝緩冲区管理的灵活性和效率。例如 将本发明试运用于中国国家网络信息安全中心,经测试可以通过参数指定緩冲 区的总容量,可以指定发送緩沖区的百分比,可以灵活高效的管理零拷贝緩冲 区队列。
以下结合附图对本发明做进一 步详细说明。


图1为本发明操作过程示意图; 图2为本发明操作步骤A的具体操作过程示意图; 图3为本发明操作步骤B的具体操作过程示意图; 图4为本发明操作步骤C的具体操作过程示意图; 图5为本发明操作步骤D的具体操作过程示意图; 图6为本发明控制句柄结构示意图。
具体实施方式
在本发明上述技术方案的设计思想下,本发明可以有多种,下面通过具体 实施例予以:说明。 实施例一图1为本发明操作过程示意图,图6为本发明控制句柄结构示意图。如图1、 图6所示,本发明包括如下操作步骤A、 在用户空间分配连续的内存作为报文的DMA緩冲区; 在本步骤中,检查系统初始设置的最大共享内存值,若请求内存值大于系统默认共享内存值,则对系统默认内存值进行修改。根据所需的内存大小来分 配共享内存,成功返回内存的起始地址后,就可以对内存进行保存数据或锁定 操作。在使用完内存后,将此内存归还给系统。B、 在内核驱动中建立緩冲区的控制句柄,把緩冲区划分为4个环形队列 来管理,发送和接收报文有两个队列,避免使用互斥锁;在控制句柄中设置 DMA物理地址表,计算并保存每个DMA緩冲区的物理地址;在本步骤中,驱动程序会申请一块内存,作为全局的控制句柄,成员包括描 述发送和接收报文的队列,此队列由空闲的接收队列、空闲的传输队列、缓存 数据报的接收队列及缓存数据报的发送队列组成;描述驱动工作模式的变量,工作模式包含正常模式和直接拷贝模式;用于进程同步及互斥的变量等。控制 句柄进行初始化后,把用户空间中发送和接收报文地址区域分割成若干数据块, 将每一块的首地址转换成内核空间的物理地址,即DMA操作所需的地址,存储 在控制句柄的队列结构中。C、 应用程序通过接口库映射控制句柄,实现对緩冲区的操作。本实施例 中通过映射緩存句柄的物理地址到用户空间的虚拟地址实现以上操作。D、 接收报文时,驱动从接收报文的空緩冲区队列取出一个空緩沖区索引, 查找物理地址表,把空缓冲区的物理地址写入网卡,当网卡把緩冲区填充了报 文后,驱动把填满报文的緩沖区索引放入满緩冲区队列,应用从满緩冲区队列 取出 一个填充了报文的緩冲区,分析报文内容后把緩冲区放入空缓沖区队列。实施例二本实施例与实施例一的不同之处在于,所述操作步骤A具体操作过程如图 2所示,为Al、应用程序用一系列参数调用接口库打开设备函数,参数中有 应用所需要的报文緩沖区的总容量,以及其中发送緩沖区占的百 分比。A2、接口库函数根据緩冲区参数申请一片连续的内存,但不对这 片内存划分緩冲区队列,不构造管理结构,而是把緩冲区地址和 参数传给内核驱动。实施例三本实施例与实施例二的不同之处在于,所述操作步骤B具体操作过程如图3 所示,为Bl、内核驱动根据根据緩冲区内存的大小计算管理句柄的大小,
申请 一 片连续的空间作为句柄结构。B2、驱动根据緩冲区参数,初始化句柄中的4个队列,把整个緩 冲区内存划分为多个2K字节大小的缓冲区,把每个缓冲区的索 I保存在句柄的队列中,从而可以通过句柄控制用户空间的整个 緩冲区内存。因为句柄中的队列会被应用和驱动同时访问,接收 和发送分别实现两个队列,可以避免使用互斥锁,減少系统开销。 B3、驱动根据緩沖区大小构造緩冲区的物理地址表,把每个緩冲 区的物理地址计算出来保存到表中,以便设置网卡DMA时使用。 B4、驱动4巴句柄物理地址返回给接口库函数。实施例四本实施例与实施例三的不同之处在于,所述操作步骤C具体搡作过程如图4 所示,为Cl、接口库函数根据驱动返回的句柄的物理地址,通过内存映射 ^^句柄映射到用户空间。C2、接口库函数通过验证句柄开始和结束部分的魔数,确认句柄 映射是否成功。C3、接口库获得句柄后,可以通过句柄搡作緩冲区队列。实施例五本实施例与实施例四的不同之处在于,所述^喿作步骤D具体#:作过程如图5所示,为Dl 、驱动从句柄中的空緩冲区队列取出 一个空缓冲区的索引; D2、驱动根据索引查找緩冲区物理地址表,得到緩冲区的物理地址; D3、驱动把緩沖区物理地址写入硬件网卡,由网卡填充报文并发中断 信号给驱动;D4、驱动响应网卡中断,把填充了报文的緩沖区索引放入句柄中的满緩冲区队列,供应用取出使用;D5 、应用通过接口库中映射的句柄结构访问緩冲区队列,从漫緩冲区中取出 一个填充了报文的緩冲区的索引;D6、应用根据索引获得緩冲区,分析緩冲区里面的报文;D7、应用把分析完的緩冲区放入空緩沖区队列,以便驱动取出使用。最后应当说明的是以上实施例仅用以说明本发明的技术方案而非对其限 制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人 员应当理解依然可以对本发明的具体实施方式
进行修改或者等同替换,而未 脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利 要求范围当中。
权利要求
1、一种零拷贝缓冲区队列网络数据接收的管理方法,其特征在于,所述方法包括如下操作步骤A、在用户空间分配连续的内存作为报文的DMA缓冲区;B、在内核驱动中建立缓冲区的控制句柄,把缓冲区划分为4个环形队列来管理,发送和接收报文有两个队列,避免使用互斥锁,在控制句柄中设置DMA物理地址表,计算并保存每个DMA缓冲区的物理地址;C、应用程序通过接口库映射控制句柄,实现对缓冲区的操作;D、接收报文时,驱动从接收报文的空缓冲区队列取出一个空缓冲区索引,查找物理地址表,把空缓冲区的物理地址写入网卡,当网卡把缓冲区填充了报文后,驱动把填满报文的缓冲区索引放入满缓冲区队列,应用从满缓冲区队列取出一个填充了报文的缓冲区,分析报文内容后把缓冲区放入空缓冲区队列。
2、 如权利要求1所述的零拷贝緩冲区队列网络数据接收的管理方法,其 特征在于,所述操作步骤A具体操作过程如下Al、应用程序用一系列参数调用接口库打开设备函数,参数中有应用 所需要的报文緩冲区的总容量,以及其中发送緩冲区占的百分比; A2、接口库函数根据緩沖区参数申请一片连续的内存,但不对这片内 存划分緩冲区队列,不构造管理结构,而是把緩沖区地址和参数传给 内核驱动。
3、 如权利要求1所述的零拷贝緩冲区队列网络数据接收的管理方法,其 特征在于,所述操作步骤B具体操作过程如下Bl、内核驱动根据緩冲区内存的大小计算管理句柄的大小,申请一片 连续的空间作为句柄结构;B2、驱动根据缓沖区参数,初始化句柄中的4个队列,把整个緩冲区 内存划分为多个2K字节大小的緩冲区,把每个緩沖区的索引保存在 句柄的队列中,从而可以通过句柄控制用户空间的整个緩冲区内存, 因为句柄中的队列会被应用和驱动同时访问,^接收和发送分别实现两 个队列,可以避免使用互斥锁,减少系统开销;B3、驱动根据緩沖区大小构造緩冲区的物理地址表,把每个緩冲区的 物理地址计算出来保存到表中,以便设置网卡DMA时使用; B4、驱动4巴句柄物理地址返回给4妄口库函数。 4、如权利要求1所述的零拷贝緩沖区队列网络数据接收的管理方法,其 特征在于,所述操作步骤C具体操作过程如下Cl、接口库函数对艮据驱动返回的句柄的物理地址,通过内存映射把句 柄映射到用户空间;C2、接口库函数通过验证句柄开始和结束部分的魔数magic number, 确i人句柄映射是否成功; C3、接口库获得句柄后,可以通过句柄操作緩沖区队列。 5、如权利要求1所述的零拷贝緩冲区队列网络数据接收的管理方法,其 特征在于,所述搡作步骤D具体操作过程如下Dl 、驱动从句柄中的空緩冲区队列取出 一个空緩冲区的索引; D2、驱动根据索引查找緩冲区物理地址表,得到緩冲区的物理地址; D3、驱动4巴援冲区物理地址写入硬件网卡,由网卡填充报文并发中断 信号给驱动;D4、驱动响应网卡中断,把填充了报文的緩冲区索引放入句柄中的满 缓冲区队列,供应用取出使用;D5、应用通过4妄口库中映射的句柄结构访问緩冲区队列,从漫緩冲区中取出 一个填充了报文的緩冲区的索引;D6、应用根据索引获得緩冲区,分析緩冲区里面的报文;D7、应用把分析完的緩冲区放入空緩冲区队列,以便驱动取出使用。全文摘要
本发明公开了一种零拷贝缓冲区队列网络数据接收的管理方法,属于网络数据零拷贝的数据缓冲区队列的管理方法领域。本发明的技术方案包括如下操作步骤A.在用户空间分配连续的内存作为报文的DMA缓冲区;B.在内核驱动中建立缓冲区的控制句柄;C.应用程序通过接口库映射控制句柄,实现对缓冲区的操作;D.接收报文时,驱动把满缓冲区的物理地址写入网卡,应用从满缓冲区队列取出一个填充了报文的缓冲区,发送报文内容后把缓冲区放入空缓冲区队列。本发明适用于零拷贝驱动对报文缓冲区的灵活管理。
文档编号H04L12/54GK101150486SQ200710177370
公开日2008年3月26日 申请日期2007年11月15日 优先权日2007年11月15日
发明者刘朝辉, 军 历, 宇 曾, 华 聂 申请人:曙光信息产业(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1