具有零拷贝功能的软件接口实现方法和装置制造方法及图纸

技术编号:4250741 阅读:189 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供一种具有零拷贝功能的软件接口实现方法,包括:生成缓冲区分配函数;在接口具有报文发送和/或接收功能的情况下,网卡驱动程序调用缓冲区分配函数分配用于报文发送的报文发送缓冲区和用于报文接收的报文接收缓冲区;以及当通过接口进行报文发送和/或接收时,采用所分配的发送缓冲区和/或接收缓冲区以零拷贝方式进行报文发送和/或接收。通过本发明专利技术,简化了网卡驱动程序实现零拷贝功能的难度,提供了应用程序接口库,方便了用户应用程序进行零拷贝方式的报文接收、发送操作。

【技术实现步骤摘要】

本专利技术涉及通信领域,尤其涉及一种具有零拷贝功能的软件接口实现方法和装置
技术介绍
当前,没有通用的零拷贝功能实现接口 。目前现有技术中缓冲区分配函数主要有以下两个接口 static inline struct sk—buff氺netdev—alloc—skb(struct net—device氺dev,unsigned int length),分配存储数据报文的缓冲区,长度由参数length确定; dma_addr_tpci_map_single (struct pci_dev*pdev, void*cpu_addr, size_tsize, int direction),根据参数信息,将参数cpu_addr表示的虚拟地址转换成物理地址返回; 从以上这两个函数可以看出,一方面获得缓冲区的物理地址比较麻烦,另一方面, 此技术也不适合采用零拷贝方式进行数据报文的发送和接收。对每个网络报文,都需要调 用这两个函数完成缓冲区空间的分配,这无法保证存储网络报文的缓冲区是连续的,也无 法保证是对用户空间应用程序可见的。
技术实现思路
针对相关技术中存在的一个或多个问题,本专利技术的目的在于提供一种具有零拷贝 功能的软件接口实现方法和装置,以解决上述问题中的至少之一。 为实现上述目的,根据本专利技术的一个方面,提供了一种具有零拷贝功能的软件接口实现方法,包括生成缓冲区分配函数;在接口具有报文发送和/或接收功能的情况下,网卡驱动程序调用缓冲区分配函数分配用于报文发送的报文发送缓冲区和用于报文接收的报文接收缓冲区;以及当通过接口进行报文发送和/或接收时,采用所分配的发送缓冲区和/或接收缓冲区以零拷贝方式进行报文发送和/或接收。 优选地,报文发送缓冲区和报文接收缓冲区均为连续内存块。 优选地,根据内存大小以及发送和/或接收报文的数量来确定报文发送缓冲区和 /或接收缓冲区的大小。 ifc选t也,纟M7中区分ffi函数为Void氺zcp—alloc—space (int size, char氺氺dam—addr)。 为实现上述目的,根据本专利技术的另一个方面,提供了一种具有零拷贝功能的软件 接口,包括分配函数生成模块,用于生成缓冲区分配函数;缓冲区分配模块,用于在接口 具有报文发送和/或接收功能的情况下,调用缓冲区分配函数分配用于报文发送的报文发 送缓冲区和用于报文接收的报文接收缓冲区;以及报文发送接收模块,用于采用所分配的 发送缓冲区和/或接收缓冲区以零拷贝方式进行报文发送和/或接收。 优选地,报文发送缓冲区和报文接收缓冲区均为连续内存块。 优选地,根据内存大小以及发送和/或接收报文的数量来确定报文发送缓冲区和/或接收缓冲区的大小。 ifc选t也,纟M7中区分ffi函数为Void氺zcp—alloc—space (int size, char氺氺dam—addr)。 通过实现本专利技术,简化了网卡驱动程序实现零拷贝功能的难度,并且提供了应用 程序接口库,方便了用户应用程序进行零拷贝方式的报文接收、发送操作。附图说明 图1是根据本专利技术的实施例的一种具有零拷贝功能的软件接口实现方法的流程 图;以及 图2是根据本专利技术的实施例的一种具有零拷贝功能的软件接口的示意图。 具体实施例方式图1是根据本专利技术的实施例的一种具有零拷贝功能的软件接口实现方法的流程 图。如图l所示,该方法包括步骤S102,生成缓冲区分配函数;步骤S104,在接口具有报文 发送和/或接收功能的情况下,网卡驱动程序调用缓冲区分配函数分配用于报文发送的报 文发送缓冲区和用于报文接收的报文接收缓冲区;以及步骤S106,当通过接口进行报文发 送和/或接收时,采用所分配的发送缓冲区和/或接收缓冲区以零拷贝方式进行报文发送 和/或接收。 其中,报文发送缓冲区和报文接收缓冲区均为连续内存块。 其中,可以根据内存大小以及发送和/或接收报文的数量来确定报文发送缓冲区 和/或接收缓冲区的大小。 具体地,缓冲区分配函数可以为Void*zcp_alloc_space(int size, char**dam_ addr)。此函数根据第一个参数确定的缓冲区大小进行内存空间申请,当申请成功时,将缓 冲区首地址作为函数返回值返回,同时将此缓冲区首地址所对应的物理地址存储在第二个 参数中。 网卡驱动程序直接调用这些函数就可以得到报文缓冲区首地址及相应的物理地 址。 具体地,在接口库初始化函数中会申请一大块连续的内存作为报文发送缓冲区, 一大块连续的内存作为报文接收缓冲区,这两块内存的大小由用户根据机器的内存大小及 发送、接收报文数量来决定。如果没有发送或者接收功能,相应的内存块就不需要进行申请。 在本专利技术的实施例中,为了能利用所申请的缓冲区进行零拷贝方式的发送和接 收,关键是要解决申请的缓冲区空间不仅在网卡驱动程序中可见,而且对用户空间程序同 样可见。这样,当网卡接收到数据报文时,就可以直接将数据报文存储在此缓冲区中。当用 户程序需要接收此数据报文时,因为此缓冲区对程序也可见,所以用户程序可以直接对存 储在缓冲区中的数据报文进行操作,实现零拷贝接收功能;同理,在数据报文发送时,用户 程序直接将需发送的数据报文存储在缓冲区中。网卡驱动程序通知网卡对存储在缓冲区中 的数据报文进行发送操作,实现零拷贝发送功能。 图2是根据本专利技术的实施例的一种具有零拷贝功能的软件接口的示意图。如图2 所示,该具有零拷贝功能的软件接口包括分配函数生成模块202,用于生成缓冲区分配函4数;缓冲区分配模块204,用于在接口具有报文发送和/或接收功能的情况下,调用缓冲区 分配函数分配用于报文发送的报文发送缓冲区和用于报文接收的报文接收缓冲区;以及报 文发送接收模块206,用于采用所分配的发送缓冲区和/或接收缓冲区以零拷贝方式进行 报文发送和/或接收。 其中,报文发送缓冲区和报文接收缓冲区均为连续内存块。 其中,根据内存大小以及发送和/或接收报文的数量来确定报文发送缓冲区和/ 或接收缓冲区的大小。 其中,缓冲区分配函数为Void*zcp_alloc— space (int size, char氺氺dam—addr)。通过实现本专利技术,能够实现以下有益效果 (1)简化了网卡驱动程序实现零拷贝功能的难度; (2)提供了应用程序接口库,方便了用户应用程序进行零拷贝方式的报文接收、发 送操作。 显然,本领域的技术人员应该明白,上述的本专利技术的各模块或各步骤可以用通用 的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成 的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储 在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们 中的多个模块或步骤制作成单个集成电路模块来实现。这样,本专利技术不限制于任何特定的 硬件和软件结合。 以上所述仅为本专利技术的优选实施例而已,并不用于限制本专利技术,对于本领域的技 术人员来说,本专利技术可以有各种更改和变化。凡在本专利技术的精神和原则之内,所作的任何修 改、等同替换、改进等,均应包含在本专利技术的保护范围之内。本文档来自技高网...

【技术保护点】
一种具有零拷贝功能的软件接口实现方法,其特征在于,包括:生成缓冲区分配函数;在所述接口具有报文发送和/或接收功能的情况下,网卡驱动程序调用所述缓冲区分配函数分配用于报文发送的报文发送缓冲区和用于报文接收的报文接收缓冲区;以及当通过接口进行报文发送和/或接收时,采用所分配的发送缓冲区和/或接收缓冲区以零拷贝方式进行报文发送和/或接收。

【技术特征摘要】
一种具有零拷贝功能的软件接口实现方法,其特征在于,包括生成缓冲区分配函数;在所述接口具有报文发送和/或接收功能的情况下,网卡驱动程序调用所述缓冲区分配函数分配用于报文发送的报文发送缓冲区和用于报文接收的报文接收缓冲区;以及当通过接口进行报文发送和/或接收时,采用所分配的发送缓冲区和/或接收缓冲区以零拷贝方式进行报文发送和/或接收。2. 根据权利要求1所述的方法,其特征在于,所述报文发送缓冲区和所述报文接收缓 冲区均为连续内存块。3. 根据权利要求2所述的方法,其特征在于,根据内存大小以及发送和/或接收报文的 数量来确定所述报文发送缓冲区和/或所述接收缓冲区的大小。4. 根据权利要求1所述的方法,其特征在于,所述缓冲区分配函数为V0id*ZCp_all0C_ space(int size, char氺氺dam—addr)。5. —种具有...

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

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

1