CN113287286B - 通过rdma进行分布式存储节点中的输入/输出处理 - Google Patents
通过rdma进行分布式存储节点中的输入/输出处理 Download PDFInfo
- Publication number
- CN113287286B CN113287286B CN201980088335.4A CN201980088335A CN113287286B CN 113287286 B CN113287286 B CN 113287286B CN 201980088335 A CN201980088335 A CN 201980088335A CN 113287286 B CN113287286 B CN 113287286B
- Authority
- CN
- China
- Prior art keywords
- storage node
- rdma
- data
- memory
- shared 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0613—Improving I/O performance in relation to throughput
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0631—Configuration or reconfiguration of storage systems by allocating resources to storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Multi Processors (AREA)
Abstract
一种用于由分布式存储节点进行远程直接内存访问(remote direct memory access,RDMA)的计算机实现的方法包括接收对与数据相关联的输入/输出(input/output,I/O)进程的请求。响应于所述请求,使用所述节点的操作系统驱动程序分配在所述操作系统与用户进程之间共享的内存段。所述用户进程包括用于处理所述请求的I/O堆栈。所述共享内存段包括存储与所述I/O堆栈相关联的上下文信息的上下文内存部分、存储用于所述I/O进程的报头信息的报头内存部分,以及用于存储所述数据的数据内存部分。在目标存储节点注册所述共享内存段用于RDMA访问。在所述共享内存段与所述目标节点之间执行RDMA传输以完成所述I/O进程。在所述RDMA传输完成时,对所述共享内存段解除分配。
Description
相关申请案交叉申请
本申请要求2019年1月30日递交的发明名称为“通过RDMA进行分布式存储节点中的输入/输出处理(Input/output Processing in a Distributed Storage Node withRDMA)”的美国临时申请62/798890的在先申请优先权,所述在先申请的全部内容以引入的方式并入本文本中。
技术领域
本公开涉及存储节点计算。一些方面涉及分布式存储节点中的输入/输出(input/output,I/O)处理。更具体地,一些方面涉及通过远程直接内存访问(remote directmemory access,RDMA)进行分布式存储节点中的前端I/O处理。
背景技术
在分布式数据存储网络架构中,当在客户端设备与其它存储节点之间传输数据时,分布式存储节点可以用作中介。然而,在客户端设备与目的地存储节点之间的数据传输中,经常需要多个数据副本,并且在分布式存储节点等每个中介设备处执行多个数据副本。另外,客户端设备与目的地存储节点之间的数据传输可能还需要多个RDMA数据传输和多个缓冲区分配。
发明内容
现在描述各种示例以简化形式介绍一系列概念,下文在详细描述中进一步描述这些概念。本发明内容既不旨在标识所要求保护的主题的关键或必要特征,也不旨在用于限制所要求保护的主题的范围。
根据本公开的第一方面,提供了一种用于由分布式存储节点进行远程直接内存访问(remote direct memory access,RDMA)的计算机实现的方法。所述方法包括接收对与数据相关联的输入/输出(input/output,I/O)进程的请求。响应于请求,使用分布式存储节点的操作系统驱动程序分配在操作系统与在分布式存储节点上运行的用户进程之间共享的内存段。用户进程包括用于处理请求的I/O堆栈。共享内存段包括存储与I/O堆栈相关联的上下文信息的上下文内存部分、存储用于I/O进程的报头信息的报头内存部分,以及用于存储数据的数据内存部分。在目标存储节点注册共享内存段用于RDMA访问。在分布式存储节点的共享内存段与目标存储节点之间执行RDMA传输以完成I/O进程。接收到RDMA传输完成的状态指示符后,对共享内存段解除分配。
在根据如此第一方面的方法的第一实现形式中,上下文信息与以下各项中的一个或多个相关联:数据缓存操作、数据复制操作,以及由I/O堆栈执行以完成I/O进程的RDMA传输操作。
在根据如此第一方面或第一方面的任何前述实现形式的方法的第二实现形式中,上下文信息包括操作系统驱动程序的上下文信息。更具体地,上下文信息包括指示用户进程或在完成I/O进程时将由分布式存储节点执行的功能的回调上下文信息,以及进行与I/O进程相关联的活动块I/O操作的I/O结构。
在根据如此第一方面或第一方面的任何前述实现形式的方法的第三实现形式中,上下文信息包括由I/O堆栈使用的缓冲区的散集(scatter/gather,s/g)列表。
在根据如此第一方面或第一方面的任何前述实现形式的方法的第四实现形式中,报头信息包括以下各项中的一个或多个:与I/O进程相关联的数据处理操作的类型;逻辑单元号(logical unit number,LUN),其标识目标存储节点内的对象以用于存储或检索数据;标识RDMA传输的内存偏移量的逻辑块地址(logical block address,LBA);与数据大小相关联的长度信息;以及标识执行RDMA传输的时间点或时间范围的快照ID。
在根据如此第一方面或第一方面的任何前述实现形式的方法的第五实现形式中,I/O进程包括从主机设备接收的读操作,并且所述方法还包括使用I/O堆栈内的RDMA模块向目标存储节点传送报头信息,所述报头信息标识与由读操作请求的数据相关联的LUN和LBA。
在根据如此第一方面或第一方面的任何前述实现形式的方法的第六实现形式中,从目标存储节点接收由读操作请求的数据和状态指示符。状态指示符指示读操作成功完成。将所请求的数据和状态指示符转发到主机设备。
在根据如此第一方面或第一方面的任何前述实现形式的方法的第七实现形式中,I/O进程包括写操作,并且所述方法还包括通过操作系统驱动程序执行直接内存访问(direct memory access,DMA)操作,以将数据存储在共享内存段的数据内存部分中。
在根据如此第一方面或第一方面的任何前述实现形式的方法的第八实现形式中,使用I/O堆栈内的RDMA模块执行从共享内存段到目标存储节点内的RDMA内存的报头信息和数据的RDMA传输。从目标存储节点接收状态指示符,其中状态指示符指示写操作成功完成。
在根据如此第一方面或第一方面的任何前述实现形式的方法的第九实现形式中,操作系统驱动程序包括光纤通道(Fiber Channel,FC)驱动程序或因特网小型计算机系统接口(Internet Small Computer Systems Interface,iSCSI)RDMA扩展(iSCSI Extensionfor RDMA,ISER)驱动程序中的一个或两个。
根据本公开的第二方面,提供了一种分布式存储节点,所述分布式存储节点包括存储指令的存储器和与所述存储器通信的一个或多个处理器。一个或多个处理器执行指令以接收对与数据相关联的输入/输出(input/output,I/O)进程的请求。响应于请求,使用分布式存储节点的操作系统驱动程序分配在操作系统与在分布式存储节点上运行的用户进程之间共享的内存段。用户进程包括用于处理请求的I/O堆栈。共享内存段包括存储与I/O堆栈相关联的上下文信息的上下文内存部分、存储用于I/O进程的报头信息的报头内存部分,以及用于存储数据的数据内存部分。在目标存储节点注册共享内存段用于RDMA访问。在分布式存储节点的共享内存段与目标存储节点之间执行RDMA传输以完成I/O进程。接收到RDMA传输完成的状态指示符后,对共享内存段解除分配。
在根据如此第二方面的分布式存储节点的第一实现形式中,I/O进程包括写操作,并且一个或多个处理器执行指令以通过操作系统驱动程序执行直接内存访问(directmemory access,DMA)操作,将数据存储在共享内存段的数据内存部分中。
在根据如此第二方面或第二方面的任何前述实现形式的分布式存储节点的第二实现形式中,使用I/O堆栈内的RDMA模块执行以RDMA方式将报头信息和数据从共享内存段传输到目标存储节点内的RDMA内存。从目标存储节点接收状态指示符,其中状态指示符指示写操作成功完成。
在根据如此第二方面或第二方面的任何前述实现形式的分布式存储节点的第三实现形式中,报头信息包括以下各项中的一个或多个:与I/O进程相关联的数据处理操作的类型;逻辑单元号(logical unit number,LUN),其标识目标存储节点内的对象以用于存储或检索数据;标识RDMA传输的内存偏移量的逻辑块地址(logical block address,LBA);与数据大小相关联的长度信息;以及标识执行RDMA传输的时间点或时间范围的快照ID。
在根据如此第二方面或第二方面的任何前述实现形式的分布式存储节点的第四实现形式中,I/O进程包括从主机设备接收的读操作,并且所述一个或多个处理器执行指令以使用I/O堆栈内的RDMA模块向目标存储节点传送报头信息。报头信息标识与由读操作请求的数据相关联的LUN和LBA。
在根据如此第二方面或第二方面的任何前述实现形式的分布式存储节点的第五实现形式中,所述一个或多个处理器执行指令以从目标存储节点接收由读操作请求的数据和状态指示符,状态指示符指示读操作成功完成。将所请求的数据和状态指示符转发到主机设备。
在根据如此第二方面或第二方面的任何前述实现形式的分布式存储节点的第六实现形式中,上下文信息包括操作系统驱动程序的上下文信息,例如指示用户进程或在完成I/O进程时将由分布式存储节点执行的功能的回调上下文信息,以及进行与I/O进程相关联的活动块I/O操作的I/O结构。
根据本公开的第三方面,提供了一种非瞬时性计算机可读介质,其存储用于由分布式存储节点进行远程直接内存访问(remote direct memory access,RDMA)的指令,所述指令在由一个或多个处理器执行时使一个或多个处理器执行操作。操作包括接收对与数据相关联的输入/输出(input/output,I/O)进程的请求。响应于请求,使用分布式存储节点的操作系统驱动程序分配在操作系统与在分布式存储节点上运行的用户进程之间共享的内存段。用户进程包括用于处理请求的I/O堆栈。共享内存段包括存储与I/O堆栈相关联的上下文信息的上下文内存部分、存储用于I/O进程的报头信息的报头内存部分,以及用于存储数据的数据内存部分。在目标存储节点注册共享内存段用于RDMA访问。在分布式存储节点的共享内存段与目标存储节点之间执行RDMA传输以完成I/O进程。接收到RDMA传输完成的状态指示符后,对共享内存段解除分配。
在根据如此第三方面的非瞬时性计算机可读介质的第一实现形式中,I/O进程包括写操作,并且在执行时,指令还使一个或多个处理器执行操作,包括通过操作系统驱动程序执行直接内存访问(direct memory access,DMA)操作,将数据存储在共享内存段的数据内存部分中。使用I/O堆栈内的RDMA模块执行以RDMA方式将报头信息和数据从共享内存段传输到目标存储节点内的RDMA内存。从目标存储节点接收状态指示符,其中状态指示符指示写操作成功完成。
在根据如此第三方面或第三方面的任何前述实现形式的非瞬时性计算机可读介质的第二实现形式中,I/O进程包括从主机设备接收的读操作,并且在执行时,指令还使一个或多个处理器执行操作,包括使用I/O堆栈内的RDMA模块向目标存储节点传送报头信息。报头信息标识与由读操作请求的数据相关联的逻辑单元号(logical unit number,LUN)和逻辑块地址(logical block address,LBA)。从目标存储节点接收由读操作请求的数据和状态指示符。状态指示符指示读操作成功完成。将所请求的数据和状态指示符转发到主机设备。
前述示例中的任何一个可与其它前述示例的任何一个或多个组合以产生在本公开的范围内的新实施例。
附图说明
在不一定按比例绘制的附图中,相似标号可以在不同的视图中描述类似的组件。附图通过示例而非限制的方式大体上示出了本文档中讨论的各种实施例。
图1为根据一些示例性实施例的使用具有RDMA功能的分布式存储节点的网络架构的高级系统概述。
图2为根据一些示例性实施例的使用共享内存段通过RDMA进行前端I/O的框图。
图3A为根据一些示例性实施例的使用分布式存储节点共享内存而经由RDMA执行与目标存储节点的写操作的存储系统的框图。
图3B为根据一些示例性实施例的在图3A的写操作期间在分布式存储节点共享内存与目标存储节点的RDMA内存之间的通信交换的框图。
图4为根据一些示例性实施例的适合于执行图3A的写操作的方法的流程图。
图5A为根据一些示例性实施例的使用分布式存储节点共享内存而经由RDMA执行与目标存储节点的读操作的存储系统的框图。
图5B为根据一些示例性实施例的在图5A的读操作期间在分布式存储节点共享内存与目标存储节点的RDMA内存之间的通信交换的框图。
图6为根据一些示例性实施例的适合于执行图5A的读操作的方法的流程图。
图7A为根据一些示例性实施例的在写操作期间于两个用户进程之间共享的分布式存储节点内存与目标存储节点的RDMA内存之间的通信交换的框图。
图7B为根据一些示例性实施例的在读操作期间于两个用户进程之间共享的分布式存储节点内存与目标存储节点的RDMA内存之间的通信交换的框图。
图8为根据一些示例性实施例的可以与存储节点之间的RDMA访问结合使用的I/O通信堆栈的框图。
图9为根据一些示例性实施例的适用于通过分布式存储节点进行RDMA内存访问的方法的流程图。
图10为根据一些示例性实施例的可以与本文描述的各种设备硬件结合使用的代表性软件架构的框图。
图11为根据一些示例性实施例的用于实现算法并执行方法的设备的电路系统的框图。
具体实施方式
首先应理解,尽管下文提供了一个或多个实施例的示意性实现方式,但是仍可以使用无论当前是否已知的任何数量的技术来实现关于图1-11描述的所公开的系统和/或方法。本公开决不应限于下文所示的示意性实现方式、附图和技术,包括本文所示并描述的示例性性设计和实现方式,而是可在所附权利要求书的范围以及其等效物的完整范围内修改。
在以下描述中,参考形成本发明的一部分的附图,并且在附图中通过图示的方式示出了可以实践的特定实施例。这些实施例的描述足够详细以使本领域技术人员能够实践本发明的主题,并且应理解,可以利用其它实施例,并且可以在不脱离本公开的范围的前提下进行结构、逻辑和电气改变。因此,示例性实施例的以下描述不应以限制的方式理解,并且本公开的范围由所附权利要求限定。
如本文中所使用,术语“基于网络的服务基础设施”包括将按需计算容量(例如,经由在网络设备上运行的一个或多个虚拟机或其它虚拟资源)和存储容量作为服务提供到终端接收方社区(例如,服务基础设施的客户)的多个网络设备,其中终端接收方经由网络通信地耦合到服务基础设施内的网络设备。服务基础设施的客户可以使用一个或多个计算设备(也称为客户设备或主机设备)经由网络访问和管理由服务基础设施提供的服务。客户设备、网络和基于网络的服务基础设施可以统称为“网络架构”。服务基础设施的客户也可以称为“用户”。
如本文中所使用,术语“内存访问事件”(或“MA事件”)可以包括对读操作的请求(例如,从存储器或其它类型的存储装置读取)或对写操作的请求(例如,写入到存储器或其它类型的存储装置),以及与此类操作相关联的任何数据(例如,与请求的写操作相关的用于存储的数据)。如本文中所使用,术语“MA事件”与术语“I/O事件”和“I/O进程”同义。
使用RDMA的常规分布式存储系统执行多个内存分配(例如,当数据由I/O堆栈处理时,执行多个上下文内存分配)以及多个数据副本。例如,为了在第一存储节点(即发起程序)与第二存储节点(即目标)之间执行RDMA,常规RDMA技术会在目标数据在由前端驱动程序分配的缓冲区与注册用于RDMA的缓冲区之间移动时执行多个数据副本。常规分布式存储系统还使用多个数据传输来经由RDMA移动数据。例如,一个数据传输可能会经由光纤通道(Fiber Channel,FC)驱动程序、用于RDMA的iSCSI扩展(iSCSI Extension for RDMA,ISER)驱动程序或基于网络的非易失性高速传输总线(non-volatile memory express,NVMe)(NVMe over Fabrics,NVMe-oF)驱动程序等前端驱动程序在用户设备与第一存储节点之间移动数据。第二数据传输可以经由RDMA在第一存储节点与第二存储节点之间进行。
在这方面,分布式存储系统通过存储节点将数据传输到主机设备或另一存储节点(例如,将数据从主机设备传输到存储节点A、传输到存储节点B,反之亦然),由于多个数据副本、多个RDMA数据传输和多个缓冲区分配(例如,在存储节点A等中介节点处),因此性能会降低。常规技术的这些属性导致更大的整体时延和整体性能下降。
本文中公开的RDMA技术使用分布式存储节点内的共享内存段,其中所述内存段在用户空间与节点的操作系统(operating system,OS)/内核之间或在节点的用户空间内运行的不同用户进程之间共享,其中用户进程与不同的用户进程地址空间相关联。
如本文中所使用,术语“用户空间”是指在与设备的OS/内核相关联的OS/内核内存地址空间之外运行的一组程序或进程。换句话说,用户空间包括不需要访问与内核相关的功能的进程,每个进程使用其自己的用户进程地址空间。如本文中所使用,术语“地址空间”是指由特定进程使用的内存地址范围。如果进程是用户进程(即不需要访问与内核相关的功能的进程),则它只能访问与其地址空间相关联的内存地址。而如果进程是内核进程,则它可以访问内核的任何地址。
共享内存段包括单个上下文内存部分,所述上下文内存部分可以由用户空间的I/O堆栈执行的多个进程(例如,I/O堆栈的前端模块、缓存模块、复制模块和RDMA模块,如下所述)以及一个或多个内核进程共享。共享内存段还可以包括用于存储报头信息的报头内存部分、用于存储I/O操作的状态的状态内存部分以及用于存储数据(例如,与读或写操作相关联的数据)的数据内存部分。在目标存储设备处的RDMA内存中注册共享内存段以进行RDMA访问。
通过使用在用户空间与节点的OS/内核之间或在节点的用户空间内运行的不同用户进程之间共享的共享内存段,可以通过消除额外的数据副本,实现整个存储节点I/O堆栈中的零数据副本操作来实现最佳性能。另外,通过在整个I/O生命周期中为上下文共享单个内存分配,由于在所有上下文内存需求中使用了单个共享分配,因此在I/O生命周期中不需要额外的内存分配。在这方面,本文中公开的技术可以通过使用具有已知地址的内存的固定分配(例如,共享内存段)而用于分布式存储节点与远程节点之间的简化的RDMA事务,这提供了最佳性能。确认成功完成I/O进程后,可以对分配的共享内存段解除分配,从而提高了内存利用率。
图1为根据一些示例性实施例的使用具有RDMA功能的分布式存储节点的网络架构的高级系统概述。参考图1,网络架构100可以包括经由网络112通信地耦合到基于网络的服务基础设施114的多个设备(例如,用户设备)102A……102N(统称为设备102)。设备102A……102N与对应的用户106A……106N相关联,并且可以用于使用例如客户端104A……104N之一的网络访问客户端与基于网络的服务基础设施114交互。网络访问客户端104A……104N可以实现为Web客户端或应用程序(app)客户端。
用户106A……106N可以一般地为“用户(user)106”,也可以统称为“用户(users)106”。每个用户106可以是人类用户(例如,人类)、机器用户(例如,由软件程序配置为与设备102和基于网络的服务基础设施114交互的计算机)或其任何合适的组合(例如,由机器辅助的人或由人监督的机器)。用户106不是网络架构100的一部分,而是各自与一个或多个设备102相关联,并且可以是设备102的用户(例如,用户106A可以是设备102A的所有者,而用户106N可以是设备102N的所有者)。例如,设备102A可以是属于用户106A的台式计算机、车辆计算机、平板计算机、导航设备、便携式媒体设备或智能电话。用户106A……106N可以使用设备102A……102N来访问由基于网络的服务基础设施114提供的服务(例如,无服务器计算服务或与存储相关的服务)。无服务器计算服务可以包括示例化和使用虚拟机(virtualmachine,VM)、虚拟私有云(virtual private cloud,VPC)、应用程序容器(例如,在VPC内实例化的热容器(warm container))等等。与存储相关的服务可以包括数据存储服务、数据复制服务等等。
基于网络的服务基础设施114可以包括多个计算设备,例如存储节点116、118……120。存储节点中的至少一个节点,例如节点116,可以是分布式存储节点,其充当客户端设备102与和用户106发起的MA事件相关的存储节点118等目的地存储节点之间的中介。
分布式存储节点116可以被称为发起程序节点或发起程序,并且目的地存储节点118可以被称为目标节点或目标。如图1所示,分布式存储节点116可以包括用于执行与OS相关的功能和进程的OS/内核124,以及用于执行在由OS 124使用的OS内存地址空间之外运行的程序和进程的用户空间122。
图1所示的任何设备可以在通用计算机中实现,所述通用计算机由软件修改(例如配置或编程)为专用计算机以执行本文关于所述机器、数据库或设备所描述的功能。如本文中所使用,“数据库”是数据存储资源,其存储构造为文本文件、表、电子表格、关系型数据库(例如,对象关系型数据库、NoSQL数据库、网络或图形数据库)、三元组存储、分级数据存储或其任何合适的组合的数据。另外,经由应用程序编程接口(application programminginterface,API)或远程过程调用(remote procedure call,RPC)存取(或存储)的数据可视为从数据库存取(或存储到数据库)。此外,图1所示的任何两个或更多个设备或数据库可组合成单个机器、数据库或设备,并且本文关于任何单个机器、数据库或设备描述的功能可在多个机器、数据库或设备之间细分。
网络112可以是能够实现机器、数据库和设备(例如,基于网络的服务基础设施114内的设备102A……102N和设备116、118……120)之间的通信的任何网络。因此,网络112可以是有线网络、无线网络(例如,移动或蜂窝网络)或其任何合适的组合。网络112可以包括构成私网、公网(例如因特网)或其任何合适组合的一个或多个部分。
在一些方面,一个或多个用户106可以经由网络112将MA事件108等内存访问事件传送到基于网络的服务基础设施114。MA事件108可以触发RDMA相关功能,例如经由RDMA在基础设施114内的存储节点之间执行读或写操作。
在MA事件108用于写操作的各方面中,如下执行分布式存储节点116内的处理。最初,FC驱动程序130或ISER驱动程序132等内核驱动程序分配用于存储从客户端设备102接收的数据的内核数据内存136和存储与内核功能相关联的上下文信息的内核上下文内存134。接下来,内核驱动程序130或132将发起与客户端设备102(例如102A)的数据传输,以将数据从客户端设备传输到由内核驱动程序分配的数据内存136中。随后,将写操作的I/O进程的控制切换到分布式存储节点用户空间122,所述空间将拾取I/O并继续进行处理。然后,分布式存储节点116将在用户空间122内分配上下文内存126和支持RDMA的内存(也称为RDMA内存)128。
从分布式存储节点的角度来看,上下文内存126用于存储I/O的状态,并且可以包括多个上下文内存部分(例如,上下文内存1……上下文内存N),用于在数据从I/O堆栈内的一个软件模块遍历到另一软件模块时存储用户上下文。RDMA内存128用于将数据从内核数据内存136复制到支持RDMA的内存128。RDMA内存128是已经在计算设备102注册的用于RDMA的内存。当写操作的I/O处理遍历I/O堆栈时,通常会发生许多其它上下文专用类小型分配,因为I/O处理由用户空间122内的一个或多个进程操控。
在最后阶段,随分布式存储节点116将与写操作相关联的数据从RDMA内存128传输到存储节点(或目标节点)118内的RDMA内存142一起发生RDMA。在这方面,RDMA传输以多个阶段发生,其中每个阶段表示从发起程序节点(例如116)到目标节点(例如118)的数据和/或状态的往返传输。
在一些方面,分布式存储节点116可以结合与内存访问事件108相关联的与RDMA相关的功能来使用共享内存138。本文结合图2至图11公开的技术与使用共享内存(例如138)执行与RDMA相关的功能相关联。通过使用在用户空间122与OS/内核124之间共享(或在用户空间122内运行的不同用户进程之间共享)的共享内存138,可以通过消除额外的数据副本,实现整个存储节点I/O堆栈中的零数据副本操作来实现最佳性能。
图2为根据一些示例性实施例的使用共享内存段通过RDMA进行前端I/O的框图200。参考图2,发起程序共享内存138可以由内核驱动程序(例如130或132)分配给与MA事件相关联的每个I/O。发起程序共享内存138可以包括上下文部分206、报头部分208、状态部分210和数据部分212。
上下文部分206可以用于存储内核124的上下文信息(例如,驱动程序相关上下文202)以及与I/O的生命周期相关联的用户空间122的上下文信息。内核124的上下文信息示例可以包括用于用户空间交互的生物结构和回调上下文。生物结构是内核124内用于块I/O的基本容器,它将正在运行(活动)的块I/O操作表示为段列表。段是连续的缓冲区和内存的分块。
通常,当一个I/O堆栈级别将控制权移交给另一级别时,会提供回调函数和回调上下文。回调函数包括指向函数的指针,而回调上下文是指向应用程序结构或应用程序对象的指针。当调用回调函数以将状态返回给始发者时,将提供回调上下文,所述回调上下文包括足以重新启动I/O操作并且例如继续操作或完成操作的状态。例如,回调上下文可能具有指向需要释放的内存的指针,和/或在当前I/O堆栈级别完成时,它可能具有要调用的另一组回调上下文。当数据遍历I/O堆栈(图9中更详细地说明了I/O堆栈)时,可以在示例性缓存或复制操作中使用这种类型的上下文。
示例性用户空间上下文信息包括IoView密钥、散集(scatter-gather,sg)列表和RDMA工作请求。IoView密钥是允许I/O堆栈级别确定将I/O发送到哪个或哪些节点的密钥。在这方面,密钥可以理解为对特定逻辑单元号(logical unit number,LUN)数据位于何处的定义。sg列表可用于指定将用于传输动态大小的数据的一组固定长度的缓冲区。RDMA工作请求是描述要执行的RDMA传输的数据结构。
报头部分208用于存储描述I/O的信息,包括LUN、例如逻辑块地址(logical blockaddress,LBA)的偏移信息,与数据大小相关联的长度信息以及快照ID。快照ID是特定快照时间点的标识符,标识从中获取RDMA传输数据的时间范围。更具体地,报头信息可以指示与I/O进程相关的数据处理操作的类型(例如,读或写操作)。LUN标识目标节点内的对象以用于存储或检索数据。
状态部分210用于存储与在发起程序共享内存138和目标RDMA内存142之间的RDMA传输(例如,RDMA读或写操作)相关联的状态信息。在一些方面,状态信息可以包括用于指示状态的单个字节。数据部分212用于存储与RDMA传输相关联的数据(例如,与写操作相关的从计算设备传送以存储在目标RDMA内存142中的数据,或在读操作期间经由发起程序共享内存138从目标RDMA内存142传送到客户端设备的数据)。
目标RDMA内存142可以包括上下文部分214、报头部分216、状态部分218和数据部分220,这些部分的功能与发起程序共享内存138的相应部分206-212相似。
在发起程序和目标侧两者上注册用于RDMA操作的共享内存138,从而可以经由RDMA在发起程序116与目标118之间交换信息(例如,报头信息、状态信息和数据)。类似地,在发起程序和目标侧两者上还注册用于RDMA操作的目标RDMA内存142。
通过在发起程序116内使用发起程序共享内存138的单个分配,可以避免在I/O生命周期期间的额外内存分配。另外,经由FC驱动程序130或ISER驱动程序132的本地直接内存访问(direct memory access,DMA)(例如,与DMA数据204相关)也可以使用共享内存138,这避免了额外的数据副本并减少了额外的内存使用。在这方面,RDMA传输包括来自最佳数量的缓冲区的最佳数量的传输(即,一个RDMA传输开始RDMA操作,而另一传输完成RDMA操作,全部使用单个共享内存138)。
图3A为根据一些示例性实施例的使用分布式存储节点共享内存而经由RDMA执行与目标存储节点的写操作的存储系统300的框图。参考图3A,共享内存138可以由分布式存储节点116内的内核驱动程序分配,如前所述。共享内存138和RDMA内存142都在节点116和118处注册用于RDMA操作。如图3A所示,共享内存138的上下文部分206用于存储内核124的驱动程序相关上下文304以及在用户空间122内的I/O堆栈的不同模块处理数据时生成的存储节点相关上下文302。
在一些方面,由客户端设备102A传送的MA事件108可以指示写操作,并且可以还包括用于对其执行写操作的数据312。图3B和图4提供关于用于执行写操作的共享内存138的使用的额外信息。
图3B为根据一些示例性实施例的在图3A的写操作期间在分布式存储节点共享内存与目标存储节点的RDMA内存之间的通信交换的框图。参考图3A和图3B,在操作306中,结合MA事件108的写操作进行直接内存访问(direct memory access,DMA),并且数据312被存储在共享内存138的数据部分212内。在操作308中,将与写操作相关联的报头信息(存储在报头部分208中)以及存储在共享内存138的数据部分212中的数据312从发起程序节点116的共享内存138分别传输到目标节点118的RDMA内存142的报头部分216和数据部分220。然后,目标节点118使用传输的数据312和存储在报头部分216中的报头信息来执行写操作。在操作310中,经由DMA将用于写操作的状态信息(例如,指示写操作的完成或错误)从RDMA内存142的状态部分218传输到共享内存138的状态部分210。在一些方面,返回的状态信息可以包括单个字节。如图3A和图3B所示,单个共享内存分配足以遵循与通过MA事件108接收的写操作相关联的整个I/O处理,其中发起程序节点116内的数据副本为零,并且RDMA传输的数量最佳(例如,执行操作308和310需要仅两个RDMA数据传输)。
图4为根据一些示例性实施例的适合于执行图3A的写操作的方法的流程图。方法400包括操作402、404和406。作为示例而非限制,方法400被描述为由发起程序节点116执行。在操作402中,在发起程序节点116处从客户端设备102A接收内存访问事件(例如,MA事件108)。MA事件指示写操作,并且还包括与写操作相关联的数据312。分配共享内存138,并且将接收到的数据存储在共享内存的数据部分中。在操作404中,将与写操作相关联的报头信息(存储在报头部分208中)以及存储在共享内存138的数据部分212中的数据312(经由DMA传输)从发起程序节点116的共享内存138分别传输到目标节点118的RDMA内存142的报头部分216和数据部分220。在使用传输的数据312和存储在报头部分216中的报头信息执行写操作之后,在操作406中,发起程序节点116经由DMA传输将写操作的状态信息(例如,指示写操作的完成或错误)从RDMA内存142的状态部分218接收到共享内存138的状态部分210。在成功完成写操作(例如,如状态信息所示)之后,可以对分配的共享内存138解除分配。
图5A为根据一些示例性实施例的使用分布式存储节点共享内存而经由RDMA执行与目标存储节点的读操作的存储系统500的框图。参考图5A,在操作506中,在接收到指示读操作的MA事件108时,由FC驱动程序130或ISER驱动程序132等分布式存储节点116内的内核驱动程序分配共享内存138。共享内存138和RDMA内存142都在存储节点116和118处注册用于RDMA操作。如图5A所示,共享内存138的上下文部分206用于存储内核124的驱动程序相关上下文504以及在用户空间122内的I/O堆栈的不同模块处理数据时生成的存储节点相关上下文502。
在一些方面,由客户端设备102A传送的MA事件108可以指示读操作,并且还可以标识在读操作期间获得的数据。图5B和图6提供关于使用共享内存138执行读操作的附加信息。
图5B为根据一些示例性实施例的在图5A的读操作期间在分布式存储节点共享内存与目标存储节点的RDMA内存之间的通信交换的框图。参考图5A和图5B,在发起程序设备116接收到具有读操作的MA事件108并且分配了共享内存138之后,在操作508中,进行DMA,并且用于读操作的报头信息从共享内存138的报头部分208传输到目标设备118处RDMA内存142的报头部分216。目标设备118使用报头信息(例如,LUN、偏移、LBA等)来执行读操作。在读操作期间获得的数据存储在RDMA内存142的数据部分中。在操作510中,经由DMA传输将来自状态部分218的状态信息(例如,指示读取成功完成)和来自RDMA内存142的数据部分220的数据分别传输到共享内存138的状态部分210和数据部分212。在操作512中,经由DMA传输将响应于请求的读操作而接收的存储在数据部分212中的数据传输回客户端设备102A。在一些方面,返回的状态信息可以包括单个字节,指示读操作的成功完成或在读操作期间发生的错误。如图5A和图5B所示,单个共享内存分配足以遵循与通过MA事件108接收的读操作相关联的整个I/O处理,其中发起程序节点116内的数据副本为零,并且RDMA传输的数量最佳(例如,执行操作510和512需要仅两个RDMA数据传输)。
图6为根据一些示例性实施例的适合于执行图5A的读操作的方法的流程图。方法600包括操作602、604和606。作为示例而非限制,方法600被描述为由目标节点118执行。在操作602中,进行DMA,并且将用于读操作的报头信息从共享内存138的报头部分208接收到目标设备118处的RDMA内存142的报头部分216中。在操作604中,目标设备118使用报头信息(例如,LUN、偏移、LBA等)来执行读操作。在读操作期间获得的数据存储在RDMA内存142的数据部分中。在操作606中,经由DMA传输将来自状态部分218的状态信息和来自RDMA内存142的数据部分220的数据分别传输到共享内存138的状态部分210和数据部分212。在成功完成读操作(例如,如状态信息所示)之后,可以对分配的共享内存138解除分配。
在结合图3A-6公开的方面中,第一组模块位于OS/内核124内,并且与内核的大的平坦地址空间相关联。结合图3A-6的第二组模块是驻留在用户空间122内的一组模块。这组模块驻留在用户进程中,其由特定于所述用户进程的地址空间组成,并且所述地址空间与内核的地址空间不同。在这些方面,共享内存138被映射到这两个地址空间。
在结合图7A-7B图示和讨论的其它方面中,示出了两组不同的模块,其驻留于不同的用户进程(进程0和进程1)内,它们具有不同的用户进程地址空间(例如702、704)。在这些方面,共享内存(例如706)被映射到两个用户进程使用的两个地址空间中。
图7A为根据一些示例性实施例的在写操作期间于两个用户进程之间共享的分布式存储节点内存与目标存储节点的RDMA内存之间的通信交换的框图。参考图7A,共享内存706可以由分布式存储节点116内的驱动程序708分配,其中内存706在具有对应用户进程地址空间704和702的两个用户进程(进程0和1)之间共享。如图7A所示,驱动程序708驻留在用户进程地址空间704内并且是基于用户空间的。共享内存706和RDMA内存720都在节点116和118处注册用于RDMA操作。内存部分712、714、716、718、722、724、726和728的功能分别类似于内存部分206、208、210、212、214、216、218和220的功能。
如图7A所示,共享内存706的上下文部分712用于存储用户进程地址空间704的驱动程序相关上下文710,以及当数据由用户进程地址空间702内的I/O堆栈中的不同模块处理时生成的存储节点相关上下文707。在一些方面,由客户端设备102A传送的MA事件108可以指示写操作,并且可以还包括用于对其执行写操作的数据736。
在操作730中,结合MA事件108的写操作进行直接内存访问(direct memoryaccess,DMA),并且数据736被存储在共享内存706的数据部分718内。在操作732中,将与写操作相关联的报头信息(存储在报头部分714中)以及存储在共享内存706的数据部分718中的数据736从发起程序节点116的共享内存706分别传输到目标节点118的RDMA内存720的报头部分724和数据部分728。然后,目标节点118使用传输的数据736和存储在报头部分724中的报头信息来执行写操作。在操作734中,经由DMA将用于写操作的状态信息(例如,指示写操作的完成或错误)从RDMA内存720的状态部分726传输到共享内存706的状态部分716。一旦成功完成写操作,就可以对分配的共享内存706解除分配。
图7B为根据一些示例性实施例的在读操作期间于两个用户进程之间共享的分布式存储节点内存与目标存储节点的RDMA内存之间的通信交换的框图。参考图7B,在操作740中,在接收到指示读操作的MA事件108时,由分布式存储节点116内的驱动程序分配共享内存706。如图7B所示,共享内存706的上下文部分712用于存储设备内核的驱动程序相关上下文710以及在用户空间702内的I/O堆栈的不同模块处理数据时生成的存储节点相关上下文707。
在一些方面,由客户端设备102A传送的MA事件108可以指示读操作,并且还可以标识在读操作期间获得的数据。在发起程序设备116接收到具有读操作的MA事件108并且分配了共享内存706之后,在操作742中,进行DMA,并且用于读操作的报头信息从共享内存706的报头部分714传输到目标设备118处RDMA内存720的报头部分724。目标设备118使用报头信息(例如,LUN、偏移、LBA等)来执行读操作。在读操作期间获得的数据存储在RDMA内存720的数据部分中。在操作744中,经由DMA传输将来自状态部分726的状态信息(例如,指示读取成功完成)和来自RDMA内存720的数据部分728的数据分别传输到共享内存706的状态部分716和数据部分718。在操作746中,经由DMA传输将响应于请求的读操作而接收的存储在数据部分718中的数据传输回客户端设备102A。在成功完成读操作之后(例如,如状态信息所示,并且在将数据传送到客户端设备102A之后),可以对共享内存706解除分配。
图8为根据一些示例性实施例的可以与存储节点之间的RDMA访问结合使用的I/O通信堆栈的框图800。参考图8,存储节点116经由通信链路830与存储节点118通信,所述通信链路可以包括有线或无线连接。MA事件108由存储节点116处的内核驱动程序804从客户端设备102A接收,并由存储节点116的I/O堆栈802的各个模块传递以进行处理。
I/O堆栈802可以驻留在与在节点116上运行的用户进程相关联的用户地址空间814内。I/O堆栈可以包括前端(frontend,FE)模块806、缓存模块808、复制模块810和RDMA模块812。FE模块806用于将与MA事件108相关联的I/O与LUN对象相关联,并验证与MA事件相关联的操作(例如,读或写操作)的范围(例如,偏移和长度)。
缓存模块808用于执行数据的缓存,并且在一些方面,满足缓存之外的操作。例如,缓存模块808可以首先检查缓存是否可用,然后可以通过检查缓存中读数据的存在来实现读缓存功能。如果数据可用,则满足缓存之外的读操作。否则,缓存模块808将I/O传送到堆栈中的下一个模块。
复制模块810在分布式存储环境中负责将数据(例如,在写操作时)复制到远程节点以实现冗余(冗余由远程节点提供,而不是冗余地存储在节点116处)。
RDMA模块812用于管理到对等节点的RDMA连接,并管理本地节点与远程节点之间的通信操作。例如,RDMA模块812可以经由到RDMA模块828的通信链路830管理到存储节点118的RDMA连接。
存储节点118内的I/O处理类似于上文结合存储节点116描述的I/O处理。内核驱动程序818可以传递接收到的内存访问事件,以供存储节点118的I/O堆栈820的各个模块进行处理。I/O堆栈820驻留在与节点118上运行的用户进程相关联的用户地址空间816内。I/O堆栈可以包括FE模块822、缓存模块824、复制模块826和RDMA模块828。FE模块822、缓存模块824、复制模块826和RDMA模块828执行与上文讨论的I/O堆栈802的对应模块相似的功能。
尽管本文描述的方面讨论了由内核驱动程序进行的共享内存分配,但本公开在此方面不受限制,并且可以使用另一个OS模块(例如,共享内存管理模块,例如1060或1160)来分配和解除分配共享内存(例如,在成功完成与从客户端设备接收到的MA事件相关联的读或写操作时)。
图9为根据一些示例性实施例的适用于通过分布式存储节点进行RDMA内存访问的方法的流程图。方法900包括操作902、904、906和908。作为示例而非限制,方法900被描述为由分布式存储节点116执行。在操作902中,接收对与数据相关联的输入/输出(input/output,I/O)进程的请求。例如,分布式存储节点116接收MA事件108,其包括对I/O进程(例如,读或写操作)的请求。在操作904中,响应于请求,使用分布式存储节点的操作系统驱动程序分配在操作系统与在分布式存储节点上运行的用户进程之间共享的内存段。例如,在接收到MA事件108时,内核驱动程序(例如130或132)分配在内核124的地址空间与在用户空间122内运行的用户进程之间共享的内存138。用户进程包括用于处理请求的I/O堆栈,例如图8中所示的I/O堆栈802。共享内存段包括存储与I/O堆栈相关联的上下文信息的上下文内存部分(例如,206)、存储用于I/O进程的报头信息的报头内存部分(例如,208),以及用于存储数据的数据内存部分(例如,212)。另外,在目标存储节点注册共享内存段用于RDMA访问(例如,作为系统初始化时内存的RDMA注册的一部分)。在这方面,在分布式存储节点116以及存储节点118上注册共享内存138用于RDMA访问。
在操作906中,在分布式存储节点的共享内存段与目标存储节点之间执行RDMA传输以完成I/O进程。例如,在写操作期间,执行从存储节点116到存储节点118的报头信息和数据的RDMA传输。在写操作完成之后,如图3B所示,经由RDMA将状态信息从存储节点118传输到存储节点116。在读操作期间,如图5B所示,执行从存储节点116到存储节点118的报头信息的RDMA传输,并且执行从存储节点118到存储节点116的数据和状态信息传输。在操作908中,接收到RDMA传输完成的状态指示符后,对共享内存段解除分配。
图10为根据一些示例性实施例的可以与本文描述的各种设备硬件结合使用的代表性软件架构1000的框图。图10仅是软件架构1002的非限制性示例,应了解,可实现许多其它架构以促进本文描述的功能。软件架构1002可以在图11的设备1100等硬件上执行,所述设备包括处理器1105、存储器1110、存储装置1115和1120、I/O组件1125和1130,以及其它组件。示出代表性的硬件层1004并且可以表示例如图11的设备1100。代表性硬件层1004包括具有相关联的可执行指令1008的一个或多个处理单元1006。可执行指令1008表示软件架构1002的可执行指令,包括图1-9的方法、模块等的实现形式。硬件层1004还包括存储器和/或存储模块1010,其也具有可执行指令1008。硬件层1004还可以包括其它硬件1012,其表示硬件层1004的任何其它硬件,例如被示为设备1100的一部分的其它硬件。
在图10的示例性架构中,软件架构1002可以被概念化为层的堆栈,其中每层提供特定的功能。例如,软件架构1002可以包括各层,例如操作系统1014、库1016、框架/中间件1018、应用程序1020和表示层1044。在操作上,各层内的应用程序1020和/或其它组件可以通过软件堆栈调用应用程序编程接口(application programming interface,API)调用1024,并且响应于API调用1024接收示为消息1026的响应、返回值等。图10所示的各层本质上是代表性的,并且并非所有软件架构1002都具有所有层。例如,一些移动或专用操作系统可能不提供框架/中间件1018,而其它移动或专用操作系统可以提供这些层。其它软件架构可能包括额外或不同的层。
操作系统1014可以管理硬件资源并提供公共服务。操作系统1014可以包括例如内核1028、服务1030、驱动程序1032和共享内存管理模块1060。内核1028可以充当硬件与其它软件层之间的抽象层。例如,内核1028可以负责内存管理、处理器管理(例如,调度)、组件管理、联网、安全设置等。服务1030可以为其它软件层提供其它公共服务。驱动程序1032可以负责控制底层硬件或与底层硬件介接。例如,取决于硬件配置,驱动程序1032可以包括显示器驱动程序、相机驱动程序、驱动程序、闪存驱动程序、串行通信驱动程序(例如,通用串行总线(Universal Serial Bus,USB)驱动程序)、驱动程序、音频驱动程序、电力管理驱动程序等。
在一些方面,共享内存管理模块1060可以包括合适的电路、逻辑、接口和/或代码,并且可以用于执行结合图3A中的操作306-310、图4中的操作402-406、图5A中的操作506-512、图6中的操作602-606、图7A中的操作730-734、图7B中的操作740-746以及图9中的操作902-908所讨论的一个或多个功能。另外,共享内存管理模块1060执行与分配用于执行I/O处理的共享内存以及在I/O处理完成之后解除分配共享内存有关的功能。在一些方面,共享内存管理模块1060的功能可以由其它操作系统模块来执行,例如1028、1030或1032。
库1016可以提供可由应用程序1020和/或其它组件和/或层使用的公共基础设施。库1016通常提供的功能允许其它软件模块以比直接与底层操作系统1014的功能(例如,内核1028、服务1030、驱动程序1032和/或模块1060)介接的方式更容易的方式执行任务。库1016可以包括系统库1034(例如,C标准库),其可以提供例如内存分配功能、字符串操作功能、数学功能等的功能。此外,库1016可以包括API库1036,例如媒体库(例如,支持MPEG4、H.264、MP3、AAC、AMR、JPG、PNG等各种媒体格式的表现和操作的库)、图形库(例如,可用于在显示器上以图形内容呈现2D和3D的OpenGL框架)、数据库的库(例如,可提供各种关系数据库功能的SQLite)、Web库(例如,可提供Web浏览功能的WebKit)等。库1016还可以包括各种各样的其它库1038,以向应用程序1020和其它软件组件/模块提供许多其它API。
框架/中间件1018(有时也称为中间件)可以提供可由应用程序1020和/或其它软件组件/模块利用的高层通用基础设施。例如,框架/中间件1018可以提供各种图形用户界面(graphical user interface,GUI)功能、高级资源管理、高级位置服务等。框架/中间件1018可以提供可由应用程序1020和/或其它软件组件/模块使用的广泛的其它API,其中一些可以特定于特定操作系统1014或平台。
应用程序1020包括内置应用程序1040和/或第三方应用程序1042。代表性内置应用程序1040的示例可以包括但不限于联系人应用程序、浏览器应用程序、阅读器应用程序、位置应用程序、媒体应用程序、消息收发应用程序和/或游戏应用程序。第三方应用程序1042可以包括任何内置应用程序1040以及各种不同的其它应用程序。在特定示例中,第三方应用程序1042(例如,由除特定平台的供应商以外的实体使用AndroidTM或iOSTM软件开发工具包(software development kit,SDK)开发的应用程序)可以是在移动操作系统上运行的移动软件,所述移动操作系统例如是iOSTM、AndroidTM、手机或其它移动操作系统。在此示例中,第三方应用程序1042可以调用由操作系统1014等移动操作系统提供的API调用1024,以促进本文描述的功能。
应用程序1020可以利用内置操作系统功能(例如,内核1028、服务1030、驱动程序1032和/或模块1060)、库(例如,系统库1034、API库1036和其它库1038)以及框架/中间件1018,以创建与系统用户进行交互的用户界面。或者或另外,在一些系统中,与用户的交互可以在表示层1044等表示层中发生。在这些系统中,应用程序/模块“逻辑”可与应用程序/模块的与用户交互的方面分离。
一些软件架构利用虚拟机。在图10的示例中,这由虚拟机1048示出。虚拟机创建软件环境,在所述软件环境中,应用程序/模块可以像在硬件机器(例如,图9的设备900)上执行一样执行。虚拟机1048由主机操作系统(图10中的操作系统1014)托管,并且通常(尽管并非总是)具有虚拟机监视器1046,其管理虚拟机1048的操作以及与主机操作系统(即,操作系统1014)的介接。软件架构1002在虚拟机1048内执行,例如操作系统1050、库1052、框架/中间件1054、应用程序1056和/或表示层1058。在虚拟机1048内执行的软件架构的这些层可以与先前描述的相应层相同或可以不同。
图11为根据一些示例性实施例的用于实现算法并执行方法的设备的电路系统的框图。在各种实施例中不需要使用所有组件。例如,客户端、服务器和基于云的网络设备可能各自使用一组不同的组件,或者在服务器的情况下,例如使用较大的存储设备。
呈计算机1100(也称为计算设备1100、计算机系统1100或计算机1100)的形式的一个示例性计算设备可以包括均由总线1140连接的处理器1105、存储器存储装置1110、可移动存储装置1115、不可移动存储装置1120、输入接口1125、输出接口1130和通信接口1135。尽管将示例性计算设备图示和描述为计算机1100,但所述计算设备在不同实施例中可呈不同形式。
存储器存储装置1110可以包括易失性存储器1145和非易失性存储器1150,并且可以存储程序1155。计算机1100可以包括多种计算机可读介质,或有权访问包括多种计算机可读介质的计算环境,所述多种计算机可读介质例如是易失性存储器1145、非易失性存储器1150、可移动存储装置1115和不可移动存储装置1120。计算机存储装置包括随机存取存储器(random access memory,RAM)、只读存储器(read only memory,ROM)、可擦除可编程只读存储器(erasable programmable read-only memory,EPROM)和电可擦除可编程只读存储器(electrically erasable programmable read-only memory,EEPROM)、闪存或其它存储器技术、压缩光盘只读存储器(compact disc read-only memory,CD ROM)、数字通用光盘(Digital Versatile Disk,DVD)或其它光盘存储装置、磁带盒、磁带、磁盘存储或其它磁性存储设备,或能够存储计算机可读指令的任何其它介质。
存储在计算机可读介质上的计算机可读指令(例如,存储在存储器1110中的程序1155)可由计算机1100的处理器1105执行。硬盘驱动器、CD-ROM和RAM是包括例如存储设备的非瞬时性计算机可读介质的物件的一些示例。术语“计算机可读介质”和“存储设备”不包括载波,因为认为载波过于瞬时。“计算机可读非瞬时性介质”包括所有类型的计算机可读介质,包括磁存储介质、光存储介质、快闪介质和固态存储介质。应理解,软件可安装在计算机中并与计算机一起出售。或者,可获得软件并将其加载到计算机中,包括通过物理介质或分布系统获得软件,包括例如从软件创建者拥有的服务器或从软件创建者未拥有但使用的服务器获得软件。例如,软件可以存储在服务器上,用于在因特网上分发。如本文中所使用,术语“计算机可读介质”和“机器可读介质”可互换。
程序1155可以利用使用本文讨论的共享内存管理模块1160等模块的客户偏好结构。共享内存管理模块1160可以与结合图10所讨论的共享内存管理模块1060相同。
本文所描述的任何一个或多个模块可使用硬件(例如机器的处理器、专用集成电路(application-specific integrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)或其任何合适的组合)实施。此外,这些模块中的任何两个或多个可以组合成单个模块,并且用于单个模块的本文描述的功能可以在多个模块之中细分。此外,根据不同示例性实施例,本文中描述为在单个机器、数据库或设备内实现的模块可跨多个机器、数据库或设备分布。
在一些方面,模块1160以及作为程序1155的一部分的一个或多个其它模块可以被集成为单个模块,执行集成模块的相应功能。
尽管上文已详细描述若干实施例,但是其它修改也是可能的。例如,图中描绘的逻辑流不需要按所示的特定次序或顺序次序来达到所要结果。可提供其它步骤,或可从所描述的流程中去除步骤,并且可向所描述的系统添加其它组件或从所述系统去除其它组件。其它实施例可在所附权利要求书的范围内。
还应理解,可在与本公开一致的一个或多个计算设备中安装软件并与所述一个或多个计算设备一起出售,所述软件包括促进上文参考本公开的任一或全部步骤所描述的处理和操作的一个或多个计算机可执行指令。或者,可获得软件并将其加载到一个或多个计算设备中,包括通过物理介质或分布系统获得软件,包括例如从软件创建者拥有的服务器或从软件创建者未拥有但使用的服务器获得软件。例如,软件可以存储在服务器上,用于在因特网上分发。
另外,本领域技术人员应了解,本公开在其应用上不限于说明书中阐述的或在附图中示出的构造细节和组件的布置。本文中的实施例能有其它实施例,并且能够以各种方式实践或实行。另外,应理解,本文所用的措词和术语用于描述的目的,不应视为具有限制性。本文中使用“包括”或“具有”以及其变体意在涵盖其后列出的项和其等同物以及额外项。除非另有限制,否则本文中的术语“连接”、“耦合”和“安装”以及其变体是在广义上使用,且涵盖直接和间接连接、耦合和安装。另外,术语“连接”和“耦合”以及其变体不限于物理或机械连接或耦合。此外,上、下、底部和顶部等术语是相对的,并且用于辅助说明,而非限制性的。
可至少部分地在数字电子电路、模拟电子电路中或在计算机硬件、固件、软件中或在其组合中实现根据所示实施例使用的说明性设备、系统和方法的组件。这些组件可实现为例如有形地体现在信息载体或机器可读存储设备中的计算机程序产品,例如计算机程序、程序代码或计算机指令,以用于由可编程处理器、计算机或多个计算机等数据处理装置执行或控制所述数据处理装置的操作。
可以以任何形式的编程语言(包括编译或解释语言)编写计算机程序,并且可以以任何形式部署计算机程序,包括作为独立程序或作为模块、组件、子例程或其它适合用于计算环境中的单元。可将计算机程序部署为在一个计算机上或在一个站点处或跨越多个站点分布并且通过网络互连的多个计算机上执行。另外,精通与本文描述的技术有关的领域的程序员可容易地将实现本文描述的技术的功能程序、代码和代码段理解为在权利要求的范围内。与说明性实施例相关联的方法步骤可由一个或多个可编程处理器执行,所述可编程处理器执行计算机程序、代码或指令来执行功能(例如,通过对输入数据进行操作和/或生成输出)。方法步骤还可由专用逻辑电路执行,并且用于执行所述方法的装置可实现为专用逻辑电路,例如,现场可编程门阵列(field programmable gate array,FPGA)或专用集成电路(application-specific integrated circuit,ASIC)等。
结合本文公开的实施例描述的各种说明性逻辑块、模块和电路可通过通用处理器、数字信号处理器(digital signal processor,DSP)、ASIC、FPGA或设计成执行本文所描述的功能的其它可编程逻辑设备、离散门或晶体管逻辑、离散硬件组件或其任何组合来实施或执行。通用处理器可以是微处理器,但在替代方案中,处理器可以是任何常规处理器、控制器、微控制器或状态机。处理器还可以实现为计算设备的组合,例如DSP和微处理器的组合、多个微处理器、与DSP核心结合的一个或多个微处理器,或任何其它此类配置。
适合于执行计算机程序的处理器包括例如通用和专用微处理器两者,以及任何种类的数字计算机的任何一个或多个处理器。一般来说,处理器将从只读存储器或随机存取存储器或这两者接收指令和数据。计算机的必需元件是用于执行指令的处理器和用于存储指令和数据的一个或多个存储器设备。一般来说,计算机还将包括用于存储数据的一个或多个大容量存储设备,例如磁盘、磁光盘或光盘,或可操作地耦合以从所述一个或多个大容量存储设备接收数据或向其传输数据或进行这两种操作。适合体现计算机程序指令和数据的信息载体包括所有形式的非易失性存储器,例如包括半导体存储器设备,例如,电可编程只读存储器或ROM(electrically programmable read-only memory or ROM,EPROM)、电可擦除可编程ROM(electrically erasable programmable ROM,EEPROM)、闪存设备和数据存储盘(例如,磁盘、内部硬盘或可移动磁盘、磁光盘以及CD-ROM和DVD-ROM盘)。处理器和存储器可补充有专用逻辑电路或并入专用逻辑电路中。
本领域的技术人员应理解,可使用多种不同技术和技艺中的任一者来表示信息和信号。例如,可以通过电压、电流、电磁波、磁场或磁粒子、光场或光粒子或其任何组合来表示在整个上文描述中可能引用的数据、指令、命令、信息、信号、位、符号和码片。
如本文中所使用,“机器可读介质”(或“计算机可读介质”)意指能够临时或永久性地存储指令和数据的设备,并且可包括但不限于随机存取存储器(random-access memory,RAM)、只读存储器(read-only memory,ROM)、缓冲存储器、闪存、光学介质、磁性介质、超速缓存内存、其它类型的存储装置(例如,可擦除可编程只读存储器(Erasable ProgrammableRead-Only Memory,EEPROM))和/或其任何合适的组合。术语“机器可读介质”应理解为包括能够存储处理器指令的单个介质或多个介质(例如,集中式或分布式数据库或关联的缓存和服务器)。术语“机器可读介质”还应理解为包括能够存储由一个或多个处理器1105执行的指令的任何介质或多个介质的组合,使得所述指令在由一个或多个处理器1105执行时使所述一个或多个处理器1105执行本文描述的任何一个或多个方法。因此,“机器可读介质”是指单个存储装置或设备,以及包括多个存储装置或设备的“基于云的”存储系统或存储网络。如本文所用的术语“机器可读介质”本身不包括信号。
另外,在不脱离本公开的范围的情况下,在各种实施例中描述和示出为独立或单独的技术、系统、子系统和方法可以与其它系统、模块、技术或方法组合或整合。示出或论述为彼此耦合或直接耦合或通信的其它项也可以采用电方式、机械方式或其它方式通过某一接口、设备或中间组件间接地耦合或通信。其它变化、替换和更改示例对本领域技术人员而言是显而易见的,均不脱离本文公开的精神和范围。
尽管已参考本公开的特定特征和实施例描述了本公开,但明显的是,在不脱离本公开的范围的情况下可对其作出各种修改和组合。例如,其它组件可添加到所描述的系统或从中移除。因此,说明书和附图应仅视为由所附权利要求书限定的本公开的说明,并预期涵盖处于本公开的范围内的任何和所有修改、变化、组合或等同物。其它方面可在所附权利要求书的范围内。
Claims (20)
1.一种用于由分布式存储节点进行远程直接内存访问(remote direct memoryaccess,
RDMA)的计算机实现的方法,其特征在于,所述方法包括:
接收对与数据相关联的输入/输出(input/output,I/O)进程的请求;
响应于所述请求,使用所述分布式存储节点的操作系统驱动程序分配在所述操作系统与在所述分布式存储节点上运行的用户进程之间共享的内存段,其中:
所述用户进程包括用于处理所述请求的I/O堆栈;
所述共享内存段包括存储与所述I/O堆栈相关联的上下文信息的上下文内存部分、存储用于所述I/O进程的报头信息的报头内存部分,以及用于存储所述数据的数据内存部分;并且
在目标存储节点注册所述共享内存段用于RDMA访问;
在所述分布式存储节点的所述共享内存段与所述目标存储节点之间执行RDMA传输以完成所述I/O进程;以及
接收到所述RDMA传输完成的状态指示符后,对所述共享内存段解除分配。
2.根据权利要求1所述的计算机实现的方法,其特征在于,所述上下文信息与以下各项中的一个或多个相关联:数据缓存操作、数据复制操作,以及由所述I/O堆栈执行以完成所述I/O进程的RDMA传输操作。
3.根据权利要求2所述的计算机实现的方法,其特征在于,所述上下文信息包括所述操作系统驱动程序的上下文信息,所述上下文信息包括:
回调上下文信息,其指示所述用户进程或在完成所述I/O进程时将由所述分布式存储节点执行的功能;以及
I/O结构,其进行与所述I/O进程相关联的活动块I/O操作。
4.根据权利要求2所述的计算机实现的方法,其特征在于,所述上下文信息包括由所述I/O堆栈使用的缓冲区的散集(scatter/gather,s/g)列表。
5.根据权利要求1所述的计算机实现的方法,其特征在于,所述报头信息包括以下各项中的一个或多个:
与所述I/O进程相关联的数据处理操作的类型;
逻辑单元号(logical unit number,LUN),其标识所述目标存储节点内的对象以用于存储或检索所述数据;
标识所述RDMA传输的内存偏移量的逻辑块地址(logical block address,LBA);
与所述数据的大小相关联的长度信息;以及
标识执行所述RDMA传输的时间点或时间范围的快照ID。
6.根据权利要求5所述的计算机实现的方法,其特征在于,所述I/O进程包括从主机设备接收的读操作,并且所述方法还包括:
使用所述I/O堆栈内的RDMA模块向所述目标存储节点传送所述报头信息,所述报头信息标识与由所述读操作请求的所述数据相关联的所述LUN和所述LBA。
7.根据权利要求6所述的计算机实现的方法,其特征在于,还包括:
从所述目标存储节点接收由所述读操作请求的所述数据和所述状态指示符,所述状态指示符指示所述读操作成功完成;以及
将所请求的数据和所述状态指示符转发到所述主机设备。
8.根据权利要求1所述的计算机实现的方法,其特征在于,所述I/O进程包括写操作,并且所述方法还包括:
通过所述操作系统驱动程序执行直接内存访问(direct memory access,DMA)操作,以将所述数据存储在所述共享内存段的所述数据内存部分中。
9.根据权利要求8所述的计算机实现的方法,其特征在于,还包括:
使用所述I/O堆栈内的RDMA模块执行从所述共享内存段到所述目标存储节点内的RDMA内存的所述报头信息和所述数据的所述RDMA传输;以及
从所述目标存储节点接收所述状态指示符,其中所述状态指示符指示所述写操作成功完成。
10.根据权利要求1所述的计算机实现的方法,其特征在于,所述操作系统驱动程序包括光纤通道(Fiber Channel,FC)驱动程序或因特网小型计算机系统接口(Internet SmallComputer Systems Interface,iSCSI)RDMA扩展(iSCSI Extension for RDMA,ISER)驱动程序中的一个或两个。
11.一种分布式存储节点,其特征在于,包括:
存储指令的存储器;以及
与所述存储器通信的一个或多个处理器,其中所述一个或多个处理器执行所述指令以进行以下操作:
接收对与数据相关联的输入/输出(input/output,I/O)进程的请求;
响应于所述请求,使用所述分布式存储节点的操作系统驱动程序分配在所述操作系统与在所述分布式存储节点上运行的用户进程之间共享的内存段,其中:
所述用户进程包括用于处理所述请求的I/O堆栈;
所述共享内存段包括存储与所述I/O堆栈相关联的上下文信息的上下文内存部分、存储用于所述I/O进程的报头信息的报头内存部分,以及用于存储所述数据的数据内存部分;并且
在目标存储节点注册所述共享内存段用于RDMA访问;
在所述分布式存储节点的所述共享内存段与所述目标存储节点之间执行RDMA传输以完成所述I/O进程;以及
接收到所述RDMA传输完成的状态指示符后,对所述共享内存段解除分配。
12.根据权利要求11所述的分布式存储节点,其特征在于,所述I/O进程包括写操作,并且所述一个或多个处理器执行所述指令以进行以下操作:
通过所述操作系统驱动程序执行直接内存访问(direct memory access,DMA)操作,以将所述数据存储在所述共享内存段的所述数据内存部分中。
13.根据权利要求12所述的分布式存储节点,其特征在于,所述一个或多个处理器执行所述指令以进行以下操作:
使用所述I/O堆栈内的RDMA模块执行从所述共享内存段到所述目标存储节点内的RDMA内存的所述报头信息和所述数据的所述RDMA传输;以及
从所述目标存储节点接收所述状态指示符,其中所述状态指示符指示所述写操作成功完成。
14.根据权利要求11所述的分布式存储节点,其特征在于,所述报头信息包括以下各项中的一个或多个:
与所述I/O进程相关联的数据处理操作的类型;
逻辑单元号(logical unit number,LUN),其标识所述目标存储节点内的对象以用于存储或检索所述数据;
标识所述RDMA传输的内存偏移量的逻辑块地址(logical block address,LBA);
与所述数据的大小相关联的长度信息;以及
标识执行所述RDMA传输的时间点或时间范围的快照ID。
15.根据权利要求14所述的分布式存储节点,其特征在于,所述I/O进程包括从主机设备接收的读操作,并且所述一个或多个处理器执行所述指令以进行以下操作:
使用所述I/O堆栈内的RDMA模块向所述目标存储节点传送所述报头信息,所述报头信息标识与由所述读操作请求的所述数据相关联的所述LUN和所述LBA。
16.根据权利要求15所述的分布式存储节点,其特征在于,所述一个或多个处理器执行所述指令以进行以下操作:
从所述目标存储节点接收由所述读操作请求的所述数据和所述状态指示符,所述状态指示符指示所述读操作成功完成;以及
将所请求的数据和所述状态指示符转发到所述主机设备。
17.根据权利要求11所述的分布式存储节点,其特征在于,所述上下文信息包括所述操作系统驱动程序的上下文信息,所述上下文信息包括:
回调上下文信息,其指示所述用户进程或在完成所述I/O进程时将由所述分布式存储节点执行的功能;以及
I/O结构,其进行与所述I/O进程相关联的活动块I/O操作。
18.一种存储用于由分布式存储节点进行远程直接内存访问(remote direct memoryaccess,
RDMA)的计算机指令的非瞬时性计算机可读介质,其特征在于,当所述指令由一个或多个处理器执行时使所述一个或多个处理器执行以下步骤:
接收对与数据相关联的输入/输出(input/output,I/O)进程的请求;
响应于所述请求,使用所述分布式存储节点的操作系统驱动程序分配在所述操作系统与在所述分布式存储节点上运行的用户进程之间共享的内存段,其中:
所述用户进程包括用于处理所述请求的I/O堆栈;
所述共享内存段包括存储与所述I/O堆栈相关联的上下文信息的上下文内存部分、存储用于所述I/O进程的报头信息的报头内存部分,以及用于存储所述数据的数据内存部分;并且
在目标存储节点注册所述共享内存段用于RDMA访问;
在所述分布式存储节点的所述共享内存段与所述目标存储节点之间执行RDMA传输以完成所述I/O进程;以及
接收到所述RDMA传输完成的状态指示符后,对所述共享内存段解除分配。
19.根据权利要求18所述的非瞬时性计算机可读介质,其特征在于,所述I/O进程包括写操作,并且所述指令还使所述一个或多个处理器执行以下步骤:
通过所述操作系统驱动程序执行直接内存访问(direct memory access,DMA)操作,以将所述数据存储在所述共享内存段的所述数据内存部分中;
使用所述I/O堆栈内的RDMA模块执行从所述共享内存段到所述目标存储节点内的RDMA内存的所述报头信息和所述数据的所述RDMA传输;以及
从所述目标存储节点接收所述状态指示符,其中所述状态指示符指示所述写操作成功完成。
20.根据权利要求18所述的非瞬时性计算机可读介质,其特征在于,所述I/O进程包括从主机设备接收的读操作,并且所述指令还使所述一个或多个处理器执行以下步骤:
使用所述I/O堆栈内的RDMA模块向所述目标存储节点传送所述报头信息,所述报头信息标识与由所述读操作请求的所述数据相关联的逻辑单元号(logical unit number,LUN)和逻辑块地址(logical block address,LBA);
从所述目标存储节点接收由所述读操作请求的所述数据和所述状态指示符,所述状态指示符指示所述读操作成功完成;以及
将所请求的数据和所述状态指示符转发到所述主机设备。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962798890P | 2019-01-30 | 2019-01-30 | |
US62/798,890 | 2019-01-30 | ||
PCT/CN2019/083584 WO2020155417A1 (en) | 2019-01-30 | 2019-04-22 | Input/output processing in a distributed storage node with rdma |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113287286A CN113287286A (zh) | 2021-08-20 |
CN113287286B true CN113287286B (zh) | 2022-12-27 |
Family
ID=71840753
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980088335.4A Active CN113287286B (zh) | 2019-01-30 | 2019-04-22 | 通过rdma进行分布式存储节点中的输入/输出处理 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11681441B2 (zh) |
EP (1) | EP3900308A4 (zh) |
CN (1) | CN113287286B (zh) |
WO (1) | WO2020155417A1 (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113287286B (zh) | 2019-01-30 | 2022-12-27 | 华为技术有限公司 | 通过rdma进行分布式存储节点中的输入/输出处理 |
US12001355B1 (en) * | 2019-05-24 | 2024-06-04 | Pure Storage, Inc. | Chunked memory efficient storage data transfers |
EP4127940A1 (en) * | 2020-05-08 | 2023-02-08 | Huawei Technologies Co., Ltd. | Remote direct memory access with offset values |
US20220179675A1 (en) | 2020-12-03 | 2022-06-09 | Nutanix, Inc. | Memory registration for optimizing rdma performance in hyperconverged computing environments |
US11940935B2 (en) * | 2021-04-19 | 2024-03-26 | Mellanox Technologies, Ltd. | Apparatus, method and computer program product for efficient software-defined network accelerated processing using storage devices which are local relative to a host |
US11444790B1 (en) | 2021-07-09 | 2022-09-13 | International Business Machines Corporation | Dynamic exclusion of RDMA-based shared memory communication based on performance-related data |
CN113746897A (zh) * | 2021-07-28 | 2021-12-03 | 浪潮电子信息产业股份有限公司 | 一种文件传输方法、装置、设备及存储介质 |
CN116170435A (zh) * | 2021-11-25 | 2023-05-26 | 华为技术有限公司 | 数据传输方法、计算设备及计算系统 |
CN114780465B (zh) * | 2022-03-01 | 2024-04-16 | 阿里巴巴(中国)有限公司 | 可共享远程直接数据存取链接的创建方法及装置 |
CN116932241A (zh) * | 2022-04-08 | 2023-10-24 | 华为云计算技术有限公司 | 一种服务启动方法及相关装置 |
CN114697372B (zh) * | 2022-05-31 | 2022-09-06 | 深圳市泛联信息科技有限公司 | 一种分布式系统中数据传输处理与存储方法、系统及介质 |
US11960419B2 (en) | 2022-07-19 | 2024-04-16 | Samsung Electronics Co., Ltd. | Systems and methods for data prefetching for low latency data read from a remote server |
CN115643321A (zh) * | 2022-09-29 | 2023-01-24 | 中科驭数(北京)科技有限公司 | 数据处理方法、装置、设备及计算机可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104202391A (zh) * | 2014-08-28 | 2014-12-10 | 浪潮(北京)电子信息产业有限公司 | 共享系统地址空间的非紧耦合系统间的rdma通信方法 |
US9397788B1 (en) * | 2015-11-11 | 2016-07-19 | International Business Machines Corporation | Proxy based data transfer utilizing direct memory access |
CN107729159A (zh) * | 2017-09-29 | 2018-02-23 | 华为技术有限公司 | 一种共享内存的地址映射方法及装置 |
CN108268208A (zh) * | 2016-12-30 | 2018-07-10 | 清华大学 | 一种基于rdma的分布式内存文件系统 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060165084A1 (en) * | 2005-01-21 | 2006-07-27 | International Business Machines Corporation | RNIC-BASED OFFLOAD OF iSCSI DATA MOVEMENT FUNCTION BY TARGET |
US8909727B2 (en) | 2010-11-24 | 2014-12-09 | International Business Machines Corporation | RDMA read destination buffers mapped onto a single representation |
US9354933B2 (en) * | 2011-10-31 | 2016-05-31 | Intel Corporation | Remote direct memory access adapter state migration in a virtual environment |
CN103248467B (zh) * | 2013-05-14 | 2015-10-28 | 中国人民解放军国防科学技术大学 | 基于片内连接管理的rdma通信方法 |
US10725963B2 (en) * | 2015-09-12 | 2020-07-28 | Microsoft Technology Licensing, Llc | Distributed lock-free RDMA-based memory allocation and de-allocation |
US10375167B2 (en) * | 2015-11-20 | 2019-08-06 | Microsoft Technology Licensing, Llc | Low latency RDMA-based distributed storage |
US10901937B2 (en) | 2016-01-13 | 2021-01-26 | Red Hat, Inc. | Exposing pre-registered memory regions for remote direct memory access in a distributed file system |
KR102197247B1 (ko) * | 2017-06-01 | 2020-12-31 | 한국전자통신연구원 | 파라미터 서버 및 그것에 의해 수행되는 분산 딥러닝 파라미터 공유 방법 |
CN113287286B (zh) | 2019-01-30 | 2022-12-27 | 华为技术有限公司 | 通过rdma进行分布式存储节点中的输入/输出处理 |
-
2019
- 2019-04-22 CN CN201980088335.4A patent/CN113287286B/zh active Active
- 2019-04-22 EP EP19912451.2A patent/EP3900308A4/en active Pending
- 2019-04-22 WO PCT/CN2019/083584 patent/WO2020155417A1/en unknown
-
2021
- 2021-07-14 US US17/305,752 patent/US11681441B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104202391A (zh) * | 2014-08-28 | 2014-12-10 | 浪潮(北京)电子信息产业有限公司 | 共享系统地址空间的非紧耦合系统间的rdma通信方法 |
US9397788B1 (en) * | 2015-11-11 | 2016-07-19 | International Business Machines Corporation | Proxy based data transfer utilizing direct memory access |
CN108268208A (zh) * | 2016-12-30 | 2018-07-10 | 清华大学 | 一种基于rdma的分布式内存文件系统 |
CN107729159A (zh) * | 2017-09-29 | 2018-02-23 | 华为技术有限公司 | 一种共享内存的地址映射方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113287286A (zh) | 2021-08-20 |
US11681441B2 (en) | 2023-06-20 |
WO2020155417A1 (en) | 2020-08-06 |
US20210342071A1 (en) | 2021-11-04 |
EP3900308A1 (en) | 2021-10-27 |
EP3900308A4 (en) | 2022-02-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113287286B (zh) | 通过rdma进行分布式存储节点中的输入/输出处理 | |
US9792060B2 (en) | Optimized write performance at block-based storage during volume snapshot operations | |
US11093148B1 (en) | Accelerated volumes | |
US9880941B2 (en) | Sharing an accelerator context across multiple processes | |
US8782323B2 (en) | Data storage management using a distributed cache scheme | |
US9575657B2 (en) | Dataset replica migration | |
US9798663B2 (en) | Granting exclusive cache access using locality cache coherency state | |
US11863469B2 (en) | Utilizing coherently attached interfaces in a network stack framework | |
US9798765B2 (en) | Updating object attributes in a lock-coupled namespace traversal | |
CN115413338A (zh) | 在计算环境中提供加速器与存储装置之间的直接数据访问 | |
US11157456B2 (en) | Replication of data in a distributed file system using an arbiter | |
US9760577B2 (en) | Write-behind caching in distributed file systems | |
US9990303B2 (en) | Sharing data structures between processes by semi-invasive hybrid approach | |
US10509578B2 (en) | Logical address space for storage resource pools | |
TW202230140A (zh) | 管理記憶體的方法及非暫時性電腦可讀媒體 | |
US11748181B2 (en) | System and method for efficient scalable software-defined NVMEoF front-end connectivity | |
US9251101B2 (en) | Bitmap locking using a nodal lock | |
US20210132821A1 (en) | Method, electronic device and computer program product for storage management | |
US20190265902A1 (en) | Live migration of applications using capi flash |
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 |