CN112422615B - 一种通信的方法及装置 - Google Patents

一种通信的方法及装置 Download PDF

Info

Publication number
CN112422615B
CN112422615B CN202010982741.XA CN202010982741A CN112422615B CN 112422615 B CN112422615 B CN 112422615B CN 202010982741 A CN202010982741 A CN 202010982741A CN 112422615 B CN112422615 B CN 112422615B
Authority
CN
China
Prior art keywords
application program
shared memory
data
application
memory
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
CN202010982741.XA
Other languages
English (en)
Other versions
CN112422615A (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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202010982741.XA priority Critical patent/CN112422615B/zh
Publication of CN112422615A publication Critical patent/CN112422615A/zh
Application granted granted Critical
Publication of CN112422615B publication Critical patent/CN112422615B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • 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
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/08Configuration management of networks or network elements
    • H04L41/0893Assignment of logical groups to network elements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/34Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters 
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17331Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]
    • 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
    • G06F2009/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/151Emulated environment, e.g. virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Multi Processors (AREA)

Abstract

本发明提出了一种数据传输方法以及实现该方法的装置。在当前的做法中,主机上的虚拟设备运行的应用程序之间通过远程直接内存访问进行通信时,需要进行多次虚拟化和数据转发,增加了数据传输所需要进行的步骤,从而产生了大量的网络开销和时延。针对当前做法所导致的效率低的问题,本发明中,虚拟设备上的应用程序申请共享内存,并利用该共享内存与其他的应用程序进行数据传输。通过这种做法,减少了虚拟设备上的应用程序之间进行数据传输所需要进行的步骤,降低了网络开销和时延,从而提高了***的效率。

Description

一种通信的方法及装置
技术领域
本技术涉及网络通信领域,特别涉及一种云环境下的通信的方法和装置。
背景技术
随着网络虚拟化技术的高速发展,越来越多的应用程序(Application,APP)在虚拟机上运行。为了提高网络通信的效率,主机上的应用程序之间进行通信通常采用远程直接内存访问(英文全称:Remote Direct Memory Access,缩写:RDMA)的方式进行通信。RDMA是指通过网络把资料直接转入计算机的存储器,将数据从一个***快速移动到远程***的存储器中,而不对操作***造成任何影响,从而解决了网络传输中主机端数据处理的延迟问题。当本端主机上的虚拟机运行的应用程序与远端的主机上的虚拟机运行的应用程序时,需要在本地虚拟机和远端的虚拟机上配置虚拟网段,然后桥接到物理网卡上,从而进行通信。
目前,主机上的虚拟机运行的应用程序之间通过RDMA进行通信,需要进行多次虚拟化和数据转发,增加了数据传输所需要进行的步骤,从而产生了大量的网络开销和时延,降低了***的效率。
发明内容
本申请的实施例提供一种通信的方法,以增加虚拟机上运行的应用程序之间进行的数据传输效率。
第一方面,本申请提供了一种通信方法,该方法包括:第一共享代理监控第一共享内存,其中,该第一共享内存供第一应用程序使用,第一应用程序运行在第一虚拟设备中,第一虚拟设备位于第一主机中,而该第一共享内存属于第一主机的内存的一部分且不属于第一主机为第一虚拟设备指定的内存,第一主机中设置有独立于第一虚拟设备的第一共享代理;当确定第一共享内存中写入第一应用程序的数据后,第一共享代理从第一共享内存中读取该数据,并将该数据发送到第二应用程序,其中,第二应用程序为第一应用程序指定的数据共享方。通过这种做法,减少了虚拟设备上的应用程序之间进行数据传输所需要进行的步骤,降低了网络开销和时延,从而提高了***的效率。
对于上述第一方面,一种可能的实现方式是,第一应用程序申请第一共享内存,并获得分配的第一共享内存;第一应用程序向共享管理中心注册第一应用程序的共享信息,第一应用程序的共享信息包括第一应用程序的标识、第一应用程序指定的数据共享方的标识以及第一共享内存的信息。通过这种做法,使得应用程序之间进行数据传输时,可以来检验相关应用程序是否有共享数据的权限,从而增加了***的稳定性。
对于上述第一方面,另一种可能的实现方式是,当第一共享代理从第一共享内存中读取数据之前,第一共享代理根据第一应用程序的标识,向共享管理中心发送查询消息,接收共享管理中心发送的查询响应消息,该查询响应消息指示第一应用程序的数据共享方的信息,该数据共享方的信息包括第二应用程序的标识,则第一共享代理根据第二应用程序的标识,执行将数据发送到第二应用程序的步骤。通过这种方法,可以提高***运行的效率。
对于上述第一方面,另一种可能的实现方式是,第一共享代理将数据发送到第二应用程序是通过远程直接内存访问的方式。通过这种方法,可以提高数据传输的速度,进而提高***运行的效率。
对于上述第一方面,另一种可能的实现方式是,第一应用程序获取第一共享内存的虚拟地址,第一主机将第一共享内存的物理地址转换为第一共享代理的虚拟内存的地址,第一共享代理获取第一共享代理的虚拟内存的地址;则相应的,第一应用程序根据第一共享内存的虚拟地址向第一共享内存写入数据,第一共享代理根据第一共享代理的虚拟内存的地址进行对第一共享内存的监控。通过这种方法,使得第一共享代理可以实现对第一共享内存的监控,并可以在有数据写入第一共享内存时提取该数据,从而提高了***运行的效率。
对于上述第一方面,另一种可能的实现方式是,根据第一共享内存,第一应用程序创建环形缓冲区,且第一共享内存的虚拟地址为该环形缓冲区的虚拟地址,第一共享内存的物理地址为该环形缓冲区的物理地址。通过这种方法,使得共享内存可以同时被多个应用程序所使用,从而提高了***运行的效率。
对于上述第一方面,另一种可能的实现方式是,第一应用程序所申请的第一共享内存可以是内存页的形式,并可以是巨页内存。通过这种方法,可以进一步地提高***运行的效率。
对于上述第一方面,另一种可能的实现方式是,对第一共享内存进行等大小划分,使得划分的每一个区域的大小相同。通过这种方法,可以提高共享内存的使用率,从而提高了***运行的效率。
第二方面,本申请提供了一种通信方法,该方法包括:第二共享代理接收到来自第一应用程序的数据,其中,第二共享内存供第二应用程序使用,第二应用程序运行在第二虚拟设备中,第二虚拟设备位于第二主机中,第二共享内存属于第二主机的内存的一部分且不属于第二主机为第二虚拟设备指定的内存,第二主机中设置有独立于第二虚拟设备的第二共享代理;第二共享代理将数据写入第二共享内存,使得第二应用程序获得数据,其中,第一应用程序与第二应用程序互为数据共享方。通过这种做法,减少了虚拟设备上的应用程序之间进行数据传输所需要进行的步骤,降低了网络开销和时延,从而提高了***的效率。
对于上述第二方面,一种可能的实现方式是,第二应用程序申请第二共享内存,并获得分配的第二共享内存;第二应用程序向共享管理中心注册第二应用程序的共享信息,该第二应用程序的共享信息包括第二应用程序的标识、第二应用程序指定的数据共享方的标识以及第二共享内存的信息。通过这种做法,使得应用程序之间进行数据传输时,可以来检验相关应用程序是否有共享数据的权限,从而增加了***的稳定性。
对于上述第二方面,另一种可能的实现方式是,第二共享代理将数据写入第二共享内存中之前,第二共享代理向共享管理中心发送查询消息,确定第二应用程序的标识或第二共享内存的信息,并根据所述第二应用程序的标识或所述第二共享内存的信息,执行所述将所述数据写入所述第二共享内存中的步骤。通过这种方法,可以提高***运行的效率。
对于上述第二方面,另一种可能的实现方式是,所接收来的自第一应用程序的数据是第一应用程序通过远程直接内存访问的方式发送的。通过这种方法,可以提高数据传输的速度,进而提高***运行的效率。
对于上述第二方面,另一种可能的实现方式是,第二应用程序获取第二共享内存的虚拟地址,第二主机将第二共享内存的物理地址转换为第二共享代理的虚拟内存的地址,并将第二共享代理的虚拟地址提供给第二共享代理,则相应的,第二共享代理根据共享代理的虚拟内存的地址,将接收到的数据写入第二共享内存。通过这种方法,使得第二共享内存可以将接收到的数据写入第二共享内存,进而使得第二应用程序获取该数据,从而提高了***的效率。
对于上述第二方面,另一种可能的实现方式是,第二应用程序根据第二共享内存创建环形缓冲区,第二共享内存的虚拟地址为环形缓冲区的虚拟地址,第二共享内存的物理地址为环形缓冲区的物理地址。通过这种方法,使得共享内存可以同时被多个应用程序所使用,从而提高了***运行的效率。
第三方面,本申请提供了一种计算机***,该计算机***包括第一主机和运行在该第一主机上的第一虚拟设备,第一虚拟设备上运行第一应用程序,第一应用程序分配有第一共享内存,第一共享内存属于第一主机的内存的一部分且不属于第一主机为第一虚拟设备指定的内存;该计算机***还包括监控模块,该监控模块独立于第一虚拟设备,用于监控第一共享内存,当确定第一共享内存中写入第一应用程序的数据后,从第一共享内存中读取数据,并将该数据发送到第二应用程序,其中,第二应用程序为第一应用程序指定的数据共享方。
对于上述第三方面,一种可能的实现方式是,第一应用程序,用于申请第一共享内存,并获得分配的第一共享内存;并用于注册第一应用程序的共享信息,第一应用程序的共享信息包括第一应用程序的标识、第一应用程序指定的数据共享方的标识以及第一共享内存的信息。
对于上述第三方面,另一种可能的实现方式是,监控模块从第一共享内存中读取数据之前,向共享管理中心发送查询消息,接收共享管理中心发送的查询响应消息,查询响应消息指示第一应用程序的数据共享方的信息,数据共享方的信息包括第二应用程序的标识;则监控模块根据第二应用程序的标识,执行将该数据发送到第二应用程序的步骤。
对于上述第三方面,另一种可能的实现方式是,监控模块将数据发送到第二应用程序是通过远程直接内存访问的方式。
对于上述第三方面,另一种可能的实现方式是,第一应用程序还用于,获取第一共享内存的虚拟地址;将第一共享内存的物理地址转换为监控模块的虚拟内存的地址,监控模块获取该监控模块的虚拟内存的地址;则相应地,第一应用程序根据第一共享内存的虚拟地址向第一共享内存写入数据;监控模块根据该监控模块的虚拟内存的地址进行对第一共享内存的监控。
对于上述第三方面,另一种可能的实现方式是,根据第一共享内存,第一应用程序创建环形缓冲区,则第一共享内存的虚拟地址为该环形缓冲区的虚拟地址,第一共享内存的物理地址为该环形缓冲区的物理地址。
第四方面,本申请提供了一种计算机***,该计算机***包括第二主机和运行在第二主机上的第二虚拟设备,第二虚拟设备上运行第二应用程序,第二应用程序分配有第二共享内存,第二共享内存属于第二主机的内存的一部分且不属于第二主机为第二虚拟设备指定的内存;该计算机***还包括传输模块,该传输模块独立于第二虚拟设备,用于接收到来自第一应用程序的数据,并用于将数据写入第二共享内存,使得第二应用程序获得该数据,其中,第一应用程序为第二应用程序指定的数据共享方。
对于上述第四方面,一种可能的实现方式是,第二应用程序,用于申请第二共享内存,并获得分配的该第二共享内存;并用于注册第二应用程序的共享信息,该第二应用程序的共享信息包括第二应用程序的标识、第二应用程序指定的数据共享方的标识以及第二共享内存的信息。
对于上述第四方面,另一种可能的实现方式是,传输模块还用于,将数据写入第二共享内存中之前,向共享管理中心发送查询消息,确定第二应用程序的标识或第二共享内存的信息;则传输模块根据第二应用程序的标识或第二共享内存的信息,执行将数据写入第二共享内存中的步骤。
对于上述第四方面,另一种可能的实现方式是,所接收来的自第一应用程序的数据是第一应用程序通过远程直接内存访问的方式发送的。
对于上述第四方面,另一种可能的实现方式是,第二应用程序还用于,获取第二共享内存的虚拟地址;第二应用程序将第二共享内存的物理地址转换为传输模块的虚拟内存的地址,并将传输模块的虚拟内存的地址提供给该传输模块;则相应地,传输模块还用于,根据传输模块的虚拟内存的地址,将接收到的数据写入第二共享内存。
对于上述第四方面,另一种可能的实现方式是,根据第二共享内存,第二应用程序创建环形缓冲区,则第二共享内存的虚拟地址为该环形缓冲区的虚拟地址,第二共享内存的物理地址为该环形缓冲区的物理地址。
第五方面,提供一种计算机***,该计算机***包括处理器和存储器,该存储器存储程序代码,处理器用于调用存储器中的程序代码执行如第一方面所述的数据传输的方法。
第六方面,提供一种计算机***,该计算机***包括处理器和存储器,该存储器存储程序代码,处理器用于调用存储器中的程序代码执行如第二方面所述的数据传输的方法。
第七方面,提供一种数据传输***,该数据传输***包括至少两台主机,其中,第一主机上运行第一虚拟设备,该第一虚拟设备上运行第一应用程序,第一应用程序分配有第一共享内存,第一共享内存属于第一主机的内存的一部分且不属于第一主机为第一虚拟设备指定的内存,该第一主机上还包括第一共享代理;第二主机上运行第二虚拟设备,该第二虚拟设备上运行第二应用程序,第二应用程序分配有第二共享内存,第二共享内存属于第二主机的内存的一部分且不属于第二主机为第二虚拟设备指定的内存,第二主机上还包括第二共享代理;第二应用程序为第一应用程序的数据共享方;第一共享代理,用于监控第一共享内存,在监控到第一共享内存写入第一应用程序的数据后,从第一应用程序中读取该数据,并将该数据发送到第二主机;第二共享代理用于接收来自第一应用程序的数据,将该数据写入第二共享内存中。
对于上述第七方面,一种可能的实现方式是,数据传输***还包括共享管理中心,用于接收来自第一主机的注册消息,获得注册消息中的第一应用程序的共享信息,第一应用程序的共享信息包括第一应用程序的标识、第一应用程序指定的数据共享方的标识以及第一共享内存的信息;共享管理中心,用于接收来自第一共享代理的查询消息,根据第一共享代理的查询消息携带的第一应用程序的标识,查询第一应用程序的数据共享方的信息,并向第一共享代理发送查询响应消息,查询响应消息包括第二应用程序的标识。
对于上述第七方面,另一种可能的实现方式是,数据传输***中的共享管理中心还用于接收来自第二共享代理的查询消息,查询第二应用程序的标识或者第二共享内存的信息,并向第二共享代理发送查询响应消息,该查询响应消息包括第二应用程序的标识或者第二共享内存的信息。
该数据传输***中的第一主机还用于进一步执行上述第一方面的方法,第二主机还用于进一步执行上述第二方面的方法。
附图说明
图1是现有技术中不同的虚拟机上运行的应用程序进行数据传输的示意图。
图2是本申请的一个实施例中的数据传输***的结构示意图。
图3是本申请的一个实施例的流程示意图。
图4是本申请的另一个实施例中的数据传输***的结构示意图。
图5是本申请的实施例中的一种计算机***的功能结构的示意图。
图6是本申请的实施例中的另一种计算机***的功能结构的示意图。
图7是本申请的实施例中的计算机***的结构示意图。
具体实施方式
为了使本申请的上述目的、技术方案和优点更易于理解,下文提供了详细的描述。所述详细的描述通过使用方框图、流程图和/或示例提出了设备和/或过程的各种实施例。由于这些方框图、流程图和/或示例包含一个或多个功能和/或操作,所以本领域内人员将理解可以通过许多硬件、软件、固件或它们的任意组合单独和/或共同实施这些方框图、流程图或示例内的每个功能和/或操作。
RDMA技术是为了解决网络传输中主机端数据处理的延迟而产生的。RDMA通过网络把一个主机中的数据直接传入另一个主机的存储区,将数据从一个***快速移动到其它***的存储器中,而不对本***的操作***造成影响,这样就不需要使用到多少本***的计算处理功能。它消除了外部存储器复制和上下文切换的开销,因而能解放内存带宽和CPU周期用于改进应用***性能。
主机之间通过RDMA进行数据传输通常分为四个步骤。第一步,当一个应用程序执行RDMA读或写请求时,不执行任何数据复制。在不需要任何内核内存参与的条件下,RDMA请求从运行在用户空间的应用中发送到本地网卡中。第二步,本地网卡读取缓存的内容,并通过网络传送到远程网卡。第三步,在网络上传输的RDMA信息包含目的虚拟地址、内存钥匙和数据本身。请求完成既可以完全在用户空间中处理,或者在应用中一直睡眠到请求完成的情况下通过内存内核处理。第四步,目的网络确认内存钥匙,直接将数据写入应用缓存中。
虽然采用RDMA技术进行数据传输可以增加***的效率并节约处理器的资源。然而在现有技术中,通常是两个物理机上的应用程序进行RDMA通信。在这种情况下,只要将应用程序的信息注册到物理网卡上,应用程序之间就可以便捷地利用主机上的物理网卡进行RDMA通信。然而,如果是两个虚拟机上的应用程序之间进行通信的话,就需要增加网络虚拟化等步骤,从而降低了***的效率。图1所示的是现有技术中,虚拟机上的应用程序通过RDMA进行通信的过程。如图1所示,数据传输***100中包含主机101和主机102,主机101和主机102上分别运行有虚拟机111和虚拟机112,虚拟机111和虚拟机112上分别运行有应用程序121和应用程序122。当应用程序121需要和应用程序122进行通信时,应用程序121首先将数据发送至虚拟机111上的虚拟网卡131,即将数据从主机101分配给应用程序121的内存中发送到分配给虚拟网卡131的内存中,虚拟网卡131再通过桥接转发的方式将数据发送至主机101上的物理网卡141上。物理网卡141收到数据后,通过RDMA的方式发送到对端主机102的物理网卡142上。物理网卡142通过虚拟网桥将数据转发至虚拟网卡132上,虚拟网卡132再将数据发送至应用程序122进行处理。在该过程中,RDMA本身是一个处理器占用开销小的网卡操作模式,但网络转发产生了大量的开销。而且在主机上有多个虚拟机的情况下,更是需要建立一个虚拟交换机来转发虚拟网卡和物理网卡之间的数据包,这会产生大量的延时。因此,采用这种做法,增加了数据传输的网络时延和网络通信开销,降低了***的效率。
基于希望实现增加虚拟机上的应用程序进行RDMA传输时的效率的目的,本申请提供一种的报文传输方法以及相关的装置。主机上的虚拟机运行的应用程序申请用于共享的内存。应用程序将数据发送至用于共享的内存后,可以通过共享代理将该数据直接通过RDMA的方式发送至对端的共享代理,进而被对端的应用程序所接收。由于应用程序申请的用于共享的内存与虚拟机自身的内存不同,应用程序和共享代理都可以直接访问该用于共享的内存,因此共享数据不需要经过多次网络虚拟化的过程,共享代理直接读取该共享数据并发送到对端,因此节省了大量的网络开销,提高了***的效率,从而解决了虚拟机上的应用程序之间通信会产生大量的网络时延和网络通信开销的问题。
图2为本申请的一个实施例的***架构图。如图2所示,数据传输***200包括至少两台主机,主机201和主机202。其中,主机201和主机202中分别运行着至少一个虚拟设备。虚拟设备可以是虚拟机或者容器,其中,容器(英文:Container)是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到Linux机器上,也可以实现虚拟化,与传统的虚拟机技术相比,容器技术具有启动速度高、资源利用率高以及性能开销小等优点。本申请的实施例均以虚拟机作为虚拟设备进行说明,主机201和主机202中的虚拟机211和虚拟机212上分别运行有至少一个应用程序(图中所示为2个)。以应用程序221为例,应用程序221可以通过调用申请内存的API接口申请用于共享的共享内存231,其中,共享内存231属于主机201的内存的一部分,但不属于主机201为虚拟机211所指定的内存。在满足一定条件的情况下,共享内存231可以在不同的应用程序之间进行共享。主机201上设有独立于虚拟机211的共享代理241,可以以轮询的方式检测共享内存231中是否有数据写入。例如,当检测到有数据写入共享内存231时,共享代理241将数据提取出来并解析,进而通过RDMA等方式将数据发送给接收端的应用程序。为了使共享代理241可以读取共享内存231中的数据,应用程序221还将共享内存231的物理地址转换成共享代理241的虚拟地址的内存。数据传输***200还包括应用程序标识元数据中心(英文全称:Application Identifier Metadata Center,缩写:APPID MDC)250,作为该***的共享管理中心,用来判断应用程序之间是否具有数据共享的权限。通常情况下,一个数据传输***中具有一个APPID MDC,该APPID MDC可以位于该数据传输***的任何位置,但需要保证其所存储的信息的准确以及不被篡改。
图3为本申请的一个实施例的流程图。具体如下:
S301:应用程序221通过调用申请内存API接口,申请共享内存231,并返回共享内存231的首地址的虚拟地址以及其对应的物理地址。其中,所申请的共享内存231属于主机的内存的一部分,但不属于主机为虚拟设备指定的内存。调用申请内存API接口的操作在C语言中可以采用alloc(name,size)的代码实现。
应用程序222参照上述步骤申请共享内存232,并返回共享内存232的首地址的虚拟地址以及其对应的物理地址。
其中,虚拟地址指的是一种间接的访问物理地址的方法。按照这种方法,应用程序所访问的内存地址不再是实际的物理地址,而是一个虚拟地址,然后由操作***将这个虚拟地址映射到适当的物理内存地址上。
为了进一步提高效率,应用程序所申请的内存可以是内存页的形式。所谓内存页,是将地址空间分成许多的页,每页的大小先由CPU决定几种可选的规格,然后由操作***在CPU所支持若干种的页的大小中进行选择。通过使用内存页,当应用程序运行时用到某一页时就为该页分配内存,暂时没有用到的页则保存在硬盘上,当用到这些页时,再在物理空间上为这些页分配内存,然后建立虚拟地址中的页和分配的物理内存页之间的映射。在本实施例中,应用程序所申请的内存页的类型可以是巨页(英文:Huge Page)内存。由于***进程是通过虚拟地址访问内存,但是处理器必须把它转换成物理地址才能真正地访问内存。为了提高转换效率,处理器会缓存最近的虚拟内存地址和物理内存地址之间的映射关系,并存储在一个由处理器维护的映射表中。为了尽量提高内存的访问速度,需要在映射表中保存尽量多的映射关系。在这种情况下,通过增大内存页的尺寸,可以减少映射表的条目,提高处理器的检索效率。
应用程序所申请的共享内存可以采用无锁环形缓冲区的形态。采用这种方法,不仅可以实现多生产者和多消费者同时出队和入队,还可以支持多个进程共用一个共享内存。
在有锁的情况下,加锁、释放锁需要操作***进行一次上下文的切换,这会导致比较大的时延,等待锁的线程会被挂起直至锁释放。并且,在上下文切换的时候,处理器之前缓存的指令和数据都将失效,对性能会造成很大损失。锁还存在着一些其他缺点,当一个线程正在等待锁时,它不能执行任何操作;而如果一个线程在持有锁的情况下被延迟执行,那么所有需要这个锁的线程都无法执行下去。在无锁的情况下,当多个进程或者线程同时希望能向缓冲区内写数据时,写数据的操作才可以同时进行。
而环形队列与一般队列的区别是,环形队列头部的上个元素位于队列尾部,从而形成容纳固定元素数的一个闭环。环形队列为多线程数据通信提供了一种高效的机制,可以支持多个进程或者线程共用一个缓冲区,而不需要进行等待,并防止多个进程或者线程同时进行读操作或者写操作造成冲突。
当其他的应用程序需要使用该无锁环形缓冲区时,向创建它的应用程序发送请求,创建它的应用程序如果同意其他的应用程序使用该无锁环形缓冲区时,将该无锁环形缓冲区的物理地址发送给进行请求的应用程序,从而使得进行请求的应用程序可以使用该缓冲区。在本实施例中,如果应用程序223也需要使用以无锁环形缓冲区形态出现的共享内存231,则向应用程序221发送请求。如果应用程序221同意应用程序223也使用共享内存231,则将共享内存231在主机201的内存中的物理地址发送给应用程序221,从而使得应用程序221可以使用共享内存231。
无锁环形缓冲区的实现可以采用链表和数组两种形式来实现。链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点,每个结点包括两部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。采用链表形式的缓冲区的优点在于,利用链表构建缓冲区可以充分利用计算机的内存空间;缺点是采用链表形式的缓冲区的读取速度较慢,因为访问链表需要挨个遍历。数组是由相同类型的元素的集合所组成的数据结构,分配一块连续的内存来存储。采用数组形式的缓冲区,其优点在于,它的访问速度比链表快,而且在硬件级别上,数组中的元素可以被处理器预加载到缓存行。
进一步的,当需要多个应用程序进程使用同一个共享内存时,可以利用数据平面开发套件(Data Plane Development Kit,DPDK),使得共享内存的物理地址在不同的应用程序进程内部对应的虚拟地址是完全一样的。这意味着一个应用程序进程内部的基于DPDK的共享数据和指向这些共享数据的指针,可以在不同进程中通用。
S302:对步骤S301中申请的共享内存231和共享内存232进行划分,并初始化该共享内存。
可选的,对共享内存的划分可以采用等大小划分的方式,使得共享内存的每一个区域的大小相同。如果共享内存所划分的每一个区域的大小不相同,那么可能会存在当数据从一个较大的区域移至较小的区域时,可能需要几块较小的区域合在一起来存储该数据的情况。同时,当数据从一个较小的区域移至较大的区域时,该较大的区域的利用率会降低。因此,将内存页进行等大小划分,使得缓冲区的每一个区域的大小相同,有利于提高缓冲区的利用率,从而提高整个***的运行效率。
S303:应用程序221将共享内存231的物理地址共享给主机201,转化为主机201进程中的共享代理241的虚拟内存的地址。通过这种做法,使得主机201中的共享代理241可以读取共享内存231中数据。类似的,应用程序222将共享内存232的物理地址共享给主机202,转换为主机202进程中的共享代理242的虚拟内存的地址。
S304:应用程序221将自己的共享信息注册到共享管理中心,即APPID MDC250。其中,应用程序221的共享信息包括应用程序221的标识、应用程序221指定的数据共享方的标识以及应用程序221所申请的内存的信息。通常情况下,当数据通信***200中有新的应用程序开始运行时,该应用程序会将其共享信息注册到共享管理中心。通过这种做法,使得APPID MDC250存储数据传输***200中运行的各个应用程序的共享信息,从而提高了整个***的安全性和稳定性。
S305:应用程序221将待发送给应用程序222的信息写入共享内存231中。其中,待发送信息可以包含应用程序221共享给应用程序222的数据、应用程序221自身的标识以及应用程序222的标识,其中,应用程序221自身的标识以及应用程序222的标识也可以不用包含在待发送的信息中。
在应用程序221待发送信息里,还可以包括应用程序222所申请的共享内存232的物理地址以及该物理地址所对应的主机202进程中的共享代理242的虚拟内存的地址。采用这种做法,在接下来的步骤S306里,共享代理241不需要通过将应用程序222的标识发送到APPID MDC250中,来查询共享内存232的物理地址以及该物理地址所对应的主机202进程中的共享代理242的虚拟内存的地址。
S306:共享代理241通过轮询的方式对共享内存231进行监控,即每隔预设的时间就检测发送缓冲区231中是否有新信息写入。当共享代理241发现发送缓冲区231中有新的信息写入后,将该信息提取出来,并根据提取出来的信息解析出发送端应用程序221的标识以及接收端应用程序222的标识。
共享代理241对发送缓冲区231进行轮询可以采用队列深度计数器的方式。具体来说,在发送缓冲区231上设置队列深度计数器,每当有新的信息写入发送缓冲区231时,队列深度计数器的值加一。通过这种方法,共享代理241可以每隔预设的时间检测发送缓冲区231的队列深度技术器的值是否发生变化,来判断发送缓冲区231是否有新数据写入。
可选的,共享代理241将发送端应用程序221和接收端应用程序222的标识发送到共享管理中心APPID MDC250,请求APPID MDC250判断是否有信息共享权限,即应用程序222是否是应用程序221指定的数据共享者数据共享方。APPID MDC250根据其所存储的应用程序221的注册信息,判断应用程序221是否有权限共享信息给应用程序222。如果有权限,则接着执行步骤S307;如果没有权限,则共享代理241不会执行发送信息的操作,并返回错误信息。
如果在步骤S305中,应用程序221发送的信息中没有包含应用程序222的标识,共享代理241可以通过将应用程序221的标识发送到APPID MDC250进行查询,并接收APPIDMDC250发送的查询相应消息,该查询相应消息指示应用程序221的数据共享方的信息,该数据共享方的信息包括应用程序222的标识。
如果在步骤S305中,应用程序221发送的信息没有包括应用程序222所申请的共享内存232的物理地址以及该物理地址所对应的主机202进程中的共享代理242的虚拟内存的地址,则共享代理241可以将接收端应用程序222的标识发送到APPID MDC250,请求APPIDMDC250告知应用程序222所对应的共享内存232的信息。APPID MDC250收到请求后,通过查询所存储的共享信息的集合,找到应用程序222所申请的共享内存232的信息,并告知共享代理241。共享代理241可以将共享内存232的信息加入到应用程序221发送的信息中。
S307:共享代理241根据接收端应用程序222的标识以及应用程序222所在的主机202的网络信息,将来自应用程序221的信息发送至应用程序222所对应的主机202上的共享代理242上。其中,信息发送可以通过RDMA的方式进行,从而提高数据传输的速度。
S308:共享代理242接收到信息后,提取该信息,并根据该信息携带的接收端应用程序222的标识,将该信息包含的数据写入应用程序222所申请的共享内存232中,使得应用程序222可以提取并接收该数据。应用程序222收到数据后,对该数据进行相应的处理。
如果共享代理242收到的信息里没有携带接收端应用程序222的标识,则共享代理242可以在将数据写入共享内存232之前,向APPID MDC250发送查询消息,确定应用程序222的标识或共享内存232的信息,再根据应用程序222的标识或共享内存232的信息,将数据写入共享内存232中。
上述步骤体现的是应用程序221作为发送端共享数据给应用程序222的过程,应用程序221也可作为接收端接收来自应用程序222共享的数据,其过程可以参考上述步骤。
需要指出的是,上述S301至S308的编号仅用来指代,并不意味着在本申请的实施例中,上述步骤需要按照特定顺序来执行。例如,S304中应用程序将其共享信息注册到APPID MDC的操作可以在S303中的应用程序将其所申请的内存的物理地址共享给主机的操作之前。
图4是本申请的另一个实施例的***架构图。如图4所示,数据传输***400中包含主机401,主机401上还设有共享代理441,该共享代理441通过轮询的方式监控应用程序所申请的共享内存中是否有数据写入。数据传输***400还包括共享管理中心APPID MDC450,用来判断应用程序之间是否有数据共享的权限。
在该实施例中,当应用程序421和应用程序422进行通信时,由于两个应用程序是在同一个主机401上的,所以无论是应用程序421发送数据给应用程序422,抑或是应用程序422发送数据给应用程序421,都是通过主机401上的共享代理441进行的。该实施例的其余步骤可以参照前一个实施例,在此不再赘述。
本申请提供一种实现云环境应用下高速通信的计算机***。如图5所示,计算机***500包括主机510和运行在主机510上的虚拟设备520,该虚拟设备520上运行有应用程序530,计算机***500还包括监控模块540,监控模块540独立于虚拟设备520。其中:应用程序530用于通过调用申请内存API接口申请用于共享的共享内存,返回该共享内存的首地址的虚拟地址以及该首地址对应的物理地址;应用程序530还用于将该共享内存的物理地址共享给主机500,转化为主机500进程里的监控模块540的虚拟内存的地址。当应用程序530需要将数据发送至对端的应用程序时,应用程序530将待发送的数据写入所申请的共享内存中。
监控模块540,用于监控应用程序530所申请的共享内存,例如,可以以轮询的方式检测该内存中是否有新信息写入。当监控模块540确定应用程序530所申请的共享内存中有新信息写入时,提取并解析该信息,并将该信息以RDMA等方式发送到接收端的应用程序中。
应用程序530还用于注册应用程序530的共享信息,该共享信息包括应用程序530的标识、应用程序530指定的数据共享方的标识以及应用程序530所申请的共享内存的信息。
本申请的实施例所提供的计算机***500,其功能的实现可以参考图3所示的数据传输的方法。
本申请还提供一种实现云环境应用下高速通信的计算机***600。如图6所示,计算机***600包括包括主机610和运行在主机610上的虚拟设备620,该虚拟设备620上运行有应用程序630,计算机***600还包括传输模块640,传输模块640独立于虚拟设备620。其中:
应用程序630用于通过调用申请内存API接口申请用于共享的共享内存,返回该共享内存的首地址的虚拟地址以及该首地址对应的物理地址;应用程序630还用于将该共享内存的物理地址共享给主机610,转化为主机610进程里的传输模块640的虚拟内存的地址。
传输模块640,用于接收来自对端的应用程序的数据,并用于将接收到的数据写入应用程序630所申请的共享内存中,从而使得应用程序630获得该数据。
应用程序630还用于注册应用程序630的共享信息,该共享信息包括应用程序630的标识、应用程序630指定的数据共享方的标识以及应用程序630所申请的共享内存的信息。
本申请的实施例所提供的计算机***600,其功能的实现可以参考图3所示的数据传输的方法。
图7为依据本申请的实施例的计算机***710的结构示意图。
如图7所示,计算机***710包括主机700,主机700包括处理器701,处理器701与***内存705连接。处理器701可以为中央处理器(英文全称:Central Processing Unit,缩写:CPU),图像处理器(英文全称:Graphics Processing Unit,缩写:GPU),现场可编程门阵列(英文全称:Field Programmable Gate Array,缩写:FPGA),或数字信号处理器(英文全称:Digital Signal Processor,缩写:DSP)等计算逻辑或以上任意计算逻辑的组合。处理器701可以为单核处理器或多核处理器。
总线709用于在主机700的各部件之间传递信息,总线709可以使用有线的连接方式或采用无线的连接方式,本申请并不对此进行限定。总线709还连接有辅助存储器(英文:secondary storage)702,输入/输出接口703和通信接口704。
辅助存储器702一般也称为外存,辅助存储器702的存储介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如光盘)、或者半导体介质(例如固态硬盘(英文全称:solid state disk,缩写:SSD))等。在一些实施例中,辅助存储器702还可能进一步包括与处理器701分离的远程存储器,例如通过通信接口704和网络711进行访问的网盘(包括网络文件***(英文全称:Network File System,缩写:NFS)等网络或机群文件***)。
输入/输出接口703连接有输入/输出设备,用于接收输入的信息,输出操作结果。输入/输出设备可以为鼠标、键盘、显示器、或者光驱等。
通信接口704使用例如但不限于收发器一类的收发装置,来实现与其他设备或网络711之间的通信,通信接口704可以通过有线或者无线的形式与网络711互连。
本申请实施例的一些特征可以由处理器701执行***内存705中的软件代码来完成/支持。***内存705可以包括一些软件,例如,操作***708(例如Darwin、RTXC、LINUX、UNIX、OS X、WINDOWS或嵌入式操作***(例如Vxworks)),应用程序707等。
此外,图7仅仅是一个计算机***710的例子,计算机***710可能包含相比于图7展示的更多或者更少的组件,或者有不同的组件配置方式。同时,图7中展示的各种组件可以用硬件、软件或者硬件与软件的结合方式实施。

Claims (29)

1.一种通信方法,其特征在于,所述方法包括:
第一共享代理监控第一共享内存,其中,所述第一共享内存供第一应用程序使用,所述第一应用程序运行在第一虚拟设备中,所述第一虚拟设备位于第一主机中,所述第一主机中设置有独立于所述第一虚拟设备的所述第一共享代理;
当确定所述第一共享内存中写入所述第一应用程序的数据后,所述第一共享代理从所述第一共享内存中读取所述数据,并通过远程直接内存访问的方式将所述数据发送到第二应用程序,其中,所述第二应用程序为所述第一应用程序指定的数据共享方。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述第一应用程序申请所述第一共享内存,并获得分配的所述第一共享内存;
所述第一应用程序向共享管理中心注册所述第一应用程序的共享信息,所述第一应用程序的共享信息包括所述第一应用程序的标识、所述第一应用程序指定的数据共享方的标识以及所述第一共享内存的信息。
3.根据权利要求2所述的方法,其特征在于,所述第一共享代理从所述第一共享内存中读取所述数据之前,所述方法还包括:
所述第一共享代理根据所述第一应用程序的标识,向所述共享管理中心发送查询消息,接收所述共享管理中心发送的查询响应消息,所述查询响应消息指示所述第一应用程序的数据共享方的信息,所述数据共享方的信息包括所述第二应用程序的标识;
则所述第一共享代理根据所述第二应用程序的标识,执行所述将所述数据发送到第二应用程序的步骤。
4.根据权利要求1-3任意一项所述的方法,其特征在于,所述方法还包括:
所述第一应用程序获取所述第一共享内存的虚拟地址;
所述第一应用程序将所述第一共享内存的物理地址转换为所述第一共享代理的虚拟内存的地址,所述第一共享代理获取所述第一共享代理的虚拟内存的地址;
则相应地,
所述第一应用程序根据所述第一共享内存的虚拟地址向所述第一共享内存写入所述数据;
所述第一共享代理根据所述第一共享代理的虚拟内存的地址进行对所述第一共享内存的监控。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
根据所述第一共享内存,所述第一应用程序创建环形缓冲区,则所述第一共享内存的虚拟地址为所述环形缓冲区的虚拟地址,所述第一共享内存的物理地址为所述环形缓冲区的物理地址。
6.根据权利要求1-3或5任一项所述的方法,其特征在于,所述第一主机还运行第三应用程序,所述共享内存供所述第一应用程序和所述第三应用程序使用。
7.一种通信方法,其特征在于,所述方法包括:
第二共享代理接收第一应用程序通过远程直接内存访问的方式发送的数据,其中,第二共享内存供第二应用程序使用,所述第二应用程序运行在第二虚拟设备中,所述第二虚拟设备位于第二主机中,所述第二主机中设置有独立于所述第二虚拟设备的第二共享代理;
所述第二共享代理将所述数据写入所述第二共享内存,使得所述第二应用程序获得所述数据,其中,所述第一应用程序为所述第二应用程序指定的数据共享方。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
所述第二应用程序申请所述第二共享内存,并获得分配的所述第二共享内存;
所述第二应用程序向共享管理中心注册所述第二应用程序的共享信息,所述第二应用程序的共享信息包括所述第二应用程序的标识、所述第二应用程序指定的数据共享方的标识以及所述第二共享内存的信息。
9.根据权利要求8所述的方法,其特征在于,所述第二共享代理将所述数据写入所述第二共享内存中之前,所述方法还包括:
所述第二共享代理向所述共享管理中心发送查询消息,确定所述第二应用程序的标识或所述第二共享内存的信息;
则根据所述第二应用程序的标识或所述第二共享内存的信息,执行所述将所述数据写入所述第二共享内存中的步骤。
10.根据权利要求7-9任意一项所述的方法,其特征在于,所述方法还包括:
所述第二应用程序获取所述第二共享内存的虚拟地址;
所述第二应用程序将所述第二共享内存的物理地址转换为所述第二共享代理的虚拟内存的地址,并将所述第二共享代理的虚拟内存的地址提供给所述第二共享代理;
则相应地,
所述第二共享代理根据所述共享代理的虚拟内存的地址,将接收到的数据写入所述第二共享内存。
11.根据权利要求10所述的方法,其特征在于,所述方法还包括:
根据所述第二共享内存,所述第二应用程序创建环形缓冲区,则所述第二共享内存的虚拟地址为所述环形缓冲区的虚拟地址,所述第二共享内存的物理地址为所述环形缓冲区的物理地址。
12.根据权利要求7-9或11任一项所述的方法,其特征在于,所述第二主机还运行第四应用程序,所述共享内存供所述第二应用程序和所述第四应用程序使用。
13.一种计算机***,其特征在于,所述计算机***包括第一主机和运行在所述第一主机上的第一虚拟设备,所述第一虚拟设备上运行第一应用程序,所述第一应用程序分配有第一共享内存;
所述计算机***还包括监控模块,所述监控模块独立于所述第一虚拟设备,所述监控模块用于:
监控第一共享内存,当确定所述第一共享内存中写入所述第一应用程序的数据后,从所述第一共享内存中读取所述数据,并通过远程直接内存访问的方式将所述数据发送到第二应用程序,其中,所述第二应用程序为所述第一应用程序指定的数据共享方。
14.根据权利要求13所述的计算机***,其特征在于,
所述第一应用程序,用于申请所述第一共享内存,并获得分配的所述第一共享内存;
以及注册所述第一应用程序的共享信息,所述第一应用程序的共享信息包括所述第一应用程序的标识、所述第一应用程序指定的数据共享方的标识以及所述第一共享内存的信息。
15.根据权利要求14所述的计算机***,其特征在于,
所述监控模块从所述第一共享内存中读取所述数据之前,向共享管理中心发送查询消息,接收所述共享管理中心发送的查询响应消息,所述查询响应消息指示所述第一应用程序的数据共享方的信息,所述数据共享方的信息包括所述第二应用程序的标识;
则所述监控模块根据所述第二应用程序的标识,执行所述将所述数据发送到所述第二应用程序的步骤。
16.根据权利要求13-15任一项所述的计算机***,其特征在于,
所述第一应用程序还用于,获取所述第一共享内存的虚拟地址;
将所述第一共享内存的物理地址转换为所述监控模块的虚拟内存的地址,所述监控模块获取所述监控模块的虚拟内存的地址;
则相应地,
所述第一应用程序根据所述第一共享内存的虚拟地址向所述第一共享内存写入所述数据;
所述监控模块根据所述监控模块的虚拟内存的地址进行对所述第一共享内存的监控。
17.根据权利要求16所述的计算机***,其特征在于,
根据所述第一共享内存,所述第一应用程序创建环形缓冲区,则所述第一共享内存的虚拟地址为所述环形缓冲区的虚拟地址,所述第一共享内存的物理地址为所述环形缓冲区的物理地址。
18.根据权利要求13-15或17任一项所述的计算机***,其特征在于,所述第一主机还运行第三应用程序,所述共享内存供所述第一应用程序和所述第三应用程序使用。
19.一种计算机***,其特征在于,所述计算机***包括第二主机和运行在所述第二主机上的第二虚拟设备,所述第二虚拟设备上运行第二应用程序,所述第二应用程序分配有第二共享内存;
所述计算机***还包括传输模块,所述传输模块独立于所述第二虚拟设备,所述传输模块用于:
接收第一应用程序通过远程直接内存访问的方式发送的数据,并用于将所述数据写入所述第二共享内存,使得所述第二应用程序获得所述数据,其中,所述第一应用程序为所述第二应用程序指定的数据共享方。
20.根据权利要求19所述的计算机***,其特征在于,
所述第二应用程序,用于申请所述第二共享内存,并获得分配的所述第二共享内存;
以及注册所述第二应用程序的共享信息,所述第二应用程序的共享信息包括所述第二应用程序的标识、所述第二应用程序指定的数据共享方的标识以及所述第二共享内存的信息。
21.根据权利要求20所述的计算机***,其特征在于,
所述传输模块还用于,将所述数据写入所述第二共享内存中之前,向共享管理中心发送查询消息,确定所述第二应用程序的标识或所述第二共享内存的信息;
则所述传输模块根据所述第二应用程序的标识或所述第二共享内存的信息,执行所述将所述数据写入所述第二共享内存中的步骤。
22.根据权利要求19-21任一项所述的计算机***,其特征在于,
所述第二应用程序还用于,获取所述第二共享内存的虚拟地址;
将所述第二共享内存的物理地址转换为所述传输模块的虚拟内存的地址,并将所述传输模块的虚拟内存的地址提供给所述传输模块;
则相应地,
所述传输模块还用于,根据所述传输模块的虚拟内存的地址,将接收到的数据写入所述第二共享内存。
23.根据权利要求22所述的计算机***,其特征在于,
根据所述第二共享内存,所述第二应用程序创建环形缓冲区,则所述第二共享内存的虚拟地址为所述环形缓冲区的虚拟地址,所述第二共享内存的物理地址为所述环形缓冲区的物理地址。
24.根据权利要求19-21或23任一项所述的计算机***,其特征在于,所述第二主机还运行第四应用程序,所述共享内存供所述第二应用程序和所述第四应用程序使用。
25.一种计算机***,其特征在于,所述计算机***包括:
处理器和存储器,所述存储器存储程序代码,所述处理器用于调用所述存储器中的程序代码执行如权利要求1-12任一项所述的通信方法。
26.一种数据传输***,其特征在于,所述数据传输***包括:
第一主机和第二主机;所述第一主机上运行第一虚拟设备,所述第一虚拟设备上运行第一应用程序,所述第一应用程序分配有第一共享内存,所述第一主机上还包括第一共享代理;
所述第二主机上运行第二虚拟设备,所述第二虚拟设备上运行第二应用程序,所述第二应用程序分配有第二共享内存,所述第二主机上还包括第二共享代理;
所述第二应用程序为所述第一应用程序的数据共享方;
所述第一共享代理,用于监控所述第一共享内存,在监控到所述第一共享内存中写入所述第一应用程序的数据后,从所述第一共享内存中读取所述数据,并通过远程直接内存访问的方式将所述数据发送到所述第二主机;
所述第二共享代理,用于接收来自所述第一应用程序的数据,将所述数据写入所述第二共享内存中。
27.根据权利要求26所述的数据传输***,其特征在于,还包括:
共享管理中心,用于接收来自所述第一主机的注册消息,获得所述注册消息中的所述第一应用程序的共享信息,所述第一应用程序的共享信息包括所述第一应用程序的标识、所述第一应用程序指定的数据共享方的标识以及所述第一共享内存的信息;
所述共享管理中心,用于接收来自所述第一共享代理的查询消息,根据所述第一共享代理的查询消息携带的所述第一应用程序的标识,查询所述第一应用程序的数据共享方的信息,并向所述第一共享代理发送查询响应消息,所述查询响应消息包括所述第二应用程序的标识。
28.根据权利要求27所述的数据传输***,其特征在于,所述共享管理中心,还用于接收来自所述第二共享代理的查询消息,查询所述第二应用程序的标识或者所述第二共享内存的信息,并向所述第二共享代理发送查询响应消息,所述查询响应消息包括所述第二应用程序的标识或者所述第二共享内存的信息。
29.根据权利要求26-28任一项所述的数据传输***,其特征在于,所述第一主机还运行第三应用程序,所述第一共享内存供所述第一应用程序和所述第三应用程序使用,所述第二主机还运行第四应用程序,所述第二共享内存供所述第二应用程序和所述第四应用程序使用。
CN202010982741.XA 2018-02-24 2018-02-24 一种通信的方法及装置 Active CN112422615B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010982741.XA CN112422615B (zh) 2018-02-24 2018-02-24 一种通信的方法及装置

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN201880002000.1A CN110402568B (zh) 2018-02-24 2018-02-24 一种通信的方法及装置
CN202010982741.XA CN112422615B (zh) 2018-02-24 2018-02-24 一种通信的方法及装置
PCT/CN2018/077161 WO2019161557A1 (zh) 2018-02-24 2018-02-24 一种通信的方法及装置

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201880002000.1A Division CN110402568B (zh) 2018-02-24 2018-02-24 一种通信的方法及装置

Publications (2)

Publication Number Publication Date
CN112422615A CN112422615A (zh) 2021-02-26
CN112422615B true CN112422615B (zh) 2023-11-10

Family

ID=67686660

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202010982741.XA Active CN112422615B (zh) 2018-02-24 2018-02-24 一种通信的方法及装置
CN201880002000.1A Active CN110402568B (zh) 2018-02-24 2018-02-24 一种通信的方法及装置

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201880002000.1A Active CN110402568B (zh) 2018-02-24 2018-02-24 一种通信的方法及装置

Country Status (4)

Country Link
US (1) US11500689B2 (zh)
EP (1) EP3748926B1 (zh)
CN (2) CN112422615B (zh)
WO (1) WO2019161557A1 (zh)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111371759B (zh) * 2020-02-25 2022-06-21 深信服科技股份有限公司 网络数据包读取方法、装置、设备及可读存储介质
CN111797497B (zh) * 2020-05-21 2024-05-17 中国电力科学研究院有限公司 一种用于电磁暂态并行仿真的通讯方法及***
CN111711801B (zh) * 2020-06-30 2022-08-26 重庆紫光华山智安科技有限公司 视频数据传输方法、装置、服务器和计算机可读存储介质
CN112612623B (zh) 2020-12-25 2022-08-09 苏州浪潮智能科技有限公司 一种共享内存管理的方法和设备
CN112822266A (zh) * 2021-01-05 2021-05-18 成都安思科技有限公司 一种基于内存共享的虚拟机内外通信方法
US11656982B2 (en) * 2021-01-15 2023-05-23 Nutanix, Inc. Just-in-time virtual per-VM swap space
CN114816651A (zh) * 2021-01-28 2022-07-29 华为技术有限公司 一种通信方法、装置以及***
CN112835775B (zh) * 2021-01-29 2024-03-01 许继集团有限公司 模拟网络通讯方法、装置及继电保护装置仿真测试***
CN112905304B (zh) * 2021-03-08 2024-07-09 深信服科技股份有限公司 一种虚拟机间通信方法、装置、物理主机及介质
CN113297110B (zh) * 2021-05-17 2024-06-18 阿里巴巴创新公司 数据采集***、方法以及装置
CN113360293B (zh) * 2021-06-02 2023-09-08 奥特酷智能科技(南京)有限公司 一种基于远程虚拟共享内存机制的车身电气网络架构
EP4352619A2 (en) * 2021-06-09 2024-04-17 Enfabrica Corporation Transparent remote memory access over network protocol
CN113434089B (zh) * 2021-06-29 2022-08-16 苏州科达科技股份有限公司 数据搬移方法、装置及pcie***
CN113867993B (zh) * 2021-12-03 2022-03-04 维塔科技(北京)有限公司 虚拟化的rdma方法、***、存储介质及电子设备
CN114327944B (zh) * 2021-12-24 2022-11-11 科东(广州)软件科技有限公司 一种多***共享内存的方法、装置、设备及存储介质
CN114281484B (zh) * 2021-12-29 2022-08-26 元心信息科技集团有限公司 数据传输方法、装置、设备及存储介质
CN114780465B (zh) * 2022-03-01 2024-04-16 阿里巴巴(中国)有限公司 可共享远程直接数据存取链接的创建方法及装置
US20230289297A1 (en) * 2022-03-14 2023-09-14 Samsung Electronics Co., Ltd. Systems and methods for managing memory utilization
CN116107668B (zh) * 2023-04-13 2023-08-15 紫光同芯微电子有限公司 一种应用程序运行方法及其***
CN116414568B (zh) * 2023-06-09 2023-10-31 阿里巴巴(中国)有限公司 针对虚拟无线接入网络的内存调整方法、设备及***
CN117407123B (zh) * 2023-12-12 2024-04-05 麒麟软件有限公司 基于多***隔离的usb设备虚拟共享***

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103607428A (zh) * 2013-10-30 2014-02-26 华为技术有限公司 一种访问共享内存的方法和装置
CN104216862A (zh) * 2013-05-29 2014-12-17 华为技术有限公司 一种用户进程与***服务之间的通信方法、装置
CN107729159A (zh) * 2017-09-29 2018-02-23 华为技术有限公司 一种共享内存的地址映射方法及装置

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7281030B1 (en) * 1999-09-17 2007-10-09 Intel Corporation Method of reading a remote memory
US7840765B2 (en) * 2006-10-31 2010-11-23 Hewlett-Packard Development Company, L.P. RDMA copy-on-write
US20090113111A1 (en) * 2007-10-30 2009-04-30 Vmware, Inc. Secure identification of execution contexts
US20100083247A1 (en) * 2008-09-26 2010-04-01 Netapp, Inc. System And Method Of Providing Multiple Virtual Machines With Shared Access To Non-Volatile Solid-State Memory Using RDMA
CN102651690B (zh) * 2011-02-28 2015-11-25 国际商业机器公司 对共享内存进行控制的方法和装置
CN102136003A (zh) * 2011-03-25 2011-07-27 上海交通大学 大规模分布式存储***
US8839044B2 (en) * 2012-01-05 2014-09-16 International Business Machines Corporation Debugging of adapters with stateful offload connections
CN103384551B (zh) * 2013-01-04 2015-12-09 华为技术有限公司 一种基于pcie网络的虚拟机通信方法、服务器及***
US9841927B2 (en) * 2013-09-23 2017-12-12 Red Hat Israel, Ltd Remote direct memory access with copy-on-write support
US9053068B2 (en) * 2013-09-25 2015-06-09 Red Hat Israel, Ltd. RDMA-based state transfer in virtual machine live migration
US10157146B2 (en) * 2015-02-12 2018-12-18 Red Hat Israel, Ltd. Local access DMA with shared memory pool
US9928093B2 (en) * 2015-02-24 2018-03-27 Red Hat Israel, Ltd. Methods and systems for establishing connections associated with virtual machine migrations
US10509764B1 (en) * 2015-06-19 2019-12-17 Amazon Technologies, Inc. Flexible remote direct memory access
CN105404597B (zh) * 2015-10-21 2018-10-12 华为技术有限公司 数据传输的方法、设备及***
US10521315B2 (en) * 2016-02-23 2019-12-31 Vmware, Inc. High availability handling network segmentation in a cluster
WO2017209856A1 (en) * 2016-05-31 2017-12-07 Brocade Communications Systems, Inc. Multichannel input/output virtualization
US11442760B2 (en) * 2016-07-01 2022-09-13 Intel Corporation Aperture access processors, methods, systems, and instructions
CN106598752B (zh) * 2016-11-15 2020-05-12 北京大学深圳研究生院 远程零拷贝方法
US10652320B2 (en) * 2017-02-21 2020-05-12 Microsoft Technology Licensing, Llc Load balancing in distributed computing systems
CN107678835B (zh) * 2017-09-30 2020-05-08 东软集团股份有限公司 一种数据传输方法及***
US10523675B2 (en) * 2017-11-08 2019-12-31 Ca, Inc. Remote direct memory access authorization
US10706005B2 (en) * 2017-12-08 2020-07-07 Vmware, Inc. File system interface for remote direct memory access
US11409621B2 (en) * 2018-05-29 2022-08-09 Vmware, Inc. High availability for a shared-memory-based firewall service virtual machine

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104216862A (zh) * 2013-05-29 2014-12-17 华为技术有限公司 一种用户进程与***服务之间的通信方法、装置
CN103607428A (zh) * 2013-10-30 2014-02-26 华为技术有限公司 一种访问共享内存的方法和装置
CN107729159A (zh) * 2017-09-29 2018-02-23 华为技术有限公司 一种共享内存的地址映射方法及装置

Also Published As

Publication number Publication date
CN110402568B (zh) 2020-10-09
US20200387405A1 (en) 2020-12-10
US11500689B2 (en) 2022-11-15
EP3748926A4 (en) 2021-02-17
EP3748926A1 (en) 2020-12-09
WO2019161557A1 (zh) 2019-08-29
EP3748926B1 (en) 2024-05-15
CN112422615A (zh) 2021-02-26
CN110402568A (zh) 2019-11-01

Similar Documents

Publication Publication Date Title
CN112422615B (zh) 一种通信的方法及装置
EP3057272B1 (en) Technologies for concurrency of cuckoo hashing flow lookup
US7320041B2 (en) Controlling flow of data between data processing systems via a memory
US9003082B2 (en) Information processing apparatus, arithmetic device, and information transferring method
US8037217B2 (en) Direct memory access in a hybrid computing environment
CN110119304B (zh) 一种中断处理方法、装置及服务器
CN111431757B (zh) 虚拟网络的流量采集方法及装置
US7409468B2 (en) Controlling flow of data between data processing systems via a memory
CN109582223B (zh) 一种内存数据迁移的方法及装置
CN114756388B (zh) 一种基于rdma的集群***节点间按需共享内存的方法
US20040054822A1 (en) Transferring interrupts from a peripheral device to a host computer system
WO2017190266A1 (zh) 管理转址旁路缓存的方法和多核处理器
US10228869B1 (en) Controlling shared resources and context data
CN109857545B (zh) 一种数据传输方法及装置
US20090199191A1 (en) Notification to Task of Completion of GSM Operations by Initiator Node
US11231964B2 (en) Computing device shared resource lock allocation
CN114371811A (zh) 用于存储管理的方法、电子设备和计算机程序产品
EP2845110B1 (en) Reflective memory bridge for external computing nodes
WO2023155694A1 (zh) 内存换页方法、***及存储介质
KR100978083B1 (ko) 공유 메모리형 멀티 프로세서에 있어서의 절차 호출 방법 및 절차 호출 프로그램을 기록한 컴퓨터로 판독 가능한 기록 매체
CN115933973B (zh) 远程更新数据的方法、rdma***及存储介质
US10762011B2 (en) Reflective memory bridge for external computing nodes
US10649784B2 (en) Reverse order queue updates by virtual devices
CN115858434A (zh) 一种计算设备及请求处理方法
CN117193931A (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