CN113688072B - 数据处理方法及设备 - Google Patents

数据处理方法及设备 Download PDF

Info

Publication number
CN113688072B
CN113688072B CN202010880767.3A CN202010880767A CN113688072B CN 113688072 B CN113688072 B CN 113688072B CN 202010880767 A CN202010880767 A CN 202010880767A CN 113688072 B CN113688072 B CN 113688072B
Authority
CN
China
Prior art keywords
memory
virtual machine
network card
memory number
address
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
CN202010880767.3A
Other languages
English (en)
Other versions
CN113688072A (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 EP21173440.5A priority Critical patent/EP3913488B1/en
Priority to US17/323,279 priority patent/US11755513B2/en
Publication of CN113688072A publication Critical patent/CN113688072A/zh
Application granted granted Critical
Publication of CN113688072B publication Critical patent/CN113688072B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/44Program or device authentication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/78Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
    • 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/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
    • 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/45595Network integration; Enabling network access in virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Bus Control (AREA)

Abstract

本申请实施例提供了一种数据处理方法及设备,该方法包括第一设备的网卡向第二设备发送第一请求报文;该第一请求报文用于请求读取在该第二设备的第一目的存储区域的第一数据;该网卡接收该第二设备响应该第一请求报文发送的第一响应报文;该第一响应报文包括该第一数据;该网卡根据该第一响应报文对第一存储地址发起直接存储器访问DMA将该第一数据写入该第一存储地址指向的内存区域,该第一存储地址指向的内存区域属于该第一设备的主机的内存区域;该第一数据无需缓存到该网卡的内存。采用本申请实施例,能够减少网卡内存的带宽资源和存储空间的占用。

Description

数据处理方法及设备
本申请要求于2020年5月19日提交中国专利局、申请号为202010427381.7、申请名称为“一种基于RDMA的NVMe存储业务虚拟化处理方法和装置”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本发明涉及数据处理技术领域,尤其涉及一种数据处理方法及设备。
背景技术
基于非易失性内存处理器控制器接口规范(non volatile memory hostcontroller interface specification,NVMHCIS或者简称为NVMe)的架构(NVMe overFabric)是近来出现的热门的存储技术,它能够实现远端存储器的资源共享。NVMe overfabric主要包括的是基于远程直接数据存取(remote direct memory access,RDMA)的NVMe(NVMe over RDMA),通过RDMA技术实现访问远端设备的存储器。常用的NVMe overRDMA的RDMA技术是承载融合以太网上的RDMA(RDMA over Converged Ethernet,RoCE)技术、互联网广域RDMA协议(Internet Wide Area RDMA Protocol,iWARP)技术和无限带宽(InfiniBand,IB)技术等。
现有的技术方案中,通过NVMe over RDMA实现发起端设备对远端设备的存储器读写数据的过程中,需要通过网卡的内存中转读写的数据。例如,对于发起端设备对远端设备的存储器读数据的过程,需要先将从远端设备读取到的数据写入发起端设备网卡的内存中,再由该网卡的处理器将该写入的数据发送到发起端设备处理器的内存中。而对于发起端设备对远端设备的存储器写数据的过程,发起端设备网卡需要先将数据从处理器的内存中搬移到网卡自身的内存中,然后网卡的处理器再与远端设备的网卡交互实现将数据写入远端设备的存储器中。通过网卡的内存中转读写的数据,占用了网卡内存的带宽资源和空间,给网卡内存的带宽和存储空间带来了极大的压力。
综上所述,在通过NVMe over RDMA实现发起端设备对远端设备的存储器读写数据的过程中,如何减少网卡内存的带宽资源和存储空间的占用是本领域人员急需解决的技术问题。
发明内容
本申请提供一种数据处理方法及设备,能够减少网卡内存的带宽资源和存储空间的占用,降低了数据传输的时延。
第一方面,本申请提供一种数据处理方法,该方法包括:
第一设备的网卡向第二设备发送第一请求报文;上述第一请求报文用于请求读取第一数据,上述第一数据存储在上述第二设备的第一目的存储区域;上述网卡接收上述第二设备响应上述第一请求报文发送的第一响应报文;上述第一响应报文包括上述第一数据;上述网卡根据上述第一响应报文对第一存储地址发起直接存储器访问DMA将上述第一数据写入上述第一存储地址指向的内存区域,上述第一存储地址指向的内存区域属于上述第一设备的主机的内存区域;上述第一数据无需缓存到上述网卡的内存。
在本申请中,第一设备的网卡获取到第一数据后可以直接向第一存储地址发起DMA访问将该第一数据写入该第一存储地址,而不需要先将该第一数据缓存在网卡的内存中,从而可以减少了第一设备网卡内存的带宽资源和存储空间的占用,提高该网卡内存的带宽资源和存储空间的利用率,并且显著降低了数据传输的时延。
在一种可能的实施方式中,上述第一响应报文包括第一虚拟机内存编号,上述第一虚拟机内存编号指向上述主机配置给第一虚拟机的第一内存区域,上述第一内存区域包括上述第一存储地址指向的内存区域,上述网卡根据上述第一响应报文对第一存储地址发起直接存储器访问DMA将上述第一数据写入上述第一存储地址指向的内存区域,包括:上述网卡根据上述第一虚拟机内存编号向上述第一内存区域内的上述第一存储地址发起上述DMA将上述第一数据写入上述第一存储地址指向的内存区域。
在本申请中,在数据无需经第一设备的网卡内存中转的情况下,还可以实现对虚拟机的内存的直接存储器访问,以使的本申请进一步地支持复杂的存储业务处理。
在一种可能的实施方式中,在上述网卡将上述第一数据写入上述第一存储地址指向的内存区域之前,还包括:
上述网卡以上述第一虚拟机内存编号为索引查询到上述第一存储地址指向的内存区域在地址权限表包括的地址范围中,上述地址权限表包括上述网卡有权限发起上述DMA访问的地址范围。
在本申请中,通过校验网卡即将发起DMA访问的地址是否在可访问的范围内,在可访问的范围内才可以发起访问,保证的主机内存中的数据的安全性,避免了因不正常访问导致的数据泄密等问题。
在一种可能的实施方式中,上述第一请求报文包括上述第一虚拟机内存编号,上述第一虚拟机内存编号设置在上述第一请求报文的本地权限L_key字段中,上述L_key为上述网卡用于DMA访问上述主机内存的权限标识;上述第一虚拟机内存编号设置在上述第一响应报文的远端权限R_key字段中,上述R_key为上述第二设备的网卡用于远程访问上述主机内存的权限标识。
在本申请实施例中,可以采用虚拟机内存编号代替现有的L_key和R_key,并通过已有的但不再使用的字段(L_key字段和R_key字段)来承载虚拟机内存编号,从而可以提高该字段的使用率,避免因增加一个新的字段导致的资源占用过多的问题。
在一种可能的实施方式中,上述第一请求报文包括上述第一虚拟机内存编号,上述第一请求报文和上述第一响应报文包括虚拟机内存编号字段,上述第一虚拟机内存编号设置在上述虚拟机内存编号字段中;上述虚拟机内存编号字段为占用了上述第一请求报文和上述第一响应报文的长度length字段中的部分字节得到,上述length字段中除了上述虚拟机内存编号字段占用的字节之外的字节用于存储上述第一存储地址指向的内存区域包括的各个内存块的长度值;或者,上述虚拟机内存编号字段为占用了上述第一请求报文和上述第一响应报文的地址address字段中的部分字节得到,上述address字段中除了上述虚拟机内存编号字段占用的字节之外的字节用于存储上述第一存储地址指向的内存区域包括的各个内存块的起始地址的值。
在一种可能的实施方式中,上述第一请求报文包括上述第一虚拟机内存编号,上述第一请求报文和上述第一响应报文包括虚拟机内存编号字段,上述第一虚拟机内存编号设置在上述虚拟机内存编号字段中;上述第一请求报文中的上述虚拟机内存编号字段为占用了上述第一请求报文本地权限L_key字段中的部分字节得到,上述L_key字段中除了上述虚拟机内存编号字段占用的字节之外的字节用于存储上述网卡DMA访问上述第一存储地址指向的内存区域的权限标识,上述第一响应报文中的上述虚拟机内存编号字段为占用了上述第一响应报文远端权限R_key字段中的部分字节得到,上述R_key字段中除了上述虚拟机内存编号字段占用的字节之外的字节用于存储上述第二设备的网卡远程访问上述第一存储地址指向的内存区域的权限标识。
在上述两个可能的实施例中,通过占用已有的字段(length字段、address字段或者L_key字段和R_key字段)中多余的字节来新增加一个虚拟机内存编号字段以承载虚拟机内存编号,同样地,可以提高这些字段的使用率,避免因需要额外增加字节来增加一个新的字段导致的资源占用过多的问题。
第二方面,本申请提供一种数据处理方法,该方法包括:
第一设备的网卡向第二设备发送第二请求报文;上述第二请求报文用于请求在第二设备的第二目的存储区域写入第二数据,上述第二数据存储在第二存储地址指向的内存区域,上述第二存储地址指向的内存区域属于上述第一设备的主机的内存区域;上述网卡接收上述第二设备响应上述第二请求报文发送的第二响应报文;上述第二响应报文包括上述第二存储地址;上述网卡根据上述第二响应报文对上述第二存储地址发起直接存储器访问DMA读取上述第二数据;上述网卡向上述第二设备发送读取的上述第二数据,上述第二数据无需缓存到上述网卡的内存。
在本申请中,第一设备的网卡可以直接向第二存储地址发起DMA访问读取该第二数据,而不需要先将该第二数据缓存在网卡的内存中,从而可以减少了第一设备网卡内存的带宽资源和存储空间的占用,提高该网卡内存的带宽资源和存储空间的利用率,并且显著降低了数据传输的时延。
在一种可能的实施方式中,上述第二响应报文包括第二虚拟机内存编号,上述第二虚拟机内存编号指向上述主机配置给第二虚拟机的第二内存区域,上述第二内存区域包括上述第二存储地址指向的内存区域,上述网卡根据上述第二响应报文对上述第二存储地址发起直接存储器访问DMA读取上述第二数据,包括:上述网卡根据上述第二虚拟机内存编号向上述第二内存区域内的上述第二存储地址发起上述DMA读取上述第二数据。
在本申请中,在数据无需经第一设备的网卡内存中转的情况下,还可以实现对虚拟机的内存的直接存储器访问,以使的本申请进一步地支持复杂的存储业务处理。
在一种可能的实施方式中,在上述网卡根据上述第二虚拟机内存编号向上述第二内存区域内的上述第二存储地址发起上述DMA读取上述第二数据之前,还包括:上述网卡以上述第二虚拟机内存编号为索引查询到上述第二存储地址指向的内存区域在地址权限表包括的地址范围中,上述地址权限表包括上述网卡有权限发起上述DMA访问的地址范围。
在本申请中,通过校验网卡即将发起DMA访问的地址是否在可访问的范围内,在可访问的范围内才可以发起访问,保证的主机内存中的数据的安全性,避免了因不正常访问导致的数据泄密等问题。
在一种可能的实施方式中,上述第二请求报文包括上述第二虚拟机内存编号,上述第二虚拟机内存编号设置在上述第二请求报文的本地权限L_key字段中,上述L_key为上述网卡用于访问上述主机内存的权限标识;上述第二虚拟机内存编号设置在上述第二响应报文的远端权限R_key字段中,上述R_key为上述第二设备的网卡用于远程访问上述第二虚拟机内存编号的权限标识。
在本申请实施例中,可以采用虚拟机内存编号代替现有的L_key和R_key,并通过已有的但不再使用的字段(L_key字段和R_key字段)来承载虚拟机内存编号,从而可以提高该字段的使用率,避免因增加一个新的字段导致的资源占用过多的问题。
在一种可能的实施方式中,上述第二请求报文包括上述第二虚拟机内存编号,上述第二请求报文和上述第二响应报文包括虚拟机内存编号字段,上述第二虚拟机内存编号设置在上述虚拟机内存编号字段中;上述虚拟机内存编号字段为占用了上述第二请求报文和上述第二响应报文的长度length字段中的部分字节得到,上述length字段中除了上述虚拟机内存编号字段占用的字节之外的字节用于存储上述第二存储地址指向的内存区域包括的各个内存块的长度值;或者,上述虚拟机内存编号字段为占用了上述第二请求报文和上述第二响应报文的地址address字段中的部分字节得到,上述address字段中除了上述虚拟机内存编号字段占用的字节之外的字节用于存储上述第二存储地址指向的内存区域包括的各个内存块的起始地址的值。
在一种可能的实施方式中,上述第二请求报文包括上述第二虚拟机内存编号,上述第二请求报文和上述第二响应报文包括虚拟机内存编号字段,上述第二虚拟机内存编号设置在上述虚拟机内存编号字段中;上述第二请求报文中的上述虚拟机内存编号字段为占用了上述第二请求报文本地权限L_key字段中的部分字节得到,上述L_key字段中除了上述虚拟机内存编号字段占用的字节之外的字节用于存储上述网卡DMA访问上述第二存储地址指向的内存区域的权限标识,上述第二响应报文中的上述虚拟机内存编号字段为占用了上述第二响应报文远端权限R_key字段中的部分字节得到,上述R_key字段中除了上述虚拟机内存编号字段占用的字节之外的字节用于存储上述第二设备的网卡远程访问上述第二存储地址指向的内存区域的权限标识。
在上述两个可能的实施例中,通过占用已有的字段(length字段、address字段或者L_key字段和R_key字段)中多余的字节来新增加一个虚拟机内存编号字段以承载虚拟机内存编号,同样地,可以提高这些字段的使用率,避免因需要额外增加字节来增加一个新的字段导致的资源占用过多的问题。
第三方面,本申请提供一种数据处理方法,该方法包括:
第一设备的网卡接收来自上述第一设备主机的处理器的第三请求,上述第三请求用于请求在第二设备的第三目的存储区域写入第三数据,上述第三请求包括上述第三数据在上述第一设备的主机的内存中的第三存储地址;上述网卡根据上述第三请求对上述第三存储地址发起直接存储器访问DMA读取上述第三数据;上述网卡向上述第二设备发送读取的上述第三数据,上述第三数据无需经过上述网卡的内存。上述第三请求也可以称为第三命令。
在本申请实施例中,减少了两个交互的步骤,一个是第一设备的网卡向第二设备发送写入数据的请求报文,另一个是第二设备根据该请求报文向第一设备的网卡发送读取该数据的响应报文,在本申请中,第一设备的网卡直接读取数据发送给第二设备让第二设备写入目的存储区域中,从而极大的提高的数据写入的效率,降低了数据写入的时延。
在一种可能的实施方式中,上述第三请求中包括标识,上述标识用于指示上述网卡读取上述第三数据,上述网卡根据上述第三请求对上述第三存储地址发起直接存储器访问DMA读取上述第三数据,包括:上述网卡根据上述标识对上述第三存储地址发起上述DMA读取上述第三数据。
在本申请中,可以通过一个标识来触发第一设备的网卡直接DMA主机的内存读取需要写入到第二设备的内存中的数据,简单便捷。
在一种可能的实施方式中,上述第三请求还包括第三虚拟机内存编号,上述第三虚拟机内存编号指向上述主机配置给第一虚拟机的第三内存区域,上述第三内存区域包括上述第三存储地址指向的内存区域,
上述网卡对上述第三存储地址发起直接存储器访问DMA读取上述第三数据,包括:
上述网卡根据上述第三虚拟机内存编号向上述第三内存区域内的上述第三存储地址发起直接存储器访问DMA读取上述第三数据。
在本申请中,在数据无需经第一设备的网卡内存中转的情况下,还可以实现对虚拟机的内存的直接存储器访问,以使的本申请进一步地支持复杂的存储业务处理。
第四方面,本申请提供一种数据处理网卡,该网卡为第一设备中的网卡,该网卡包括:
发送单元,用于向第二设备发送第一请求报文;上述第一请求报文用于请求读取第一数据,上述第一数据存储在上述第二设备的第一目的存储区域;
接收单元,用于接收上述第二设备响应上述第一请求报文发送的第一响应报文;上述第一响应报文包括上述第一数据;
写入单元,用于通过上述网卡的硬件组件根据上述第一响应报文对第一存储地址发起直接存储器访问DMA将上述第一数据写入上述第一存储地址指向的内存区域,上述第一存储地址指向的内存区域属于上述第一设备的主机的内存区域;上述第一数据无需缓存到上述网卡的内存。
在一种可能的实施方式中,上述第一响应报文包括第一虚拟机内存编号,上述第一虚拟机内存编号指向上述主机配置给第一虚拟机的第一内存区域,上述第一内存区域包括上述第一存储地址指向的内存区域,上述写入单元具体用于:根据上述第一虚拟机内存编号向上述第一内存区域内的上述第一存储地址发起上述DMA将上述第一数据写入上述第一存储地址指向的内存区域。
在一种可能的实施方式中,上述网卡还包括查询单元,用于在上述写入单元将上述第一数据写入上述第一存储地址指向的内存区域之前,以上述第一虚拟机内存编号为索引查询到上述第一存储地址指向的内存区域在地址权限表包括的地址范围中,上述地址权限表包括上述网卡有权限发起上述DMA访问的地址范围。
在一种可能的实施方式中,上述第一请求报文包括上述第一虚拟机内存编号,上述第一虚拟机内存编号设置在上述第一请求报文的本地权限L_key字段中,上述L_key为上述网卡用于DMA访问上述主机内存的权限标识;上述第一虚拟机内存编号设置在上述第一响应报文的远端权限R_key字段中,上述R_key为上述第二设备的网卡用于远程访问上述主机内存的权限标识。
在一种可能的实施方式中,上述第一请求报文包括上述第一虚拟机内存编号,上述第一请求报文和上述第一响应报文包括虚拟机内存编号字段,上述第一虚拟机内存编号设置在上述虚拟机内存编号字段中;上述虚拟机内存编号字段为占用了上述第一请求报文和上述第一响应报文的长度length字段中的部分字节得到,上述length字段中除了上述虚拟机内存编号字段占用的字节之外的字节用于存储上述第一存储地址指向的内存区域包括的各个内存块的长度值;或者,上述虚拟机内存编号字段为占用了上述第一请求报文和上述第一响应报文的地址address字段中的部分字节得到,上述address字段中除了上述虚拟机内存编号字段占用的字节之外的字节用于存储上述第一存储地址指向的内存区域包括的各个内存块的起始地址的值。
在一种可能的实施方式中,上述第一请求报文包括上述第一虚拟机内存编号,上述第一请求报文和上述第一响应报文包括虚拟机内存编号字段,上述第一虚拟机内存编号设置在上述虚拟机内存编号字段中;上述第一请求报文中的上述虚拟机内存编号字段为占用了上述第一请求报文本地权限L_key字段中的部分字节得到,上述L_key字段中除了上述虚拟机内存编号字段占用的字节之外的字节用于存储上述网卡DMA访问上述第一存储地址指向的内存区域的权限标识,
上述第一响应报文中的上述虚拟机内存编号字段为占用了上述第一响应报文远端权限R_key字段中的部分字节得到,上述R_key字段中除了上述虚拟机内存编号字段占用的字节之外的字节用于存储上述第二设备的网卡远程访问上述第一存储地址指向的内存区域的权限标识。
第五方面,本申请提供一种数据处理网卡,该网卡为第一设备中的网卡,该网卡包括:
发送单元,用于向第二设备发送第二请求报文;上述第二请求报文用于请求在第二设备的第二目的存储区域写入第二数据,上述第二数据存储在第二存储地址指向的内存区域,上述第二存储地址指向的内存区域属于上述第一设备的主机的内存区域;
接收单元,用于接收上述第二设备响应上述第二请求报文发送的第二响应报文;上述第二响应报文包括上述第二存储地址;
读取单元,用于通过上述网卡的硬件组件根据上述第二响应报文对上述第二存储地址发起直接存储器访问DMA读取上述第二数据;
上述发送单元,还用于向上述第二设备发送读取的上述第二数据,上述第二数据无需缓存到上述网卡的内存。
在一种可能的实施方式中,上述第二响应报文包括第二虚拟机内存编号,上述第二虚拟机内存编号指向上述主机配置给第二虚拟机的第二内存区域,上述第二内存区域包括上述第二存储地址指向的内存区域,上述读取单元具体用于:根据上述第二虚拟机内存编号向上述第二内存区域内的上述第二存储地址发起上述DMA读取上述第二数据。
在一种可能的实施方式中,上述网卡还包括查询单元,用于在上述读取单元根据上述第二虚拟机内存编号向上述第二内存区域内的上述第二存储地址发起上述DMA读取上述第二数据之前,以上述第二虚拟机内存编号为索引查询到上述第二存储地址指向的内存区域在地址权限表包括的地址范围中,上述地址权限表包括上述网卡有权限发起上述DMA访问的地址范围。
在一种可能的实施方式中,上述第二请求报文包括上述第二虚拟机内存编号,上述第二虚拟机内存编号设置在上述第二请求报文的本地权限L_key字段中,上述L_key为上述网卡用于访问上述主机内存的权限标识;上述第二虚拟机内存编号设置在上述第二响应报文的远端权限R_key字段中,上述R_key为上述第二设备的网卡用于远程访问上述第二虚拟机内存编号的权限标识。
在一种可能的实施方式中,上述第二请求报文包括上述第二虚拟机内存编号,上述第二请求报文和上述第二响应报文包括虚拟机内存编号字段,上述第二虚拟机内存编号设置在上述虚拟机内存编号字段中;上述虚拟机内存编号字段为占用了上述第二请求报文和上述第二响应报文的长度length字段中的部分字节得到,上述length字段中除了上述虚拟机内存编号字段占用的字节之外的字节用于存储上述第二存储地址指向的内存区域包括的各个内存块的长度值;或者,上述虚拟机内存编号字段为占用了上述第二请求报文和上述第二响应报文的地址address字段中的部分字节得到,上述address字段中除了上述虚拟机内存编号字段占用的字节之外的字节用于存储上述第二存储地址指向的内存区域包括的各个内存块的起始地址的值。
在一种可能的实施方式中,上述第二请求报文包括上述第二虚拟机内存编号,上述第二请求报文和上述第二响应报文包括虚拟机内存编号字段,上述第二虚拟机内存编号设置在上述虚拟机内存编号字段中;上述第二请求报文中的上述虚拟机内存编号字段为占用了上述第二请求报文本地权限L_key字段中的部分字节得到,上述L_key字段中除了上述虚拟机内存编号字段占用的字节之外的字节用于存储上述网卡DMA访问上述第二存储地址指向的内存区域的权限标识,
上述第二响应报文中的上述虚拟机内存编号字段为占用了上述第二响应报文远端权限R_key字段中的部分字节得到,上述R_key字段中除了上述虚拟机内存编号字段占用的字节之外的字节用于存储上述第二设备的网卡远程访问上述第二存储地址指向的内存区域的权限标识。
第六方面,本申请提供一种数据处理网卡,该网卡为第一设备中的网卡,该网卡包括:
接收单元,用于接收来自上述第一设备主机的处理器的第三请求,上述第三请求用于请求在第二设备的第三目的存储区域写入第三数据,上述第三请求包括上述第三数据在上述第一设备的主机的内存中的第三存储地址;
读取单元,用于根据上述第三请求对上述第三存储地址发起直接存储器访问DMA读取上述第三数据;
发送单元,用于向上述第二设备发送读取的上述第三数据,上述第三数据无需经过上述网卡的内存。
在一种可能的实施方式中,上述第三请求中包括标识,上述标识用于指示上述网卡读取上述第三数据,上述读取单元具体用于:根据上述标识对上述第三存储地址发起上述DMA读取上述第三数据。
在一种可能的实施方式中,上述第三请求还包括第三虚拟机内存编号,上述第三虚拟机内存编号指向上述主机配置给第一虚拟机的第三内存区域,上述第三内存区域包括上述第三存储地址指向的内存区域,上述读取单元具体用于:
根据上述第三虚拟机内存编号向上述第三内存区域内的上述第三存储地址发起直接存储器访问DMA读取上述第三数据。
第七方面,本申请提供一种网卡,该网卡包括处理器、接收接口、发送接口和存储器,其中,上述存储器用于存储计算机程序和数据,上述处理器用于执行上述存储器中存储的计算机程序,使得上述网卡执行如下操作:
通过该发送接口向第二设备发送第一请求报文;上述第一请求报文用于请求读取第一数据,上述第一数据存储在上述第二设备的第一目的存储区域;
通过该接收接口接收上述第二设备响应上述第一请求报文发送的第一响应报文;上述第一响应报文包括上述第一数据;
通过上述网卡的硬件组件根据上述第一响应报文对第一存储地址发起直接存储器访问DMA将上述第一数据写入上述第一存储地址指向的内存区域,上述第一存储地址指向的内存区域属于上述第一设备的主机的内存区域;上述第一数据无需缓存到上述网卡的内存。
在一种可能的实施方式中,上述第一响应报文包括第一虚拟机内存编号,上述第一虚拟机内存编号指向上述主机配置给第一虚拟机的第一内存区域,上述第一内存区域包括上述第一存储地址指向的内存区域,上述根据上述第一响应报文对第一存储地址发起直接存储器访问DMA将上述第一数据写入上述第一存储地址指向的内存区域,包括:
根据上述第一虚拟机内存编号向上述第一内存区域内的上述第一存储地址发起上述DMA将上述第一数据写入上述第一存储地址指向的内存区域。
在一种可能的实施方式中,在上述网卡将上述第一数据写入上述第一存储地址指向的内存区域之前,上述网卡还执行如下操作:
以所述第一虚拟机内存编号为索引查询到所述第一存储地址指向的内存区域在地址权限表包括的地址范围中,所述地址权限表包括所述网卡有权限发起所述DMA访问的地址范围。
第八方面,本申请提供一种网卡,该网卡包括处理器、接收接口、发送接口和存储器,其中,上述存储器用于存储计算机程序和数据,上述处理器用于执行上述存储器中存储的计算机程序,使得上述网卡执行如下操作:
通过该发送接口向第二设备发送第二请求报文;上述第二请求报文用于请求在第二设备的第二目的存储区域写入第二数据,上述第二数据存储在第二存储地址指向的内存区域,上述第二存储地址指向的内存区域属于上述第一设备的主机的内存区域;
通过该接收接口接收上述第二设备响应上述第二请求报文发送的第二响应报文;上述第二响应报文包括上述第二存储地址;
通过上述网卡的硬件组件根据上述第二响应报文对上述第二存储地址发起直接存储器访问DMA读取上述第二数据;
通过上述发送接口向上述第二设备发送读取的上述第二数据,上述第二数据无需缓存到上述网卡的内存。
在一种可能的实施方式中,上述第二响应报文包括第二虚拟机内存编号,上述第二虚拟机内存编号指向上述主机配置给第二虚拟机的第二内存区域,上述第二内存区域包括上述第二存储地址指向的内存区域,上述根据上述第二响应报文对上述第二存储地址发起直接存储器访问DMA读取上述第二数据,包括:根据上述第二虚拟机内存编号向上述第二内存区域内的上述第二存储地址发起上述DMA读取上述第二数据。
在一种可能的实施方式中,在上述网卡根据上述第二虚拟机内存编号向上述第二内存区域内的上述第二存储地址发起上述DMA读取上述第二数据之前,上述网卡还执行如下操作:
以上述第二虚拟机内存编号为索引查询到上述第二存储地址指向的内存区域在地址权限表包括的地址范围中,上述地址权限表包括上述网卡有权限发起上述DMA访问的地址范围。
第九方面,本申请提供一种网卡,该网卡包括处理器、接收接口、发送接口和存储器,其中,上述存储器用于存储计算机程序和数据,上述处理器用于执行上述存储器中存储的计算机程序,使得上述网卡执行如下操作:
通过该接收接口接收来自上述第一设备主机的处理器的第三请求,上述第三请求用于请求在第二设备的第三目的存储区域写入第三数据,上述第三请求包括上述第三数据在上述第一设备的主机的内存中的第三存储地址;
通过上述网卡的硬件组件根据上述第三请求对上述第三存储地址发起直接存储器访问DMA读取上述第三数据;
通过该发送接口向上述第二设备发送读取的上述第三数据,上述第三数据无需经过上述网卡的内存。
在一种可能的实施方式中,上述第三请求中包括标识,上述标识用于指示上述网卡读取上述第三数据,上述通过上述网卡的硬件组件根据上述第三请求对上述第三存储地址发起直接存储器访问DMA读取上述第三数据,包括:通过上述网卡的硬件组件根据上述标识对上述第三存储地址发起上述DMA读取上述第三数据。
上述第三请求还包括第三虚拟机内存编号,上述第三虚拟机内存编号指向上述主机配置给第一虚拟机的第三内存区域,上述第三内存区域包括上述第三存储地址指向的内存区域,
上述网卡对上述第三存储地址发起直接存储器访问DMA读取上述第三数据,包括:
上述网卡根据上述第三虚拟机内存编号向上述第三内存区域内的上述第三存储地址发起直接存储器访问DMA读取上述第三数据。
第十方面,本申请提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行以实现上述第一方面任意一项所述的方法;或者,该计算机程序被处理器执行以实现上述第二方面任一项所述的方法;或者,该计算机程序被处理器执行以实现上述第三方面任一项所述的方法。
第十一方面,本申请提供一种计算机程序产品,当该计算机程序产品被计算机读取并执行时,上述第一方面任意一项所述的方法将被执行;或者,当该计算机程序产品被计算机读取并执行时,上述第二方面任意一项所述的方法将被执行;或者,当该计算机程序产品被计算机读取并执行时,上述第三方面任意一项所述的方法将被执行。
综上所述,在本申请中,第一设备的网卡可以直接向该第一设备的主机内存发起DMA访问读取或写入数据,而不需要先将该数据缓存在网卡的内存中,从而可以减少了第一设备网卡内存的带宽资源和存储空间的占用,提高该网卡内存的带宽资源和存储空间的利用率,并且显著降低了数据传输的时延。
附图说明
下面将对本申请实施例中所需要使用的附图作介绍。
图1所示为本申请实施例提供的一种场景示意图;
图2所示为本申请实施例提供的一种设备的结构示意图;
图3所示为本申请实施例提供的一种数据处理方法的流程示意图;
图4A和图4B所示为本申请实施例提供的一种报文的部分结构示意图;
图5A和图5B所示为本申请实施例提供的另一种报文的部分结构示意图;
图6A和图6B所示为本申请实施例提供的另一种报文的部分结构示意图;
图7A和图7B所示为本申请实施例提供的另一种报文的部分结构示意图;
图8所示为本申请实施例提供的另一种数据处理方法的流程示意图;
图9所示为本申请实施例提供的另一种数据处理方法的流程示意图;
图10所示为本申请实施例提供的一种网卡的逻辑结构示意图;
图11所示为本申请实施例提供的另一种网卡的逻辑结构示意图;
图12所示为本申请实施例提供的另一种网卡的逻辑结构示意图。
具体实施方式
下面结合附图对本申请的实施例进行描述。
图1所示为本申请实施例提供的数据处理方法适用的一种可能的应用场景,该场景包括第一设备101和第二设备102,该第一设备101和第二设备102可以互相通信。在本申请实施例中,第一设备101和第二设备102可以支持NVMe over RDMA标准,例如支持RoCE技术标准、iWARP技术标准和IB技术标准等,因此,第一设备101和第二设备102可以实现远程直接数据存取RDMA通信。
第一设备101可以是客户端,客户端可以包括服务器或工作站等;其中,服务器可以包括任意能够实现计算功能的服务器。客户端还可以包括手持设备(例如,手机、平板电脑、掌上电脑等)、车载设备、可穿戴设备(例如智能手表、智能手环、计步器等)、笔记本电脑、台式电脑、智能家居设备(例如,冰箱、电视、空调、电表等)、智能机器人、车间设备,以及各种形式的用户设备(User Equipment,UE)、移动台(Mobile station,MS)、终端设备(Terminal Equipment),等等。
第二设备102可以是服务器,服务器可以包括但不限于后台服务器,或数据存储设备等。
或者,第一设备101和第二设备102均可以为上述客户端;或者,第一设备101和第二设备102均可以为上述服务器;或者,第一设备101为上述服务器,第二设备102为上述客户端。
本申请实施例提供的数据处理方法的应用场景不限于上述图1所示的场景,图1所示场景仅为一个示例,可以应用本申请实施例提供的数据处理方法的场景均在本申请的保护范围之内。
参见图2,图2所示为本申请实施例提供的第一设备的硬件结构示意图,第一设备可以是图1所示的第一设备101。图2所示第一设备200包括主机210和网卡220。其中,主机210包括主机的处理器211和主机的内存储器212,该主机的内存储器可以简称为主机的内存。网卡220包括硬件组件221、处理器子系统222和网卡的内存储器223,该网卡的内存储器可以简称为网卡的内存。处理器子系统222又包括网卡处理器2221和内存控制器2222。
主机的处理器211和主机的内存储器212可以通过内部总线来连接。内部总线可以是高级系统总线(advanced system bus,ASB)、高级高性能总线(advanced high-performance bus,AHB)或者一致性集线器接口(coherent hub interface,CHI)总线等。
主机的处理器211可以是中央处理器(central processing unit,CPU)、复杂可编程逻辑器件、通用处理器、数字信号处理器、专用集成电路、现场可编程门阵列或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理器和微处理器的组合等等。
主机的处理器211可以包括一个或多个处理器,当包括多个处理器时,这多个处理器可以集成在同一块芯片上,也可以各自为独立的芯片。一个处理器可以包括一个或多个处理核,以下实施例均以多核为例来介绍,但是本发明实施例提供的数据处理方法也可以应用于单核处理器。
在本申请实施例中主机的处理器211可以用于接收用户输入的获取或写入数据的指令,然后向网卡220发送在目的地址读取或写入数据的命令,主机的处理器211还可以用于执行其它的操作,具体参见下面的实施例的描述,此处暂不详述。下面实施例中描述的主机所做的操作均为主机的处理器所做的操作,特此说明。
主机的内存储器212和网卡的内存储器223均可以是内存条、同步动态随机存取内存(synchronous dynamic random-access memory,SDRAM)或者双倍速率同步动态随机存取内存(double data ratesynchronous dynamic random-access memory,DDR SDRAM)等,DDR SDRAM可以简称为DDR。存储器是任何存储数据的器件,不限于此处描述的几种。
主机的内存储器212可以用于主机的处理器211的运行程序和其它数据的存储。
网卡的硬件组件221通过总线接口与主机210连接,该总线接口可以是外设部件互连标准(peripheral component interconnect,PCI)总线或者快捷外围部件互连标准(peripheral component interconnect express,PCIe)总线等。这样连接可以是使得网卡可以通过自身的硬件组件221对主机的内存储器212发起直接存储器访问(direct memoryaccess,DMA)操作。
网卡内部的硬件组件221、网卡处理器2221、内存控制器2222和网卡的内存储器223之间也可以通过上述内部总线来连接。
在一种可能的实施方式中,硬件组件221与网卡处理器2221之间也可以通过PCI总线或者PCIe总线等来连接。同样的,这样连接可以是使得网卡可以通过自身的硬件组件221对网卡的内存储器223发起DMA操作。
网卡的硬件组件221还包括网络接口,网络接口可以为有线接口或无线接口。对于需要用网线连接的网卡,其网路接口为有线接口,有线接口可以是尼尔-康塞曼卡口(bayonet neill-concelman,BNC)连接器或者注册的插座45(registered jack,RJ45)接口等。对于无线网卡来说,网络接口为无线接口,该无线接口可以是基于无线局域网络(wireless local area network,WLAN)协议的无线接口。网卡可以通过网络接口实现报文的发送和接收。网络接口可以包括发送接口和接收接口,其中发送接口可以用于发送报文,接收接口可以用于接收报文。
硬件组件221可以是通道适配器(channel adapter,CA),能够将系统连接到支持RDMA的局域网(Fabric)。对于无限带宽(InfiniBand,IB)技术,一个CA就是IB子网中的一个终端结点(End Node)。CA分为两种类型,一种是主机通道适配器(host channel adapter,HCA),另一种叫做目标通道适配器(target channel adapter,TCA)。其中,HCA是支持"verbs"接口的CA,TCA不需要像HCA一样支持很多功能。而对于RoCE技术和iWARP技术,CA的概念被实体化为支持RDMA功能的网络接口卡(RDMA network interface card,RNIC),RoCE和iWARP就把一个CA称之为一个RNIC,即硬件组件221可以是一个RNIC。
处理器子系统222主要用于协议(例如NVMe over Fabric协议)和存储业务处理,通常会运行操作系统(operating system,OS),这样可以在其上面运行复杂的业务处理软件。在本申请中,处理器子系统222还可以用于增强RNIC协议的处理,具体该协议如何运行可以参见下面介绍的数据处理方法,此处暂不赘述。
网卡处理器2221可以是CPU、复杂可编程逻辑器件、通用处理器、数字信号处理器、专用集成电路、现场可编程门阵列或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理器和微处理器的组合等等。网卡处理器2221可以用于读取上述网卡的内存储器223中存储的程序,执行本申请提供的数据处理方法。
内存控制器2222可以用于控制网卡的内存储器223并且负责网卡的内存储器223与网卡处理器2221之间的数据交换。
网卡的内存储器223可以用于网卡处理器2221的运行程序和硬件组件221的部分表项的存储,由于硬件组件221内部集成的存储器是很小的,更大规模的表项需要存储在网卡的内存储器223中。
另外,本申请实施例中的第二设备(可以是图1所示的第二设备102)可以与本申请实施例提供的第一设备例如上述图2所示的第一设备200为同类型的设备,或者,该第二设备也可以是其它的支持NVMe over fabric的设备。
在一种可能的实施方式中,上述图2中所述的处理器子系统222是可选的,即网卡220中可以不包括该处理器子系统222,上述所述的该处理器子系统222所做的操作可以由主机的处理器211来做。
在介绍本申请实施例提供的数据处理方法之前,先介绍本申请涉及到的RDMA技术的相关概念。
1、队列对(queue pairs,QP)
RDMA通信基于三条队列即发送队列(send queue,SQ)、接收队列(receive queue,RQ)和完成队列(completion queue,CQ)组成的集合来实现。其中,SQ和RQ负责调度工作,他们总是成对被创建,称之为队列对QP。当放置在工作队列(SQ或RQ)上的指令被完成的时候,CQ用来发送完成的通知。
当主机的处理器把指令放置到工作队列的时候,就意味着告诉该设备的网卡哪些缓冲区(buffer,注册的内存在使用的时候可以称为缓冲区)的数据需要被发送或者哪些缓冲区用来接收数据。这些指令是一些小的结构体,称之为工作请求(work requests,WR)或者工作队列元素(work queue elements,WQE)。一个WQE主要包含一个指向某个缓冲区的指针。一个放置在发送队列SQ里的WQE中包含一个指向待发送数据的缓冲区的指针。一个放置在接收队列RQ里的WQE中的指针指向一段缓冲区,该缓冲区用来存放待接收的数据。
2、RDMA发送(RDMA send)和RDMA接收(RDMA receive)
RDMA send操作用于通过发送队列SQ发送数据到远端设备的接收队列RQ。该远端设备必须预先注册一个接收缓冲区用于接收该数据。RDMA receive操作对应的操作是RDMAsend操作,接收端被通知数据将要到来,那么接收端负责接收缓冲区的注册和维护。
3、RDMA读(RDMA read)和RDMA写(RDMA write)
RDMA read指的是一个设备(例如上述图1中的第二设备102)从远端设备(例如上述图1中的第一设备101)的内存读取数据,RDMA write指的是一个设备(例如上述图1中的第二设备102)将数据写入远端设备(例如上述图1中的第一设备101)的内存中。RDMA read操作和RDMA write操作可以通过获取的权限直接管理远端设备的内存而不需要通知远端设备主机的处理器。对于RDMA read和RDMA write,在操作完成之前远端设备主机的处理器是无感知的。
4、物理功能(physical function,PF)、虚拟功能(virtual function,VF)和可分配设备接口(assignable device interface,ADI)
为了提高输入/输出(input/output,I/O)设备的利用率和数据的传输时延,单根输入输出虚拟化(single root I/O virtualization,SR-IOV)技术实现了将具有SR-IOV功能的I/O设备定义成为一种外围设备物理功能PF,并且能在PF下,创建多个虚拟功能设备VF。VF能共享PF的物理资源(例如网卡端口和缓存空间等),并且与SR-IOV服务器上的虚拟机(virtual machine,VM)系统进行关联。
例如,假设具有SR-IOV功能的I/O设备为存储设备,SR-IOV技术可以虚拟化出多个虚拟功能VF,每个虚拟功能VF负责管理该存储设备中的一块存储空间,此时,该多个VF对虚拟机而言则相当于多个存储控制器。每个VF负责管理的存储空间都有一个编号,可以称为VF编号。当需要I/O访问某个VF管理的存储空间时,需要知道该存储空间的VF编号,通过该VF编号查找到唯一对应的存储空间。
另外,I/O虚拟化技术还包括可扩展输入输出虚拟化(scalable I/Ovirtualization,scalableIOV)技术,与SR-IOV技术类似,物理功能PF还可以配置为支持多个轻量级可分配设备接口ADI,这些接口可以类似地分配给不同虚拟机作为虚拟设备。
还是以假设具有scalableIOV功能的I/O设备为存储设备为例说明,scalableIOV技术可以针对该存储设备虚拟化出多个ADI,每个ADI可以用于访问该存储设备中的一块存储空间。每个ADI对应的存储空间都有一个编号。当需要I/O访问某个ADI的存储空间时,需要知道该存储空间的编号,通过该编号查找到唯一对应的存储空间。
由于现有的技术方案中通过RDMA实现第一设备对第二设备的存储器读写数据的过程中,需要通过第一设备的网卡的内存中转读写的数据,给第一设备的网卡内存的带宽和存储空间带来了极大的压力,因此,本申请提供了一种数据处理方法,能够实现在第一设备对第二设备的存储器读写数据的过程中,无需通过第一设备的网卡的内存中转读写的数据,从而减少了第一设备网卡内存的带宽资源和存储空间的占用,提高该网卡内存的带宽资源和存储空间的利用率,并且显著降低了数据传输的时延。
基于上述的描述,下面通过几个实施例介绍本申请提供的一种数据处理方法。
实施例一
下面首先介绍本申请实施例提供的第一设备从第二设备的存储器中读取数据的数据处理方法。参见图3,该方法可以基于图1所示的场景和图2所示的结构或者其他的场景和结构来实现。该方法可以包括但不限于如下步骤:
S301、第一设备的网卡接收来自该第一设备的主机的第一命令,该第一命令用于请求在第二设备的第一目的存储区域读取第一数据,该第一命令包括第一存储地址和该第一目的存储区域的地址。
该第一存储地址指向的内存区域用于存储读取的第一数据,该第一存储地址指向的内存区域属于该第一设备的主机的内存区域。
该第一设备例如可以是图1所示的第一设备101,该主机可以是图2所示的主机210,该网卡可以是图2所示的网卡220。
在具体实施例中,第一设备的网卡接收来自该第一设备主机的第一命令之前,第一设备的网卡与第二设备的网卡之间需要创建好执行RDMA通信用的队列对QP。
具体的,第一设备的网卡和第二设备的网卡建立好各自的队列对,即第一设备的网卡建立自身的发送队列SQ1和接收队列RQ1,第二设备的网卡建立自身的发送队列SQ2和接收队列RQ2。另外,第一设备的网卡还建立了完成队列CQ1,用于发送指令完成的通知;同样的,第二设备的网卡也建立了完成队列CQ2,用于发送指令完成的通知。
其中,第一设备的网卡的发送队列SQ1发送的消息由第二设备的网卡的接收队列接收RQ2,第二设备的网卡的发送队列SQ2发送的消息由第一设备的网卡的接收队列接收RQ1。完成队列CQ主要用于发送RDMA send操作和RDMA receive操作完成的通知,同样的,RDMA read操作和RDMA write操作完成的通知也可以通过CQ来发送。
在完成队列对创建的操作之后,第一设备的主机响应于接收的用户输入的获取数据的操作生成上述第一命令。该接收的用户输入的获取数据的操作例如可以是针对某个文件的打开操作或者下载操作等,本方案对具体的获取数据的指令不做限制。由于对于第一设备来说,文件的存储地址、属性例如文件包括的数据大小等均已经存储在第一设备中,因此,第一设备可以根据对应的文件读取操作获取到这些信息。
然后,上述第一设备的主机向自身的网卡发送上述第一命令,具体的,该主机将该第一命令放置在上述创建好的发送队列SQ1上,然后,由该网卡通过自身的硬件组件(例如图2所示的硬件组件221)来接收该第一命令。
该第一命令可以是一个输入/输出(input/output,I/O)读命令。该第一命令中可以包括第一目的地址信息、第一数据的大小、分散和集中(scatter and gather,SG)列表。该SG列表可以称为第一SG列表。
其中,该第一目的地址信息即为上述第一目的存储区域的地址,可以包括目的存储卷信息和读取的存储地址信息,该目的存储卷信息指的是待读取的数据即上述第一数据在第二设备的存储卷的编号,该读取的存储地址信息指的是在该存储卷中存储该第一数据的起始地址。
该第一数据的大小指的是待读取的该第一数据的数据量的大小。例如,该第一数据的大小可以为512兆字节等。
该第一SG列表用于指示第一设备读取该第一数据后该第一数据在第一设备中的存储位置,即该第一SG列表指示上述第一存储地址。该第一存储地址指向的内存区域可以包括n(该n为大于或等于1的整数)个内存块,该n个内存块合起来就构成了读取的该第一数据所需的全部内存空间。那么,第一SG列表可以包括该n个内存块的地址信息,具体的,该第一SG列表中可以包括该n个内存块中每一个内存块的起始地址和长度。内存块的长度指的是该内存块的大小,例如该内存块的大小为512字节,那么可以说该内存块的长度为512字节。
S302、第一设备的网卡根据上述第一命令生成第一表项添加到地址权限表中。
第一设备的网卡接收到第一命令之后,根据该第一命令生成上述第一表项,该第一表项的内容包括一个地址范围,该地址范围包括上述第一SG列表指示的地址即包括上述第一存储地址。然后,第一设备的网卡将该生成的第一表项添加到地址权限表中,该地址权限表包括该第一设备的网卡可以直接发起存储器访问(direct memory access,DMA)的地址范围和读写权限。该读写权限例如可以是允许写、允许读或者该读写权限可以是既允许读也可以允许写等等。
另外,该第一设备的网卡还根据上述第一命令生成一个权限标识key,并将该权限标识key与上述第一表项进行关联,以使得通过该权限标识key可以索引到该第一表项,即该权限标识key是第一设备的网卡访问到该第一表项的索引。
需要说明的是,该权限标识key对于该第一设备的网卡来说为本地权限标识(locator key,L_key),而该权限标识key对于第二设备(该第二设备例如可以是图1所示的第二设备102)的网卡来说为远端权限标识(remote key,R_key)。
本地权限标识L_key用于被本地设备(例如第一设备)的网卡用来访问本地内存(例如上述第一SG列表指示的地址)。远端权限标识R_key用于提供给远端设备(例如第二设备)的网卡用来在RDMA操作期间允许该远端设备的网卡远程访问本地的内存(例如上述第一SG列表指示的地址)。
第一设备的网卡可以将该权限标识key与上述第一表项关联存储在该网卡的内存中,该网卡的内存例如可以是图2所示的网卡的内存储器223。
该地址权限表和权限标识key主要用于DMA访问时进行地址查验,后面会详细介绍,此处暂不赘述。
S303、该第一设备的网卡生成第一请求报文,该第一请求报文包括该第一命令中的信息。
S304、该第一设备的网卡向第二设备的网卡发送该第一请求报文。
第一设备的网卡生成上述第一表项之后,解析出上述第一命令为I/O读命令,然后,获取该第一命令中的第一目的地址信息、第一数据的大小和第一SG列表以及获取上述生成的权限标识key,将这些获取到的信息封装成上述第一请求报文。该第一请求报文可以是RDMA send报文,该RDMA send报文为I/O读报文。然后,第一设备的网卡将该第一请求报文通过发送队列SQ1向第二设备的网卡发送。发送完成后,第一设备的网卡可以通过完成队列CQ1向第一设备的主机发送已经发送完成的通知。
在该第一请求报文中添加上述权限标识key,并将该权限标识key发送给第二设备的网卡,就相当于将上述第一存储地址的操作权限给了该第二设备的网卡,即该第二设备的网卡可以根据该权限标识key对该第一存储地址发起RDMA写操作。
需要说明的是,该权限标识key对于该第一设备的网卡来说是本地权限标识L_key,因此,在上述第一请求报文中,该权限标识key的值写在L_key字段对应的数值的位置。
S305、该第二设备的网卡接收该第一请求报文,并解析出该第一请求报文为读数据的报文。
第二设备的网卡通过上述建立的接收队列RQ2接收该第一请求报文,该接收操作可以称为RDMA receive,接收完成后,第二设备的网卡可以通过完成队列CQ2向第二设备的主机发送已经接收完成的通知,即通知第二设备的主机接收到了该第一请求报文。
然后,该第二设备的网卡解析该第一请求报文得知该报文为I/O读报文,并获取该第一请求报文中的第一目的地址信息、第一数据的大小、第一SG列表以及权限标识key。
S306、该第二设备的网卡根据该第一请求报文读取该第一数据,并将读取的数据以及该第一请求报文中的第一存储地址封装成第一响应报文。
具体的,该第二设备的网卡根据上述获取的第一目的地址信息和第一数据的大小在对应的存储地址中读取上述第一数据,并将该第一数据、上述获取的第一SG列表以及权限标识key封装成第一响应报文,该第一响应报文可以为RDMA write报文。
需要说明的是,该权限标识key对于该第二设备的网卡来说是远端权限标识R_key,因此,在该第一响应报文中,该权限标识key的值写在R_key字段对应的数值的位置。
S307、该第二设备的网卡向该第一设备的网卡发送该第一响应报文。
该第二设备的网卡封装得到上述第一响应报文后,通过上述建立的发送队列SQ2向上述第一设备的网卡发送该第一响应报文。
S308、该第一设备的网卡接收该第一响应报文,并根据该第一响应报文对该第一存储地址发起DMA将该第一数据写入该第一存储地址指向的内存区域,该第一数据无需经过该网卡的内存。
该第一设备的网卡通过上述建立的接收队列RQ1接收该第一响应报文,并解析该第一响应报文获取报文中的第一数据、第一SG列表以及远端权限标识R_key(该R_key即为上述权限标识key)。
然后,第一设备的网卡通过该R_key索引到上述地址权限表中的第一表项,然后比对该第一SG列表指示的地址是否在该第一表项包括的地址范围内。
在该第一SG列表指示的地址在该第一表项包括的地址范围内的情况下,第一设备的网卡向第一SG列表中包括的地址发起DMA操作,将从第一响应报文中获得的第一数据写入到第一SG列表指示的地址区域中。具体的,可以通过该第一设备的网卡中的硬件组件向第一SG列表指示的地址发起DMA,该硬件组件例如可以是图2所示中的硬件组件221。
当然,只有上述R_key是正确的才能能够索引到上述第一表项,否则无法索引到上述第一表项,则第一设备的网卡无法发起上述DMA访问第一SG列表指示的地址。
在本申请中,第一设备的网卡获取到第一数据后可以直接向第一存储地址发起DMA访问将该第一数据写入该第一存储地址,而不需要先将该第一数据缓存在网卡的内存中,从而可以减少了第一设备网卡内存的带宽资源和存储空间的占用,提高该网卡内存的带宽资源和存储空间的利用率,并且显著降低了数据传输的时延。
S309、第一设备的网卡向第二设备的网卡发送第一数据写入完成的通知。
S310、第二设备的网卡根据该写入完成的通知向第一设备的网卡发送I/O读完成的消息。
S311、第一设备的网卡根据该I/O读完成的消息删除上述地址权限表中的第一存储地址,并向主机发送I/O读完成的消息。
上述第一设备的网卡将第一数据DMA写入第一存储地址后,通过上述发送队列SQ1向第二设备的网卡该第一数据写入完成的通知,第二设备的网卡通过接收队列RQ2接收该通知,获知第一设备的网卡已经成功完成第一数据的读取和写入。然后,该第二设备的网卡通过发送队列SQ2向该第一设备的网卡发送I/O读完成的消息。第一设备的网卡通过接收队列RQ1接收该I/O读完成的消息,根据该消息删除上述地址权限表中的上述第一SG列表包括的内存块的地址,以用于释放这些内存块的存储空间。然后,该第一设备的网卡向第一设备主机发送该I/O读完成的消息,使得主机感知这次I/O读已经完成。
实施例二
在一种可能的实施方式中,上述实施例一中所述的第一存储地址指向的内存区域可以是第一设备中的虚拟机(virtual machine,VM)的内存区域。虚拟机的内存是该第一设备的主机将主机的物理内存虚拟化后分配给虚拟机使用的内存,即虚拟化的内存可以与虚拟机进行关联;或者虚拟机的内存也可以是物理内存,即直接将物理内存关联到虚拟机供虚拟机使用。
每个虚拟机可以关联一个或多个内存区域,可以通过内存编号来区分每个虚拟机各自对应的内存区域。且这些编号可以与对应的虚拟机关联映射。
一种可能的实施方式中,如果该一个或多个内存区域是物理内存区域,则对于物理内存区域的编号可以称为物理功能编号PFID。
一种可能的实施方式中,如果该一个或多个内存区域是虚拟内存区域,若该虚拟内存区域为基于SR-IOV技术虚拟化得到的内存区域,则对于虚拟内存区域的编号可以称为虚拟功能编号(virtual function identification,VFID)。可选的,每一个虚拟功能可以对应一个虚拟网卡,即一个虚拟网卡管理的内存区域的编号可以为VFID。若该虚拟内存区域为基于scalable IOV技术虚拟化得到的内存区域,则对于虚拟内存区域的编号可以称为可分配设备接口编号(assignable device interface identification,ADIID)。
上述关于物理功能、虚拟功能和可分配设备接口的描述可以参见前述概念介绍中的第4点的据介绍,此处不再赘述。
一种可能的实施方式中,对于虚拟内存区域也可以通过进程来区分,那么对于虚拟内存区域的编号可以称为进程地址空间编号(process address spaceidentification,PASID)。
一种可能的实施方式中,对于虚拟内存区域也可以通过不同的虚拟机来区分,那么对于虚拟内存区域的编号可以称为虚拟机编号(virtual machine identification,VMID)。
一种可能的实施方式中,对于虚拟内存区域的编号可以直接称为地址空间编号(address space identification,ASID)等等。
在具体实施例中,上述对于虚拟机关联的内存区域的编号的划分或称谓只是一个示例,本方案对此不做限制。
在下面的实施示例中,不管是PFID或VFID还是PASID、VMID或ASID等统称为虚拟机内存编号。该虚拟机内存编号的主要作用就是为了区分VM的内存区域。这些虚拟机内存编号在为虚拟机配置内存区域时规划并存储在第一设备中。
假设上述第一SG列表指示的地址即上述第一存储地址对应的虚拟机内存编号可以称为第一虚拟机内存编号,那么,上述第一命令、第一请求报文以及第一响应报文中还包括该第一虚拟机内存编号,通过该第一虚拟机内存编号可以准确查找到上述第一存储地址对应的存储空间。
可选的,上述第一虚拟机内存编号可以包括一个或多个编号,例如,如果上述第一存储地址在虚拟机的一个内存区域的范围内,那么该第一虚拟机内存编号可以是该一个内存区域的编号;如果上述第一存储地址包括虚拟机的多个内存区域内的地址,那么该第一虚拟机内存编号可以是该多个内存区域的编号。
具体的,该第一存储地址包括该VM的n个内存块的地址,该n个内存块可以是虚拟机的一个内存区域中的内存块,或者,该n个内存块可以包括该虚拟机的多个内存区域中的内存块。为了使得上述第一设备的网卡能够准确地访问到该VM的n个内存块,上述第一命令中还可以包括该VM的n个内存块所在内存区域的虚拟机内存编号,即包括上述第一虚拟机内存编号。
在本申请实施方式中,可以用虚拟机内存编号代替上述权限标识key,即采用虚拟机内存编号作为第一设备的网卡访问上述地址权限表的索引。具体的,在上述S302步骤中第一设备的网卡将上述第一虚拟机内存编号与上述包括第一SG列表指示的地址的第一表项进行关联。
具体的,在上述第一请求报文中L_key字段写入的值为上述第一虚拟机内存编号,在上述第一响应报文中R_key字段写入的值也为该第一虚拟机内存编号。为了便于理解,可以参见图4A和图4B。
图4A的(1)中所示为现有的协议中上述第一请求报文中包括的地址(address)字段、本地权限(L_key)字段和长度(length)字段,该address字段、L_key字段和length字段分别占用64字节、32字节和32字节的长度。其中,该address字段用于写入上述VM的n个内存块每一个内存块的起始地址的值;该length字段用于写入上述VM的n个内存块每一个内存块的长度的值;而L_key字段可以用于写入用于访问该n个内存块的访问权限L_key的值,但是在本申请实施方式中,该L_key字段可以用于写入该VM的n个内存块每一个内存块所在内存区域的虚拟机内存编号,参见图4A的(2)。
图4B的(1)中所示为现有的协议中上述第一响应报文中包括的地址(address)字段、远端权限(R_key)字段和长度(length)字段,同样的,该address字段、R_key字段和length字段分别占用64字节、32字节和32字节的长度。其中,该address字段用于写入上述VM的n个内存块每一个内存块的起始地址的值;该length字段用于写入上述VM的n个内存块每一个内存块的长度的值;而R_key字段可以用于写入第二设备的网卡用于访问该n个内存块的访问权限R_key的值,但是在申请本申请实施方式中,该R_key字段可以用于写入该VM的n个内存块每一个内存块所在内存区域的虚拟机内存编号,参见图4B的(2)。
那么,当上述第一设备的网卡接收到该第一响应报文后,可以解析该第一响应报文获取到报文中的第一数据、第一SG列表以及该VM的n个内存块所在内存区域的虚拟机内存编号即上述第一虚拟机内存编号。当然,该第一SG列表中包括的是上述VM的n个内存块中每一个内存块的起始地址和长度。
然后,第一设备的网卡通过该第一虚拟机内存编号索引到上述第一表项,然后比对该第一SG列表指示的地址是否在该第一表项包括的地址范围内。
在该第一SG列表指示的地址在该第一表项包括的地址范围内的情况下,第一设备的网卡获取该第一虚拟机内存编号和第一SG列表中包括的地址,因为通过该第一虚拟机内存编号可以映射到对应的物理地址区域,只有找到对应的物理地址区域才能够准确找到第一SG列表中包括的地址。然后,第一设备的网卡根据该第一虚拟机内存编号和第一SG列表向第一SG列表中包括的地址发起DMA操作,将从第一响应报文中获得的第一数据写入到该第一虚拟机内存编号指示的该第一SG列表的地址中。具体的,可以通过该第一设备的网卡中的硬件组件向第一SG列表指示的地址发起DMA,该硬件组件例如可以是图2所示中的硬件组件221。其余的操作的具体实现可以参见上述图3所示方法的具体描述,此处不再赘述。
在一种可能的实施方式中,当上述第一设备的网卡接收到该第一响应报文后,可以不校验该第一响应报文中的第一SG列表指示的地址是否在上述第一表项包括的地址范围内,可以直接根据该第一响应报文中的第一虚拟机内存编号和第一SG列表中包括的地址发起DMA操作,将从第一响应报文中获得的第一数据写入到该第一虚拟机内存编号指示的该第一SG列表的地址中。
在一种可能的实施方式中,上述第一请求报文和上述第一响应报文中的虚拟机内存编号的值不限于写入在图4A和图4B所示的位置,上述VM的n个内存块所在内存区域的虚拟机内存编号在该第一请求报文和第一响应报文中的写入位置还可以包括以下几种情况:
第一种情况、占用第一请求报文和第一响应报文的length字段中的部分字节增加一个虚拟机内存编号字段。可以参见图5A和图5B。
图5A的(1)中所示为现有的协议中上述第一请求报文中包括的地址(address)字段、本地权限(L_key)字段和长度(length)字段,该address字段、L_key字段和length字段的描述可以参见上述对图4A的(1)中的描述,此处不再赘述。在本申请实施方式中,可以将该length字段中的部分字节划分出来作为虚拟机内存编号字段的空间,那么可以用这部分的字节来放置上述VM的n个内存块所在内存区域的虚拟机内存编号的值。例如,可以参见图5A的(2),可以将32字节的length字段中高位的14字节划分出来作为虚拟机内存编号字段的空间,剩下的18字节继续留作该length字段的空间。即可以将上述VM的n个内存块所在内存区域的虚拟机内存编号的值写入该14字节中,该VM的n个内存块每一个内存块的长度的值则写入该18字节中。
需要说明的是,从length字段中划分出来的字节数不限于14字节,也可以是12字节或者10字节等等,本方案对具体划分的字节数不做限制。另外,从length字段中划分出来的字节数不限于从高位划分,也可以从低位划分。
图5B的(1)中所示为现有的协议中上述第一响应报文中包括的地址(address)字段、远端权限(R_key)字段和长度(length)字段,该address字段、R_key字段和length字段的描述可以参见上述对图4B的(1)中的描述,此处不再赘述。在本申请实施方式中,可以将该length字段中的部分字节划分出来作为虚拟机内存编号字段的空间,那么可以用这部分的字节来放置上述VM的n个内存块的虚拟机内存编号的值。例如,可以参见图5B的(2),可以将32字节的length字段中高位的14字节划分出来作为虚拟机内存编号字段的空间,剩下的18字节继续留作该length字段的空间。即可以将上述VM的n个内存块所在内存区域的虚拟机内存编号的值写入该14字节中,该VM的n个内存块每一个内存块的长度的值则写入该18字节中。
需要说明的是,从length字段中划分出来的字节数不限于14字节,也可以是12字节或者10字节等等,本方案对具体划分的字节数不做限制。另外,从length字段中划分出来的字节数不限于从高位划分,也可以从低位划分。
第二种情况、占用第一请求报文的L_key字段和第一响应报文的R_key字段中的部分字节增加一个虚拟机内存编号字段。可以参见图6A和图6B。
图6A的(1)中所示为现有的协议中上述第一请求报文中包括的地址(address)字段、本地权限(L_key)字段和长度(length)字段,该address字段、L_key字段和length字段的描述可以参见上述对图4A的(1)中的描述,此处不再赘述。在本申请实施方式中,可以将该L_key字段中的部分字节划分出来作为虚拟机内存编号字段的空间,那么可以用这部分的字节来放置上述VM的n个内存块所在内存区域的虚拟机内存编号的值。例如,可以参见图6A的(2),可以将32字节的L_key字段中低位的12字节划分出来作为虚拟机内存编号字段的空间,剩下的20字节继续留作该L_key字段的空间。即可以将上述VM的n个内存块所在内存区域的虚拟机内存编号的值写入该12字节中,该VM的n个内存块的L_key的值则写入该20字节中。
需要说明的是,从L_key字段中划分出来的字节数不限于12字节,也可以是14字节或者10字节等等,本方案对具体划分的字节数不做限制。另外,从L_key字段中划分出来的字节数不限于从低位划分,也可以从高位划分。
图6B的(2)中所示为现有的协议中上述第一响应报文中包括的地址(address)字段、远端权限(R_key)字段和长度(length)字段,该address字段、R_key字段和length字段的描述可以参见上述对图4B的(1)中的描述,此处不再赘述。在本申请实施方式中,可以将该R_key字段中的部分字节划分出来作为虚拟机内存编号字段的空间,那么可以用这部分的字节来放置上述VM的n个内存块所在内存区域的虚拟机内存编号的值。例如,可以参见图6B的(2),可以将32字节的R_key字段中低位的12字节划分出来作为虚拟机内存编号字段的空间,剩下的20字节继续留作该R_key字段的空间。即可以将上述VM的n个内存块所在内存区域的虚拟机内存编号的值写入该12字节中,该VM的n个内存块的R_key的值则写入该20字节中。
需要说明的是,从R_key字段中划分出来的字节数不限于12字节,也可以是14字节或者10字节等等,本方案对具体划分的字节数不做限制。另外,从L_key字段中划分出来的字节数不限于从低位划分,也可以从高位划分。
第三种情况、占用第一请求报文和第一响应报文的address字段中的部分字节增加一个虚拟功能编号虚拟机内存编号字段。可以参见图7A和图7B。
图7A的(1)中所示为现有的协议中上述第一请求报文中包括的地址(address)字段、本地权限(L_key)字段和长度(length)字段,该address字段、L_key字段和length字段的描述可以参见上述对图4A的(1)中的描述,此处不再赘述。在本申请实施方式中,可以将该address字段中的部分字节划分出来作为虚拟机内存编号字段的空间,那么可以用这部分的字节来放置上述VM的n个内存块所在内存区域的虚拟机内存编号的值。例如,可以参见图7A的(2),可以将64字节的address字段中高位的12字节划分出来作为虚拟机内存编号字段的空间,剩下的52字节继续留作该address字段的空间。即可以将上述VM的n个内存块所在内存区域的虚拟机内存编号的值写入该12字节中,上述VM的n个内存块每一个内存块的起始地址的值则写入该52字节中。
需要说明的是,从address字段中划分出来的字节数不限于12字节,也可以是14字节或者10字节等等,本方案对具体划分的字节数不做限制。另外,从address字段中划分出来的字节数不限于从高位划分,也可以从低位划分。
图7B的(2)中所示为现有的协议中上述第一响应报文中包括的地址(address)字段、远端权限(R_key)字段和长度(length)字段,该address字段、R_key字段和length字段的描述可以参见上述对图4B的(1)中的描述,此处不再赘述。在本申请实施方式中,可以将该address字段中的部分字节划分出来作为虚拟机内存编号字段的空间,那么可以用这部分的字节来放置上述VM的n个内存块所在内存区域的虚拟机内存编号的值。例如,可以参见图7B的(2),可以将64字节的address字段中高位的12字节划分出来作为虚拟机内存编号字段的空间,剩下的52字节继续留作该address字段的空间。即可以将上述VM的n个内存块所在内存区域的虚拟机内存编号的值写入该14字节中,上述VM的n个内存块每一个内存块的起始地址的值则写入该52字节中。需要说明的是,从address字段中划分出来的字节数不限于12字节,也可以是14字节或者10字节等等,本方案对具体划分的字节数不做限制。另外,从address字段中划分出来的字节数不限于从高位划分,也可以从低位划分。
需要说明的是,在上述三种情况中,第一响应报文中既包括上述n个内存块的权限标识key,又包括该n个内存块所在内存区域的虚拟机内存编号,那么在校验第一响应报文中的第一SG列表的地址是否在地址权限表的范围内时,可以选择其中一个例如选择该n个内存块的权限标识key或者选择该n个内存块所在内存区域的虚拟机内存编号来作为地址权限表表项的索引,具体的可以根据实际情况确定,本方案对此不做限制。
实施例三
下面介绍本申请实施例提供的另一种数据处理方法:第一设备向第二设备的存储器中写入数据的数据处理方法。参见图8,该方法可以基于图1所示的场景和图2所示的结构或者其他的场景和结构来实现。该方法可以包括但不限于如下步骤:
S801、第一设备的网卡接收来自第一设备主机的第二命令,该第二命令用于请求在第二设备的第二目的存储区域写入第二数据,该第二命令包括第二存储地址和该第二目的存储区域的地址。
该第二存储地址指向的内存区域用于存储该第二数据,该第二存储地址指向的内存区域属于该第一设备的主机的内存区域。
该第一设备例如可以是图1所示的第一设备101,该主机可以是图2所示的主机210,该网卡可以是图2所示的网卡220。
在具体实施例中,第一设备的网卡接收来自该第一设备主机的第二命令之前,第一设备的网卡与第二设备的网卡之间需要创建好执行RDMA通信用的队列对QP。
具体的,第一设备的网卡和第二设备的网卡建立好各自的队列对,即第一设备的网卡建立自身的发送队列SQ1’和接收队列RQ1’,第二设备的网卡建立自身的发送队列SQ2’和接收队列RQ2’。另外,第一设备的网卡还建立了完成队列CQ1’,用于发送指令完成的通知;同样的,第二设备的网卡也建立了完成队列CQ2’,用于发送指令完成的通知。
其中,第一设备的网卡的发送队列SQ1’发送的消息由第二设备的网卡的接收队列接收RQ2’,第二设备的网卡的发送队列SQ2’发送的消息由第一设备的网卡的接收队列接收RQ1’。完成队列CQ主要用于发送RDMA send操作和RDMA receive操作完成的通知,同样的,RDMA read操作和RDMA write操作完成的通知也可以通过CQ来发送。
在完成队列对创建的操作之后,第一设备的主机响应于接收的用户输入的存储数据的指令生成上述第二命令。该接收的用户输入的保存数据的指令例如可以是针对某个文件的保存操作或者上传操作等,本方案对具体的保存数据的指令不做限制。
然后,上述第一设备的主机向自身的网卡发送上述第二命令,具体的,该主机将该第二命令放置在上述创建好的发送队列SQ1’上,然后,由该网卡通过自身的硬件组件(例如图2所示的硬件组件221)来接收该第二命令。
该第二命令可以是一个输入/输出(input/output,I/O)写命令。该第二命令中可以包括第二目的地址信息、第二数据的大小和第二SG列表。
其中,该第二目的地址信息即为上述第二目的存储区域的地址,可以包括目的存储卷信息和写入的存储地址信息,该目的存储卷信息指的是第二设备的存储卷的编号,该存储卷为用于写入上述第二数据的存储卷,该写入的存储地址信息指的是在该存储卷中存储该第二数据的起始地址。
该第二数据的大小指的是待写入的该第二数据的数据量的大小。例如,该第二数据的大小可以为512兆字节等。
该第二SG列表用于指示该第二数据在第一设备中的存储位置,即该第二SG列表指示上述第二存储地址。该第二存储地址指向的内存区域可以包括m1(该m1为大于或等于1的整数)个内存块,该m1个内存块合起来就构成了该第二数据占用的全部的内存空间。那么,第二SG列表可以包括该m1个内存块的地址信息,具体的,该第二SG列表中可以包括该m1个内存块中每一个内存块的起始地址和长度。内存块的长度指的是该内存块的大小,例如该内存块的大小为512字节,那么可以说该内存块的长度为512字节。
S802、第一设备的网卡根据上述第二命令生成第二表项添加到地址权限表中。
第一设备的网卡接收到第二命令之后,根据该第二命令生成上述第二表项,该第二表项的内容包括一个地址范围,该地址范围包括上述第二SG列表指示的地址即包括上述第二存储地址。然后,第一设备的网卡将该生成的第二表项添加到地址权限表中。关于地址权限表的描述可以参见上述S302中对应的介绍。
另外,该第一设备的网卡还根据上述第二命令生成一个权限标识key’,并将该权限标识key’与上述第二表项进行关联,以使得通过该权限标识key’可以索引到该第二表项,即该权限标识key’是第一设备的网卡访问到该第二表项的索引。
需要说明的是,该权限标识key’对于该第一设备的网卡来说为本地权限标识L_key’,而该权限标识key’对于第二设备(该第二设备例如可以是图1所示的第二设备102)的网卡来说为远端权限标识R_key’。
第一设备的网卡可以将该权限标识key’与上述第二表项关联存储在该网卡的内存中,该网卡的内存例如可以是图2所示的网卡的内存储器223。
同样的,该地址权限表和权限标识key’主要用于DMA访问时进行地址查验,后面会详细介绍,此处暂不赘述。
S803、第一设备的网卡生成第二请求报文,该第二请求报文包括该第二命令中的信息。
S804、第一设备的网卡向第二设备的网卡发送该第二请求报文。
第一设备的网卡生成上述第二表项之后,解析出上述第二命令为I/O写命令,然后,获取该第二命令中的第二目的地址信息、第二数据的大小和第二SG列表以及获取上述生成的权限标识key’,将这些获取到的信息封装成上述第二请求报文。该第二请求报文可以是RDMA send报文,该RDMA send报文为I/O写报文。然后,第一设备的网卡将该第二请求报文通过发送队列SQ1’向第二设备的网卡发送。发送完成后,第一设备的网卡可以通过完成队列CQ1’向第一设备的主机发送已经发送完成的通知。
在该第二请求报文中添加上述权限标识key’,并将该权限标识key’发送给第二设备的网卡,就相当于将该第二存储地址的操作权限给了该第二设备的网卡,即该第二设备的网卡可以根据该权限标识key’对该第二存储地址发起RDMA读操作。
需要说明的是,该权限标识key’对于该第一设备的网卡来说是本地权限标识L_key’,因此,在上述第二请求报文中,该权限标识key’的值写在L_key字段对应的数值的位置。
S805、第二设备的网卡接收该第二请求报文,并解析出该第二请求报文为写数据的报文。
第二设备的网卡通过上述建立的接收队列RQ2’接收该第二请求报文,该接收操作可以称为RDMA receive,接收完成后,第二设备的网卡可以通过完成队列CQ2’向第二设备的主机发送已经接收完成的通知,即通知第二设备的主机接收到了该第二请求报文。
然后,该第二设备的网卡解析该第二请求报文得知该报文为I/O写报文,并获取该第二请求报文中的第二目的地址信息、第二数据的大小、第二SG列表以及权限标识key’。
S806、第二设备的网卡将该第二请求报文中包括的信息封装成第二响应报文。
第二设备的网卡获取到上述第二请求报文中的第二目的地址信息、第二数据的大小、第二SG列表以及权限标识key’,将这些信息封装成第二响应报文,该第二响应报文可以为RDMAread报文。
需要说明的是,该权限标识key’对于该第二设备的网卡来说是远端权限标识R_key’,因此,在该第二响应报文中,该权限标识key’的值写在R_key字段对应的数值的位置。
S807、第二设备的网卡向第一设备的网卡发送该第二响应报文。
该第二设备的网卡封装得到上述第二响应报文后,通过上述建立的发送队列SQ2’向上述第一设备的网卡发送该第二响应报文。
S808、第一设备的网卡接收该第二响应报文,并根据该第二响应报文对该第二存储地址发起直接存储器访问DMA读取该第二数据,该第二数据无需经过该网卡的内存。
该第一设备的网卡通过上述建立的接收队列RQ1’接收该第二响应报文,并解析该第二响应报文获取报文中的第二目的地址信息、第二数据的大小、第二SG列表以及远端权限标识R_key’(该R_key’即为上述权限标识key’)。
然后,第一设备的网卡通过该远端权限标识R_key’索引到上述地址权限表中的第二表项,然后比对该第二SG列表指示的地址是否在该第二表项包括的地址范围内。
在该第二SG列表指示的地址在该第二表项包括的地址范围内的情况下,第一设备的网卡向第二SG列表中包括的地址发起DMA操作,从该第二SG列表指示的地址中按照第二数据的大小读取上述第二数据。具体的,可以通过该第一设备的网卡中的硬件组件向第二存储地址发起DMA,该硬件组件例如可以是图2所示中的硬件组件221。
当然,只有上述远端权限标识R_key’是正确的才能能够索引到上述第二表项,否则无法索引到上述第二表项,则第一设备的网卡无法发起上述DMA访问第二SG列表指示的地址。
在本申请中,第一设备的网卡可以直接向第二存储地址发起DMA访问读取该第二数据,而不需要先将该第二数据缓存在网卡的内存中,从而可以减少了第一设备网卡内存的带宽资源和存储空间的占用,提高该网卡内存的带宽资源和存储空间的利用率,并且显著降低了数据传输的时延。
S809、第一设备的网卡将读取的第二数据和从第二响应报文中获取的第二目的存储区域的地址一起封装成数据报文。
S8010、第一设备的网卡向第二设备的网卡发送该数据报文。
该第一设备的网卡从上述第二存储地址中读取第二数据之后,将该第二数据和上述第二目的存储区域的地址一起封装成一个数据报文,通过上述建立的发送队列SQ1’将该数据报文发送给第二设备的网卡。
S811、第二设备的网卡接收该数据报文,并将数据报文中的第二数据写入该第二目的存储区域中。
该第二设备的网卡通过上述建立的RQ2’接收该数据报文,然后解析该数据报文获取数据报文中的第二数据和第二目的存储区域的地址,并将该第二数据写入该第二目的存储区域中。
S812、第二设备的网卡向第一设备的网卡发送I/O写完成的消息。
S813、第一设备的网卡根据该I/O写完成的消息删除地址权限表中的第二存储地址,并向主机发送I/O写完成的消息。
上述第二设备的网卡完成上述第二数据的写入之后,通过发送队列SQ2’向该第一设备的网卡发送I/O写完成的消息。第一设备的网卡通过接收队列RQ1’接收该I/O写完成的消息,根据该消息删除上述地址权限表中的上述第二SG列表包括的内存块的地址,以用于释放这些内存块的存储空间。然后,该第一设备的网卡向第一设备主机发送该I/O写完成的消息,使得主机感知这次I/O写已经完成。
实施例四
在一种可能的实施方式中,上述实施例三中所述的第二存储地址指向的内存区域可以为第一设备中的虚拟机VM的内存区域。关于虚拟机的内存以及虚拟机内存编号的相关描述可以参见前述的介绍,此处不再赘述。
假设上述第二SG列表指示的地址即上述第二存储地址对应的虚拟机内存编号可以称为第二虚拟机内存编号,那么,上述第二命令、第二请求报文以及第二响应报文中还包括该第二虚拟机内存编号,通过该第二虚拟机内存编号可以准确查找到上述第二存储地址对应的存储空间。
可选的,上述第二虚拟机内存编号可以包括一个或多个编号,例如,如果上述第二存储地址在虚拟机的一个内存区域的范围内,那么该第二虚拟机内存编号可以是该一个内存区域的编号;如果上述第二存储地址包括虚拟机的多个内存区域内的地址,那么该第二虚拟机内存编号可以是该多个内存区域的编号。
具体的,该第二存储地址包括该VM的m1个内存块的地址,该m1个内存块可以是虚拟机的一个内存区域中的内存块,或者,该m1个内存块可以包括该虚拟机的多个内存区域中的内存块。为了使得上述第一设备的网卡能够准确地访问到该VM的m1个内存块,上述第二命令中还可以包括该VM的m1个内存块所在内存区域的虚拟机内存编号,即包括上述第二虚拟机内存编号。
在本申请实施方式中,可以用虚拟机内存编号代替上述权限标识key’,即采用虚拟机内存编号作为第一设备的网卡访问上述地址权限表的索引。具体的,在上述S802步骤中第一设备的网卡将上述第二虚拟机内存编号与上述包括第二SG列表指示的地址的第二表项进行关联。
具体的,在上述第二请求报文中L_key字段写入的值为该VM的m1个内存块所在内存区域的虚拟机内存编号,在上述第二响应报文中R_key字段写入的值也为该VM的m1个内存块所在内存区域的虚拟机内存编号。对于此处描述的理解,可以参见上述对图4A和图4B的描述,此处不再赘述。
那么,当上述第一设备的网卡接收到该第二响应报文后,可以解析该第二响应报文获取到报文中的第二目的地址信息、第二数据的大小、第二SG列表以及该VM的m1个内存块所在内存区域的虚拟机内存编号即上述第二虚拟机内存编号。当然,该第二SG列表中包括的是上述VM的m1个内存块中每一个内存块的起始地址和长度。
然后,第一设备的网卡通过该第二虚拟机内存编号索引到上述第二表项,然后比对该第二SG列表指示的地址是否在该第二表项包括的地址范围内。
在该第二SG列表指示的地址在该第二表项包括的地址范围内的情况下,第一设备的网卡获取该第二虚拟机内存编号和第二SG列表中包括的地址,因为通过该第二虚拟机内存编号可以映射到对应的物理地址区域,只有找到对应的物理地址区域才能够准确找到第二SG列表中包括的地址。然后,第二设备的网卡根据该第二虚拟机内存编号和第二SG列表向第二SG列表中包括的地址发起DMA操作,从该第二虚拟机内存编号指示的该第二SG列表的地址中按照上述第二数据的大小读取该第二数据。具体的,可以通过该第二设备的网卡中的硬件组件向第二SG列表指示的地址发起DMA,该硬件组件例如可以是图2所示中的硬件组件221。其余的操作的具体实现可以参见上述图8所示方法的具体描述,此处不再赘述。
在一种可能的实施方式中,当上述第一设备的网卡接收到该第二响应报文后,可以不校验该第二响应报文中的第二SG列表指示的地址是否在上述第二表项包括的地址范围内,可以直接根据该第二响应报文中的第二虚拟机内存编号和第二SG列表中包括的地址发起DMA操作,从该第二虚拟机内存编号指示的该第二SG列表的地址中按照上述第二数据的大小读取该第二数据。
在一种可能的实施方式中,上述第二请求报文和上述第二响应报文中的虚拟机内存编号的值不限于写入在图4A和图4B所示的位置,上述VM的n个内存块所在内存区域的虚拟机内存编号在该第二请求报文和第二响应报文中的写入位置还可以包括以下几种情况:
第一种情况、占用第二请求报文和第二响应报文的length字段中的部分字节增加一个虚拟机内存编号字段。具体的描述可以参见图5A和图5B,此处不再赘述。
第二种情况、占用第二请求报文的L_key字段和第二响应报文的R_key字段中的部分字节增加一个虚拟机内存编号字段。具体的描述可以参见图6A和图6B,此处不再赘述。
第三种情况、占用第二请求报文和第二响应报文的address字段中的部分字节增加一个虚拟机内存编号字段。具体的描述可以参见图7A和图7B,此处不再赘述。
同样需要说明的是,在上述三种情况中,第二响应报文中既包括上述m1个内存块的权限标识key’又包括该m1个内存块所在内存区域的虚拟机内存编号,那么在校验第二响应报文中的第二SG列表的地址是否在地址权限表的范围内时,可以选择其中一个例如选择该m1个内存块的权限标识key’或者选择该m1个内存块所在内存区域的虚拟机内存编号来作为地址权限表表项的索引,具体的可以根据实际情况确定,本方案对此不做限制。
实施例五
关于第一设备向第二设备的存储器中写入数据的数据处理方法,本申请还提供另一种可能的实施方式,可以参见图9,该方法可以基于图1所示的场景和图2所示的结构或者其他的场景和结构来实现。该方法可以包括但不限于如下步骤:
S901、第一设备的网卡接收来自第一设备主机的第三命令,该第三命令用于请求在第二设备的第三目的存储区域写入第三数据,该第三命令包括第三存储地址和该第三目的存储区域的地址。
该第三存储地址指向的内存区域用于存储该第三数据,该第二存储地址指向的内存区域属于该第一设备的主机的内存区域。
该第一设备例如可以是图1所示的第一设备101,该主机可以是图2所示的主机210,该网卡可以是图2所示的网卡220。
同样的,在具体实施例中,第一设备的网卡接收来自该第一设备主机的第三命令之前,第一设备的网卡与第二设备的网卡之间需要创建好执行RDMA通信用的队列对QP。
具体的,第一设备的网卡和第二设备的网卡建立好各自的队列对,即第一设备的网卡建立自身的发送队列SQ1”和接收队列RQ1”,第二设备的网卡建立自身的发送队列SQ2”和接收队列RQ2”。另外,第一设备的网卡还建立了完成队列CQ1”,用于发送指令完成的通知;同样的,第二设备的网卡也建立了完成队列CQ2”,用于发送指令完成的通知。
其中,第一设备的网卡的发送队列SQ1”发送的消息由第二设备的网卡的接收队列接收RQ2”,第二设备的网卡的发送队列SQ2”发送的消息由第一设备的网卡的接收队列接收RQ1”。完成队列CQ主要用于发送RDMA send操作和RDMA receive操作完成的通知,同样的,RDMA read操作和RDMA write操作完成的通知也可以通过CQ来发送。
在完成队列对创建的操作之后,第一设备的主机响应于接收的用户输入的存储数据的指令生成上述第三命令。该接收的用户输入的保存数据的指令例如可以是针对某个文件的保存操作或者上传操作等,本方案对具体的保存数据的指令不做限制。
然后,上述第一设备的主机向自身的网卡发送上述第三命令,具体的,该主机将该第三命令放置在上述创建好的发送队列SQ1”上,然后,由该网卡通过自身的硬件组件(例如图2所示的硬件组件221)来接收该第三命令。
该第三命令可以是一个输入/输出(input/output,I/O)写命令。该第三命令中可以包括第三目的地址信息、第三数据的大小和第三SG列表。
其中,该第三目的地址信息即为上述第三目的存储区域的地址,可以包括目的存储卷信息和写入的存储地址信息,该目的存储卷信息指的是第二设备的存储卷的编号,该存储卷为用于写入上述第三数据的存储卷,该写入的存储地址信息指的是在该存储卷中存储该第三数据的起始地址。
该第三数据的大小指的是待写入的该第三数据的数据量的大小。例如,该第三数据的大小可以为512兆字节等。
该第三SG列表用于指示该第三数据在第一设备中的存储位置,即该第三SG列表指示上述第三存储地址。该第三存储地址指向的内存区域可以包括m2(该m2为大于或等于1的整数)个内存块,该m2个内存块合起来就构成了该第三数据占用的全部的内存空间。那么,第三SG列表可以包括该m2个内存块的地址信息,具体的,该第三SG列表中可以包括该m2个内存块中每一个内存块的起始地址和长度。内存块的长度指的是该内存块的大小,例如该内存块的大小为512字节,那么可以说该内存块的长度为512字节。
S902、第一设备的网卡根据该第三命令对该第三存储地址发起直接存储器访问DMA读取所述第三数据。
在具体实施例中,上述第一设备的主机放置在发送队列SQ1”上的第三命令可以是以数据描述符的形式。
该第一设备的网卡接收到上述主机发送的数据描述符之后,可以根据该数据描述符中的第三SG列表向第三SG列表中包括的地址发起DMA操作,将从该第三SG列表指示的地址中按照第三数据的大小读取上述第三数据。具体的,可以通过该第一设备的网卡中的硬件组件向第三存储地址发起DMA,该硬件组件例如可以是图2所示中的硬件组件221。
在其中一种可能的实施方式中,上述第三命令中还可以包括一个标识,该标识用于指示第一设备的网卡可以从上述第三存储地址中读取第三数据,然后再将读取的第三数据发送给第二设备的网卡。因此,该第一设备的网卡接收到上述第三命令后,解析该命令获取到该标识,通过该标识识别出需要先从上述第三存储地址中读取第三数据,然后再将读取的第三数据发送给第二设备的网卡。具体的读取第三数据的操作可以参见上述的描述,此处不再赘述。
在本申请中,第一设备的网卡可以直接向第三存储地址发起DMA访问读取该第三数据,而不需要先将该第三数据缓存在网卡的内存中,从而可以减少了第一设备网卡内存的带宽资源和存储空间的占用,提高该网卡内存的带宽资源和存储空间的利用率,并且显著降低了数据传输的时延。
S903、第一设备的网卡将读取的第三数据和从第三命令中获取的第三目的存储区域的地址一起封装成数据报文。
S904、第一设备的网卡向第二设备的网卡发送该数据报文。
该第一设备的网卡从上述第三存储地址中读取第三数据之后,将该第三数据和上述第三目的存储区域的地址一起封装成一个数据报文,通过上述建立的发送队列SQ1”将该数据报文发送给第二设备的网卡。
S905、第二设备的网卡接收该数据报文,并将数据报文中的第三数据写入该第三目的存储区域中。
该第二设备的网卡通过上述建立的RQ2”接收该数据报文,然后解析该数据报文获取数据报文中的第三数据和第三目的存储区域的地址,并将该第三数据写入该第三目的存储区域中。
S906、第二设备的网卡向第一设备的网卡发送I/O写完成的消息。
S907、第一设备的网卡向自身的主机发送I/O写完成的消息。
上述第二设备的网卡完成上述第三数据的写入之后,通过发送队列SQ2”向该第一设备的网卡发送I/O写完成的消息,且该第一设备的网卡向第一设备主机发送该I/O写完成的消息,使得主机感知这次I/O写已经完成。
在本申请实施例中,相比于上述实施例三减少了两个交互的步骤,一个是第一设备的网卡向第二设备发送写入数据的请求报文,另一个是第二设备根据该请求报文向第一设备的网卡发送读取该数据的响应报文,在本申请中,第一设备的网卡直接读取数据发送给第二设备让第二设备写入目的存储区域中,从而极大的提高的数据写入的效率,降低了数据写入的时延。
实施例六
在一种可能的实施方式中,上述实施例五所述的第三存储地址指向的内存区域可以为第一设备中的虚拟机VM的内存区域。关于虚拟机的内存以及虚拟机内存编号的相关描述可以参见前述的介绍,此处不再赘述。
假设上述第三SG列表指示的地址即上述第三存储地址对应的虚拟机内存编号可以称为第三虚拟机内存编号,那么,上述第三命令中还包括该第三虚拟机内存编号,通过该第三虚拟机内存编号可以准确查找到上述第三存储地址对应的存储空间。
可选的,上述第三虚拟机内存编号可以包括一个或多个编号,例如,如果上述第三存储地址在虚拟机的一个内存区域的范围内,那么该第三虚拟机内存编号可以是该一个内存区域的编号;如果上述第三存储地址包括虚拟机的多个内存区域内的地址,那么该第三虚拟机内存编号可以是该多个内存区域的编号。
具体的,该第三存储地址包括该VM的m2个内存块的地址,该m2个内存块可以是虚拟机的一个内存区域中的内存块,或者,该m2个内存块可以包括该虚拟机的多个内存区域中的内存块。为了使得上述第一设备的网卡能够准确地访问到该VM的m2个内存块,上述第三命令中还可以包括该VM的m2个内存块所在内存区域的虚拟机内存编号,即包括上述第三虚拟机内存编号。
在本申请实施方式中,在上述S902第一设备的网卡根据该第三命令对该第三存储地址发起DMA读取所述第三数据的步骤中,第一设备的网卡根据该第三虚拟机内存编号在该对应的内存区域内中DMA访问第三SG列表包括的地址读取上述第三数据。
需要说明的是,上述图3、图8和图9所述的数据处理方法及其可能的实施方式中,通过队列对QP和完成队列CQ来实现第一设备和第二设备之间的交互只是一个示例,也可以通过其它的方式来实现第一设备和第二设备之间的交互从而实现上述数据处理方法。
上述主要对本申请实施例提供的数据处理方法进行了介绍。可以理解的是,各个设备为了实现上述对应的功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用使用不同方法来实现所描述的功能,但这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对设备进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在采用对应各个功能划分各个功能模块的情况下,图10示出了设备的一种可能的逻辑结构示意图,该设备可以是上述各个实施例中的第一设备的网卡。该网卡1000包括发送单元1001、接收单元1002和写入单元1003。其中:
发送单元1001,用于向第二设备发送第一请求报文;上述第一请求报文用于请求读取第一数据,上述第一数据存储在上述第二设备的第一目的存储区域;
接收单元1002,用于接收上述第二设备响应上述第一请求报文发送的第一响应报文;上述第一响应报文包括上述第一数据;
写入单元1003,用于根据上述第一响应报文对第一存储地址发起直接存储器访问DMA将上述第一数据写入上述第一存储地址指向的内存区域,上述第一存储地址指向的内存区域属于上述第一设备的主机的内存区域;上述第一数据无需缓存到上述网卡的内存。
在一种可能的实施方式中,上述第一响应报文包括第一虚拟机内存编号,上述第一虚拟机内存编号指向上述主机配置给第一虚拟机的第一内存区域,上述第一内存区域包括上述第一存储地址指向的内存区域,上述写入单元1003具体用于:根据上述第一虚拟机内存编号查找到上述第一内存区域;向上述第一内存区域内的上述第一存储地址发起上述DMA将上述第一数据写入上述第一存储地址指向的内存区域。
在一种可能的实施方式中,上述网卡还包括查询单元,用于在上述写入单元1003根据上述第一虚拟机内存编号查找到上述第一内存区域之前,以上述第一虚拟机内存编号为索引查询到上述第一存储地址指向的内存区域在地址权限表包括的地址范围中,上述地址权限表包括上述网卡有权限发起上述DMA访问的地址范围。
图10所示网卡1000中各个单元的具体操作以及有益效果可以参见上述实施例一或实施例二及其可能的实施方式中所示方法实施例的描述,此处不再赘述。
在采用对应各个功能划分各个功能模块的情况下,图11示出了设备的一种可能的逻辑结构示意图,该设备可以是上述各个实施例中的第一设备的网卡。该网卡1100包括发送单元1101、接收单元1102和读取单元1103。其中:
发送单元1101,用于向第二设备发送第二请求报文;上述第二请求报文用于请求在第二设备的第二目的存储区域写入第二数据,上述第二数据存储在第二存储地址指向的内存区域,上述第二存储地址指向的内存区域属于上述第一设备的主机的内存区域;
接收单元1102,用于接收上述第二设备响应上述第二请求报文发送的第二响应报文;上述第二响应报文包括上述第二存储地址;
读取单元1103,用于根据上述第二响应报文对上述第二存储地址发起直接存储器访问DMA读取上述第二数据;
上述发送单元1101,还用于向上述第二设备发送读取的上述第二数据,上述第二数据无需缓存到上述网卡的内存。
在一种可能的实施方式中,上述第二响应报文包括第二虚拟机内存编号,上述第二虚拟机内存编号指向上述主机配置给第二虚拟机的第二内存区域,上述第二内存区域包括上述第二存储地址指向的内存区域,上述读取单元1103具体用于:根据上述第二虚拟机内存编号查找到上述第二内存区域;向上述第二内存区域内的上述第二存储地址发起上述DMA读取上述第二数据。
在一种可能的实施方式中,上述网卡还包括查询单元,用于在上述读取单元1103根据上述第二虚拟机内存编号查找到上述第二内存区域之前,以上述第二虚拟机内存编号为索引查询到上述第二存储地址指向的内存区域在地址权限表包括的地址范围中,上述地址权限表包括上述网卡有权限发起上述DMA访问的地址范围。
图11所示网卡1100中各个单元的具体操作以及有益效果可以参见上述实施例三或实施例四及其可能的实施方式中所示方法实施例的描述,此处不再赘述。
在采用对应各个功能划分各个功能模块的情况下,图12示出了设备的一种可能的逻辑结构示意图,该设备可以是上述各个实施例中的第一设备的网卡。该网卡1200包括接收单元1201、读取单元1202和发送单元1203。其中:
接收单元1201,用于接收来自上述第一设备主机的处理器的第三请求,上述第三请求用于请求在第二设备的第三目的存储区域写入第三数据,上述第三请求包括上述第三数据在上述第一设备的主机的内存中的第三存储地址;
读取单元1202,用于根据上述第三请求对上述第三存储地址发起直接存储器访问DMA读取上述第三数据;
发送单元1203,用于向上述第二设备发送读取的上述第三数据,上述第三数据无需经过上述网卡的内存。
在一种可能的实施方式中,上述第三请求中包括标识,上述标识用于指示上述网卡读取上述第三数据,上述读取单元1202具体用于:根据上述标识对上述第三存储地址发起上述DMA读取上述第三数据。
图12所示网卡1200中各个单元的具体操作以及有益效果可以参见上述实施例五或实施例六及其可能的实施方式中所示方法实施例的描述,此处不再赘述。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行以实现上述实施例一或实施例二所述的方法。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行以实现上述实施例三或实施例四所述的方法。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行以实现上述实施例五或实施例六所述的方法。
本申请实施例还提供一种计算机程序产品,当该计算机程序产品被计算机读取并执行时,上述实施例一或实施例二所述的方法将被执行。
本申请实施例还提供一种计算机程序产品,当该计算机程序产品被计算机读取并执行时,上述实施例三或实施例四所述的方法将被执行。
本申请实施例还提供一种计算机程序产品,当该计算机程序产品被计算机读取并执行时,上述实施例五或实施例六所述的方法将被执行。
综上所述,在本申请中,第一设备的网卡可以直接向该第一设备的主机内存发起DMA访问读取或写入数据,而不需要先将该数据缓存在网卡的内存中,从而可以减少了第一设备网卡内存的带宽资源和存储空间的占用,提高该网卡内存的带宽资源和存储空间的利用率,并且显著降低了数据传输的时延。
本申请中术语“第一”“第二”等字样用于对作用和功能基本相同的相同项或相似项进行区分,应理解,“第一”、“第二”、“第n”之间不具有逻辑或时序上的依赖关系,也不对数量和执行顺序进行限定。还应理解,尽管以下描述使用术语第一、第二等来描述各种元素,但这些元素不应受术语的限制。这些术语只是用于将一元素与另一元素区别分开。例如,在不脱离各种所述示例的范围的情况下,第一图像可以被称为第二图像,并且类似地,第二图像可以被称为第一图像。第一图像和第二图像都可以是图像,并且在某些情况下,可以是单独且不同的图像。
还应理解,在本申请的各个实施例中,各个过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
还应理解,术语“包括”(也称“includes”、“including”、“comprises”和/或“comprising”)当在本说明书中使用时指定存在所陈述的特征、整数、步骤、操作、元素、和/或部件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元素、部件、和/或其分组。
还应理解,说明书通篇中提到的“一个实施例”、“一实施例”、“一种可能的实现方式”意味着与实施例或实现方式有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”、“一种可能的实现方式”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (32)

1.一种数据处理方法,其特征在于,包括:
第一设备的网卡向第二设备发送第一请求报文;所述第一请求报文用于请求读取第一数据,所述第一数据存储在所述第二设备的第一目的存储区域;
所述网卡接收所述第二设备响应所述第一请求报文发送的第一响应报文;所述第一响应报文包括所述第一数据和第一存储地址;
所述网卡根据所述第一响应报文对所述第一存储地址发起直接存储器访问DMA,将所述第一数据写入所述第一存储地址指向的内存区域,所述第一存储地址指向的内存区域属于所述第一设备的主机的内存区域;所述第一数据无需缓存到所述网卡的内存。
2.根据权利要求1所述的方法,其特征在于,所述第一响应报文包括第一虚拟机内存编号,所述第一虚拟机内存编号指向所述主机配置给第一虚拟机的第一内存区域,所述第一内存区域包括所述第一存储地址指向的内存区域,
所述网卡根据所述第一响应报文对第一存储地址发起直接存储器访问DMA将所述第一数据写入所述第一存储地址指向的内存区域,包括:
所述网卡根据所述第一虚拟机内存编号向所述第一内存区域内的所述第一存储地址发起所述DMA将所述第一数据写入所述第一存储地址指向的内存区域。
3.根据权利要求2所述的方法,其特征在于,在所述网卡将所述第一数据写入所述第一存储地址指向的内存区域之前,还包括:
所述网卡以所述第一虚拟机内存编号为索引查询到所述第一存储地址指向的内存区域在地址权限表包括的地址范围中,所述地址权限表包括所述网卡有权限发起所述DMA访问的地址范围。
4.根据权利要求2或3所述的方法,其特征在于,所述第一请求报文包括所述第一虚拟机内存编号,所述第一虚拟机内存编号设置在所述第一请求报文的本地权限L_key字段中,所述L_key为所述网卡用于DMA访问所述主机内存的权限标识;
所述第一虚拟机内存编号设置在所述第一响应报文的远端权限R_key字段中,所述R_key为所述第二设备的网卡用于远程访问所述主机内存的权限标识。
5.根据权利要求2或3所述的方法,其特征在于,所述第一请求报文包括所述第一虚拟机内存编号,所述第一请求报文和所述第一响应报文包括虚拟机内存编号字段,所述第一虚拟机内存编号设置在所述虚拟机内存编号字段中;
所述虚拟机内存编号字段为占用了所述第一请求报文和所述第一响应报文的长度length字段中的部分字节得到,所述length字段中除了所述虚拟机内存编号字段占用的字节之外的字节用于存储所述第一存储地址指向的内存区域包括的各个内存块的长度值;
或者,所述虚拟机内存编号字段为占用了所述第一请求报文和所述第一响应报文的地址address字段中的部分字节得到,所述address字段中除了所述虚拟机内存编号字段占用的字节之外的字节用于存储所述第一存储地址指向的内存区域包括的各个内存块的起始地址的值。
6.根据权利要求2或3所述的方法,其特征在于,所述第一请求报文包括所述第一虚拟机内存编号,所述第一请求报文和所述第一响应报文包括虚拟机内存编号字段,所述第一虚拟机内存编号设置在所述虚拟机内存编号字段中;
所述第一请求报文中的所述虚拟机内存编号字段为占用了所述第一请求报文本地权限L_key字段中的部分字节得到,所述L_key字段中除了所述虚拟机内存编号字段占用的字节之外的字节用于存储所述网卡DMA访问所述第一存储地址指向的内存区域的权限标识,
所述第一响应报文中的所述虚拟机内存编号字段为占用了所述第一响应报文远端权限R_key字段中的部分字节得到,所述R_key字段中除了所述虚拟机内存编号字段占用的字节之外的字节用于存储所述第二设备的网卡远程访问所述第一存储地址指向的内存区域的权限标识。
7.一种数据处理方法,其特征在于,包括:
第一设备的网卡向第二设备发送第二请求报文;所述第二请求报文用于请求在第二设备的第二目的存储区域写入第二数据,所述第二数据存储在第二存储地址指向的内存区域,所述第二存储地址指向的内存区域属于所述第一设备的主机的内存区域;
所述网卡接收所述第二设备响应所述第二请求报文发送的第二响应报文;所述第二响应报文包括所述第二存储地址;
所述网卡根据所述第二响应报文对所述第二存储地址发起直接存储器访问DMA读取所述第二数据;
所述网卡向所述第二设备发送读取的所述第二数据,所述第二数据无需缓存到所述网卡的内存。
8.根据权利要求7所述的方法,其特征在于,所述第二响应报文包括第二虚拟机内存编号,所述第二虚拟机内存编号指向所述主机配置给第二虚拟机的第二内存区域,所述第二内存区域包括所述第二存储地址指向的内存区域,
所述网卡根据所述第二响应报文对所述第二存储地址发起直接存储器访问DMA读取所述第二数据,包括:
所述网卡根据所述第二虚拟机内存编号向所述第二内存区域内的所述第二存储地址发起所述DMA读取所述第二数据。
9.根据权利要求8所述的方法,其特征在于,在所述网卡根据所述第二虚拟机内存编号向所述第二内存区域内的所述第二存储地址发起所述DMA读取所述第二数据之前,还包括:
所述网卡以所述第二虚拟机内存编号为索引查询到所述第二存储地址指向的内存区域在地址权限表包括的地址范围中,所述地址权限表包括所述网卡有权限发起所述DMA访问的地址范围。
10.根据权利要求8或9所述的方法,其特征在于,所述第二请求报文包括所述第二虚拟机内存编号,所述第二虚拟机内存编号设置在所述第二请求报文的本地权限L_key字段中,所述L_key为所述网卡用于访问所述主机内存的权限标识;
所述第二虚拟机内存编号设置在所述第二响应报文的远端权限R_key字段中,所述R_key为所述第二设备的网卡用于远程访问所述第二虚拟机内存编号的权限标识。
11.根据权利要求8或9所述的方法,其特征在于,所述第二请求报文包括所述第二虚拟机内存编号,所述第二请求报文和所述第二响应报文包括虚拟机内存编号字段,所述第二虚拟机内存编号设置在所述虚拟机内存编号字段中;
所述虚拟机内存编号字段为占用了所述第二请求报文和所述第二响应报文的长度length字段中的部分字节得到,所述length字段中除了所述虚拟机内存编号字段占用的字节之外的字节用于存储所述第二存储地址指向的内存区域包括的各个内存块的长度值;
或者,所述虚拟机内存编号字段为占用了所述第二请求报文和所述第二响应报文的地址address字段中的部分字节得到,所述address字段中除了所述虚拟机内存编号字段占用的字节之外的字节用于存储所述第二存储地址指向的内存区域包括的各个内存块的起始地址的值。
12.根据权利要求8或9所述的方法,其特征在于,所述第二请求报文包括所述第二虚拟机内存编号,所述第二请求报文和所述第二响应报文包括虚拟机内存编号字段,所述第二虚拟机内存编号设置在所述虚拟机内存编号字段中;
所述第二请求报文中的所述虚拟机内存编号字段为占用了所述第二请求报文本地权限L_key字段中的部分字节得到,所述L_key字段中除了所述虚拟机内存编号字段占用的字节之外的字节用于存储所述网卡DMA访问所述第二存储地址指向的内存区域的权限标识,
所述第二响应报文中的所述虚拟机内存编号字段为占用了所述第二响应报文远端权限R_key字段中的部分字节得到,所述R_key字段中除了所述虚拟机内存编号字段占用的字节之外的字节用于存储所述第二设备的网卡远程访问所述第二存储地址指向的内存区域的权限标识。
13.一种数据处理方法,其特征在于,包括:
第一设备的网卡接收来自所述第一设备主机的第三请求,所述第三请求用于请求在第二设备的第三目的存储区域写入第三数据,所述第三请求包括所述第三数据在所述第一设备的主机的内存中的第三存储地址;
所述网卡根据所述第三请求对所述第三存储地址发起直接存储器访问DMA读取所述第三数据;
所述网卡向所述第二设备发送读取的所述第三数据,所述第三数据无需经过所述网卡的内存。
14.根据权利要求13所述的方法,其特征在于,所述第三请求中包括标识,所述标识用于指示所述网卡读取所述第三数据,所述网卡根据所述第三请求对所述第三存储地址发起直接存储器访问DMA读取所述第三数据,包括:
所述网卡根据所述标识对所述第三存储地址发起所述DMA读取所述第三数据。
15.根据权利要求13或14所述的方法,其特征在于,所述第三请求还包括第三虚拟机内存编号,所述第三虚拟机内存编号指向所述主机配置给第一虚拟机的第三内存区域,所述第三内存区域包括所述第三存储地址指向的内存区域,
所述网卡对所述第三存储地址发起直接存储器访问DMA读取所述第三数据,包括:
所述网卡根据所述第三虚拟机内存编号向所述第三内存区域内的所述第三存储地址发起直接存储器访问DMA读取所述第三数据。
16.一种数据处理网卡,其特征在于,所述网卡为第一设备中的网卡,所述网卡包括:
发送单元,用于向第二设备发送第一请求报文;所述第一请求报文用于请求读取第一数据,所述第一数据存储在所述第二设备的第一目的存储区域;
接收单元,用于接收所述第二设备响应所述第一请求报文发送的第一响应报文;所述第一响应报文包括所述第一数据和第一存储地址;
写入单元,用于根据所述第一响应报文对所述第一存储地址发起直接存储器访问DMA,将所述第一数据写入所述第一存储地址指向的内存区域,所述第一存储地址指向的内存区域属于所述第一设备的主机的内存区域;所述第一数据无需缓存到所述网卡的内存。
17.根据权利要求16所述的网卡,其特征在于,所述第一响应报文包括第一虚拟机内存编号,所述第一虚拟机内存编号指向所述主机配置给第一虚拟机的第一内存区域,所述第一内存区域包括所述第一存储地址指向的内存区域,所述写入单元具体用于:
根据所述第一虚拟机内存编号向所述第一内存区域内的所述第一存储地址发起所述DMA将所述第一数据写入所述第一存储地址指向的内存区域。
18.根据权利要求17所述的网卡,其特征在于,所述网卡还包括查询单元,用于在所述写入单元将所述第一数据写入所述第一存储地址指向的内存区域之前,
以所述第一虚拟机内存编号为索引查询到所述第一存储地址指向的内存区域在地址权限表包括的地址范围中,所述地址权限表包括所述网卡有权限发起所述DMA访问的地址范围。
19.根据权利要求17或18所述的网卡,其特征在于,所述第一请求报文包括所述第一虚拟机内存编号,所述第一虚拟机内存编号设置在所述第一请求报文的本地权限L_key字段中,所述L_key为所述网卡用于DMA访问所述主机内存的权限标识;
所述第一虚拟机内存编号设置在所述第一响应报文的远端权限R_key字段中,所述R_key为所述第二设备的网卡用于远程访问所述主机内存的权限标识。
20.根据权利要求17或18所述的网卡,其特征在于,所述第一请求报文包括所述第一虚拟机内存编号,所述第一请求报文和所述第一响应报文包括虚拟机内存编号字段,所述第一虚拟机内存编号设置在所述虚拟机内存编号字段中;
所述虚拟机内存编号字段为占用了所述第一请求报文和所述第一响应报文的长度length字段中的部分字节得到,所述length字段中除了所述虚拟机内存编号字段占用的字节之外的字节用于存储所述第一存储地址指向的内存区域包括的各个内存块的长度值;
或者,所述虚拟机内存编号字段为占用了所述第一请求报文和所述第一响应报文的地址address字段中的部分字节得到,所述address字段中除了所述虚拟机内存编号字段占用的字节之外的字节用于存储所述第一存储地址指向的内存区域包括的各个内存块的起始地址的值。
21.根据权利要求17或18所述的网卡,其特征在于,所述第一请求报文包括所述第一虚拟机内存编号,所述第一请求报文和所述第一响应报文包括虚拟机内存编号字段,所述第一虚拟机内存编号设置在所述虚拟机内存编号字段中;
所述第一请求报文中的所述虚拟机内存编号字段为占用了所述第一请求报文本地权限L_key字段中的部分字节得到,所述L_key字段中除了所述虚拟机内存编号字段占用的字节之外的字节用于存储所述网卡DMA访问所述第一存储地址指向的内存区域的权限标识,
所述第一响应报文中的所述虚拟机内存编号字段为占用了所述第一响应报文远端权限R_key字段中的部分字节得到,所述R_key字段中除了所述虚拟机内存编号字段占用的字节之外的字节用于存储所述第二设备的网卡远程访问所述第一存储地址指向的内存区域的权限标识。
22.一种数据处理网卡,其特征在于,所述网卡为第一设备中的网卡,所述网卡包括:
发送单元,用于向第二设备发送第二请求报文;所述第二请求报文用于请求在第二设备的第二目的存储区域写入第二数据,所述第二数据存储在第二存储地址指向的内存区域,所述第二存储地址指向的内存区域属于所述第一设备的主机的内存区域;
接收单元,用于接收所述第二设备响应所述第二请求报文发送的第二响应报文;所述第二响应报文包括所述第二存储地址;
读取单元,用于根据所述第二响应报文对所述第二存储地址发起直接存储器访问DMA读取所述第二数据;
所述发送单元,还用于向所述第二设备发送读取的所述第二数据,所述第二数据无需缓存到所述网卡的内存。
23.根据权利要求22所述的网卡,其特征在于,所述第二响应报文包括第二虚拟机内存编号,所述第二虚拟机内存编号指向所述主机配置给第二虚拟机的第二内存区域,所述第二内存区域包括所述第二存储地址指向的内存区域,所述读取单元具体用于:
根据所述第二虚拟机内存编号向所述第二内存区域内的所述第二存储地址发起所述DMA读取所述第二数据。
24.根据权利要求23所述的网卡,其特征在于,所述网卡还包括查询单元,用于在所述读取单元根据所述第二虚拟机内存编号向所述第二内存区域内的所述第二存储地址发起所述DMA读取所述第二数据之前,
以所述第二虚拟机内存编号为索引查询到所述第二存储地址指向的内存区域在地址权限表包括的地址范围中,所述地址权限表包括所述网卡有权限发起所述DMA访问的地址范围。
25.根据权利要求23或24所述的网卡,其特征在于,所述第二请求报文包括所述第二虚拟机内存编号,所述第二虚拟机内存编号设置在所述第二请求报文的本地权限L_key字段中,所述L_key为所述网卡用于访问所述主机内存的权限标识;
所述第二虚拟机内存编号设置在所述第二响应报文的远端权限R_key字段中,所述R_key为所述第二设备的网卡用于远程访问所述第二虚拟机内存编号的权限标识。
26.根据权利要求23或24所述的网卡,其特征在于,所述第二请求报文包括所述第二虚拟机内存编号,所述第二请求报文和所述第二响应报文包括虚拟机内存编号字段,所述第二虚拟机内存编号设置在所述虚拟机内存编号字段中;
所述虚拟机内存编号字段为占用了所述第二请求报文和所述第二响应报文的长度length字段中的部分字节得到,所述length字段中除了所述虚拟机内存编号字段占用的字节之外的字节用于存储所述第二存储地址指向的内存区域包括的各个内存块的长度值;
或者,所述虚拟机内存编号字段为占用了所述第二请求报文和所述第二响应报文的地址address字段中的部分字节得到,所述address字段中除了所述虚拟机内存编号字段占用的字节之外的字节用于存储所述第二存储地址指向的内存区域包括的各个内存块的起始地址的值。
27.根据权利要求23或24所述的网卡,其特征在于,所述第二请求报文包括所述第二虚拟机内存编号,所述第二请求报文和所述第二响应报文包括虚拟机内存编号字段,所述第二虚拟机内存编号设置在所述虚拟机内存编号字段中;
所述第二请求报文中的所述虚拟机内存编号字段为占用了所述第二请求报文本地权限L_key字段中的部分字节得到,所述L_key字段中除了所述虚拟机内存编号字段占用的字节之外的字节用于存储所述网卡DMA访问所述第二存储地址指向的内存区域的权限标识,
所述第二响应报文中的所述虚拟机内存编号字段为占用了所述第二响应报文远端权限R_key字段中的部分字节得到,所述R_key字段中除了所述虚拟机内存编号字段占用的字节之外的字节用于存储所述第二设备的网卡远程访问所述第二存储地址指向的内存区域的权限标识。
28.一种数据处理网卡,其特征在于,所述网卡为第一设备中的网卡,所述网卡包括:
接收单元,用于接收来自所述第一设备主机的处理器的第三请求,所述第三请求用于请求在第二设备的第三目的存储区域写入第三数据,所述第三请求包括所述第三数据在所述第一设备的主机的内存中的第三存储地址;
读取单元,用于根据所述第三请求对所述第三存储地址发起直接存储器访问DMA读取所述第三数据;
发送单元,用于向所述第二设备发送读取的所述第三数据,所述第三数据无需经过所述网卡的内存。
29.根据权利要求28所述的网卡,其特征在于,所述第三请求中包括标识,所述标识用于指示所述网卡读取所述第三数据,所述读取单元具体用于:
根据所述标识对所述第三存储地址发起所述DMA读取所述第三数据。
30.根据权利要求28或29所述的网卡,其特征在于,所述第三请求还包括第三虚拟机内存编号,所述第三虚拟机内存编号指向所述主机配置给第一虚拟机的第三内存区域,所述第三内存区域包括所述第三存储地址指向的内存区域,所述读取单元具体用于:
根据所述第三虚拟机内存编号向所述第三内存区域内的所述第三存储地址发起直接存储器访问DMA读取所述第三数据。
31.一种网卡,其特征在于,所述网卡包括处理器、接收接口、发送接口和存储器,其中,所述存储器用于存储计算机程序和数据,所述处理器用于执行所述存储器中存储的计算机程序,使得所述网卡执行如权利要求1至6任一项所述的方法,或者,使得所述网卡执行如权利要求7至12任一项所述的方法,或者,使得所述网卡执行如权利要求13或15所述的方法。
32.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行以实现权利要求1至6任意一项所述的方法;或者,所述计算机程序被处理器执行以实现权利要求7至12任一项所述的方法;或者,所述计算机程序被处理器执行以实现权利要求13或15所述的方法。
CN202010880767.3A 2020-05-19 2020-08-27 数据处理方法及设备 Active CN113688072B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
EP21173440.5A EP3913488B1 (en) 2020-05-19 2021-05-11 Data processing method and device
US17/323,279 US11755513B2 (en) 2020-05-19 2021-05-18 Data processing and writing method based on virtual machine memory identification field and devise

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN2020104273817 2020-05-19
CN202010427381 2020-05-19

Publications (2)

Publication Number Publication Date
CN113688072A CN113688072A (zh) 2021-11-23
CN113688072B true CN113688072B (zh) 2024-03-26

Family

ID=78576111

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010880767.3A Active CN113688072B (zh) 2020-05-19 2020-08-27 数据处理方法及设备

Country Status (2)

Country Link
US (1) US11755513B2 (zh)
CN (1) CN113688072B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20210319121A1 (en) * 2021-06-25 2021-10-14 Intel Corporation Concurrent volume and file based inline encryption on commodity operating systems
CN114285676B (zh) * 2021-11-24 2023-10-20 中科驭数(北京)科技有限公司 智能网卡、智能网卡的网络存储方法和介质
CN116566933A (zh) * 2022-01-30 2023-08-08 华为技术有限公司 报文处理方法、网关设备及存储系统
CN114760326A (zh) * 2022-03-02 2022-07-15 杭州华橙软件技术有限公司 数据存储方法、数据查询方法、数据存储系统和电子装置
CN115878512A (zh) * 2022-10-14 2023-03-31 浪潮(北京)电子信息产业有限公司 一种内存映射方法、系统、设备及存储介质
CN115934623B (zh) * 2023-02-09 2023-05-16 珠海星云智联科技有限公司 一种基于远程直接内存访问的数据处理方法、设备及介质
CN117271402B (zh) * 2023-11-22 2024-01-30 中科亿海微电子科技(苏州)有限公司 一种基于FPGA的低延时PCIe DMA数据传输方法
CN117573043A (zh) * 2024-01-17 2024-02-20 济南浪潮数据技术有限公司 分布式存储数据的传输方法、装置、系统、设备和介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105335309A (zh) * 2014-05-30 2016-02-17 华为技术有限公司 一种数据传输方法及计算机
WO2018032510A1 (zh) * 2016-08-19 2018-02-22 华为技术有限公司 应用于存储设备中的访问请求的处理方法和装置
CN109960671A (zh) * 2019-03-31 2019-07-02 联想(北京)有限公司 一种数据传输系统、方法及计算机设备

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7889762B2 (en) * 2006-01-19 2011-02-15 Intel-Ne, Inc. Apparatus and method for in-line insertion and removal of markers
US10275375B2 (en) * 2013-03-10 2019-04-30 Mellanox Technologies, Ltd. Network interface controller with compression capabilities
US9558146B2 (en) 2013-07-18 2017-01-31 Intel Corporation IWARP RDMA read extensions
US9548890B2 (en) * 2014-03-17 2017-01-17 Cisco Technology, Inc. Flexible remote direct memory access resource configuration in a network environment
US9632901B2 (en) * 2014-09-11 2017-04-25 Mellanox Technologies, Ltd. Page resolution status reporting
US9934177B2 (en) * 2014-11-04 2018-04-03 Cavium, Inc. Methods and systems for accessing storage using a network interface card
US9996498B2 (en) * 2015-09-08 2018-06-12 Mellanox Technologies, Ltd. Network memory
US10437775B2 (en) 2017-09-14 2019-10-08 Microsoft Technology Licensing, Llc Remote direct memory access in computing systems
CN110647480B (zh) 2018-06-26 2023-10-13 华为技术有限公司 数据处理方法、远程直接访存网卡和设备
US11016911B2 (en) 2018-08-24 2021-05-25 Samsung Electronics Co., Ltd. Non-volatile memory express over fabric messages between a host and a target using a burst mode

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105335309A (zh) * 2014-05-30 2016-02-17 华为技术有限公司 一种数据传输方法及计算机
WO2018032510A1 (zh) * 2016-08-19 2018-02-22 华为技术有限公司 应用于存储设备中的访问请求的处理方法和装置
CN109960671A (zh) * 2019-03-31 2019-07-02 联想(北京)有限公司 一种数据传输系统、方法及计算机设备

Also Published As

Publication number Publication date
CN113688072A (zh) 2021-11-23
US11755513B2 (en) 2023-09-12
US20210365394A1 (en) 2021-11-25

Similar Documents

Publication Publication Date Title
CN113688072B (zh) 数据处理方法及设备
US11500689B2 (en) Communication method and apparatus
CN111221758B (zh) 处理远程直接内存访问请求的方法和计算机设备
CN110888827B (zh) 数据传输方法、装置、设备及存储介质
US20190208009A1 (en) Computing resource discovery and allocation
US20120159486A1 (en) System, method and computer program product for accessing a memory space allocated to a virtual machine
US9405725B2 (en) Writing message to controller memory space
KR20220093379A (ko) 제1 운영 체제가 제2 운영 체제의 리소스에 액세스하기 위한 방법 및 장치
WO2022039863A1 (en) Adaptive routing for pooled and tiered data architectures
WO2023066268A1 (zh) 一种处理请求的方法、装置及系统
CN109857545B (zh) 一种数据传输方法及装置
CN114089920A (zh) 数据存储方法、装置、可读介质及电子设备
US20110246600A1 (en) Memory sharing apparatus
CN114945009A (zh) PCIe总线连接的设备间进行通信的方法、设备及系统
CN105677491A (zh) 一种数据传输方法及装置
WO2022251998A1 (zh) 支持多协议栈的通信方法及系统
EP3913488B1 (en) Data processing method and device
US20240061802A1 (en) Data Transmission Method, Data Processing Method, and Related Product
CN113407357B (zh) 进程间数据搬移的方法及装置
CN113157396A (zh) 一种虚拟化服务系统和方法
WO2023125565A1 (zh) 网络节点的配置和访问请求的处理方法、装置
US20230153153A1 (en) Task processing method and apparatus
CN117370262A (zh) 通信方法、装置、芯片系统和电子设备
US20040193832A1 (en) Physical mode windows
CN117369734B (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