CN116701015A - 应用间通信方法、装置 - Google Patents

应用间通信方法、装置 Download PDF

Info

Publication number
CN116701015A
CN116701015A CN202310608330.8A CN202310608330A CN116701015A CN 116701015 A CN116701015 A CN 116701015A CN 202310608330 A CN202310608330 A CN 202310608330A CN 116701015 A CN116701015 A CN 116701015A
Authority
CN
China
Prior art keywords
socket interface
smc
protocol stack
application
virtual
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
CN202310608330.8A
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.)
Alibaba Cloud Computing Ltd
Original Assignee
Alibaba Cloud Computing 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 Alibaba Cloud Computing Ltd filed Critical Alibaba Cloud Computing Ltd
Priority to CN202310608330.8A priority Critical patent/CN116701015A/zh
Publication of CN116701015A publication Critical patent/CN116701015A/zh
Pending legal-status Critical Current

Links

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/544Buffers; Shared memory; Pipes
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02PCLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
    • Y02P90/00Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
    • Y02P90/02Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]

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 And Data Communications (AREA)

Abstract

本申请实施例提供了一种应用间通信方法及装置,包括:在SMC协议栈加载的过程中,通过所述SMC协议栈创建虚拟设备,并在SMC协议栈中注册虚拟设备;响应于第一应用的第一套接字接口与第二应用的第二套接字接口之间SMC连接的建立请求,在对SMC协议栈中的虚拟设备验证后,创建基于虚拟设备的SMC连接;基于SMC连接,通过调用虚拟设备,进行第一套接字接口与第二套接字接口之间数据的交互。本申请通过软件模拟的方式构建虚拟设备,提供SMC通信方案所需的设备接口与设备能力,从而通过虚拟设备来替代相关技术所需的固定架构的硬件加速设备,由于虚拟设备的构建和应用不受限于固定架构,因此扩大了通信方案的适用范围。

Description

应用间通信方法、装置
技术领域
本申请涉及计算机技术领域,特别是涉及一种应用间通信方法、装置、电子设备、机器可读介质。
背景技术
本地通信是指一台设备内部的两个进程之间的相互通信,本地通信可以提升设备的进程之间的协作效率。
在目前,可以采用的本地通信方式为基于共享内存通信协议(SMC,Shared MemoryCommunication)的套接字通信机制,套接字通信没有诸如通信方向、数据大小的限制,更加灵活可靠,而SMC协议透明地将传输控制协议(TCP,Transmission Control Protocol)套接字的流数据进行传输,提供高吞吐、低时延、低开销的网络。具体的,这种通信方式需要采用固定架构(如s390)的硬件加速设备,来满足高性能的传输需求。
但是,发明人经过研究发现,目前的方案中,传输方案的实现依赖于固定架构的硬件加速设备,导致本地通信的实现场景受限,适用范围较窄。
发明内容
本申请实施例提供了一种应用间通信方法,以解决相关技术中本地通信的实现场景受限,适用范围较窄的问题。
相应的,本申请实施例还提供了一种应用间通信装置、电子设备以及存储介质,用以保证上述方法的实现及应用。
为了解决上述问题,本申请实施例公开了一种应用间通信方法,应用于安装有第一应用和第二应用的用户设备,所述方法包括:
在SMC协议栈加载的过程中,通过所述SMC协议栈创建虚拟设备,并在所述SMC协议栈中注册所述虚拟设备;
响应于所述第一应用的第一套接字接口与所述第二应用的第二套接字接口之间SMC连接的建立请求,在对所述SMC协议栈中的虚拟设备验证后,创建基于所述虚拟设备的SMC连接;
基于所述SMC连接,通过调用所述虚拟设备,进行所述第一套接字接口与所述第二套接字接口之间数据的交互。
本申请实施例公开了一种应用间通信装置,应用于安装有第一应用和第二应用的用户设备,所述装置包括:
创建模块,用于在SMC协议栈加载的过程中,通过所述SMC协议栈创建虚拟设备,并在所述SMC协议栈中注册所述虚拟设备;
验证模块,用于响应于所述第一应用的第一套接字接口与所述第二应用的第二套接字接口之间SMC连接的建立请求,在对所述SMC协议栈中的虚拟设备验证后,创建基于所述虚拟设备的SMC连接;
交互模块,用于基于所述SMC连接,通过调用所述虚拟设备,进行所述第一套接字接口与所述第二套接字接口之间数据的交互。
本申请实施例还公开了一种电子设备,包括:处理器;和存储器,其上存储有可执行代码,当所述可执行代码被执行时,使得所述处理器执行如本申请实施例中一个或多个所述的方法。
本申请实施例还公开了一个或多个机器可读介质,其上存储有可执行代码,当所述可执行代码被执行时,使得处理器执行如本申请实施例中一个或多个所述的方法。
与相关技术相比,本申请实施例包括以下优点:
本申请实施例在加载SMC协议栈和注册虚拟设备后,对SMC协议栈中的虚拟设备进行验证,并在验证后,创建基于虚拟设备的SMC连接,最后基于SMC连接,通过调用虚拟设备进行第一套接字接口与第二套接字接口之间数据的交互,本申请实施例通过软件模拟的方式构建虚拟设备,提供SMC通信方案所需的设备接口与设备能力,从而通过虚拟设备来替代相关技术所需的固定架构的硬件加速设备,由于虚拟设备的构建和应用不受限于固定架构,因此扩大了通信方案的适用范围。
附图说明
图1是本申请实施例的一种系统架构图;
图2是本申请实施例的一种电商应用和物流应用之间的通信场景示意图;
图3是本申请实施例的一种本地不同容器中的进程之间的通信场景示意图;
图4是本申请实施例的一种应用间通信方法的步骤流程图;
图5是本申请实施例的一种应用间通信方法的具体步骤流程图;
图6是本申请实施例的一种整体流程示意图;
图7是本申请实施例的一种应用间通信装置的框图;
图8是本申请一实施例提供的装置的结构示意图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
为使本领域技术人员更好地理解本申请,以下对本申请涉及的概念进行说明:
本地通信:具体是指本地进程间通信(IPC,inter-process communication),指在同一个操作系统内部不同进程之间交换数据的方式。
TCP:传输控制协议(TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETFRFC 793通信标准进行定义,在简化的计算机网络开放式系统互连模型(OSI,Open System Interconnect)中,TCP完成第四层传输层所指定的功能。
socket:套接字(socket)是计算机网络节点内部的软件结构,充当通过网络发送、接收数据的端点,或是节点内部进程通信的软件端点。
SMC:共享内存通信协议(SMC)是一种高性能内核网络协议。SMC协议透明地将TCP套接字的流数据以共享内存访问的方式传输,提供高吞吐、低时延、低开销的网络。
SMC-D:是指基于直接内存访问(DMA,Direct Memory Access)技术的共享内存通信,SMC-D具体基于内部共享内存设备实现高性能的本地通信。
内部共享内存设备(ISM device,Internal Shared Memory device):实现基于SMC的套接字通信机制的硬件加速设备,目前在s390架构上提供。
SMC-R:是指基于远程直接数据存取(RDMA,Remote Direct Memory Access)技术的共享内存通信,SMC-R具体基于RDMA设备实现高性能的通信,但是,在现有Linux(一种开源操作系统)内核的实现中,SMC-R对于本地通信选择回退到TCP协议栈进行通信,从而放弃加速本地通信。
协议栈(Protocol stack):又称协议堆叠,是计算机网络协议套件的一个具体的软件实现,具体是指网络中计算机协议的总和,具有堆叠和分层的特征。
虚拟设备:通过虚拟技术将一台硬件设备虚拟成抽象的逻辑设备后供进程使用,虚拟设备并非具体的硬件,而是计算机中的软件实现,虚拟设备的硬件资源,相当于运行虚拟设备的计算机为其分配的硬件资源。
设备链表:记录设备信息的链表文件。
连接层控制(CLC,Connection Layer Control)信息:在发送端向接收端发送数据之前,由于接收端并不知晓数据到来,发送端需要通过发送CLC信息通知接收端,接收端也会发送CLC信息至发送端,CLC信息的主要职责是同步通信两端的资源以及共享内存等信息。接收端和发送端可以基于CLC信息的交互实现握手建立连接。
共享存储片区:在本申请实施例中,共享存储片区具体可以指远程内存缓冲区(RMB,Remote Memory Buffer),共享存储片区是一块硬件存储片区,具体可以作为接收端的接收缓冲区进行使用,另外,也可以将发送端的发送缓冲区映射至该共享存储片区,从而实现接收端和发送端对同一硬件存储片区的共享使用。
数据控制消息:在本申请实施例中是一种数据游标,用于对当前处理的数据进行定位,这是避免共享内存通信中发送端和接收端产生数据冲突的一种手段,发送端在发送数据时产生生产者游标,生产者游标用于定义发送端发送的数据的写入位置;接收端在接收数据时产生消费者游标,消费者游标用于定义接收端读取数据的读取位置。
本申请实施例中的应用间通信方法,可以应用于本地不同应用之间的通信场景,如:一台用户设备中电商应用和物流应用之间的通信场景等。也可以应用于本地不同容器中的进程之间的通信场景,以本地第一应用向第二应用发送数据的通信场景为例,用户设备在SMC协议栈加载的过程中,可以通过所述SMC协议栈创建虚拟设备,并在SMC协议栈中注册虚拟设备,从而通过创建的虚拟设备,来替代相关技术为实现基于SMC的套接字通信时所需的固定架构的硬件加速设备,之后用户设备可以响应于第一应用的第一套接字接口与第二应用的第二套接字接口之间SMC连接的建立请求,在对SMC协议栈中的虚拟设备验证后,创建基于虚拟设备的SMC连接以及供第一套接字接口与第二套接字接口共同使用的共享存储片区,最后基于SMC连接,通过调用虚拟设备,基于同一共享存储片区进行第一套接字接口与第二套接字接口之间数据的交互,本申请实施例通过软件模拟的方式构建虚拟设备,来替代相关技术所需的固定架构的硬件加速设备,由于虚拟设备的构建和应用不受限于固定架构,因此扩大了通信方案的适用范围,另外,本申请实施例的通信方案在兼容套接字接口的同时,使用内核中的共享存储片区加速本地通信,从而通过共享存储片区省去了传输过程中数据从发送端的存储空间拷贝至接收端的存储空间的成本,提高了数据传输效率,大大减少了本地通信的时延。
参照图1,其示出了本申请实施例提供的一种应用间通信方法的系统架构图,用户设备包括:用户态空间和内核态空间,以第一应用的第一套接字接口向第二应用的第二套件字接口发送目标数据为例,用户态空间可以包括:具有第一套接字接口的第一应用,以及具有第二套接字接口的第二应用;内核态空间可以包括TCP/IP协议栈、加载的SMC协议栈、虚拟设备以及共享内存片区。需要说明的是,第一应用和第二应用还可以包含其他的套接字接口,本申请实施例的本地通信是一个应用包含的一个套接字接口向另一个应用包含的一个套接字接口发送数据的过程,套接字接口之间的数据传输可以参照第一套接字接口向第二套件字接口发送数据的过程,因此,对于第一应用和包含的其他套接字接口向第二应用包含的其他套接字接口发送数据的过程不再赘述。
用户态空间为上层进程的活动空间,上层进程的执行必须依托于内核态空间提供的资源。内核态空间控制计算机的硬件资源,并提供上层进程运行的环境,运行在用户态空间中的进程可以通过系统调用,访问内核态空间中的计算机资源,内核态空间中可以包括处理器、内存等硬件资源。需要说明的是,上述应用和进程,指为完成某项或多项特定工作的计算机程序,它可以运行在用户态空间,可以和用户进行交互,可以具有可视的用户界面,也可以在后台运行。
具体的,在本地通信执行开始之前,用户设备需要在内核态空间加载SMC协议栈,加载SMC协议栈完成后,用户设备可以实现基于SMC的套接字通信机制,SMC协议是一种兼容套接字接口的内核网络协议,可以在Linux内核中运行。SMC协议能够帮助TCP网络应用程序透明的使用高效率的共享内存传输方式,从而获得高带宽、低时延的网络通信服务,本申请实施例可以在获取到内核模块文件(smc.ko文件)后,通过调用协议栈加载指令,实现SMC协议栈的加载。
加载SMC协议后,用户设备可以通过所述SMC协议栈创建虚拟设备,响应于创建虚拟设备的指令后,用户设备会创建一个虚拟设备的结构体,并为虚拟设备分配硬件资源(如内存等)进行使用,如,具体的,通过运行“modprobe smc”加载SMC内核模块文件,实现SMC协议栈的加载,加载程序中有一步是创建虚拟设备,可通过该步骤完成虚拟设备的创建。虚拟设备具体是一种抽象的逻辑设备,而并非具体的硬件,进一步的,用户设备可以在与SMC协议栈对应的设备链表中添加虚拟设备的信息,从而实现在SMC协议栈中注册虚拟设备,使得虚拟设备成为一个供SMC协议栈使用的设备,本申请实施例通过虚拟设备提供SMC通信方案所需的设备接口与设备能力,如数据搬运、共享内存管理等能力,从而使得虚拟设备代替相关技术SMC-R方案中固定的RDMA设备,或者SMC-D方案中固定架构(s390)的内部共享内存设备(ISM device),由于虚拟设备的构建和应用不受限于固定架构,因此扩大了通信方案的适用范围。
在创建和注册虚拟设备之后,需要通过基于连接层控制(CLC)信息的握手流程,实现第一应用的第一套接字接口与第二应用的第二套接字接口之间SMC连接的建立,首先,握手流程需要第一套接字接口与第二套接字接口之间先建立基本的TCP连接,以供二者之间交换CLC信息,TCP协议可以基于用户设备自带的TCP/IP协议栈所建立,建立后,第一套接字接口与第二套接字接口之间可以通过TCP连接交换CLC信息,CLC信息主要包含通信两侧所能使用的设备、以及创建的共享内存片区等信息,通信两侧通过对CLC信息的验证,在确定共享内存片区的创建正常,且通信两侧都具有基于创建的虚拟设备实现SMC通信的能力的情况下,则确定对CLC信息的验证成功,从而第一套接字接口与第二套接字接口之间通过握手建立了SMC连接,进而等待后续的数据传输流程。
其中,在握手流程中,创建了供第一套接字接口与第二套接字接口共同使用的共享存储片区,共享存储的具体含义,体现在共享存储片区作为第二套接字接口的接收缓冲区的基础上,还将第一套接字接口的发送缓冲区映射至接收缓冲区,使得发送缓冲区和接收缓冲区共同使用同一块内存,减少了不必要的内存浪费与数据拷贝开销,大大减少了本地通信的时延。
在响应于第一套接字接口向第二套接字接口发送目标数据的请求时,可以通过第一套接字接口和SMC连接,将目标数据存储至共享存储片区,之后将用于定位共享存储片区中所述目标数据的写入位置的第一数据控制消息,存储至目标片区;最后响应于第二套接字接口对目标片区中第一数据控制消息的成功识别,根据第一数据控制消息对目标数据的定位和SMC连接,通过调用虚拟设备,使得第二套接字接口提取共享存储片区中的目标数据供所述第二应用使用。需要说明的是,由于第一套接字接口和第二套接字接口共同使用同一共享内存片区,因此,虚拟设备在将目标数据从第一套接字接口的发送缓冲区转移至第二套接字接口的接收缓冲区的过程中,虚拟设备并不需要执行具体的数据转移操作,从而本申请实施例的通信方案在兼容套接字接口的同时,使用内核中的共享存储片区加速了本地通信的效率。
最后,存在三种本地通信的相关技术方案,本申请针对这三种相关技术方案都具有突出的进步效果:
相关方案一为:TCP loopback,TCP loopback是使用软件模拟的loopback设备配合TCP协议栈完成本地不同进程间的通信的方案,TCP loopback完全复用了TCP协议栈,其使用的TCP协议栈较为复杂,协议栈路径较深,在时延上没有优势。而本申请实施例所采用的SMC协议栈更为轻薄,SMC协议栈仅有连接管理、内存管理相关逻辑,没有TCP loopback涉及的TCP层、IP层、网络设备子系统、邻居子系统、loopback驱动等大量软件协议栈,因此在网络时延上拥有优势。另外,TCP loopback方案无法支持本地跨网络命名空间的进程间通信,在本机容器进程通信场景下,各个容器的网络命名空间不同,因此TCP loopback无法使用于本机跨容器进程通信,而本申请实施例创建的虚拟设备是系统级全局设备,无论是运行与系统上的应用还是运行在容器中的进程均可访问此虚拟设备,并不受限于固定命名空间,因此本方案支持本机跨容器通信。
相关方案二为:Unix domain socket,基于Unix domain socket的本地通信是简单的将两个AF_UNIX协议族的套接字(socket)绑定,将发送端套接字的数据放入接收端套接字的接收队列中,其使用文件路径作为套接字地址,扩展性较差,而本申请实施例的方案中套接字接口在本地通信时使用IP和端口描述地址,使用IP和端口描述地址是广泛应用的地址描述手段,因此本地通信的可扩展性强。另外,Unix domain socket的协议简单且单一,仅支持本地通信,无法应用于跨机通信(不同用户设备之间的通信),而本申请实施例的方案可以与基于SMC的跨机通信共存,所以既可以完成本地通信也可以完成跨机通信。
相关方案三为:sockmap,sockmap通信是在TCP协议的基础上,通过eBPF程序检测关联某个cgroup的TCP socket的行为,将符合条件的TCP socket的路径劫持,短路TCP协议栈以获得更好的本地通信性能。但是其使用过程中涉及eBPF,cgroup等技术,这两种技术的使用难度较高。而本申请实施例的方案基于SMC协议,通过所述SMC协议栈创建虚拟设备进行使用,以及使用高效的共享内存实现本地通信的同时,兼容了套接字接口,使TCP的应用程序无需改造,即可透明的运行于SMC协议,相对于sockmap方案的使用门槛更低,无需增加额外的开发成本。
需要说明的是,基于本申请实施例提供应用间通信方法,可以实现的几种具体场景如下:
在一种实现方式中,参照图2,其示出了本申请实施例提供的一种电商应用和物流应用之间的通信场景示意图,包括:用户设备和电商服务端,用户设备中安装有电商应用和物流应用,其中,用户在电商应用中进行下单操作后,电商应用会与电商服务端产生交互,电商服务端会生成订单信息下发给电商应用,进而电商应用可以采用本申请实施例上述的应用间通信方法,将订单信息同步至物流应用,物流应用可以依据订单信息生成物流信息,从而通过应用间的本地通信,实现了应用之间的高效协作,提升了服务质量。
在另一种实现方式中,参照图3,其示出了本申请实施例提供的一种本地不同容器中的进程之间的通信场景示意图,包括:用户设备,用户设备的不同网络命名空间中分别运行有不同的容器,容器中又运行有对应的进程,在针对容器1中的进程1向容器2的进程2发送数据的过程中,进程1可以采用本申请实施例上述的应用间通信方法,将数据发送至进程2,从而通过应用间的本地通信,实现了不同进程之间的高效协作,提升了服务质量。具体的,容器是一种对进程进行打包、分享和部署的现代化方式,其本质是一组受到资源限制,彼此间相互隔离的进程,容器是操作系统级的,在运行时可以为每个容器模拟一个操作系统,容器会共享主机操作系统的内核以及物理硬件资源。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
参照图4,其示出了本申请实施例提供的一种应用间通信方法的步骤流程图,应用于安装有第一应用和第二应用的用户设备,包括:
步骤101,在SMC协议栈加载的过程中,通过所述SMC协议栈创建虚拟设备,并在所述SMC协议栈中注册所述虚拟设备。
在本申请实施例中,本地通信执行开始之前,用户设备需要在内核态空间加载SMC协议栈,加载SMC协议栈之后,用户设备才可以实现基于SMC的套接字通信机制,SMC协议是一种兼容套接字接口的内核网络协议,可以在Linux内核中运行。SMC协议能够帮助TCP网络应用程序透明的使用高效率的共享内存传输方式,从而获得高带宽、低时延的网络通信服务,本申请实施例可以在获取到内核模块文件(smc.ko文件)后,通过调用协议栈加载指令,实现SMC协议栈的加载。
进一步的,用户设备可以通过所述SMC协议栈创建虚拟设备,虚拟设备具体是一种抽象的逻辑设备,而并非具体的硬件,在SMC协议栈中注册虚拟设备,可以使得虚拟设备成为一个供SMC协议栈使用的设备,本申请实施例通过虚拟设备,提供SMC通信方案所需的设备接口与设备能力,如数据搬运、共享内存管理等能力。
步骤102,响应于所述第一应用的第一套接字接口与所述第二应用的第二套接字接口之间SMC连接的建立请求,在对所述SMC协议栈中的虚拟设备验证后,创建基于所述虚拟设备的SMC连接。
在创建和注册虚拟设备之后,需要通过握手流程,实现第一应用的第一套接字接口与第二应用的第二套接字接口之间SMC连接的建立,握手流程的目的是确定第一套接字接口与第二套接字接口是否具有基于创建的虚拟设备实现SMC通信的能力,若是则确定握手成功,从而第一套接字接口与第二套接字接口之间通过握手建立了SMC连接,进而等待后续的数据传输流程。
步骤103,基于所述SMC连接,通过调用所述虚拟设备,进行所述第一套接字接口与所述第二套接字接口之间数据的交互。
在本申请实施例中,响应于第一套接字接口向第二套接字接口发送目标数据的请求,可以通过第一套接字接口和SMC连接,进行第一套接字接口与第二套接字接口之间数据的交互,具体的,可以通过调用虚拟设备,将目标数据从第一套接字接口的发送缓冲区转移至第二套接字接口的接收缓冲区,虚拟设备执行了数据转移功能。
综上所述,本申请实施例在加载SMC协议栈和注册虚拟设备后,对SMC协议栈中的虚拟设备进行验证,并在验证后,创建基于虚拟设备的SMC连接,最后基于SMC连接,通过调用虚拟设备进行第一套接字接口与第二套接字接口之间数据的交互,本申请实施例通过软件模拟的方式构建虚拟设备,提供SMC通信方案所需的设备接口与设备能力,从而通过虚拟设备来替代相关技术所需的固定架构的硬件加速设备,由于虚拟设备的构建和应用不受限于固定架构,因此扩大了通信方案的适用范围。
参照图5,其示出了本申请实施例提供的一种应用间通信方法的具体步骤流程图,应用于安装有第一应用和第二应用的用户设备,包括:
步骤201,在所述SMC协议栈加载的过程中,通过所述SMC协议栈创建虚拟设备,并获取所述虚拟设备的设备信息。
在本申请实施例中,可以在获取到SMC协议数据后,通过调用协议栈加载指令,实现SMC协议栈的加载,进一步的,用户设备可以在所述SMC协议栈加载的过程中,通过所述SMC协议栈创建虚拟设备,创建过程具体是创建一个虚拟设备的结构体,并为虚拟设备分配硬件资源(如内存等)进行使用,虚拟设备具体是一种抽象的逻辑设备,而并非具体的硬件,虚拟设备创建后,虚拟设备和实体硬件设备一样具有对应的设备信息(如设备标识、设备规格等)。
步骤202,获取与所述SMC协议栈对应的设备链表。
在本申请实施例中,设备链表是记录设备信息的链表文件,而SMC协议栈对应的设备链表中则记录了SMC协议栈所使用的设备的信息,本申请实施例为了实现基于SMC的套接字通信机制,需要在SMC协议栈中注册创建的虚拟设备,从而为SMC通信方案提供所需的设备接口与设备能力,而注册过程具体是指在与SMC协议栈对应的设备链表中注册虚拟设备。
步骤203,将所述虚拟设备的设备信息添加至所述设备链表,完成所述虚拟设备的注册。
在本申请实施例中,由于通过所述SMC协议栈创建虚拟设备时产生了虚拟设备的设备信息,因此将虚拟设备的设备信息添加至设备链表后,即完成对虚拟设备的注册,后续基于SMC的套接字通信方案可以调用虚拟设备进行使用,从而实现本地应用间通信。
步骤204,响应于所述建立请求,建立所述第一套接字接口与所述第二套接字接口之间的TCP连接。
在创建和注册虚拟设备之后,需要通过基于连接层控制(CLC)信息的握手流程,实现第一应用的第一套接字接口与第二应用的第二套接字接口之间SMC连接的建立,在握手流程开始时,第一套接字接口与第二套接字接口之间并未建立通信连接,因此需要先建立第一套接字接口与第二套接字接口之间的TCP连接,以供第一套接字接口与第二套接字接口之间交换握手流程所需的CLC信息。
参照图1,由于用户设备中内置有TCP/IP协议栈,因此基于TCP/IP协议栈,即可建立第一套接字接口与第二套接字接口之间的TCP连接,TCP连接的建立过程分为三次握手:
第一次握手:第一套接字接口向第二套接字接口发送syn包(syn=j),进入SYN_SEND状态,等待第二套接字接口确认;
第二次握手:当第二套接字接口收到syn包时,确认第一套接字接口的syn(ack=j+1)并发送一个syn包(syn=k),即syn+ack包。此时,第二套接字接口进入SYN_RECV状态;
第三次握手:第一套接字接口收到第二套接字接口发来的确认包ACK(ACK=k+1),第一套接字接口和第二套接字接口进入建立状态,完成三路握手,建立了二者之间的TCP连接。
步骤205、通过所述TCP连接,控制所述第一套接字接口与所述第二套接字接口相互交换连接层控制信息。
基于第一套接字接口与第二套接字接口之间建立的TCP连接,第一套接字接口与第二套接字接口之间可以实现数据交互,具体的交互的数据可以为连接层控制信息,连接层控制信息的主要职责是同步通信两端的资源以及共享内存等信息。接收端和发送端可以基于连接层控制信息的交互实现握手建立连接。
可选的,步骤205具体可以包括:
子步骤2051、调用所述第一套接字接口通过所述TCP连接向所述第二套接字接口发送第一连接层控制信息,所述第一连接层控制信息包括:与所述SMC协议栈对应的设备链表中包含的预设数量个设备的设备信息;所述预设数量个设备中包含所述虚拟设备。
子步骤2052、通过所述SMC协议栈解析所述第一连接层控制信息,并从解析获得的所述预设数量个设备中选择所述虚拟设备的设备信息添加至第二连接层控制信息,将所述第二连接层控制信息发送至所述第一套接字接口。
在本申请实施例中,针对子步骤2051-2052,建立SMC连接的握手流程,其核心内容是第一套接字接口先向第二套接字接口发送多个待选设备的设备信息,与第二套接字接口对应的SMC协议栈会接收包含预设数量个设备的设备信息的第一连接层控制信息并对其进行解析,从解析获得的多个待选设备中选取虚拟设备的设备信息并添加至第二连接层控制信息,将第二连接层控制信息发送至第一套接字接口,第一套接字接口在接收到虚拟设备的设备信息时,可以确定第一套接字接口和第二套接字接口这两端都具备使用虚拟设备实现SMC通信的能力,即第一套接字接口和第二套接字接口对SMC协议栈中的虚拟设备完成验证,从而实现握手流程中通过两端交互的连接层控制信息对虚拟设备的验证过程。
可选的,所述方法还可以包括:
子步骤2053、在所述第一套接字接口获取到包含虚拟设备的设备信息的第二连接层控制信息的情况下,确定对所述SMC协议栈中的虚拟设备验证完成。
子步骤2054、在所述第一套接字接口获取到的第二连接层控制信息未包含虚拟设备的设备信息的情况下,确定对所述SMC协议栈中的虚拟设备验证不通过。
在本申请实施例中,针对子步骤2053-2054,第一套接字接口和第二套接字接口对SMC协议栈中的虚拟设备的验证,具体是指由第一套接字接口判断获取到的第二连接层控制信息中是否包含虚拟设备的设备信息,若包含,则说明握手过程中,第一套接字接口提供了虚拟设备的设备信息,且第二套接字接口也提供了虚拟设备的设备信息,第一套接字接口和第二套接字接口这两端都具备使用虚拟设备实现SMC通信的能力;若不包含,则说明握手过程中,第一套接字接口和/或第二套接字接口不具备使用虚拟设备实现SMC通信的能力。
步骤206、根据所述连接层控制信息,对所述SMC协议栈中的虚拟设备验证后,建立基于所述虚拟设备的SMC连接。
在本申请实施例中,连接层控制信息的主要职责是同步通信两端的资源以及共享内存等信息,其中通信两端的资源信息的同步即指:第一套接字接口和第二套接字接口对SMC协议栈中的虚拟设备的验证,验证虚拟设备之后,接收端和发送端可以基于连接层控制信息的交互实现握手建立SMC连接。
综上,对于整个握手流程,现通过一个具体示例进行握手流程实现过程的描述:
1、第一套接字接口基于数据发送的目的地址(第一或第二应用提供)向第二套接字接口发起建连请求,请求中可以携带8个设备的设备信息,由于在SMC协议栈中注册了虚拟设备,则这8个设备的设备信息中包含虚拟设备的设备信息;
2、与第二套接字接口对应的SMC协议栈,可以从建连请求携带的8个设备的设备信息中选取虚拟设备的设备信息,并创建第二套接字接口的第二共享内存片区,记录第二共享内存片区的信息,将选取虚拟设备的设备信息和第二共享内存片区的信息添加至CLC信息后发送至第一套接字接口;
3、第一套接字接口接收到包含虚拟设备的设备信息和第二共享内存片区的信息的CLC信息后,创建第一套接字接口的第一共享内存片区,并记录第一共享内存片区的信息,将第一共享内存片区的信息添加至CLC信息后发送至第二套接字接口;
4、第二套接字接口接收到包含第一共享内存片区的信息添加至CLC信息后,确认握手完成,建立第一套接字接口与第二套接字接口之间的SMC连接。
可选的,步骤206具体可以包括:
子步骤2061、在根据所述连接层控制信息,对所述SMC协议栈中的虚拟设备验证后,建立基于所述虚拟设备的SMC连接,以及预设的共享存储片区,所述共享存储片区用于供所述第一套接字接口与所述第二套接字接口在数据交互时共同使用。
在本申请实施例中,参照图1,在握手流程中,创建了供第一套接字接口与第二套接字接口共同使用的共享存储片区,共享存储的具体含义,体现在共享存储片区作为第二套接字接口的接收缓冲区的基础上,还将第一套接字接口的发送缓冲区映射至接收缓冲区,使得在根据连接层控制信息,对SMC协议栈中的虚拟设备验证后,建立基于虚拟设备的SMC连接进行第一套接字接口与第二套接字接口之间的数据交互时,第一套接字接口的发送缓冲区和第二套接字接口的接收缓冲区可以共同使用同一块内存,减少了不必要的内存浪费与数据拷贝开销,大大减少了本地通信的时延。
步骤207、响应于所述第一套接字接口向所述第二套接字接口发送目标数据的请求,通过所述第一套接字接口和所述SMC连接,调用所述虚拟设备,将所述目标数据存储至预设的共享存储片区。
其中,所述共享存储片区用于供所述第一套接字接口和与所述第二应用对应的第二套接字接口共同使用。
在本申请实施例中,在数据传输开始时,可以响应于第一套接字接口向第二套接字接口发送目标数据的请求,先将目标数据存储在第一套接字接口的发送缓冲区,由于第一套接字接口的发送缓冲区被映射到了第二套接字接口的接收缓冲区(共享存储片区),因此,具体的数据处理是指通过第一套接字接口和SMC连接,调用虚拟设备,将目标数据存储从发送缓冲区转移到接收缓冲区,完成接收缓冲区的数据存储。
需要说明的是,由于第一套接字接口和第二套接字接口共同使用同一共享内存片区,因此,虚拟设备在将目标数据从第一套接字接口的发送缓冲区转移至第二套接字接口的接收缓冲区的过程中,虚拟设备并不需要执行具体的数据转移操作,从而本申请实施例的通信方案在兼容套接字接口的同时,使用内核中的共享存储片区加速了本地通信的效率。
可选的,所述共享存储片区包括:与所述第一套接字接口对应的第一共享存储片区,以及与所述第二套接字接口对应的第二共享存储片区;第一共享存储片区用于:在所述第二套接字接口向所述第一套接字接口发送数据的过程中进行存储空间的共享;第二共享存储片区用于:在所述第一套接字接口向所述第二套接字接口发送数据的过程中进行存储空间的共享。
在本申请实施例中,具体针对一个套接字接口,会在握手过程中建立对应的共享存储片区,这就使得共享存储片区包括:与第一套接字接口对应的第一共享存储片区,以及与第二套接字接口对应的第二共享存储片区,参照图1,其示出了第二套接字接口对应的共享存储片区(第二存储片区),而省略了第一套接字接口对应的第一共享存储片区,第一共享存储片区与图1示出的共享存储片区(第二存储片区)的作用一致,本申请实施例不再赘述。
步骤208、将第一数据控制消息存储至所述共享存储片区中的预设目标片区;所述第一数据控制消息用于定位所述共享存储片区中所述目标数据的写入位置。
在本申请实施例中,第一套接字接口将目标数据存储至预设的共享存储片区之后,为了告知第二套接字接口目标数据在共享存储片区则的写入位置,则第一套接字接口可以进一步将第一数据控制消息存储至共享存储片区中的预设目标片区;第一数据控制消息用于定位共享存储片区中所述目标数据的写入位置,目标片区是共享存储片区中划分的固定片区,目标片区专门用于存储数据控制消息,数据控制消息可以是一种数据游标,起到数据定位作用。
例如,假设第一套接字接口将目标数据存储至环形存储类型的共享存储片区中10%至35%这一区间,则第一数据控制消息具体可以定义环形存储类型的共享存储片区中10%至35%这一区间。
步骤209、响应于所述第二套接字接口对所述目标片区中所述第一数据控制消息的成功识别,根据所述第一数据控制消息和所述SMC连接,使得所述第二套接字接口提取所述共享存储片区中的目标数据供所述第二应用使用。
在本申请实施例中,在第二应用处于唤醒状态的情况下,第二应用的第二套接字接口可以对目标片区进行实时检测,则第一套接字接口将第一数据控制消息存储至目标片区时,第二套接字接口即可检测到该过程的发生,从而实现对目标片区中第一数据控制消息的成功识别,之后第二套接字接口可以根据第一数据控制消息定义的目标数据的写入位置,提取共享存储片区中的目标数据供第二应用使用,完成本地应用间通信。
可选的,在步骤209之后,所述方法还可以包括:
步骤210、在确定所述共享存储片区的剩余存储量小于或等于预设存储量阈值的情况下,将第二数据控制消息存储至所述目标片区;所述第二数据控制消息用于定位所述第二套接字接口对所述共享存储片区中所述目标数据的读取位置。
在本申请实施例中,基于共享存储片区的内存优化管理,在第二套接字接口读取共享存储片区中的目标数据后,第二套接字接口可以依据对共享存储片区的剩余存储量的判断,选择是否通过将第二数据控制消息存储至目标片区来实现内存管理的优化。
具体的,第二数据控制消息用于定位第二套接字接口对共享存储片区中所述目标数据的读取位置,在共享存储片区的剩余存储量小于或等于预设存储量阈值的情况下,可以确定共享存储片区的剩余存储量较少,存在内存不足的风险,为了保证第一套接字接口能够持续在共享存储片区中写入新数据,需要进行共享存储片区的内存优化管理,则第二套接字接口可以将第二数据控制消息存储至目标片区,以告知第一套接字接口当前共享存储片区中已读取的目标数据所处位置,则第二数据控制消息定义的共享存储片区中已读取的目标数据所处位置后续可以被第一套接字接口写入的新数据所覆盖,这样就能保证共享存储片区的存储空间高效利用。
需要说明的是,第一套接字接口具有自己对应的第一共享存储片区,第二套接字接口具有自己对应的第二共享存储片区,在第一套接字接口向第二套接字接口的第二共享存储片区里写入目标数据后,则第一套接字接口的第一数据控制消息(生产者游标),可以写入第二共享存储片区中的目标片区。
第二套接字接口读取完目标数据后,若要生成第二数据控制消息(消费者游标),则可以将第二数据控制消息写入第一套接字接口的第一共享存储片区中的目标片区。第一套接字接口可以从第一共享存储片区的目标片区里得到第二套接字接口的第二数据控制消息。
例如,假设第一套接字接口将目标数据存储至环形存储类型的共享存储片区中10%至35%这一区间,而第二套接字接口的一次读取操作读取了10%至25%这一区间的目标数据,则第二套接字接口写入目标片区的第二数据控制消息可以定义10%至25%这一区间,这一区间的旧数据可以认为已被使用可以释放,则后续第一套接字接口写入的新数据可以覆盖共享存储片区中10%至25%这一区间的旧数据,达到存储空间高效利用的目的。
另外,在共享存储片区的剩余存储量大于预设存储量阈值的情况下,可以确定共享存储片区的剩余存储量较多,此时第二套接字接口可以选择不将第二数据控制消息存储至目标片区,即共享存储片区的剩余存储量较多,以足够写入第一套接字接口后续产生的新数据。
可选的,在步骤209之前,所述方法还可以包括:
步骤211、获使用所述第二套接字接口的休眠进程链表,所述休眠进程链表中存储有当前系统中使用所述第二套接字接口且处于休眠状态的进程的信息。
步骤212、在确定所述休眠进程链表中具有所述第二应用的情况下,响应于唤醒指令,唤醒所述第二应用。
在本申请实施例中,针对子步骤211-212,用户设备的系统为了实现节能,可以针对进程/应用设置一个休眠进程链表,休眠进程链表中记录的进程/应用使用第二套接字接口,且当前处于休眠状态以实现节能,而在第二应用处于休眠进程链表中时,第二应用由于处于休眠状态,难以进行对目标片区中第一数据控制消息的识别,因此,在确定休眠进程链表中具有第二应用的情况下,可以响应于唤醒指令,唤醒第二应用,以使得第二应用具有对目标片区中第一数据控制消息的识别能力。
可选的,所述方法还可以包括:
步骤213、在对所述SMC协议栈中的虚拟设备验证不通过的情况下,基于所述第一套接字接口与所述第二套接字接口之间创建的TCP连接,进行所述第一套接字接口与所述第二套接字接口之间数据的交互。
在本申请实施例中,一种情况下,若第一应用和第二应用处于同一用户设备的同一系统中,且对SMC协议栈中的虚拟设备验证不通过,则说明第一套接字接口和/或第二套接字接口不具备使用虚拟识别实现基于SMC协议的本地通信的能力,则这种情况下,可以基于第一套接字接口与第二套接字接口之间创建的TCP连接,进行第一套接字接口与第二套接字接口之间数据的交互,以保证本地通信的正常进行。
另一种情况下,若第一应用和第二应用不处于同一用户设备,或不处于同一系统中,则会对SMC协议栈中的虚拟设备验证不通过,后续可以基于第一套接字接口与第二套接字接口之间创建的TCP连接,进行第一套接字接口与第二套接字接口之间数据的交互,实现跨机数据传输。
可选的,所述第一套接字接口的协议族类型为AF_SMC,所述第二套接字接口的协议族类型为AF_SMC。
在本申请实施例中,在TCP应用的套接字接口的协议族类型为AF_INET的情况下,则应用启动时,可以将套接字接口的协议族类型由AF_INET修改为AF_SMC,以使得套接字接口的协议族类型由与TCP协议族匹配的AF_INET类型,变更为与SMC协议栈匹配的AF_SMC类型,从而使得SMC协议栈兼容了本地的TCP套接字,具体将TCP套接字接口的AF_INET协议族替换为AF_SMC协议族,可以通过调用LD_PRELOAD指令的方式实现,从而使TCP应用程序无需改造,即可透明的运行于SMC协议栈,无需增加额外的开发成本。
综上,参照图6,以一次发送端socket向接收端socket发送数据的过程进行说明,首先执行1.1、SMC内核模块加载;之后执行1.2、虚拟设备初始化,即通过所述SMC协议栈创建虚拟设备,以及在SMC协议栈中注册虚拟设备;之后执行2.1建立TCP连接;以及2.2基于TCP连接,交互CLC握手信息;之后执行2.3通过验证CLC信息,确定本地通信是否可行,若通过虚拟设备对发送端和接收端的虚拟设备能力验证通过,则执行2.5、通信两端创建各自的接收缓冲区(RMB);若通过虚拟设备对发送端和接收端的虚拟设备能力验证不通过,则执行2.4、回退到TCP协议栈,由TCP连接实现发送端与接收端的数据交互。
进一步的,在执行了2.5之后,执行2.6、通信两侧将发送缓冲区(sndbuf)映射到对侧的RMB,实现发送端socket与接收端socket对RMB(共享存储片区)的共同使用,之后执行3.1、发送端socket将用户态数据拷贝到sndbuf;之后执行3.2、虚拟设备将数据从发送端sndbuf搬运到接收端RMB,由于发送端socket和接收端socket共同使用同一RMB,因此,虚拟设备在将数据从sndbuf转移至RMB的过程中,虚拟设备并不需要执行具体的数据转移操作;执行了3.2之后,执行3.3、SMC协议栈向接收端RMB填入控制数据(生产者游标),通知数据产生;之后执行3.4、唤醒接收端读取控制数据,之后执行4.1、接收端将RMB中的数据拷贝到用户态,实现发送端socket向接收端socket发送数据的过程。可选地,在4.1之后,还可以执行4.2、SMC协议栈向发送端RMB填入控制数据(消费者游标),通知数据消费。
综上所述,本申请实施例可以在SMC协议栈加载的过程中,通过所述SMC协议栈创建虚拟设备,并在SMC协议栈中注册虚拟设备,从而通过所述SMC协议栈创建虚拟设备,来替代相关技术为实现基于SMC的套接字通信时所需的固定架构的硬件加速设备,之后用户设备可以响应于第一应用的第一套接字接口与第二应用的第二套接字接口之间SMC连接的建立请求,在对SMC协议栈中的虚拟设备验证后,创建基于虚拟设备的SMC连接以及供第一套接字接口与第二套接字接口共同使用的共享存储片区,最后基于SMC连接,通过调用虚拟设备,基于同一共享存储片区进行第一套接字接口与第二套接字接口之间数据的交互,本申请实施例通过软件模拟的方式构建虚拟设备,来替代相关技术所需的固定架构的硬件加速设备,由于虚拟设备的构建和应用不受限于固定架构,因此扩大了通信方案的适用范围,另外,本申请实施例的通信方案在兼容套接字接口的同时,使用内核中的共享存储片区加速本地通信,从而通过共享存储片区省去了传输过程中数据从发送端的存储空间拷贝至传输端的存储空间的成本,提高了数据传输效率,大大减少了本地通信的时延。
参照图7,其示出了本申请实施例提供的一种应用间通信装置的框图,应用于安装有第一应用和第二应用的用户设备,包括:
创建模块301,用于在SMC协议栈加载的过程中,通过所述SMC协议栈创建虚拟设备,并在所述SMC协议栈中注册所述虚拟设备;
验证模块302,用于响应于所述第一应用的第一套接字接口与所述第二应用的第二套接字接口之间SMC连接的建立请求,在对所述SMC协议栈中的虚拟设备验证后,创建基于所述虚拟设备的SMC连接;
交互模块303,用于基于所述SMC连接,通过调用所述虚拟设备,进行所述第一套接字接口与所述第二套接字接口之间数据的交互。
可选的,所述创建模块301,包括:
创建子模块,用于在所述SMC协议栈加载的过程中,通过所述SMC协议栈创建虚拟设备,并获取所述虚拟设备的设备信息;
设备链表子模块,用于获取与所述SMC协议栈对应的设备链表;
注册子模块,用于将所述虚拟设备的设备信息添加至所述设备链表,完成所述虚拟设备的注册。
可选的,所述验证模块302,包括:
TCP子模块,用于响应于所述建立请求,建立所述第一套接字接口与所述第二套接字接口之间的TCP连接;
传输子模块,用于通过所述TCP连接,控制所述第一套接字接口与所述第二套接字接口相互交换连接层控制信息;
验证子模块,用于根据所述连接层控制信息,对所述SMC协议栈中的虚拟设备验证后,建立基于所述虚拟设备的SMC连接。
可选的,所述传输子模块,包括:
第一调用单元,用于调用所述第一套接字接口通过所述TCP连接向所述第二套接字接口发送第一连接层控制信息,所述第一连接层控制信息包括:与所述SMC协议栈对应的设备链表中包含的预设数量个设备的设备信息;所述预设数量个设备中包含所述虚拟设备;
第二调用单元,用于通过所述SMC协议栈解析所述第一连接层控制信息,并从解析获得的所述预设数量个设备中选择所述虚拟设备的设备信息添加至第二连接层控制信息,将所述第二连接层控制信息发送至所述第一套接字接口。
可选的,所述传输子模块还包括:
第一判断单元,用于在所述第一套接字接口获取到包含虚拟设备的设备信息的第二连接层控制信息的情况下,确定对所述SMC协议栈中的虚拟设备验证完成;
第二判断单元,用于在所述第一套接字接口获取到的第二连接层控制信息未包含虚拟设备的设备信息的情况下,确定对所述SMC协议栈中的虚拟设备验证不通过。
可选的,所述验证子模块,包括:
验证单元,用于在根据所述连接层控制信息,对所述SMC协议栈中的虚拟设备验证后,建立基于所述虚拟设备的SMC连接,以及预设的共享存储片区,所述共享存储片区用于供所述第一套接字接口与所述第二套接字接口在数据交互时共同使用。
可选的,所述交互模块303,包括:
第一响应子模块,用于响应于所述第一套接字接口向所述第二套接字接口发送目标数据的请求,通过所述第一套接字接口和所述SMC连接,调用所述虚拟设备,将所述目标数据存储至预设的共享存储片区;所述共享存储片区用于供所述第一套接字接口和与所述第二应用对应的第二套接字接口共同使用;
数据控制消息模块,用于将第一数据控制消息存储至所述共享存储片区中的预设目标片区;所述第一数据控制消息用于定位所述共享存储片区中所述目标数据的写入位置;
第二响应子模块,用于响应于所述第二套接字接口对所述目标片区中所述第一数据控制消息的成功识别,根据所述第一数据控制消息和所述SMC连接,使得所述第二套接字接口提取所述共享存储片区中的目标数据供所述第二应用使用。
可选的,所述装置还包括:
读取通知模块,用于在确定所述共享存储片区的剩余存储量小于或等于预设存储量阈值的情况下,将第二数据控制消息存储至所述目标片区;所述第二数据控制消息用于定位所述第二套接字接口对所述共享存储片区中所述目标数据的读取位置。
可选的,所述共享存储片区包括:与所述第一套接字接口对应的第一共享存储片区,以及与所述第二套接字接口对应的第二共享存储片区;
第一共享存储片区用于:在所述第二套接字接口向所述第一套接字接口发送数据的过程中进行存储空间的共享;
第二共享存储片区用于:在所述第一套接字接口向所述第二套接字接口发送数据的过程中进行存储空间的共享。
可选的,所述装置还包括:
休眠进程链表模块,用于获取使用所述第二套接字接口的休眠进程链表,所述休眠进程链表中存储有当前系统中使用所述第二套接字接口且处于休眠状态的进程的信息;
唤醒模块,用于在确定所述休眠进程链表中具有所述第二应用的情况下,响应于唤醒指令,唤醒所述第二应用。
可选的,所述装置还包括:
TCP通信模块,用于在对所述SMC协议栈中的虚拟设备验证不通过的情况下,基于所述第一套接字接口与所述第二套接字接口之间创建的TCP连接,进行所述第一套接字接口与所述第二套接字接口之间数据的交互。
可选的,所述第一套接字接口的协议族类型为AF_SMC;
所述第二套接字接口的协议族类型为AF_SMC。
综上所述,本申请实施例可以在SMC协议栈加载的过程中,通过所述SMC协议栈创建虚拟设备,并在SMC协议栈中注册虚拟设备,从而通过通过所述SMC协议栈创建虚拟设备,来替代相关技术为实现基于SMC的套接字通信时所需的固定架构的硬件加速设备,之后用户设备可以响应于第一应用的第一套接字接口与第二应用的第二套接字接口之间SMC连接的建立请求,在对SMC协议栈中的虚拟设备验证后,创建基于虚拟设备的SMC连接以及供第一套接字接口与第二套接字接口共同使用的共享存储片区,最后基于SMC连接,通过调用虚拟设备,基于同一共享存储片区进行第一套接字接口与第二套接字接口之间数据的交互,本申请实施例通过软件模拟的方式构建虚拟设备,来替代相关技术所需的固定架构的硬件加速设备,由于虚拟设备的构建和应用不受限于固定架构,因此扩大了通信方案的适用范围,另外,本申请实施例的通信方案在兼容套接字接口的同时,使用内核中的共享存储片区加速本地通信,从而通过共享存储片区省去了传输过程中数据从发送端的存储空间拷贝至传输端的存储空间的成本,提高了数据传输效率,大大减少了本地通信的时延。
本申请实施例还提供了一种非易失性可读存储介质,该存储介质中存储有一个或多个模块(programs),该一个或多个模块被应用在设备时,可以使得该设备执行本申请实施例中各方法步骤的指令(instructions)。
本申请实施例提供了一个或多个机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得电子设备执行如上述实施例中一个或多个所述的方法。本申请实施例中,所述电子设备包括终端设备、服务端(集群)等各类型的设备。
本公开的实施例可被实现为使用任意适当的硬件,固件,软件,或及其任意组合进行想要的配置的装置,该装置可包括终端设备、服务端(集群)等电子设备。图8示意性地示出了可被用于实现本申请实施例中所述的各个实施例的示例性装置1000。
对于一个实施例,图8示出了示例性装置1000,该装置具有一个或多个处理器1002、被耦合到(一个或多个)处理器1002中的至少一个的控制模块(芯片组)1004、被耦合到控制模块1004的存储器1006、被耦合到控制模块1004的非易失性存储器(NVM)/存储设备1008、被耦合到控制模块1004的一个或多个输入/输出设备1010,以及被耦合到控制模块1004的网络接口1012。
处理器1002可包括一个或多个单核或多核处理器,处理器1002可包括通用处理器或专用处理器(例如图形处理器、应用处理器、基频处理器等)的任意组合。在一些实施例中,装置1000能够作为本申请实施例中所述终端设备、服务端(集群)等设备。
在一些实施例中,装置1000可包括具有指令1014的一个或多个计算机可读介质(例如,存储器1006或NVM/存储设备1008)以及与该一个或多个计算机可读介质相合并被配置为执行指令1014以实现模块从而执行本公开中所述的动作的一个或多个处理器1002。
对于一个实施例,控制模块1004可包括任意适当的接口控制器,以向(一个或多个)处理器1002中的至少一个和/或与控制模块1004通信的任意适当的设备或组件提供任意适当的接口。
控制模块1004可包括存储器控制器模块,以向存储器1006提供接口。存储器控制器模块可以是硬件模块、软件模块和/或固件模块。
存储器1006可被用于例如为装置1000加载和存储数据和/或指令1014。对于一个实施例,存储器1006可包括任意适当的易失性存储器,例如,适当的DRAM。在一些实施例中,存储器1006可包括双倍数据速率类型四同步动态随机存取存储器(DDR4SDRAM)。
对于一个实施例,控制模块1004可包括一个或多个输入/输出控制器,以向NVM/存储设备1008及(一个或多个)输入/输出设备1010提供接口。
例如,NVM/存储设备1008可被用于存储数据和/或指令1014。NVM/存储设备1008可包括任意适当的非易失性存储器(例如,闪存)和/或可包括任意适当的(一个或多个)非易失性存储设备(例如,一个或多个硬盘驱动器(HDD)、一个或多个光盘(CD)驱动器和/或一个或多个数字通用光盘(DVD)驱动器)。
NVM/存储设备1008可包括在物理上作为装置1000被安装在其上的设备的一部分的存储资源,或者其可被该设备访问可不必作为该设备的一部分。例如,NVM/存储设备1008可通过网络经由(一个或多个)输入/输出设备1010进行访问。
(一个或多个)输入/输出设备1010可为装置1000提供接口以与任意其他适当的设备通信,输入/输出设备1010可以包括通信组件、音频组件、传感器组件等。网络接口1012可为装置1000提供接口以通过一个或多个网络通信,装置1000可根据一个或多个无线网络标准和/或协议中的任意标准和/或协议来与无线网络的一个或多个组件进行无线通信,例如接入基于通信标准的无线网络,如WiFi、2G、3G、4G、5G等,或它们的组合进行无线通信。
对于一个实施例,(一个或多个)处理器1002中的至少一个可与控制模块1004的一个或多个控制器(例如,存储器控制器模块)的逻辑封装在一起。对于一个实施例,(一个或多个)处理器1002中的至少一个可与控制模块1004的一个或多个控制器的逻辑封装在一起以形成系统级封装(SIP)。对于一个实施例,(一个或多个)处理器1002中的至少一个可与控制模块1004的一个或多个控制器的逻辑集成在同一模具上。对于一个实施例,(一个或多个)处理器1002中的至少一个可与控制模块1004的一个或多个控制器的逻辑集成在同一模具上以形成片上系统(SoC)。
在各个实施例中,装置1000可以但不限于是:服务端、台式计算设备或移动计算设备(例如,膝上型计算设备、手持计算设备、平板电脑、上网本等)等终端设备。在各个实施例中,装置1000可具有更多或更少的组件和/或不同的架构。例如,在一些实施例中,装置1000包括一个或多个摄像机、键盘、液晶显示器(LCD)屏幕(包括触屏显示器)、非易失性存储器端口、多个天线、图形芯片、专用集成电路(ASIC)和扬声器。
其中,检测装置中可采用主控芯片作为处理器或控制模块,传感器数据、位置信息等存储到存储器或NVM/存储设备中,传感器组可作为输入/输出设备,通信接口可包括网络接口。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图的一个流程或多个流程和/或方框图的一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图的一个流程或多个流程和/或方框图的一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图的一个流程或多个流程和/或方框图的一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本申请所提供的一种应用间通信方法及装置、电子设备、机器可读介质,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同的情况下,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (14)

1.一种应用间通信方法,其特征在于,应用于安装有第一应用和第二应用的用户设备,包括:
在SMC协议栈加载的过程中,通过所述SMC协议栈创建虚拟设备,并在所述SMC协议栈中注册所述虚拟设备;
响应于所述第一应用的第一套接字接口与所述第二应用的第二套接字接口之间SMC连接的建立请求,在对所述SMC协议栈中的虚拟设备验证后,创建基于所述虚拟设备的SMC连接;
基于所述SMC连接,通过调用所述虚拟设备,进行所述第一套接字接口与所述第二套接字接口之间数据的交互。
2.根据权利要求1所述的方法,其特征在于,所述在SMC协议栈加载的过程中,通过所述SMC协议栈创建虚拟设备,并在所述SMC协议栈中注册所述虚拟设备,包括:
在所述SMC协议栈加载的过程中,通过所述SMC协议栈创建虚拟设备,并获取所述虚拟设备的设备信息;
获取与所述SMC协议栈对应的设备链表;
将所述虚拟设备的设备信息添加至所述设备链表,完成所述虚拟设备的注册。
3.根据权利要求1所述的方法,其特征在于,所述响应于所述第一应用的第一套接字接口与所述第二应用的第二套接字接口之间SMC连接的建立请求,在对所述SMC协议栈中的虚拟设备验证后,创建基于所述虚拟设备的SMC连接,包括:
响应于所述建立请求,建立所述第一套接字接口与所述第二套接字接口之间的TCP连接;
通过所述TCP连接,控制所述第一套接字接口与所述第二套接字接口相互交换连接层控制信息;
根据所述连接层控制信息,对所述SMC协议栈中的虚拟设备验证后,建立基于所述虚拟设备的SMC连接。
4.根据权利要求3所述的方法,其特征在于,所述通过所述TCP连接,控制所述第一套接字接口与所述第二套接字接口相互交换连接层控制信息,包括:
调用所述第一套接字接口通过所述TCP连接向所述第二套接字接口发送第一连接层控制信息,所述第一连接层控制信息包括:与所述SMC协议栈对应的设备链表中包含的预设数量个设备的设备信息;所述预设数量个设备中包含所述虚拟设备;
通过所述SMC协议栈解析所述第一连接层控制信息,并从解析获得的所述预设数量个设备中选择所述虚拟设备的设备信息添加至第二连接层控制信息,将所述第二连接层控制信息发送至所述第一套接字接口。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在所述第一套接字接口获取到包含虚拟设备的设备信息的第二连接层控制信息的情况下,确定对所述SMC协议栈中的虚拟设备验证完成;
在所述第一套接字接口获取到的第二连接层控制信息未包含虚拟设备的设备信息的情况下,确定对所述SMC协议栈中的虚拟设备验证不通过。
6.根据权利要求3所述的方法,其特征在于,所述根据所述连接层控制信息,对所述SMC协议栈中的虚拟设备验证后,建立基于所述虚拟设备的SMC连接,包括:
在根据所述连接层控制信息,对所述SMC协议栈中的虚拟设备验证后,建立基于所述虚拟设备的SMC连接,以及预设的共享存储片区,所述共享存储片区用于供所述第一套接字接口与所述第二套接字接口在数据交互时共同使用。
7.根据权利要求1所述的方法,其特征在于,所述基于所述SMC连接,通过调用所述虚拟设备,进行所述第一套接字接口与所述第二套接字接口之间数据的交互,包括:
响应于所述第一套接字接口向所述第二套接字接口发送目标数据的请求,通过所述第一套接字接口和所述SMC连接,调用所述虚拟设备,将所述目标数据存储至预设的共享存储片区;所述共享存储片区用于供所述第一套接字接口和与所述第二应用对应的第二套接字接口共同使用;
将第一数据控制消息存储至所述共享存储片区中的预设目标片区;所述第一数据控制消息用于定位所述共享存储片区中所述目标数据的写入位置;
响应于所述第二套接字接口对所述目标片区中所述第一数据控制消息的成功识别,根据所述第一数据控制消息和所述SMC连接,使得所述第二套接字接口提取所述共享存储片区中的目标数据供所述第二应用使用。
8.根据权利要求7所述的方法,其特征在于,在所述通过调用所述虚拟设备,使得所述第二套接字接口提取所述共享存储片区中的目标数据供所述第二应用使用之后,所述方法还包括:
在确定所述共享存储片区的剩余存储量小于或等于预设存储量阈值的情况下,将第二数据控制消息存储至所述目标片区;所述第二数据控制消息用于定位所述第二套接字接口对所述共享存储片区中所述目标数据的读取位置。
9.根据权利要求6或7所述的方法,其特征在于,所述共享存储片区包括:与所述第一套接字接口对应的第一共享存储片区,以及与所述第二套接字接口对应的第二共享存储片区;
第一共享存储片区用于:在所述第二套接字接口向所述第一套接字接口发送数据的过程中进行存储空间的共享;
第二共享存储片区用于:在所述第一套接字接口向所述第二套接字接口发送数据的过程中进行存储空间的共享。
10.根据权利要求7所述的方法,其特征在于,在所述响应于所述第二套接字接口对所述目标片区中所述第一数据控制消息的成功识别之前,所述方法还包括:
获取使用所述第二套接字接口的休眠进程链表,所述休眠进程链表中存储有当前系统中使用所述第二套接字接口且处于休眠状态的进程的信息;
在确定所述休眠进程链表中具有所述第二应用的情况下,响应于唤醒指令,唤醒所述第二应用。
11.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在对所述SMC协议栈中的虚拟设备验证不通过的情况下,基于所述第一套接字接口与所述第二套接字接口之间创建的TCP连接,进行所述第一套接字接口与所述第二套接字接口之间数据的交互。
12.一种应用间通信装置,其特征在于,应用于安装有第一应用和第二应用的用户设备,包括:
创建模块,用于在SMC协议栈加载的过程中,通过所述SMC协议栈创建虚拟设备,并在所述SMC协议栈中注册所述虚拟设备;
验证模块,用于响应于所述第一应用的第一套接字接口与所述第二应用的第二套接字接口之间SMC连接的建立请求,在对所述SMC协议栈中的虚拟设备验证后,创建基于所述虚拟设备的SMC连接;
交互模块,用于基于所述SMC连接,通过调用所述虚拟设备,进行所述第一套接字接口与所述第二套接字接口之间数据的交互。
13.一种电子设备,其特征在于,包括:
处理器;和
存储器,其上存储有可执行代码,当所述可执行代码被执行时,使得所述处理器执行如权利要求1至11任一所述的方法。
14.一个或多个机器可读介质,其上存储有可执行代码,当所述可执行代码被执行时,使得处理器执行如权利要求1至11任一所述的方法。
CN202310608330.8A 2023-05-24 2023-05-24 应用间通信方法、装置 Pending CN116701015A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310608330.8A CN116701015A (zh) 2023-05-24 2023-05-24 应用间通信方法、装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310608330.8A CN116701015A (zh) 2023-05-24 2023-05-24 应用间通信方法、装置

Publications (1)

Publication Number Publication Date
CN116701015A true CN116701015A (zh) 2023-09-05

Family

ID=87836612

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310608330.8A Pending CN116701015A (zh) 2023-05-24 2023-05-24 应用间通信方法、装置

Country Status (1)

Country Link
CN (1) CN116701015A (zh)

Similar Documents

Publication Publication Date Title
US20190349305A1 (en) Container communication method and system for parallel applications
US8332866B2 (en) Methods, systems, and apparatus for object invocation across protection domain boundaries
WO2018035856A1 (zh) 实现硬件加速处理的方法、设备和系统
US9952992B2 (en) Transaction request optimization for redirected USB devices over a network
EP3567483B1 (en) Method for processing service data, and network device
US9936049B2 (en) Protocol independent way for dynamically selecting data compression methods for redirected USB devices
US20220391489A1 (en) Data processing method and apparatus, computer device, and storage medium
WO2024037296A1 (zh) 基于协议族的quic数据传输方法及装置
WO2024041412A1 (zh) 存储系统、方法以及硬件卸载卡
WO2022017475A1 (zh) 一种数据访问方法及相关设备
CN114327930A (zh) 用于异构多核核间通信的系统架构和系统架构的运行方法
CN111711801A (zh) 视频数据传输方法、装置、服务器和计算机可读存储介质
CN115269213A (zh) 数据接收方法、数据发送方法、装置、电子设备及介质
CN114780465B (zh) 可共享远程直接数据存取链接的创建方法及装置
CN113821309B (zh) 一种微内核虚拟机间的通信方法、装置、设备及存储介质
US10313450B2 (en) Method for transparently connecting augmented network socket operations
WO2024067529A1 (zh) 基于rdma的建连方法、装置、设备及存储介质
WO2018107433A1 (zh) 信息处理方法和装置
CN116069493A (zh) 一种数据处理方法、装置、设备以及可读存储介质
CA3155494A1 (en) System and method for constructing filter graph-based media processing pipelines in a browser
WO2020119608A1 (zh) 基于Spark Shuffle的远程直接内存访问系统及方法
CN110798366B (zh) 任务逻辑的处理方法、装置及设备
CN116701015A (zh) 应用间通信方法、装置
US10585689B1 (en) Shared memory interface for application processes
CN116489177A (zh) 一种基于块存储的io访问方法、装置、电子设备及介质

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