CN115269213A - 数据接收方法、数据发送方法、装置、电子设备及介质 - Google Patents

数据接收方法、数据发送方法、装置、电子设备及介质 Download PDF

Info

Publication number
CN115269213A
CN115269213A CN202110482391.5A CN202110482391A CN115269213A CN 115269213 A CN115269213 A CN 115269213A CN 202110482391 A CN202110482391 A CN 202110482391A CN 115269213 A CN115269213 A CN 115269213A
Authority
CN
China
Prior art keywords
data packet
network card
target
virtual network
target data
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.)
Pending
Application number
CN202110482391.5A
Other languages
English (en)
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202110482391.5A priority Critical patent/CN115269213A/zh
Publication of CN115269213A publication Critical patent/CN115269213A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/545Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本申请提供一种数据接收方法、数据发送方法、装置、电子设备及介质,涉及通信技术领域,数据接收方法包括:通过内核旁路进程直接操作虚拟网卡,可以获取虚拟网卡接收的第一目标数据包,该所述第一目标数据包由网卡设备确定第一目标数据包满足虚拟网卡的数据接收条件时,发送至虚拟网卡,然后通过内核旁路进程将第一目标数据包存储至第一目标队列,该第一目标队列中保存的各个数据包,是应用层的目标业务进程待处理的数据包。本申请可以在接收指定的数据包时,避免由于系统调用以及应用层和操作系统内核之间的数据传输,造成的额外的CPU开销,从而大大减少主机的CPU开销。

Description

数据接收方法、数据发送方法、装置、电子设备及介质
技术领域
本申请涉及通信技术领域,尤其涉及一种数据接收方法、数据发送方法、装置、电子设备及介质。
背景技术
在通信架构中,主机通常采用传输层协议收发网络数据包;例如,采用传输控制协议(Transport Control Protocol,TCP)、用户数据报协议(User Data Protocol,UDP)等等收发数据包。
但是,在数据包的收发过程中,需要通过系统调动,频繁地在应用层和操作系统内核之间进行数据包的传输。例如,在接收数据包时,网卡需要将收到的数据包发送给操作系统内核,再由操作系统内核将收到的数据包发送给应用层;在发送数据包时,应用层需要将处理后的数据包发送给操作系统内核,再由操作系统内核将处理后的数据包发送给网卡,最后网卡将该数据包发送出去;这样,数据包需要经过内核态到用户态、用户态到内核态的数据传输,并且系统运行状态需要频繁地在内核态和用户态之间切换,因此,上述数据包的收发方式会给主机带来额外的中央处理器(central processing unit,CPU)开销。
为了解决上述问题,相关技术下,通常采用分段延后处理(Generic SegmetationOffload,GSO)技术进行数据包收发;例如,采用GSO技术,应用层可以将处理后的所有数据包一次性发送给操作系统内核,再由操作系统内核针对接收的各个数据包执行分片操作,然后将各个数据包分片发送至网卡;而不需要在应用层针对数据包执行分片操作后,再将处理后的各个数据包分片分别发送给操作系统内核;这样,可以减少应用层和操作系统内核之间的数据传输次数,即减少系统调用次数,从而在一定程度上减少额外的CPU开销。
但是,在采用GSO技术进行数据包收发的方式下,主机仍然存在额外的CPU开销。
发明内容
本申请实施例提供一种数据接收方法、数据发送方法、装置、电子设备及介质,用于在接收指定的数据包时,避免由于系统调用以及应用层和操作系统内核之间的数据传输,造成的额外的CPU开销。
第一方面,本申请实施例提供一种数据接收方法,包括:
通过内核旁路进程获取虚拟网卡接收的第一目标数据包,所述第一目标数据包由网卡设备确定所述第一目标数据包满足所述虚拟网卡的数据接收条件时,发送至所述虚拟网卡;
通过所述内核旁路进程将所述第一目标数据包存储至第一目标队列;其中,所述第一目标队列中保存的各个数据包,是应用层的目标业务进程待处理的数据包。
第二方面,本申请实施例提供一种数据发送方法,包括:
通过内核旁路进程获取第二目标队列中待发送的第二目标数据包;其中,所述第二目标数据包是应用层的目标业务进程对第一目标数据包进行处理后获得的,所述第一目标数据包是所述内核旁路进程从虚拟网卡接收的,以及所述第一目标数据包由网卡设备确定所述第一目标数据包满足所述虚拟网卡的数据接收条件时,发送至所述虚拟网卡;
通过所述内核旁路进程将所述第二目标数据包发送给所述虚拟网卡,以使所述网卡设备获取所述虚拟网卡中的所述第二目标数据后进行发送。
在一种可能的实施例中,所述虚拟网卡的数据接收条件为:数据包的网络传输协议为设定的目标网络传输协议,且数据包的目的端口为设定端口。
在一种可能的实施例中,所述内核旁路进程为数据平面开发套件DPDK进程。
在一种可能的实施例中,所述虚拟网卡设置有数据发送队列;
则通过所述内核旁路进程将所述第二目标数据包发送给所述虚拟网卡,包括:
通过所述内核旁路进程将所述第二目标数据包发送给所述数据发送队列。
在一种可能的实施例中,所述虚拟网卡由所述内核旁路进程基于所述网卡设备的物理网卡创建,且与所述内核旁路进程进行绑定。
在一种可能的实施例中,所述设定的目标网络传输协议包括以下一种或多种:
用户数据报协议UDP;
快速UDP网络连接协议QUIC;
传输控制协议TCP。
第三方面,本申请实施例提供一种数据接收装置,包括:
第一获取模块,用于通过内核旁路进程获取虚拟网卡接收的第一目标数据包,所述第一目标数据包由网卡设备确定所述第一目标数据包满足所述虚拟网卡的数据接收条件时,发送至所述虚拟网卡;
存储模块,用于通过所述内核旁路进程将所述第一目标数据包存储至第一目标队列;其中,所述第一目标队列中保存的各个数据包,是应用层的目标业务进程待处理的数据包。
在一种可能的实施例中,所述虚拟网卡的数据接收条件为:数据包的网络传输协议为设定的目标网络传输协议,且数据包的目的端口为设定端口。
在一种可能的实施例中,所述内核旁路进程为数据平面开发套件DPDK进程。
在一种可能的实施例中,所述装置还包括第一监听模块,用于:
按照第一预设周期,通过所述内核旁路进程对所述虚拟网卡的数据接收状态进行监听;
所述第一获取模块,还用于:
若监听到所述虚拟网卡从所述网卡设备接收到所述第一目标数据包,则通过所述内核旁路进程获取所述第一目标数据包。
在一种可能的实施例中,所述内核旁路进程包括数据接收线程,所述虚拟网卡设置有数据接收队列;
所述第一监听模块,还用于:
按照所述第一预设周期,通过所述数据接收线程对所述数据接收队列的数据接收状态进行监听;
所述第一获取模块,还用于:
若监听到所述数据接收队列中保存的所述第一目标数据包,则通过所述数据接收线程获取所述第一目标数据包。
在一种可能的实施例中,装置还包括解析模块,用于:
通过内核旁路进程对第一目标数据包进行解析,以确定第一目标数据包满足虚拟网卡的数据接收条件。
在一种可能的实施例中,装置还包括创建模块,用于:
通过所述内核旁路进程,基于所述网卡设备的物理网卡创建所述虚拟网卡,且将所述虚拟网卡与所述内核旁路进程进行绑定。
在一种可能的实施例中,所述设定的目标网络传输协议包括以下一种或多种:
用户数据报协议UDP;
快速UDP网络连接协议QUIC;
传输控制协议TCP。
第四方面,本申请实施例提供一种数据发送装置,包括:
第二获取模块,用于通过内核旁路进程获取第二目标队列中待发送的第二目标数据包;其中,所述第二目标数据包是应用层的目标业务进程对第一目标数据包进行处理后获得的,所述第一目标数据包是所述内核旁路进程从虚拟网卡接收的,以及所述第一目标数据包由网卡设备确定所述第一目标数据包满足所述虚拟网卡的数据接收条件时,发送至所述虚拟网卡;
发送模块,用于通过所述内核旁路进程将所述第二目标数据包发送给所述虚拟网卡,以使所述网卡设备获取所述虚拟网卡中的所述第二目标数据后进行发送。
在一种可能的实施例中,所述虚拟网卡的数据接收条件为:数据包的网络传输协议为设定的目标网络传输协议,且数据包的目的端口为设定端口。
在一种可能的实施例中,所述内核旁路进程为数据平面开发套件DPDK进程。
在一种可能的实施例中,所述装置还包括第二监听模块,用于:
按照第二预设周期,通过所述内核旁路进程对所述第二目标队列的数据发送状态进行监听;
所述第二获取模块,还用于:
若监听到所述第二目标队列中存在待发送的所述第二目标数据包,则通过所述内核旁路进程获取所述第二目标数据包。
在一种可能的实施例中,所述内核旁路进程包括数据发送线程;
所述第二监听模块,还用于:
按照所述第二预设周期,通过所述数据发送线程对所述第二目标队列的数据发送状态进行监听;
所述第二获取模块,还用于:
通过所述数据发送线程获取所述第二目标队列中的所述第二目标数据包。
在一种可能的实施例中,所述虚拟网卡设置有数据发送队列;
所述发送模块,还用于:
通过所述内核旁路进程将所述第二目标数据包发送给所述数据发送队列。
在一种可能的实施例中,所述虚拟网卡由所述内核旁路进程基于所述网卡设备的物理网卡创建,且与所述内核旁路进程进行绑定。
在一种可能的实施例中,所述设定的目标网络传输协议包括以下一种或多种:
用户数据报协议UDP;
快速UDP网络连接协议QUIC;
传输控制协议TCP。
第五方面,本申请实施例提供一种电子设备,其包括处理器和存储器,其中,所述存储器存储有程序代码,当所述程序代码被所述处理器执行时,使得所述处理器执行第一方面所述方法的步骤。
第六方面,本申请实施例提供一种计算机存储介质,所述计算机存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行第一方面所述方法的步骤。
由于本申请实施例采用上述技术方案,至少具有如下技术效果:
本申请实施例提供的上述数据接收方法,通过内核旁路进程直接操作虚拟网卡,可以获取虚拟网卡接收的第一目标数据包,该所述第一目标数据包由网卡设备确定第一目标数据包满足虚拟网卡的数据接收条件时,发送至虚拟网卡,然后通过内核旁路进程将第一目标数据包存储至第一目标队列,该第一目标队列中保存的各个数据包,是应用层的目标业务进程待处理的数据包。可以理解的是,网卡设备可以将满足虚拟网卡的数据接收条件的第一目标数据包发送给虚拟网卡,也就是说,第一目标数据包可以是指定的数据包,然后内核旁路进程可以绕过操作系统内核,直接在用户态获取虚拟网卡中的第一目标数据包,再将第一目标数据包存储至第一目标队列,以使应用层的目标业务进程从第一目标队列获取待处理的数据包。
因此,本申请实施例在接收指定的数据包时,不需要通过操作系统内核操作网卡设备,以获取网卡设备接收的数据包后发送给应用层,这样,可以避免系统调用以及应用层和操作系统内核之间的数据拷贝;因此,可以避免由于系统调用造成的额外的CPU开销,以及避免由于应用层和操作系统内核之间的数据传输造成的额外的CPU开销,从而大大减少主机的CPU开销。
本申请的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的相关技术中的数据发送过程的示意图;
图2为本申请实施例提供的一种数据接收方法的应用场景示意图;
图3为本申请实施例提供的一种数据接收方法的流程图;
图4为本申请实施例提供的一种数据包导流的示意图;
图5为本申请实施例提供的一种数据包接收的示意图;
图6为本申请实施例提供的另一种数据接收方法的流程图;
图7为本申请实施例提供的一种数据接收流程的示意图;
图8为本申请实施例提供的一种数据接收的流程图;
图9为本申请实施例提供的一种数据发送方法的流程图;
图10为本申请实施例提供的另一种数据发送方法的流程图;
图11A为本申请实施例提供的一种数据发送流程的示意图;
图11B为本申请实施例提供的一种数据发送的流程图;
图12为本申请实施例提供的一种数据接收装置的结构框图;
图13为本申请实施例提供的另一种数据接收装置的结构框图;
图14为本申请实施例提供的一种数据发送装置的结构框图;
图15为本申请实施例提供的另一种数据发送装置的结构框图;
图16为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了便于本领域技术人员更好地理解本申请的技术方案,下面对本申请涉及的部分名词进行介绍。
内核态:运行操作系统程序,操作硬件;例如,执行文件操作、网络数据发送等操作,必须通过write、send等系统调用,这些系统调用会调用操作系统内核的代码。
用户态:程序在执行过程中除了内核态之外,都运行在用户态。
内核旁路网络收发框架:是指收发网络数据包时,绕过操作系统内核,直接在用户态进行数据包收发的框架,具体地,可以采用内核旁路进程执行数据包的收发。
数据平面开发套件(Data Plane Development Kit,DPDK):是一组快速处理数据包的开发平台及接口,基于Linux系统运行,用于快速数据包处理的函数库与驱动集合,可以极大提高数据处理性能和吞吐量,提高数据平面应用程序的工作效率。本申请实施例中的内核旁路网络收发框架,可以采用DPDK。
单根I/O虚拟化(Single-root I/O virtualization,SR-IOV):是一种在网卡硬件层面实现网卡虚拟化的技术,主要的应用场景为替虚拟机提供高速的网络IO,典型的应用场景如下:一张网卡设备上虚拟出多个虚拟网卡,每个虚拟网卡分配给单独一个虚拟机使用。本申请实施例中采用SR-IOV技术在网卡设备上创建虚拟网卡。
导流器(Flow Director,FDIR):是Intel公司提出的根据包的字段精确匹配,将其分配到某个特定网卡队列的技术。具体地,FDIR允许用户指定一些参数过滤网卡上收到的数据包,然后将其放到指定的网卡接收队列。
下文中所用的词语“示例性”的意思为“用作例子、实施例或说明性”。作为“示例性”所说明的任何实施例不必解释为优于或好于其他实施例。
文中的术语“第一”、“第二”仅用于描述目的,而不能理解为明示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征,在本申请实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本申请实施例涉及云技术处理。云技术(Cloud technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术,是基于云计算模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。
本申请实施例可以对传输到后台系统的数据进行接收,然后通过云计算对接收的数据进行逻辑处理后,可以将需要发送的数据发送出去。
云存储(cloud storage)是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。例如,本申请实施例中涉及的数据存储可以采用云存储。
下面对本申请的设计思想进行介绍。
目前,主机采用传输层协议收发网络数据包(下面简称数据包)的过程中,需要通过系统调动,频繁地在应用层和操作系统内核之间进行数据包的传输。这样,数据包需要经过内核态到用户态、用户态到内核态的数据传输,并且系统运行状态需要频繁地在内核态和用户态之间切换,因此,上述数据包的收发方式会给主机带来额外的CPU开销。
为了解决上述问题,相关技术下,通常采用分段延后处理(Generic SegmetationOffload,GSO)技术进行数据包收发;例如图1所示,采用GSO技术,应用层可以将处理后的数据包一次性发送给操作系统内核,再由操作系统内核针对接收的数据包执行分片操作,然后将各个数据包分片发送给网卡;而不采用GSO技术时,需要在应用层针对数据包执行分片操作后,再将处理后的各个数据包分片分别发送给操作系统内核,然后由操作系统内核将各个数据包分片发送给网卡;因此,采用GSO技术可以减少应用层和操作系统内核之间的数据传输次数,即减少系统调用次数,从而在一定程度上减少主机的CPU开销。
但是,在采用GSO技术进行数据包收发的方式下,主机仍然存在额外的CPU开销。
有鉴于此,本申请实施例提供一种数据接收方法、数据发送方法、装置、电子设备及介质,通过内核旁路进程获取虚拟网卡接收的第一目标数据包,所述第一目标数据包由网卡设备确定第一目标数据包满足虚拟网卡的数据接收条件时,发送至虚拟网卡;通过内核旁路进程将第一目标数据包存储至第一目标队列,该第一目标队列中保存的各个数据包,是应用层的目标业务进程待处理的数据包。可以在接收指定的数据包时,避免系统调用以及应用层和操作系统内核之间的数据拷贝,因此,可以避免由于系统调用造成的额外的CPU开销,以及避免应用层和操作系统内核之间的数据传输造成的额外的CPU开销,从而大大减少主机的CPU开销。
基于上述设计思想,下面对本申请实施例的数据接收方法的应用场景进行介绍。
下面结合图2所示的一种数据接收方法的应用场景示意图,对本申请实施例的应用场景可能涉及的设备进行示例介绍。
本申请实施例提供的数据接收方法的一种应用场景可以参见图2所示,该应用场景中包括终端设备200和服务器100。终端设备200和服务器100之间可以通过通信网络进行通信。
在一种可选的实施方式中,通信网络可以是有线网络或无线网络。终端设备200以及服务器100可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
其中,在本申请实施例中,终端设备200为用户使用的电子设备,该电子设备可以是个人计算机、手机、平板电脑、笔记本、电子书阅读器、智能家居等具有一定计算能力并且运行有各种应用程序的计算机设备。服务器100可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(ContentDelivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。
终端设备200可以向服务器100发送网络数据包,服务器100接收到终端设备200发送的网络数据包后,可以采用本申请实施例的数据接收方法接收该网络数据包。
应当说明的是,图2是对数据接收方法的应用场景进行示例介绍,实际本申请实施例中的方法可以适用的应用场景并不限于此。
基于上述的应用场景,下面对本申请实施例的数据接收方法进行介绍。
图3示出了本申请实施例提供的一种数据接收方法的流程图,该数据接收方法可以由服务器执行,例如可以是图2中的服务器100。
在执行图3所示的流程之前,本申请实施例可以预先基于网卡设备的物理网卡创建虚拟网卡,具体可以执行以下步骤:
服务器通过内核旁路进程,基于网卡设备的物理网卡创建虚拟网卡,且将虚拟网卡与内核旁路进程进行绑定。
该步骤中,可以采用虚拟化技术,例如,可采用SR-IOV虚拟化技术,在网卡设备的物理网卡上创建虚拟网卡,然后记录该虚拟网卡的外设部件互连(Peripheral,PCI)信息,以便后续网卡设备根据该PCI信息向虚拟网卡发送第一目标数据包。本申请实施例也可以采用SR-IOV技术以外的其他虚拟化技术,在此不作限定。
需要说明的是,基于物理网卡可以创建一个或多个虚拟网卡,内核旁路进程可以绑定一个虚拟网卡,也可以绑定多个虚拟网卡。当创建多个虚拟网卡时,可以为每个虚拟网卡分配一个PCI信息,各个虚拟网卡的数据接收条件可以不同,网卡设备基于各个虚拟网卡的PCI信息,根据各个虚拟网卡的数据接收条件对接收到的数据包进行导流,使得各个虚拟网卡接收到满足各自数据接收条件的第一目标数据包。每个虚拟网卡接收的第一目标数据可以由对应的业务进程进行处理,该对应的业务进程可以与内核旁路进程进行交互。本申请下面实施例中以一个虚拟网卡为例进行说明。
进一步地,在创建虚拟网卡之后,内核旁路进程可以指定需要绑定的虚拟网卡,从而将指定的虚拟网卡与内核旁路进程进行绑定。
参照图3所示,本申请实施例的数据接收方法,可以包括如下步骤:
步骤S301,服务器通过内核旁路进程获取虚拟网卡接收的第一目标数据包,所述第一目标数据包由网卡设备确定第一目标数据包满足虚拟网卡的数据接收条件时,发送至虚拟网卡。
本申请实施例中,服务器可以采用内核旁路网络收发框架来接收指定的数据包,该指定的数据包即满足虚拟网卡的数据接收条件的第一目标数据包。该内核旁路网络收发框架可以绕过操作系统内核,通过创建的用户态的内核旁路进程操作虚拟网卡,可以直接在用户态进行第一目标数据包的接收。
在一些实施例中,上述内核旁路网络收发框架可以采用DPDK网络收发框架,上述内核旁路进程可以是DPDK进程。
本申请实施例采用DPDK网络收发框架,由于DPDK基于Linux系统运行,可以快速进行数据包的处理,提高数据包的处理性能和吞吐量,从而提高数据包的接收效率。
需要说明的是,本申请实施例还可以采用其他内核旁路网络收发框架,在此不作限定。
在步骤S301中,内核旁路进程用于获取虚拟网卡接收的第一目标数据包,而不是直接获取网卡设备接收的数据包,这是因为,内核旁路进程如果直接驱动网卡设备,这会导致操作系统对接收的数据包无感知,使得只有与内核旁路进程交互的业务进程才能获得接收的数据包,而同一服务器上可以包括多个业务进程,不与内核旁路进程交互的其他业务进程,将不能获得接收的数据包,以进行网络交互。
为了使上述其他业务进程可以进行网络交互,本申请实施例中的内核旁路进程用于驱动虚拟网卡,该虚拟网卡可以是在网卡设备的硬件层面(即物理网卡)预先创建的;并且,虚拟网卡可以接收网卡设备发送的指定的数据包,即满足虚拟网卡的数据接收条件的数据包;这样,不满足虚拟网卡的数据接收条件的数据包,还可以由物理网卡发送给操作系统,以实现其他业务进程的网络交互。
在具体实施中,网卡设备可以对接收到的数据包进行导流,以将满足虚拟网卡的数据接收条件的数据包,发送至虚拟网卡。例如,采用FDIR技术,通过设定的参数过滤出指定的数据包,将指定的数据包发送至虚拟网卡;其中,设定的参数可以包括数据包的网络传输协议、目的端口等,具体可以根据需要进行设定,本申请实施例对此不作限定。
在一些实施例中,上述虚拟网卡的数据接收条件可以为:数据包的网络传输协议为设定的目标网络传输协议,且数据包的目的端口为设定端口。
其中,目标网络传输协议可以是传输层网络协议中的一种或多种,传输层网络协议包括:UDP、基于UDP的低时延的互联网传输层协议(Quick UDP Internet Connection,QUIC)、TCP等。目的端口可以是业务端口,服务器可以实现多个业务,每个业务可以对应一个端口。
本申请实施例通过设置虚拟网卡的数据接收条件,可以使虚拟网卡只接收指定的数据包,以便内核旁路进程接收指定的数据包,进而只与指定的数据包对应的目标业务进程进行交互;同一服务器上不与内核旁路进程交互的其他业务进程,仍然可以通过网卡设备接收数据包,以进行网络交互。
图4示出了采用FDIR技术对接收到的数据包进行导流的示意图。
示例性的,虚拟网卡的数据接收条件为:目的端口为6120的UDP数据包。参照图4,业务进程m运行的端口为6120,用于处理UDP数据包;该业务进程m绑定到虚拟网卡。网卡设备在接收到数据包时,通过FDIR模块对接收到的数据包进行导流,将目的端口为6120的UDP数据包发送至虚拟网卡,而不满足虚拟网卡的数据接收条件的其他数据包发送至物理网卡。
在一些实施例中,为了防止由于网卡设备导流出现差错,导致虚拟网卡接收的第一目标数据包不满足虚拟网卡的数据接收条件,还可以获取虚拟网卡接收的第一目标数据包之后,在执行下面的步骤S302之前,执行如下步骤:
服务器通过内核旁路进程对第一目标数据包进行解析,以确定第一目标数据包满足虚拟网卡的数据接收条件。
该步骤中,内核旁路进程可以对监听到的第一目标数据包进行解析,得到第一目标数据包的网络传输协议和目的端口等信息,然后在确定解析得到的网络传输协议为目标网络传输协议,且目的端口为设定端口时,可以判定第一目标数据包满足虚拟网卡的数据接收条件。
步骤S302,服务器通过内核旁路进程将第一目标数据包存储至第一目标队列;其中,第一目标队列中保存的各个数据包,是应用层的目标业务进程待处理的数据包。
其中,第一目标队列可以是内核旁路进程启动时创建的,用于存储接收的数据包。目标业务进程可以与内核旁路进程交互,用于获取第一目标队列中保存的各个数据包,然后对获取的各个数据包进行处理。具体地,目标业务进程可以主动从第一目标队列中获取数据包,例如,内核旁路进程可以提供共享内存机制,目标业务进程基于该共享内存机制,可以读取第一目标队列的地址,以获取待处理的数据包。
本申请实施例中,内核旁路进程可以绕过操作系统内核,直接在用户态获取虚拟网卡中的第一目标数据包,再将第一目标数据包存储至第一目标队列,以使应用层的目标业务进程从第一目标队列获取待处理的数据包。因此,本申请实施例在接收指定的数据包(即第一目标数据包)时,不需要通过操作系统内核操作网卡设备,以获取网卡设备接收的数据包后发送给应用层,这样,可以避免系统调用以及应用层和操作系统内核之间的数据拷贝,因此,可以避免由于系统调用造成的额外的CPU开销,以及避免应用层和操作系统内核之间的数据传输造成的额外的CPU开销,从而大大减少主机的CPU开销。
另外,内核旁路进程虽然接管了虚拟网卡,用于获取虚拟网卡接收的数据包,但是由于网卡设备的导流,虚拟网卡只接收满足其数据接收条件的第一目标数据包,而其他数据包可以由物理网卡发送给操作系统内核,由操作系统内核发送给不与内核旁路进程交互的其他业务进程。
示例性的,如图5所示,虚拟网卡接收到第一目标数据包后,用户态的内核旁路进程可以获取第一目标数据包然后进行存储,由目标业务进程对存储的第一目标数据包进行处理;物理网卡可以接收第一目标数据包以外的其他数据包,将其他数据包发送至操作系统内核,然后由操作系统内核发送至其他业务进程进行处理。另外,一些其他数据包虽然不满足虚拟网卡的数据接收条件,但是目的端口可以是目标业务进程对饮的目标业务,此时,操作系统内核也可以将这些其他数据包发送至目标业务进程处理。
因此,本申请实施例的数据接收方法,不影响服务器上的其他业务进程接收数据包,以实现其他业务的网络交互,比较好地解决了内核旁路网络收发框架与其他业务的兼容问题,可以应用于各种操作系统的服务器。并且,一旦内核旁路进程出现异常,其他业务仍然可以正常进行网络交互,不需要重启服务器,降低运营上的复杂度。
在一些实施例中,内核旁路进程可以采用轮询的方式主动获取虚拟网卡接收的第一目标数据包,因此,如图6所示,在执行上述步骤S301中的通过用户态的内核旁路进程获取虚拟网卡接收的第一目标数据包之前,还可以执行如下步骤:
步骤S300,服务器按照第一预设周期,通过内核旁路进程对虚拟网卡的数据接收状态进行监听。
其中,第一预设周期可以根据需要进行设定,例如,每隔10s,在此不作限定。内核旁路进程可以不断轮询虚拟网卡,检查虚拟网卡是否接收到数据包;如果虚拟网卡接收到数据包,则可以获取虚拟网卡接收的数据包。
相关技术中,网卡设备在接收到数据包时,会发起硬件中断,然后CPU停止当前的处理进程,来获取当前接收的数据包,这会带来数据处理的上下文切换。本申请实施例中,内核旁路进程采用轮询的方式主动获取虚拟网卡接收的第一目标数据包,可以避免接收数据包带来的中断以及上下文切换,从而进一步减少CPU的开销。
在一种可能的实施方式中,虚拟网卡可以设置数据接收队列,将接收到的第一目标数据包存储至该数据接收队列;内核旁路进程可以包括数据接收线程,该数据接收线程用于对虚拟网卡的数据接收队列进行监听;此时,上述步骤S300可以通过如下方式实现:
服务器按照第一预设周期,通过数据接收线程对数据接收队列的数据接收状态进行监听。
例如,内核旁路进程采用DPDK进程时,DPDK进程可以创建DPDK接收线程,将DPDK接收线程作为数据接收线程,通过DPDK接收线程对数据接收队列的数据接收状态进行监听。
本申请实施例中,内核旁路进程可以创建数据接收线程,并通过数据接收线程来接收数据包,后续还可以创建数据发送线程来发送数据包,从而将数据包的接收和发送分开处理;并且,将接收的数据包存储至虚拟网卡的数据接收队列,便于对接收的数据包的存储和管理。
进一步地,如图6所示,上述步骤S301可以通过以下步骤S3011实现:
步骤S3011,服务器若监听到虚拟网卡从网卡设备接收到第一目标数据包,则通过内核旁路进程获取第一目标数据包。
具体地,服务器如果监听到虚拟网卡的数据接收队列中的第一目标数据包,则可以通过内核旁路进程的数据接收线程获取第一目标数据包。
下面结合图7中数据传输的具体流程,对本申请实施例的数据接收方法进行介绍。
参照图7所示,虚拟网卡设置有数据接收队列,内核旁路进程以DPDK进程为例,DPDK进程将虚拟网卡与自身绑定,从而可以接管虚拟网卡。具体地,DPDK进程可以创建DPDK接收线程,即本申请上述实施例中的数据接收线程,通过DPDK接收线程轮询数据接收队列。
如图8所示,数据接收流程可以包括以下步骤:
步骤S801、网卡设备将指定的数据包发送至虚拟网卡的数据接收队列上。
该步骤中,指定的数据包即满足虚拟网卡的数据接收条件的数据包,例如,网络传输协议为设定的目标网络传输协议,目的端口为设定端口的数据包。
具体地,可以采用直接存储器访问(Direct Memory Access,DMA)的传输方式,将网卡设备中指定的数据包复制到数据接收队列上;其中,DMA传输可以将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。
步骤S802、DPDK接收线程不断轮询数据接收队列中的数据包。
具体地,DPDK网络收发框架可以向操作系统内核注册igb_uio模块,该模块利用linux用户态驱动技术,可以绕过操作系统内核,直接在用户态操作虚拟网卡,即读取操作系统为虚拟网卡分配的内存地址。
步骤S803、当DPDK接收线程在数据接收队列中读取到数据包时,对读取的数据包进行解析,得到解析结果;该解析结果包括数据包的网络传输协议和目的端口等信息;
具体地,DPDK接收线程可以对读取到的数据包进行网络协议栈的处理,确定该数据包的网络传输协议和目的端口等信息。
步骤S804、DPDK接收线程根据解析结果确定该数据包满足虚拟网卡的数据接收条件时,将该数据包传递给DPDK接收队列。
其中,DPDK接收队列即本申请上述实施例中的第一目标队列,可以采用无锁队列,由DPDK进程启动时创建,目标业务进程启动时可以通过DPDK共享内存机制读取到DPDK接收队列中的地址,进而获取DPDK接收队列中的数据包进行处理。
具体地,DPDK接收线程确认读取的数据包满足虚拟网卡的数据接收条件之后,可以将数据描述符传递给DPDK接收队列,以将读取的数据包传递至DPDK接收队列中。
进一步地,目标业务进程在主流程(MAIN)中主动从DPDK接收队列中获取数据包进行处理,然后将处理后的数据包传递给指定协议栈。
其中,指定协议栈可以根据指定的数据包的网络传输协议确定,例如,指定的数据包的网络传输协议为QUIC协议,此时,指定协议栈可以为QUIC协议栈。
再进一步地,指定协议栈可以将处理后的数据包传递给目标业务进程对应的上层业务,以供上层业务使用。
本申请上述实施例中,通过用户态的DPDK接收线程,获取虚拟网卡的数据接收队列上接收的指定的数据包,该指定的数据包是网卡设备确定其满足虚拟网卡的数据接收条件时,发送至虚拟网卡的;通过DPDK接收线程将指定的数据包存储至DPDK接收队列,以使应用层的目标业务进程从DPDK接收队列中获取数据包进行处理。因此,本申请实施例可以在接收指定的数据包时,避免由于应用层和操作系统内核之间的数据传输,造成的额外的CPU开销,从而大大减少主机的CPU开销。
另外,DPDK进程虽然接管了虚拟网卡,用于获取虚拟网卡接收的数据包,但是由于网卡设备的导流,虚拟网卡只接收指定的数据包,而指定的数据包以外的其他数据包,可以由物理网卡发送给操作系统内核,由操作系统内核发送给不与DPDK进程交互的其他业务进程。因此,本申请实施例的数据接收方法,不影响服务器上的其他业务进程接收数据包,以实现其他业务的网络交互,比较好地解决了DPDK网络收发框架与其他业务的兼容问题,可以应用于各种操作系统的服务器。并且,一旦DPDK进程出现异常,其他业务仍然可以正常进行网络交互,不需要重启服务器,降低运营上的复杂度。
下面对本申请实施例的数据发送方法进行介绍。
图9示出了本申请实施例提供的一种数据发送方法的流程图,该数据发送方法可以由服务器执行。参照图9所示,本申请实施例的数据发送方法,可以包括如下步骤:
步骤S901,服务器通过内核旁路进程获取第二目标队列中待发送的第二目标数据包;其中,第二目标数据包是应用层的目标业务进程对第一目标数据包进行处理后获得的,第一目标数据包是内核旁路进程从虚拟网卡接收的,以及所述第一目标数据包由网卡设备确定第一目标数据包满足虚拟网卡的数据接收条件时,发送至虚拟网卡。
其中,虚拟网卡可以是内核旁路进程在网卡设备的物理网卡上预先创建的,并且将虚拟网卡与内核旁路进程进行绑定,也就是说,内核旁路进程可以操作该虚拟网卡。第二目标队列与本申请上述实施例中的第一目标队列相对应,可以是内核旁路进程启动时创建的,用于存储待发送的数据包,具体可以是应用层的目标业务进程对第一目标数据包进行处理后,得到的数据包。
在一些实施例中,上述虚拟网卡的数据接收条件可以为:数据包的网络传输协议为设定的目标网络传输协议,且数据包的目的端口为设定端口。
其中,目标网络传输协议可以是传输层网络协议中的一种或多种,传输层网络协议包括:UDP、QUIC、TCP等。目的端口可以是业务端口,服务器可以实现多个业务,每个业务可以对应一个端口。
步骤S902,服务器通过内核旁路进程将第二目标数据包发送给虚拟网卡,以使网卡设备获取虚拟网卡中的第二目标数据后进行发送。
该步骤中,虚拟网卡可以将第二目标数据包发送给网卡设备,网卡设备也可以主动从虚拟网卡中获取第二目标数据,本申请实施例对此不作限定。
本申请实施例中,用户态的内核旁路进程获取第二目标队列中待发送的第二目标数据包后,可以绕过操作系统内核,直接在用户态将第二目标数据包发送给虚拟网卡,以使网卡设备获取虚拟网卡中的第二目标数据后进行发送。因此,本申请实施例在发送第二目标数据包时,不需要应用层将第二目标数据包发送给操作系统内核,再由操作系统内核操作网卡设备,以使网卡设备将第二目标数据包发送出去,这样,可以避免系统调用以及应用层和操作系统内核之间的数据拷贝,因此,可以避免由于系统调用以及应用层和操作系统内核之间的数据传输,造成的额外的CPU开销,从而大大减少主机的CPU开销。
在一些实施例中,内核旁路进程可以采用轮询的方式主动获取第二目标队列中的第二目标数据包,因此,如图10所示,在执行上述步骤S901中的通过用户态的内核旁路进程获取第二目标队列中的第二目标数据包之前,还可以执行如下步骤:
步骤S900,服务器按照第二预设周期,通过内核旁路进程对第二目标队列的数据发送状态进行监听。
其中,第二预设周期可以根据需要进行设定,可以与上述第一预设周期相同,也可以不同,在此不作限定。内核旁路进程可以不断轮询第二目标队列,检查第二目标队列是否存在需要发送的数据包;如果存在需要发送的数据包,则可以获取待发送的数据包。
进一步地,上述步骤S901可以通过以下步骤S9011实现:
步骤S9011,服务器若监听到第二目标队列中存在待发送的第二目标数据包,则通过内核旁路进程获取第二目标数据包。
在一些实施例中,内核旁路进程还可以包括数据发送线程;此时,上述步骤S9011可以通过如下方式实现:
服务器按照第二预设周期,通过数据发送线程对第二目标队列的数据发送状态进行监听。
例如,内核旁路进程采用DPDK进程时,DPDK进程可以创建DPDK发送线程,将DPDK发送线程作为数据发送线程。
进一步地,服务器若监听到第二目标队列中存在待发送的第二目标数据包,则通过数据发送线程获取第二目标队列中的第二目标数据包。
在一些实施例中,虚拟网卡还可以设置有数据发送队列;上述步骤S902中通过内核旁路进程将第二目标数据包发送给虚拟网卡,还可以通过如下方式实现:
服务器通过内核旁路进程将第二目标数据包发送给数据发送队列。
具体地,服务器可以通过数据发送线程将第二目标数据包发送给数据发送队列。
本申请实施例中,内核旁路进程可以创建数据发送线程,并通过数据发送线程将待发送的数据包存储至虚拟网卡的数据发送队列,便于对待发送的数据包进行管理并发送。
下面结合图11A和图11B中的数据发送流程,对本申请实施例的数据发送方法进行介绍。
参照图11A所示,虚拟网卡还设置有数据发送队列,内核旁路进程以DPDK进程为例,DPDK进程将虚拟网卡与自身绑定,从而可以接管虚拟网卡。具体地,DPDK进程还可以创建数据发送线程,即本申请上述实施例中的数据发送线程。
如图11B所示,数据发送流程可以包括以下步骤:
步骤S1101、目标业务进程的主流程处理完数据以后,如果有待发送的数据包,则指定协议栈可以直接将待发送的数据包写到DPDK发送队列中。
其中,DPDK发送队列即本申请上述实施例中的第二目标队列,与DPDK接收队列相对应,也可以采用无锁队列,由DPDK进程启动时创建。
指定协议栈可以根据指定的数据包的网络传输协议确定,例如,指定的数据包的网络传输协议为QUIC协议,此时,指定协议栈可以为QUIC协议栈。
步骤S1102、DPDK发送线程不断轮询DPDK发送队列,检查是否有待发送的数据包;若有待发送的数据包,则将待发送的数据包写入数据发送队列中,再由网卡设备发送出去。
该步骤中,虚拟网卡可以将数据发送队列中待发送的数据包发送给网卡设备,由网卡设备将待发送的数据包发送出去;网卡设备也可以从数据发送队列中主动获取待发送的数据包,然后将待发送的数据包发送出去,本申请实施例对此不作限定。
本申请实施例中,用户态的DPDK发送线程获取DPDK发送队列中待发送的数据包后,可以绕过操作系统内核,直接在用户态将待发送的数据包发送给数据发送队列,以使网卡设备获取数据发送队列中的数据包后进行发送。因此,本申请实施例在发送数据包时,不需要应用层将待发送的数据包发送给操作系统内核,再由操作系统内核操作网卡设备,以使网卡设备将待发送的数据包发送出去,这样,可以避免系统调用以及应用层和操作系统内核之间的数据拷贝,因此,可以避免由于系统调用以及应用层和操作系统内核之间的数据传输,造成的额外的CPU开销,从而大大减少主机的CPU开销。
基于相同的发明构思,本申请实施例还提供一种数据接收装置,该装置解决问题的原理与上述实施例的数据接收方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。参照图12所示,该数据接收装置可以包括第一获取模块121和存储模块122。
第一获取模块121,用于通过内核旁路进程获取虚拟网卡接收的第一目标数据包,所述第一目标数据包由网卡设备确定第一目标数据包满足虚拟网卡的数据接收条件时,发送至虚拟网卡;
存储模块122,用于通过内核旁路进程将第一目标数据包存储至第一目标队列;其中,第一目标队列中保存的各个数据包,是应用层的目标业务进程待处理的数据包。
在一种可能的实施例中,虚拟网卡的数据接收条件可以为:数据包的网络传输协议为设定的目标网络传输协议,且数据包的目的端口为设定端口。
在一种可能的实施例中,内核旁路进程可以为数据平面开发套件DPDK进程。
在一种可能的实施例中,如图13所示,装置还可以包括第一监听模块120_2,用于:
按照第一预设周期,通过内核旁路进程对虚拟网卡的数据接收状态进行监听;
第一获取模块121,还可以用于:
若监听到虚拟网卡从网卡设备接收到第一目标数据包,则通过内核旁路进程获取第一目标数据包。
在一种可能的实施例中,内核旁路进程可以包括数据接收线程,虚拟网卡可以设置有数据接收队列;
第一监听模块120_2,还可以用于:
按照第一预设周期,通过数据接收线程对数据接收队列的数据接收状态进行监听;
第一获取模块121,还可以用于:
若监听到数据接收队列中保存的第一目标数据包,则通过数据接收线程获取第一目标数据包。
在一种可能的实施例中,装置还可以包括解析模块121_1,用于:
通过内核旁路进程对所述第一目标数据包进行解析,以确定第一目标数据包满足虚拟网卡的数据接收条件。
在一种可能的实施例中,装置还可以包括创建模块120_1,用于:
通过内核旁路进程,基于网卡设备的物理网卡创建虚拟网卡,且将虚拟网卡与内核旁路进程进行绑定。
在一种可能的实施例中,设定的目标网络传输协议可以包括以下一种或多种:
UDP、QUIC、TCP。
基于相同的发明构思,本申请实施例还提供一种数据发送装置,该装置解决问题的原理与上述实施例的数据发送方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。参照图14所示,该数据发送装置可以包括第二获取模块141和发送模块142。
第二获取模块141,用于通过内核旁路进程获取第二目标队列中待发送的第二目标数据包;其中,第二目标数据包是应用层的目标业务进程对第一目标数据包进行处理后获得的,第一目标数据包是内核旁路进程从虚拟网卡接收的,以及所述第一目标数据包由网卡设备确定第一目标数据包满足虚拟网卡的数据接收条件时,发送至虚拟网卡;
发送模块142,用于通过内核旁路进程将第二目标数据包发送给虚拟网卡,以使网卡设备获取虚拟网卡中的第二目标数据后进行发送。
在一种可能的实施例中,虚拟网卡的数据接收条件可以为:数据包的网络传输协议为设定的目标网络传输协议,且数据包的目的端口为设定端口。
在一种可能的实施例中,内核旁路进程可以为数据平面开发套件DPDK进程。
在一种可能的实施例中,如图15所示,装置还可以包括第二监听模块140,用于:
按照第二预设周期,通过内核旁路进程对第二目标队列的数据发送状态进行监听;
第二获取模块141,还可以用于:
若监听到第二目标队列中存在待发送的第二目标数据包,则通过内核旁路进程获取第二目标数据包。
在一种可能的实施例中,内核旁路进程可以包括数据发送线程;
第二监听模块140,还可以用于:
按照第二预设周期,通过数据发送线程对第二目标队列的数据发送状态进行监听;
第二获取模块141,还可以用于:
通过数据发送线程获取第二目标队列中的第二目标数据包。
在一种可能的实施例中,虚拟网卡可以设置有数据发送队列;
发送模块142,还可以用于:
通过内核旁路进程将第二目标数据包发送给数据发送队列。
在一种可能的实施例中,虚拟网卡由内核旁路进程基于网卡设备的物理网卡创建,且与内核旁路进程进行绑定。
在一种可能的实施例中,设定的目标网络传输协议可以包括以下一种或多种:
UDP、QUIC、TCP。
为了描述的方便,以上各部分按照功能划分为各模块分别描述。当然,在实施本申请时可以把各模块的功能在同一个或多个软件或硬件中实现。
所属技术领域的技术人员能够理解,本申请的各个方面可以实现为系统、方法或程序产品。因此,本申请的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
关于上述实施例中的装置,其中各个模块的具体执行方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
与上述方法实施例和装置实施例基于同一发明构思,本申请实施例还提供了一种电子设备。该电子设备可以是服务器,如图2所示的服务器100。在该实施例中,电子设备的结构可以如图16所示,包括存储器1601,通讯模块1603以及一个或多个处理器1602。
存储器1601,用于存储处理器1602执行的计算机程序。存储器1601可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统,以及运行即时通讯功能所需的程序等;存储数据区可存储各种即时通讯信息和操作指令集等。
处理器1602,可以包括一个或多个中央处理单元(central processing unit,CPU)或者为数字处理单元等等。处理器1602,用于调用存储器1601中存储的计算机程序时实现上述数据接收方法或者数据发送方法。
通讯模块1603用于与终端设备进行通信,获取数据包。
本申请实施例中不限定上述存储器1601、通讯模块1603和处理器1602之间的具体连接介质。本公开实施例在图16中以存储器1601和处理器1602之间通过总线1604连接,总线1604在图16中以粗线表示,其他部件之间的连接方式,仅是进行示意性说明,并不引以为限。总线1604可以分为地址总线、数据总线、控制总线等。为便于表示,图16中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
本申请实施例还提供了一种计算机存储介质,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述实施例中的数据接收方法或者数据发送方法。
在一些可能的实施方式中,本申请提供的数据接收方法或者数据发送方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在计算机设备上运行时,所述程序代码用于使所述计算机设备执行本说明书上述描述的根据本申请各种示例性实施方式的数据接收方法或者数据发送方法的步骤,例如,所述计算机设备可以执行如图3所示的步骤S301~S302中的数据接收的流程,或者如图9所示的步骤S901~S902中的数据发送的流程。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (15)

1.一种数据接收方法,其特征在于,包括:
通过内核旁路进程获取虚拟网卡接收的第一目标数据包,所述第一目标数据包由网卡设备确定所述第一目标数据包满足所述虚拟网卡的数据接收条件时,发送至所述虚拟网卡;
通过所述内核旁路进程将所述第一目标数据包存储至第一目标队列;其中,所述第一目标队列中保存的各个数据包,是应用层的目标业务进程待处理的数据包。
2.根据权利要求1所述的方法,其特征在于,所述虚拟网卡的数据接收条件为:数据包的网络传输协议为设定的目标网络传输协议,且数据包的目的端口为设定端口。
3.根据权利要求1所述的方法,其特征在于,所述内核旁路进程为数据平面开发套件DPDK进程。
4.根据权利要求1所述的方法,其特征在于,所述通过用户态的内核旁路进程获取虚拟网卡接收的第一目标数据包之前,还包括:
按照第一预设周期,通过所述内核旁路进程对所述虚拟网卡的数据接收状态进行监听;
所述通过用户态的内核旁路进程获取虚拟网卡接收的第一目标数据包,包括:
若监听到所述虚拟网卡从所述网卡设备接收到所述第一目标数据包,则通过所述内核旁路进程获取所述第一目标数据包。
5.根据权利要求4所述的方法,其特征在于,所述内核旁路进程包括数据接收线程,所述虚拟网卡设置有数据接收队列;
则所述按照第一预设周期,通过所述内核旁路进程对所述虚拟网卡的数据接收状态进行监听,包括:
按照所述第一预设周期,通过所述数据接收线程对所述数据接收队列的数据接收状态进行监听;
则所述通过用户态的内核旁路进程获取虚拟网卡接收的第一目标数据包,包括:
若监听到所述数据接收队列中保存的所述第一目标数据包,则通过所述数据接收线程获取所述第一目标数据包。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述通过用户态的内核旁路进程获取虚拟网卡接收的第一目标数据包之后,在所述通过所述内核旁路进程将所述第一目标数据包存储至第一目标队列之前,还包括:
通过所述内核旁路进程对所述第一目标数据包进行解析,以确定所述第一目标数据包满足所述虚拟网卡的数据接收条件。
7.根据权利要求1-5任一项所述的方法,其特征在于,在所述通过用户态的内核旁路进程获取虚拟网卡接收的第一目标数据包之前,所述方法还包括:
通过所述内核旁路进程,基于所述网卡设备的物理网卡创建所述虚拟网卡,且将所述虚拟网卡与所述内核旁路进程进行绑定。
8.根据权利要求2-5任一项所述的方法,其特征在于,所述设定的目标网络传输协议包括以下一种或多种:
用户数据报协议UDP;
快速UDP网络连接协议QUIC;
传输控制协议TCP。
9.一种数据发送方法,其特征在于,包括:
通过内核旁路进程获取第二目标队列中待发送的第二目标数据包;其中,所述第二目标数据包是应用层的目标业务进程对第一目标数据包进行处理后获得的,所述第一目标数据包是所述内核旁路进程从虚拟网卡接收的,以及所述第一目标数据包由网卡设备确定所述第一目标数据包满足所述虚拟网卡的数据接收条件时,发送至所述虚拟网卡;
通过所述内核旁路进程将所述第二目标数据包发送给所述虚拟网卡,以使所述网卡设备获取所述虚拟网卡中的所述第二目标数据后进行发送。
10.根据权利要求9所述的方法,其特征在于,所述通过用户态的内核旁路进程获取第二目标队列中的第二目标数据包之前,包括:
按照第二预设周期,通过所述内核旁路进程对所述第二目标队列的数据发送状态进行监听;
所述通过用户态的内核旁路进程获取第二目标队列中的第二目标数据包,包括:
若监听到所述第二目标队列中存在待发送的所述第二目标数据包,则通过所述内核旁路进程获取所述第二目标数据包。
11.根据权利要求10所述的方法,其特征在于,所述内核旁路进程包括数据发送线程;
则所述按照第二预设周期,通过所述内核旁路进程对所述第二目标队列的数据发送状态进行监听,包括:
按照所述第二预设周期,通过所述数据发送线程对所述第二目标队列的数据发送状态进行监听;
则所述通过用户态的内核旁路进程获取第二目标队列中的第二目标数据包,包括:
通过所述数据发送线程获取所述第二目标队列中的所述第二目标数据包。
12.一种数据接收装置,其特征在于,包括:
第一获取模块,用于通过内核旁路进程获取虚拟网卡接收的第一目标数据包,所述第一目标数据包由网卡设备确定所述第一目标数据包满足所述虚拟网卡的数据接收条件时,发送至所述虚拟网卡;
存储模块,用于通过所述内核旁路进程将所述第一目标数据包存储至第一目标队列;其中,所述第一目标队列中保存的各个数据包,是应用层的目标业务进程待处理的数据包。
13.一种数据发送装置,其特征在于,包括:
第二获取模块,用于通过内核旁路进程获取第二目标队列中待发送的第二目标数据包;其中,所述第二目标数据包是应用层的目标业务进程对第一目标数据包进行处理后获得的,所述第一目标数据包是所述内核旁路进程从虚拟网卡接收的,以及所述第一目标数据包由网卡设备确定所述第一目标数据包满足所述虚拟网卡的数据接收条件时,发送至所述虚拟网卡;
发送模块,用于通过所述内核旁路进程将所述第二目标数据包发送给所述虚拟网卡,以使所述网卡设备获取所述虚拟网卡中的所述第二目标数据后进行发送。
14.一种电子设备,其特征在于,其包括处理器和存储器,其中,所述存储器存储有程序代码,当所述程序代码被所述处理器执行时,使得所述处理器执行权利要求1-8或者9-11任一项所述方法的步骤。
15.一种计算机可读存储介质,其特征在于,其包括程序代码,当所述程序代码在电子设备上运行时,所述程序代码用于使所述电子设备执行权利要求1-8或者9-11任一项所述方法的步骤。
CN202110482391.5A 2021-04-30 2021-04-30 数据接收方法、数据发送方法、装置、电子设备及介质 Pending CN115269213A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110482391.5A CN115269213A (zh) 2021-04-30 2021-04-30 数据接收方法、数据发送方法、装置、电子设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110482391.5A CN115269213A (zh) 2021-04-30 2021-04-30 数据接收方法、数据发送方法、装置、电子设备及介质

Publications (1)

Publication Number Publication Date
CN115269213A true CN115269213A (zh) 2022-11-01

Family

ID=83745255

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110482391.5A Pending CN115269213A (zh) 2021-04-30 2021-04-30 数据接收方法、数据发送方法、装置、电子设备及介质

Country Status (1)

Country Link
CN (1) CN115269213A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115580667A (zh) * 2022-12-12 2023-01-06 腾讯科技(深圳)有限公司 数据传输方法、装置、设备及存储介质
CN115687159A (zh) * 2022-12-29 2023-02-03 飞腾信息技术有限公司 调试方法、装置及计算机可读存储介质
CN117632799A (zh) * 2023-12-05 2024-03-01 合芯科技有限公司 数据处理方法、装置、设备及存储介质

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115580667A (zh) * 2022-12-12 2023-01-06 腾讯科技(深圳)有限公司 数据传输方法、装置、设备及存储介质
CN115580667B (zh) * 2022-12-12 2023-03-24 腾讯科技(深圳)有限公司 数据传输方法、装置、设备及存储介质
CN115687159A (zh) * 2022-12-29 2023-02-03 飞腾信息技术有限公司 调试方法、装置及计算机可读存储介质
CN115687159B (zh) * 2022-12-29 2023-03-21 飞腾信息技术有限公司 调试方法、装置及计算机可读存储介质
CN117632799A (zh) * 2023-12-05 2024-03-01 合芯科技有限公司 数据处理方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
CN115269213A (zh) 数据接收方法、数据发送方法、装置、电子设备及介质
CN105556475B (zh) 请求处理技术
US9251040B2 (en) Remote debugging in a cloud computing environment
US9154451B2 (en) Systems and methods for sharing devices in a virtualization environment
US10346148B2 (en) Per request computer system instances
EP3982261A1 (en) Method and apparatus for processing io
EP3776230A1 (en) Virtual rdma switching for containerized applications
KR20080106908A (ko) 하드웨어 장치와 같은 자원을 소유하는 가상 컴퓨터를 이동시키기 위해 이용될 수 있는 컴퓨팅 시스템 및 방법
US20070253436A1 (en) Communicating in a virtual environment
US8635632B2 (en) High performance and resource efficient communications between partitions in a logically partitioned system
US20150370582A1 (en) At least one user space resident interface between at least one user space resident virtual appliance and at least one virtual data plane
US20080086575A1 (en) Network interface techniques
US9621633B2 (en) Flow director-based low latency networking
CN111201521A (zh) 具有应用控制的早期写确认支持的存储器访问代理系统
CN113821309B (zh) 一种微内核虚拟机间的通信方法、装置、设备及存储介质
CN111327595A (zh) 用于确定按访问扫描和按需扫描任务的优先顺序的系统和方法
CN117135189A (zh) 服务器的访问方法及装置、存储介质、电子设备
CN116257320B (zh) 一种基于dpu虚拟化配置管理方法、装置、设备及介质
US10284501B2 (en) Technologies for multi-core wireless network data transmission
CN113849277B (zh) 网卡测试方法、装置、计算机设备及计算机可读存储介质
CN115629809A (zh) 数据处理方法、装置、电子设备及计算机可读存储介质
CN114979286A (zh) 容器服务的访问控制方法、装置、设备及计算机存储介质
CN109634721B (zh) 一种虚拟机与主机的启动通信方法及相关装置
CN113535370A (zh) 一种实现负载均衡的多rdma网卡虚拟化的方法、设备
US10133496B1 (en) Bindable state maintaining components

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