CN109951401B - 基于接收零拷贝的非丢包网卡接收数据的方法 - Google Patents

基于接收零拷贝的非丢包网卡接收数据的方法 Download PDF

Info

Publication number
CN109951401B
CN109951401B CN201910233509.3A CN201910233509A CN109951401B CN 109951401 B CN109951401 B CN 109951401B CN 201910233509 A CN201910233509 A CN 201910233509A CN 109951401 B CN109951401 B CN 109951401B
Authority
CN
China
Prior art keywords
receiving
pool
descriptor
zero
copy
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910233509.3A
Other languages
English (en)
Other versions
CN109951401A (zh
Inventor
弓羽箭
张国庆
王东方
程永斌
焦进星
韩辉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Wing Hui Information Technology Co Ltd
Original Assignee
Beijing Wing Hui Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Wing Hui Information Technology Co Ltd filed Critical Beijing Wing Hui Information Technology Co Ltd
Priority to CN201910233509.3A priority Critical patent/CN109951401B/zh
Publication of CN109951401A publication Critical patent/CN109951401A/zh
Application granted granted Critical
Publication of CN109951401B publication Critical patent/CN109951401B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Communication Control (AREA)
  • Computer And Data Communications (AREA)

Abstract

本发明提供一种基于接收零拷贝的非丢包网卡接收数据的方法,包括:启动系统,创建零拷贝池,配置接收描述符,并根据所述配置的接收描述符个数N,分配N个内存资源,并统一管理,形成静态池;将所述静态池中的内存资源与所述接收描述符进行一一映射;判断是从零拷贝池还是静态池中获取的资源;如果判断是从零拷贝池中获取的资源,则将所述当前的接收描述符指向的内存资源直接提交给协议栈;否则是从静态池中获取的资源,将所述当前的接收描述符指向的静态池资源拷贝到所述协议栈。在网卡接收数据过程中当零拷贝池资源耗尽时,采用静态池,保证正常的数据接收,避免数据包丢弃问题。

Description

基于接收零拷贝的非丢包网卡接收数据的方法
技术领域
本发明涉及网卡数据接收领域,具体涉及基于接收零拷贝的非丢包网卡接收数据方法。
背景技术
为了提高网络整体吞吐量,各层次的优化方法很多,其中对于链路层的优化主要在网卡驱动,网卡驱动优化的主要方法是减少数据收发过程中的内存拷贝次数,即零拷贝技术,其中包括协议栈下发数据交由网卡驱动发送过程,发送零拷贝;网卡驱动接收到数据提交协议栈过程,接收零拷贝。
然而对于接收零拷贝来说,一般的处理方法为,系统启动时预留一块内存区域,即零拷贝池,CPU从零拷贝池中分配内存资源,保存内存资源的虚拟地址并返回内存资源的物理地址提交给网卡接收描述符,当网卡接收到数据,则会把数据放置在接收描述符指向的内存资源,并通知CPU,然后CPU通过之前保存的虚拟地址直接将该内存资源提交给网络协议栈,从而实现接收零拷贝。
但是CPU从零拷贝池中分配内存资源,存在分配失败的可能,即造成网卡接收描述符得不到可用的内存资源,无法接收数据,造成数据包被迫丢弃。在TCP协议下,会重传被丢弃的数据包,然而UDP协议下会造成真正的数据包丢弃。从而在一定程度上浪费网络带宽、增加了网络的不稳定性。
发明内容
针对以上接收零拷贝存在的问题,提出了非丢包网卡接收数据的方法。
本发明技术方案如下:
一种基于接收零拷贝的非丢包网卡接收数据的方法,其特征在于,包括如下步骤:
步骤一:启动系统,创建零拷贝池,配置接收描述符,并根据所述配置的接收描述符个数N,分配N个内存资源,并统一管理,形成静态池,其中N为自然数,N≥1;
步骤二:将所述静态池中的内存资源与所述接收描述符进行一一映射,每个所述接收描述符在静态池中有唯一对应的内存区域;
步骤三:在网卡数据接收过程中,从中断进入接收服务程序,判断是从零拷贝池还是静态池中获取的资源;如果判断是从零拷贝池中获取的资源,则将所述当前的接收描述符指向的内存资源直接提交给协议栈;否则是从静态池中获取的资源,将所述当前的接收描述符指向的静态池资源拷贝到所述协议栈。
进一步地,步骤一中的所述配置接收描述符包括:在初始化所述接收描述符时,优先从所述零拷贝池中获取所述内存资源,并标记所述描述符m使用的是零拷贝池资源,其中1≤m≤N;如果根据接收描述符n获取所述内存资源不成功,则从所述静态池获取对应的所述内存资源,并标记所述描述符n使用的是静态池资源,其中1≤n≤N。
进一步地,步骤三中判断从零拷贝池还是静态池获取的资源的方法包括:根据所述当前的接收描述符的资源类型来判断是从零拷贝池还是静态池中获取资源;如果判断所述当前的接收描述符的资源类型属于零拷贝池中获取的资源,则将所述当前的接收描述符指向的内存资源直接提交给协议栈,否则是从静态池中获取的资源,将所述当前的接收描述符指向的静态池资源拷贝到所述协议栈;然后重置接收描述符,结束数据接收过程。
进一步地,步骤三进一步包括:在网卡数据接收过程中,从中断进入接收服务程序,首先从零拷贝池中获取资源,如果可以从所述零拷贝池中获取资源,则将当前的接收描述符m指向的内存资源直接提交给协议栈,并标记所述描述符m使用的是零拷贝池资源,其中1≤m≤N;否则可以从所述静态池获取资源,将当前的接收描述符n指向的静态池资源拷贝到所述协议栈,并标记所述接收描述符n使用的是静态池资源,其中1≤n≤N。
进一步地,步骤三中将所述当前的接收描述符指向的静态池资源拷贝到所述协议栈之后包括:在退出所述接收服务程序之前,重置所述接收描述符,使所述接收描述符处于可用状态。
进一步地,所述重置接收描述符包括:在网卡数据接收过程中,从中断进入接收服务程序,首先从零拷贝池获取资源,如果成功从所述零拷贝池获取了资源,则初始化接收描述符,标记使用的是零拷贝池资源;否则从静态池获取资源,初始化接收描述符,标记使用的是静态池资源,重置接收描述符过程结束。
一种计算机可读存储介质,其中存储有计算机程序指令,所述计算机程序指令被处理器执行时,用以实现相应方法。
与现有技术相比,本发明的有益效果是:
本发明通过上述技术方案,在网卡接收数据过程中提出了静态池的概念,其与零拷贝池相辅相成,当零拷贝池资源耗尽时,保证正常的数据接收,避免数据包丢弃问题。
附图说明
为了更清楚的说明本发明实施例技术中的技术方案,下面将对实施例技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还能够根据这些附图获得其他的附图。
图1为本发明实施例中创建静态池的流程图。
图2为本发明实施例中重置接收描述符的方法的流程图。
图3为本发明实施例中基于接收零拷贝的非丢包网卡接收数据的方法的流程图。
具体实施方式
为了使本发明的发明目的、技术方案和有益技术效果更加清晰,以下结合实施例,对本发明进行进一步详细说明。应当理解的是,本说明书中描述的实施例仅仅是为了解释本发明,并能予以实施,但所举实施例不作为对本发明的限定。
本发明基于接收零拷贝的非丢包网卡接收数据的方法,主要包括三个方面,一是创建静态池;二是接收数据提交协议栈;三是接收数据后重置接收描述符。
实施例1
如图1所示,为本发明创建静态池的方法的流程图,该方法包括如下步骤:
步骤一,启动系统,创建零拷贝池,配置接收描述符,并根据所述配置的接收描述符个数N,分配N个内存资源,并统一管理,形成静态池,其中N为自然数,N≥1;
步骤二,所述静态池中的内存资源与所述接收描述符进行一一映射,每个所述接收描述符在静态池中有唯一对应的内存区域。
所述配置接收描述符包括:在初始化所述接收描述符时,优先从所述零拷贝池中获取所述内存资源,并标记所述描述符m使用的是零拷贝池资源,其中1≤m≤N;如果根据接收描述符n获取所述内存资源不成功,则从所述静态池获取对应的所述内存资源,并标记所述描述符n使用的是静态池资源,其中1≤n≤N。
实施例2
如图2所示,为本发明实施例中重置接收描述符的方法,该方法包括如下步骤:
在网卡数据接收过程中,从中断进入接收服务程序,首先从零拷贝池获取资源,如果成功从所述零拷贝池获取了资源,则初始化接收描述符,标记使用的是零拷贝池资源;否则从静态池获取资源,初始化接收描述符,标记使用的是静态池资源,重置接收描述符过程结束。
在退出所述接收服务程序之前,重置所述接收描述符,使所述接收描述符处于可用状态。
实施例3
如图3所示,为本发明实施例中基于接收零拷贝的非丢包网卡接收数据的流程图,该方法包括如下步骤:
在网卡数据接收过程中,可以根据所述当前的接收描述符的资源类型来判断是从零拷贝池还是静态池中获取的资源。如果判断所述当前的接收描述符的资源类型为零拷贝池类型,即从零拷贝池中获取的资源,则将所述当前的接收描述符指向的内存资源直接提交给协议栈,否则为静态池类型,则是从静态池中获取的资源,将所述当前的接收描述符指向的静态池资源拷贝到所述协议栈;然后重置所述接收描述符,结束数据接收过程。
所述重置接收描述符包括:首先从零拷贝池获取资源,如果成功从所述零拷贝池获取了资源,则初始化接收描述符,标记使用的是零拷贝池资源;否则从静态池获取资源,初始化接收描述符,标记使用的是静态池资源,重置接收描述符过程结束。
另外,在网卡数据接收过程中,从中断进入接收服务程序,首先从零拷贝池中获取资源,如果可以从所述零拷贝池中获取资源,则将当前的接收描述符m指向的内存资源直接提交给协议栈,并标记所述描述符m使用的是零拷贝池资源,其中1≤m≤N;否则可以从所述静态池获取资源,将当前的接收描述符n指向的静态池资源拷贝到所述协议栈,并标记所述接收描述符n使用的是静态池资源,其中1≤n≤N。
通过本发明,使用所述静态池的内存资源无法直接提交给协议栈,即在发生CPU从所述零拷贝池分配内存资源失败时,可以从所述静态池获取接收描述符对应内存资源,并且一定可以成功获得,保证接收描述符可以正常接收数据,然后通过一次拷贝,提交到网络协议栈。
基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上实施例仅是为充分说明本发明而所举的较佳的实施例,本发明的保护范围不限于此。本技术领域的技术人员在本发明基础上所作的等同替代或变换,均在本发明的保护范围之内。本发明的保护范围以权利要求书为准。

Claims (7)

1.一种基于接收零拷贝的非丢包网卡接收数据的方法,其特征在于,包括如下步骤:
步骤一:启动系统,创建零拷贝池,配置接收描述符,并根据所述配置的接收描述符个数N,分配N个内存资源,并统一管理,形成静态池,其中N为自然数,N≥1;
步骤二:将所述静态池中的内存资源与所述接收描述符进行一一映射,每个所述接收描述符在静态池中有唯一对应的内存区域;
步骤三:在网卡数据接收过程中,从中断进入接收服务程序,判断是从零拷贝池还是静态池中获取的资源;如果判断是从零拷贝池中获取的资源,则将当前的接收描述符指向的内存资源直接提交给协议栈;否则是从静态池中获取的资源,将所述当前的接收描述符指向的静态池资源拷贝到所述协议栈。
2.根据权利要求1所述的基于接收零拷贝的非丢包网卡接收数据的方法,其特征在于,步骤一中的所述配置接收描述符包括:在初始化所述接收描述符时,优先从所述零拷贝池中获取所述内存资源,并标记描述符m使用的是零拷贝池资源,其中1≤m≤N;如果根据接收描述符n获取所述内存资源不成功,则从所述静态池获取对应的所述内存资源,并标记所述描述符n使用的是静态池资源,其中1≤n≤N。
3.根据权利要求1所述的基于接收零拷贝的非丢包网卡接收数据的方法,其特征在于,步骤三中判断从零拷贝池还是静态池获取的资源的方法包括:根据所述当前的接收描述符的资源类型来判断是从零拷贝池还是静态池中获取资源;如果判断所述当前的接收描述符的资源类型属于零拷贝池中获取的资源,则将所述当前的接收描述符指向的内存资源直接提交给协议栈,否则是从静态池中获取的资源,将所述当前的接收描述符指向的静态池资源拷贝到所述协议栈;然后重置接收描述符,结束数据接收过程。
4.根据权利要求1所述的基于接收零拷贝的非丢包网卡接收数据的方法,其特征在于,步骤三进一步包括:在网卡数据接收过程中,从中断进入接收服务程序,首先从零拷贝池中获取资源,如果可以从所述零拷贝池中获取资源,则将当前的接收描述符m指向的内存资源直接提交给协议栈,并标记所述描述符m使用的是零拷贝池资源,其中1≤m≤N;否则可以从所述静态池获取资源,将当前的接收描述符n指向的静态池资源拷贝到所述协议栈,并标记所述接收描述符n使用的是静态池资源,其中1≤n≤N。
5.根据权利要求1所述的基于接收零拷贝的非丢包网卡接收数据的方法,其特征在于,步骤三中将所述当前的接收描述符指向的静态池资源拷贝到所述协议栈之后包括:在退出所述接收服务程序之前,重置所述接收描述符,使所述接收描述符处于可用状态。
6.根据权利要求5所述的基于接收零拷贝的非丢包网卡接收数据的方法,其特征在于,所述重置接收描述符包括:在网卡数据接收过程中,从中断进入接收服务程序,首先从零拷贝池获取资源,如果成功从所述零拷贝池获取了资源,则初始化接收描述符,标记使用的是零拷贝池资源;否则从静态池获取资源,初始化接收描述符,标记使用的是静态池资源,重置接收描述符过程结束。
7.一种计算机可读存储介质,其中存储有计算机程序指令,所述计算机程序指令被处理器执行时,用以实现权利要求1-6任一项所述的方法。
CN201910233509.3A 2019-03-26 2019-03-26 基于接收零拷贝的非丢包网卡接收数据的方法 Active CN109951401B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910233509.3A CN109951401B (zh) 2019-03-26 2019-03-26 基于接收零拷贝的非丢包网卡接收数据的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910233509.3A CN109951401B (zh) 2019-03-26 2019-03-26 基于接收零拷贝的非丢包网卡接收数据的方法

Publications (2)

Publication Number Publication Date
CN109951401A CN109951401A (zh) 2019-06-28
CN109951401B true CN109951401B (zh) 2020-03-13

Family

ID=67010996

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910233509.3A Active CN109951401B (zh) 2019-03-26 2019-03-26 基于接收零拷贝的非丢包网卡接收数据的方法

Country Status (1)

Country Link
CN (1) CN109951401B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101217573A (zh) * 2007-12-29 2008-07-09 厦门大学 一种加速网卡报文捕获的方法
CN102629240A (zh) * 2012-02-13 2012-08-08 上海创远仪器技术股份有限公司 一种串口通信方法与装置
CN107302499A (zh) * 2017-06-26 2017-10-27 北京赛特斯信息科技股份有限公司 无需拷贝报文缓存的nfv协议报文收发方法
CN108780406A (zh) * 2016-03-25 2018-11-09 微软技术许可有限责任公司 使用rdma共享工作数据的存储器

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101178694A (zh) * 2006-11-07 2008-05-14 莱克斯信息技术(北京)有限公司 Intel e1000零拷贝的方法
CN102082698A (zh) * 2009-11-26 2011-06-01 上海大学 基于改进型零拷贝技术的高性能内核的网络数据处理系统
US9124541B2 (en) * 2011-06-30 2015-09-01 Cisco Technology, Inc. Zero copy acceleration for session oriented protocols

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101217573A (zh) * 2007-12-29 2008-07-09 厦门大学 一种加速网卡报文捕获的方法
CN102629240A (zh) * 2012-02-13 2012-08-08 上海创远仪器技术股份有限公司 一种串口通信方法与装置
CN108780406A (zh) * 2016-03-25 2018-11-09 微软技术许可有限责任公司 使用rdma共享工作数据的存储器
CN107302499A (zh) * 2017-06-26 2017-10-27 北京赛特斯信息科技股份有限公司 无需拷贝报文缓存的nfv协议报文收发方法

Also Published As

Publication number Publication date
CN109951401A (zh) 2019-06-28

Similar Documents

Publication Publication Date Title
US20200379799A1 (en) System and method for providing a dynamic cloud with subnet administration (sa) query caching
US9705752B2 (en) Reliably updating a messaging system
US8838864B2 (en) Method and apparatus for improving the efficiency of interrupt delivery at runtime in a network system
US8645558B2 (en) Reception according to a data transfer protocol of data directed to any of a plurality of destination entities for data extraction
CN107678835B (zh) 一种数据传输方法及系统
US8793384B2 (en) Recovery of disconnected channels over a reliable protocol
US9910687B2 (en) Data flow affinity for heterogenous virtual machines
JP2006338666A (ja) 分散カーネルオペレーティングシステム
WO2021227954A1 (zh) 基于容器集群的应用访问请求处理
JP2006340354A (ja) 分散カーネルオペレーティングシステム
WO2017032152A1 (zh) 将数据写入存储设备的方法及存储设备
US20140280709A1 (en) Flow director-based low latency networking
CN115080479B (zh) 传输方法、服务器、设备、裸金属实例及基板管理控制器
CN114374609A (zh) 基于rdma设备的深度学习作业运行方法及系统
US10348651B2 (en) Apparatus and method for virtual switching
US20230342087A1 (en) Data Access Method and Related Device
CN109951401B (zh) 基于接收零拷贝的非丢包网卡接收数据的方法
WO2018057165A1 (en) Technologies for dynamically transitioning network traffic host buffer queues
CN111901386A (zh) 一种远端文件处理的方法、系统、设备及可读存储介质
US10951732B2 (en) Service processing method and device
CN115412502A (zh) 一种网络端口扩展和报文快速均衡处理方法
US10270715B2 (en) High performance network I/O in a virtualized environment
EP3992770A1 (en) Message processing method and apparatus, and computer storage medium
CN112698964A (zh) 数据处理方法、系统、电子设备及介质
CN114138472A (zh) 业务数据处理方法、装置和系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant