CN109951401A - 基于接收零拷贝的非丢包网卡接收数据的方法 - Google Patents
基于接收零拷贝的非丢包网卡接收数据的方法 Download PDFInfo
- Publication number
- CN109951401A CN109951401A CN201910233509.3A CN201910233509A CN109951401A CN 109951401 A CN109951401 A CN 109951401A CN 201910233509 A CN201910233509 A CN 201910233509A CN 109951401 A CN109951401 A CN 109951401A
- Authority
- CN
- China
- Prior art keywords
- pond
- copy
- zero
- descriptor
- static
- 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.)
- Granted
Links
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任一项所述的方法。
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 true CN109951401A (zh) | 2019-06-28 |
CN109951401B 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 (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101178694A (zh) * | 2006-11-07 | 2008-05-14 | 莱克斯信息技术(北京)有限公司 | Intel e1000零拷贝的方法 |
CN101217573A (zh) * | 2007-12-29 | 2008-07-09 | 厦门大学 | 一种加速网卡报文捕获的方法 |
CN102082698A (zh) * | 2009-11-26 | 2011-06-01 | 上海大学 | 基于改进型零拷贝技术的高性能内核的网络数据处理系统 |
CN102629240A (zh) * | 2012-02-13 | 2012-08-08 | 上海创远仪器技术股份有限公司 | 一种串口通信方法与装置 |
US20130007296A1 (en) * | 2011-06-30 | 2013-01-03 | Cisco Technology, Inc. | Zero Copy Acceleration for Session Oriented Protocols |
CN107302499A (zh) * | 2017-06-26 | 2017-10-27 | 北京赛特斯信息科技股份有限公司 | 无需拷贝报文缓存的nfv协议报文收发方法 |
CN108780406A (zh) * | 2016-03-25 | 2018-11-09 | 微软技术许可有限责任公司 | 使用rdma共享工作数据的存储器 |
-
2019
- 2019-03-26 CN CN201910233509.3A patent/CN109951401B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101178694A (zh) * | 2006-11-07 | 2008-05-14 | 莱克斯信息技术(北京)有限公司 | Intel e1000零拷贝的方法 |
CN101217573A (zh) * | 2007-12-29 | 2008-07-09 | 厦门大学 | 一种加速网卡报文捕获的方法 |
CN102082698A (zh) * | 2009-11-26 | 2011-06-01 | 上海大学 | 基于改进型零拷贝技术的高性能内核的网络数据处理系统 |
US20130007296A1 (en) * | 2011-06-30 | 2013-01-03 | Cisco Technology, Inc. | Zero Copy Acceleration for Session Oriented Protocols |
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 |
---|---|
CN109951401B (zh) | 2020-03-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10652367B2 (en) | Reducing network latency | |
CN107515775B (zh) | 一种数据传输方法及装置 | |
AU2014235793B2 (en) | Automatic tuning of virtual data center resource utilization policies | |
CA1321654C (en) | Remote boot | |
US8838864B2 (en) | Method and apparatus for improving the efficiency of interrupt delivery at runtime in a network system | |
EP1335572A3 (en) | Dynamically updated qos parameterization according to expected business revenue | |
WO2021227954A1 (zh) | 基于容器集群的应用访问请求处理 | |
JP2006338666A (ja) | 分散カーネルオペレーティングシステム | |
CN107094119B (zh) | 一种基于云计算和sdn网络的负载均衡控制方法及系统 | |
CN112346833A (zh) | 用于隐私计算的任务处理方法、处理器及异构处理系统 | |
CN109819023B (zh) | 分布式事务处理方法及相关产品 | |
CN113612861B (zh) | 远程访问方法、系统及计算机可读存储介质 | |
CN109951401A (zh) | 基于接收零拷贝的非丢包网卡接收数据的方法 | |
CN106685854B (zh) | 一种数据发送方法及系统 | |
CN108600259A (zh) | 设备的认证和绑定方法及计算机存储介质、服务器 | |
US20170139808A1 (en) | Method and dispatcher node for server processing management | |
CN112035063A (zh) | 一种基于云平台的硬盘及文件系统热扩容的方法 | |
CN116483570A (zh) | 有状态服务的动态扩缩容方法、装置、设备及存储介质 | |
Bie et al. | Vhost-User | |
US11849005B2 (en) | Method and apparatus for accelerating network transmission in memory-disaggregated environment | |
US20220091888A1 (en) | Resource utilization method, electronic device, and computer program product | |
CN117435529A (zh) | 一种直接存储器访问dma传输方法及电子设备 | |
CN114138465A (zh) | 一种队列资源的调度方法及装置 | |
CN109117115A (zh) | 数据运算调度处理方法及装置、存储介质、处理器 | |
CN118451415A (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 |