1.本技术涉及计算机领域,尤其涉及一种应用于
内存池的数据访问方法、管理设备、
地址管理装置和存储系统。
背景技术:
2.近年来随着存储介质和高速网络的发展,内存池(memory pool)技术成为学术界和工业界的研究方向,并逐步被应用于分布式数据库、大数据处理、基础设施即服务(infrastructure as a service,iaas)等各个领域。内存池是一种新的存储空间分配方式,可以在用户申请存储空间时,优先使用内存池中的内存块,从而避免产生过多的碎片空间。当内存池应用在多个计算机通过高速互联(例如,高速网络或总线)组成的集中时,集中的任意一个存储
节点都能向内存池申请内存或操作内存,因此内存池中的内存需要采用全局统一编址,而编址设计的优劣直接关系到内存数据的访问性能。
3.目前,在内存池的现有地址管理方式中,每个存储节点将内存池分配给该存储节点的内存划分为小的内存块(segment),当应用申请的内存大小大于单个内存块的大小时,会由连续或不连续的内存块拼凑成大于或等于所申请内存大小的空间。图1是一种现有的地址管理方式的示意图,如图1所示,分配给应用的内存块的信息以链表的形式存放在该存储节点的内存中,链表的每个节点表示一个内存块,链表节点中存放内存块的标识(seg_id)和内存块的使用大小(size)。存储节点为每一个申请内存的应用创建一个链表用于存储为这个应用分配的内存块的信息,并使用存储节点的标识(host_id)和一个随机数字(uuid)作为这段内存的全局内存地址,其中每个节点上生成的每个链表的uuid的数字均不同。内存的全局内存地址和内存对应的链表对象以数据对的方式存放在地址查表中,其中,链表对象除了包括链表的首地址,还可以包括链表长度等信息。示例性地,表1为本技术实施例提供的一种现有的地址查表。
4.表1、地址查表
5.全局内存地址链表对象100010x0001100020x0010100030x0020
6.如表1所示,当知道数据的全局内存地址时,可以通过查表的方式获取该数据对应的链表对象的首地址,并通过该首地址获取链表中每个内存块的标识和使用大小,从而获得内存块中的数据。图2是一种现有的内存池数据访问的流程示意图,第一应用需要获取第二应用在内存池的存储节点1上的数据。如图2所示,首先第二应用将数据的全局内存地址发送至第一应用,第一应用将全局内存地址转发至存储节点1。存储节点1接收到全局内存地址后,由存储节点1的cpu在地址查表中查询到该全局内存地址对应的链表对象,并由cpu将链表对象中存储的内存块的地址的对应数据返回给第一应用。现有方法在数据读取时,需要通过双边通信获取内存块的地址信息,其中涉及大量需要cpu执行的操作,导致远
程数据的访问性能急剧下降。因此,如何提供一种提高内存池中数据操作性能的地址管理方法成为了亟待解决的问题。
技术实现要素:
7.本技术提供了一种应用于内存池的地址管理方法、节点和存储系统,能提高内存池中数据操作性能。
8.第一方面,提供一种数据访问方法,在数据访问方法中,存储系统包括多个节点,存储系统的内存池包括多个节点中的复数个节点的内存,其中,多个节点包括第一节点,第一节点包括接口卡和中央处理器cpu,则数据访问方法包括:首先,接口卡接收第一应用的数据访问请求,该请求包括目标数据在内存池中的目标全局内存地址,其中,第一应用来自于存储系统中任意一个节点,并且目标全局内存地址对应
所述内存池中唯一的存储空间;然后,接口卡根据目标全局内存地址得到目标数据在存储所述目标数据的节点的目标局部内存地址,其中,目标局部内存地址用于指示目标数据在存储目标数据的节点的内存中的存储空间;最后,接口卡向第一应用发送目标数据,或者向第一应用发送目标局部内存地址。
9.通过上述方法,接口卡在获取第一应用的数据时可以直接根据目标全局内存地址得到目标数据在对应的存储节点中的目标局部内存地址,无需第一节点中的中央处理器的参与,实现了接口卡与节点之间的单边通信,从而减少了等待cpu通过查地址查表完成目标全局内存地址转换成目标局部内存地址的时间,以及减少了cpu运算资源的消耗。同时,当多个应用并行访问第一节点的数据内容时,不需要cpu对地址查表进行加锁,提高了数据的访问效率。
10.在一种可能的实现方式中,内存池包括多个内存块,每个内存块具有唯一的标识并且属于一个节点,则接口卡得到目标数据的局部内存地址,具体包括:接口卡根据目标全局内存地址得到存储目标数据的目标内存块的标识以及目标内存块所在节点的标识,其中,目标内存块是内存池中用于存储目标数据的内存块。通过上述方法,使用内存块存储目标数据,接口卡通过全局内存地址就可得知内存块的标识以及内存块所在的节点,便可以进一步不通过cpu,确定目标数据所在的节点以及目标数据在该节点的哪一段存储空间。
11.在另一种可能的实现方式中,目标数据的目标全局内存地址的组成包括第一数据、第二数据和第三数据,其中,第一数据为目标内存块所在节点的标识,第二数据用于指示目标内存块的数量,第三数据为存储目标内存块的标识的存储空间的起始地址。通过上述方法,接口卡可以直接根据存储目标内存块的信息的存储空间的起始地址定位目标内存块的信息,从而获得目标数据的存储位置。
12.在另一种可能的实现方式中,在接口卡接收第一应用的数据访问请求之前,数据访问方法还包括:cpu接收第二应用为目标数据分配存储空间的分配请求。然后,cpu从内存池中为第二应用分配所述目标内存块,并存储所述目标内存块的信息。并且,cpu生成目标全局内存地址,包括存储目标数据的节点的标识、目标内存块的数量以及存储目标内存块的标识的存储空间的起始地址,并将目标全局内存地址发送至第二应用。最后,第二应用根据目标全局内存地址将目标数据存储进目标内存块中,并将目标全局内存地址发送给第一应用。通过上述方法,可以在为目标数据分配内存块时,将内存块的信息作为不可变元数据
单独存储,而将存储目标数据的节点的标识、目标内存块的数量以及存储不可变元数据的地址作为可变元数据加入全局内存地址。这种分离的两层存储方法,有利于接口卡在获得目标数据的全局内存地址后快速通过寻址到内存块的信息,从而可以进一步得到目标数据的物理地址。
13.在另一种可能的实现方式中,当目标数据位于第一节点中时,cpu存储所述目标内存块的标识具体为cpu将目标内存块的标识存储在第一节点中,则第一应用根据目标局部内存地址获得目标数据的方法具体包括:接口卡根据目标局部内存地址在第一节点中获得目标数据,并将目标数据发送给第一应用。通过上述方法,存储系统采用了分布式的管理方式,第一节点既是管理节点也是存储目标数据的节点,从而使得第一应用可以更快速地获取到目标数据。
14.在另一种可能的实现方式中,存储系统还包括第二节点,当目标数据位于第二节点中时,cpu存储所述目标内存块的标识具体还是可以为cpu将目标内存块的标识存储在第一节点中,则第一应用根据目标局部内存地址获得目标数据的方法具体包括:接口卡将目标局部内存地址发送给第一应用,第一应用所在的节点的接口卡根据目标局部内存地址在第二节点中获得目标数据,并将目标数据返回给第一应用。通过上述方法,存储系统采用了集中式的管理方式,第一节点是管理节点,第二节点是存储目标数据的节点,从而使得第一应用可以更快速地获取到存储目标数据的目标内存块的信息,进而进一步快速获取目标数据。
15.在另一种可能的实现方式中,存储系统还包括第二节点,当目标数据位于第二节点中时,cpu存储所述目标内存块的标识具体还是可以为cpu将目标内存块的标识存储在第二节点中,则第一应用根据目标局部内存地址获得目标数据的方法具体包括:第一应用所在的节点的接口卡根据目标全局内存地址得到目标内存块的信息,并在第二节点中获得目标数据以及将目标数据返回给第一应用。通过上述方法,存储系统采用了集中式的管理方式,其中第一节点是管理节点,第二节点是存储目标数据的节点,从而使得第一应用可以直接根据全局内存地址去第二节点获取目标数据而无需从管理节点处得到目标内存块的信息。
16.在另一种可能的实现方式中,分配请求包括存储目标数据所需的存储空间的大小,目标内存块的数量为n,存储目标数据所需的存储空间的大小大于n-1个内存块的存储空间,并且存储目标数据所需的的存储空间的大小小于n个内存块的存储空间。通过上述方法,可以最大化地利用未被使用的内存块,避免内存池的浪费。
17.在另一种可能的实现方式中,目标内存块的数量为一个或多个,目标全局内存地址的组成中还包括第四数据,其中,第四数据为目标内存块中第一个内存块的标识。
18.在另一种可能的实现方式中,当目标全局内存地址的第二数据所指示的内存块的数量为1时,接口卡根据目标全局内存地址的第四数据直接得到所述目标内存块的标识。通过上述方法,可以在目标内存块的数量为1时,快速通过全局内存地址的第四数据获取目标内存块的信息,从而无需通过全局内存地址中的第三数据寻址得到。
19.在另一种可能的实现方式中,cpu生成目标全局内存地址后,该方法还包括:cpu将目标内存块的标识和目标全局内存地址以映射关系的形式存储在地址查表中。通过上述方法,cpu可以根据地址查表管理内存池中已经被使用的内存块。
20.在另一种可能的实现方式中,内存池还包括多个节点中的复数个节点的支持被接口卡访问的硬盘。
21.在另一种可能的实现方式中,接口卡为网络接口卡或者总线接口卡。
22.在另一种可能的实现方式中,第一应用的数据访问请求可以使用远程直接内存访问rdma协议、开放式一致性加速器处理器接口opencapi协议以及新一代genz总线协议中的任意一种协议。通过使用高性能的数据访问协议,可以使得支持这些协议的接口卡更快速的获取目标数据。
23.在另一种可能的实现方式中,接口卡得到目标数据的局部内存地址,还包括:接口卡根据目标全局内存地址得到目标数据在所述目标内存块中的起始地址以及目标数据的长度。通过上述方法,能精确定位目标数据在目标内存块中的具体位置,从而使得可以将目标内存块未被使用的部分空间分配给目标数据,增加空间的利用率。
24.第二方面,一种管理设备,该管理设备包括接口卡和内存,存储系统包括多个设备,其中,多个设备中至少一个设备是管理设备,存储系统的内存池包括多个设备中的复数个设备的内存。则该管理设备的接口卡和处理器可以协同用于执行第一方面或第一方面任一种可能实现方式中的数据访问方法的操作步骤。
25.第三方面,提供一种地址管理装置,存储系统包括多个节点,其中,存储系统的内存池包括多个节点中的复数个节点的内存,多个节点中包括第一节点,所述地址管理装置位于第一节点中,该地址管理装置包括获取单元、分配单元、存储单元、地址生成单元以及发送单元。其中,获取单元,用于接收第二应用为目标数据分配存储空间的分配请求;分配单元,用于从所述内存池中为所述第二应用分配目标内存块;存储单元,用于存储将目标内存块的信息;地址生成单元,生成目标全局内存地址,该目标全局内存地址包括:目标数据的节点的标识、目标内存块的数量以及存储目标内存块的标识的存储空间的起始地址;发送单元,用于将所述目标全局内存地址发送给所述第二应用;
26.第四方面,本技术提供一种存储系统,该存储系统包括多个节点,存储系统的内存池包括多个节点中的复数个节点的内存,多个节点中包括第一节点,其中,第一节点用于实现上述第一方面或第一方面中任意一种可能的实现方式中的数据访问方法的操作步骤的功能。
27.第五方面,提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面或第一方面任一种可能实现方式中所述方法的操作步骤。
28.第六方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面或第一方面任意一种可能的实现方式中所述方法的操作步骤。
29.本技术在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
30.图1是一种现有的地址管理方式的示意图;
31.图2是一种现有的内存池数据访问的流程示意图;
32.图3是本技术实施例提供的一种存储系统的示意图;
memory,rom)。举例来说,随机存取存储器可以是动态随机存取存储器(dynamic random access memory,dram),也可以是存储级存储器(storage class memory,scm)。dram是一种半导体存储器,与大部分随机存取存储器(random access memory,ram)一样,属于一种易失性存储器(volatile memory)设备。scm是一种同时结合传统储存装置与存储器特性的复合型储存技术,存储级存储器能够提供比硬盘更快速的读写速度,但存取速度上比dram慢,在成本上也比dram更为便宜。
44.然而,dram和scm在本实施例中只是示例性的说明,内存还可以包括其他随机存取存储器,例如静态随机存取存储器(static random access memory,sram)等。而对于只读存储器,举例来说,可以是可编程只读存储器(programmable read only memory,prom)、可抹除可编程只读存储器(erasable programmable read only memory,eprom)等。另外,内存还可以是双列直插式存储器模内存块或双线存储器模内存块(dual in-line memory module,简称dimm),即由动态随机存取存储器(dram)组成的模内存块。在后面的描述中,均以dram和scm为例进行说明,但不代表存储节点20不包含其他类型的存储器。
45.本实施例中的存储器还可以是硬盘。与内存不同的是,硬盘读写数据的速度比内存慢,通常用于持久性地存储数据。以存储节点20a为例,其内部可以设置一个或多个硬盘;或者,在存储节点20a的外部还可以挂载一个硬盘框,在硬盘框中设置多个硬盘。无论哪一种部署方式,这些硬盘都可以视作存储节点20a所包含的硬盘。硬盘类型为固态硬盘、机械硬盘,或者其他类型的硬盘。类似的,存储节点集中的其他存储节点,如存储节点20b、存储节点20c也可以包含各种类型的硬盘。一个存储节点20中可以包含一个或多个同一种类型的存储器。
46.内存池由各个存储节点20中的存储器组成(例如,由多个存储节点20的内存组成;或者既包括多个存储节点20的内存又包括存储节点20的硬盘),其中,各存储节点中的dram位于所述内存池的第一层级,因为dram在各种类型的存储器性能最高。scm的性能低于dram,因此各个存储节点中的scm位于所述内存池的第二层级。进一步地,硬盘的性能低于scm,所以各个存储节点中的硬盘位于所述内存池的第三层级。虽然图3中只示出了三种类型的存储器,但是按照前面的描述,在产品实践中存储节点20内部可部署多种不同类型的存储器,即各种类型的内存或硬盘均可以成为内存池的一部分,并且位于不同存储节点上的相同类型的存储器在所述内存池中属于同一层级。本技术不对内存池所包含的存储器的类型,以及层级的数量做任何限定。内存池的层级只是内部的划分,对上层应用来说是不感知的。需要注意的是,虽然各个存储节点上的同一种存储器处于同一层级,但是对某一个存储节点来说,使用其本地的dram的性能高于使用其他存储节点的dram的性能,同理,使用本地的scm的性能高于使用其他存储节点的scm的性能,等等。因此,对该存储节点来说,当需要分配某一层级的存储空间时,会优先分配其本地属于该层级的空间给用户,当本地空间不足时再从其他存储节点的同一层级中分配。除此之外,也可以根据负载均衡或者容量均衡等策略分配存储空间。
47.可选地,如图3所示,内存池可以只包含部分类型的存储器,例如只包含较高性能的存储器,例如dram和scm,而排除硬盘等性能相对较低的存储器。
48.另外,并非存储节点集中的每一个存储节点都必须为所述内存池贡献存储空间,所述内存池可以仅覆盖集中的部分存储节点。在某些应用场景中,存储节点集中还
可以创建两个或两个以上的内存池,每个内存池覆盖多个存储节点,由这些存储节点为该内存池提供存储空间。不同内存池所述占用的存储节点可以重复也可以不重复。总而言之,本实施例中的内存池是由至少两个存储节点提供存储器资源而建立的,其包含的存储空间来源于至少两种不同类型的存储器。在其他实施例中,也可以仅由一种类型的存储器为内存池提供存储资源。
49.本实施例提供的内存池中的各个存储器均提供接口给处理器,使得处理器看到的是一段连续的空间,可以直接对内存池中的存储器进行读写操作。
50.可选地,存储节点和计算节点还可以集成在同一个物理设备中,本实施例中将所述集成的设备统一称为存储节点。应用部署在存储节点20内部,所以应用可直接通过存储节点20中的客户端触发写数据请求或读数据请求,由该存储节点20处理,或者发送给其他存储节点20处理。此时,客户端向本地存储节点20发送的读写数据请求具体是指客户端向处理器发送数据访问请求。除此之外,存储节点20所包含的组件及其功能与图3中的存储节点20类似,这里不再赘述。
51.在本实施例的存储系统中,基于多种性能的存储器创建内存池,并且这些多种性能的存储器位于不同的存储节点上,从而实现了跨节点的,融合了不同性能的存储器的内存池,使得各种类型的存储器(无论是内存还是硬盘)都能够作为存储资源为上层提供存储服务,从而更好地发挥其性能优势。由于所述内存池中包含了不同性能的存储器,所以可以控制数据基于其访问频率在不同性能的存储器之间迁移,既能够在数据的访问频率较高时迁移至高性能的存储器以提高读数据的效率,也可以在数据的访问频率较低时迁移至低性能的存储器以节省高性能的存储器的存储空间。
52.下面以一个具体的示例进一步阐述存储节点中管理节点的内部结构,请参考图4,图4是管理节点30的内部结构示意图。管理节点30可以是图3中的存储节点20a-20c中的任意一个存储节点。在实际应用中,管理节点20可以是服务器也可以是存储阵列。如图4所示,管理节点30包括接口卡301和处理器(cpu)302。由于内存池的访问时延很低,操作系统调度以及软件本身的开销就可能成为数据处理的瓶颈。为了减少软件开销,本实施例引入硬件组件接口卡,用于将io的访问进行硬件化,降低cpu调度和软件栈的影响。
53.管理节点30有自己的接口卡301,用于与计算节点100通信,还用于与其他存储节点通信。具体的,管理节点30可通过接口卡301接收来自计算节点100的请求,或者通过接口卡301向计算节点100发送请求,管理节点30也可以通过接口卡301向其他存储节点发送请求,或者通过接口卡301接收来自其他存储节点的请求。其次,管理节点30内的各个存储器之间可以通过接口卡301通信,也可以通过接口卡201与计算节点100通信。最后,如果管理节点30所包含的各个硬盘位于管理节点30内部,那么这些硬盘之间可以通过接口卡301通信,也可以通过接口卡301与计算节点100通信。另外,管理节点30还可以包括总线(图4中未示出)用于管理节点30内部各组件之间的通信。
54.管理节点上的cpu302用于创建内存池,并且可以在创建内存池之后为各个全局内存地址分配物理空间,也可以在接收写数据请求时为所述写数据请求分配物理空间,并生成全局内存地址。cpu302还可以使用索引表记录已经分配的物理空间和全局内存地址之间的关系,以便后续为新写入的写数据请求分配未分配的物理空间。
55.关于内存池的创建。各个存储节点20通过心跳通道定期向管理节点30上报存储器
的状态信息。存储器的状态信息包括但不限于:该存储节点所包含的各种存储器的类型、健康状态、每种存储器的总容量以及可用容量等等。管理节点根据采集的信息创建内存池,创建意味着将各个存储节点20所提供的存储空间集中起来作为内存池统一管理,因此内存池的物理空间来源于各个存储节点所包含的各种存储器。然而,在某些场景下,存储节点20可以根据自身情况,例如存储器的健康状态,选择性地提供存储器给内存池。换言之,有可能某些存储节点中的某些存储器并非内存池的一部分。
56.采集完信息之后,cpu302需要对被纳入所述内存池的存储空间进行统一编址。经过统一编址,所述内存池的每段空间都有一个唯一的全局内存地址。所谓全局内存地址,它所指示的空间在内存池中是唯一的,并且每个存储节点20都知道该地址的含义。在给内存池的一段空间分配了物理空间之后,该空间的全局内存地址就拥有了其对应的物理地址,所述物理地址指示了该全局内存地址所代表的空间实际位于哪个存储节点的哪个存储器上,以及在该存储器中的偏移量,即物理空间的位置。
57.有新的存储节点加入存储节点集时,管理节点上的cpu302收集节点更新信息,将新的存储节点纳入内存池,对该存储节点所包含的存储空间进行编址,从而生成新的全局内存地址,再刷新分区与全局内存地址之间的对应关系(因为无论是扩容还是缩容,分区的总数是不变的)。扩容也同样适用于某些存储节点增加了内存或硬盘的情况,管理节点上的cpu302定期收集各个存储节点所包含的存储器的状态信息,如果的新的存储器加入,将其纳入内存池,并对新的存储空间进行编址,从而生成新的全局内存地址,再刷新分区与全局内存地址之间的对应关系。同理,本实施例提供的内存池也支持缩容,只要更新全局内存地址与分区的对应关系即可。
58.在某些应用场景中,内存池并非直接将其存储空间暴露给计算节点100,而是将存储空间虚拟化为内存块提供给计算节点100使用。每个内存块在对应的存储节点中具有唯一的标识(index),示例性地,该标识可以为内存块的编号或者内存块的首地址。内存池以内存块为粒度为存储节点提供存储空间,换句话说,当存储节点20向内存池申请空间时,cpu302将内存池的空间以一个内存块或者内存块的整数倍为其分配空间。一个内存块的大小可以是4kb,也可以是8kb等等,本技术不对内存块的大小进行限定。数据位于一个内存块内的具体位置可以由起始地址(address)和该数据的偏移量(offset)确定。通常情况下,数据一般从一个内存块的首地址开始存储。可以理解的是,index、address和offset这三个因素标识了一个确定的地址段,在本技术实施例中称为局部内存地址,用于指示数据在存储该数据的节点上的地址(例如物理地址),通过全局内存地址可以索引到一个存储节点中的一个局部内存地址。全局内存是内存池中的地址,因此不同内存块对应的全局地址不同。而相对于全局内存地址而言,局部内存地址是节点内地址,因此,对于不同节点的内存块,可能对应相同的节点内地址。
59.计算节点100向一个存储节点发送数据访问请求时,例如从所述地址段上读取数据,或者往所述地址段上写入数据,正如前面所示,可以分为以下两种场景:
60.场景一:当存储系统采用集中式目录的管理方式时,计算节点100上的第一应用想读取或写入存储节点20a上的数据。首先由第一应用向管理节点30发送携带全局内存地址的数据请求,由管理节点30根据全局内存地址索引到数据在存储节点20a上的局部内存地址,返回给第一应用后,再由第一应用根据局部内存地址从存储节点20a中获取数据或写入
数据。
61.场景二:当存储系统采用分布式目录的管理方式时,每个存储节点都可以作为管理节点管理内存池中分配给自己的存储空间。因此计算节点100可以直接向管理节点30(即存储节点20a)发送携带全局内存地址的数据请求,由管理节点30根据全局内存地址索引到数据在存储节点20a上的局部内存地址,并直接根据该局部内存地址直接获取数据或写入数据。
62.因此,管理节点30根据全局内存地址索引数据的局部内存地址的效率对提高内存池中数据操作的性能至关重要。在本技术提供的地址管理方法中,cpu接收到第二应用的分配存储空间的请求后,除了从内存池中为第二应用分配内存块,还可以将内存块的信息存储在一段存储空间中,并根据存储空间的节点的标识、内存块的数量以及存储内存块的信息的存储空间的地址生成全局内存地址。通过这种分离的两层存储方法,可以在为第二应用分配内存块时,将内存块的信息单独存储,则在第一应用想要访问第二应用的数据时,接口卡可以直接根据第二应用的数据的全局内存地址得到该数据的存储空间的节点的标识、内存块的数量以及存储内存块的信息的存储空间的地址,从而进一步接口卡能根据内存块的信息得到数据的局部内存地址,无需管理节点中央处理器的参与,从而减少了等待cpu完成目标全局内存地址转换成目标局部内存地址的时间,以及减少了cpu运算资源的消耗,提高了数据的访问效率。
63.图5是本技术实施例提供的一种地址管理方法的示意图,该方法可以由图4所示的管理节点30上的cpu302执行,具体方法如下:
64.s501、cpu302接收第二应用的存储空间分配请求。
65.第二应用的存储空间分配请求包括第二应用申请的存储空间的大小。
66.s502、cpu302为第二应用分配合适的内存块。
67.根据第二应用申请的存储空间的大小,cpu302将连续或不连续的内存块拼凑成大于或等于第二应用所申请存储空间大小的空间,并分配给第二应用。示例性地,当应用申请的存储空间正好是单个内存块的大小的整数倍时,例如n倍,则可以将n个内存块分配给应用,每个内存块使用的空间即为整个内存块的大小;当应用申请的存储空间不是单个内存块的大小的整数倍时,例如,申请的存储空间位于内存块的n倍和n+1倍之间,则可以将n+1个内存块分配给应用,n个内存块使用的空间即为整个内存块的大小,剩余一个内存块使用的空间为申请的内存减去n个内存块的大小后剩余的大小。
68.cpu302为第二应用分配的内存块通常位于同一个存储节点中。
69.s503、cpu302存储分配的内存块的信息。
70.cpu302在管理节点30的存储器中使用一段新的存储空间存放分配的内存块的信息,信息包括每一个内存块的index、address和offset。通过这三个因素便可以确定第二应用的数据位于哪一个内存块中的哪一段地址空间并且这个内存块存储的数据长度。示例性地,当内存块的信息为index1,address1,offset1,表示数据存储在标识为index1的内存块中,数据在内存块中的起始地址为address1,数据的长度为offset1。当由于内存块的这部分信息一旦生成之后就不会再修改,因此,为了便于描述,在后续的实施例中,这部分信息又可以称为不可变元数据。
71.需要说明的是,由于cpu302通常为申请存储空间的应用分配整数个未使用的内存
块,因此内存块的信息可以仅包括内存块的index,则address即为该内存块的首地址,offset即为该内存块的长度。
72.为一个存储空间分配请求所分配的内存块的不可变元数据应该存储在一段连续的存储空间内,例如,cpu302响应于一个存储空间分配请求,将3个内存块分配给第二应用,这3个内存块的不可变元数据分别为(index1,address1,offset1)、(index2,address2,offset2)和(index3,address3,offset3),则这3个元数据存储的地址应该是连续的。
73.为不同的存储空间分配请求所分配的内存块的不可变元数据可以存储在一段连续的存储空间内,也可以分开存储。
74.可选地,cpu302还可以根据内存块所在的存储节点,将不可变元数据存储在该存储节点的存储器中。
75.s504、cpu302确定全局内存地址。
76.全局内存地址可以由三部分数据组成,第一部分数据是存储该内存块的存储节点的标识(host_id),第二部分数据是被分配的内存块的数量(block_count),第三部分数据为不可变元数据的起始地址(meta_data_address)。需要说明的是,每一部分数据的长度可以根据实际需要设置,本技术不做限定。在之后的实施例中,本技术以host_id字段为4位,block_count字段为2位,meta_data_address字段为4位作为示例。例如,全局内存地址为0001030001,表示存储节点的标识为0001,分配给第二应用的内存块的数量为3,内存块的不可变元数据为0001。之后其他的应用可以通过全局内存地址,索引到cpu302位第二应用分配的内存块的不可变元数据,从而可以进一步确定内存块的地址。相比于不可变元数据,为了便于描述,在后续的实施例中,全局内存地址中的数据也可以称为可变元数据。
77.可选地,全局内存地址还可以包括第四部分数据,为分配的内存块中第一个内存块的信息(first_block_address)。当block_count的取值为1时,表示第二应用只被分配了一个内存块。则其他应用可以直接通过first_block_address获取到分配的内存块的信息,而无需通过meta_data_address索引到内存块的不可变元数据后再获取该内存块的信息。
78.可选地,可以将已分配内存块的不可变元数据和全局内存地址以地址查表的形式保存在管理节点30的存储器中。cpu302可以通过地址查表查看和管理已经分配的内存块的信息。示例性地,表2为本技术实施例提供的一种地址查表,如表2所示,地址查表中第一列为已分配内存块的全局内存地址,第二列为已分配内存块的不可变元数据。
79.表2、地址查表
[0080][0081]
如表2所示,在标识为0001的存储节点中,已经有6个内存块被分配给了对应的应用。其中,内存块1、3和4被分配给了一个应用,其全局内存地址为0001030001;内存块2被分配给了一个应用,其全局内存地址为0001010010;内存块5和6被分配给了一个应用,其全局内存地址为0001020020。
[0082]
s505、cpu302将全局内存地址返回给第二应用。
[0083]
下面以一个具体的示例进一步说明本实施提供的地址管理的方法,图6是本实施提供的一种地址管理方法的内存块分配的示意图,第二应用向管理节点30申请12k大小的空间,管理节点接收到第二应用的请求后,将如图3所示的存储系统中的存储节点20a上12k大小的存储空间分配给第二应用。具体地,管理节点30将内存池中的存储空间分为多个内存块,每个内存块的大小为4kb,则第二应用申请的存储空间需要3个内存块。如图6所示,存储节点20a上共有9个未使用的内存块,管理节点30选择其中三个内存块,分别为第1、第3和第4个内存块。管理节点30将这三个内存块的不可变元数据单独存放在一段连续的存储区域601中,并将0001030001作为全局内存地址存储在内存存储区域602中。其中,0001是存储节点20a的标识,0001是存储区域601的首地址。最后,管理节点30将全局内存地址0001030001发送给第二应用。
[0084]
通过上述地址管理方法,可以将数据的地址分为不可变元数据和可变元数据两部分分开存储,通过将可变元数据作为全局内存地址,可以直接获取不可变元数据中的内存块的信息,从而节省处理器查询地址查表才能得到内存块的信息的时间。
[0085]
第二应用接收到申请的存储空间的全局内存地址后,可以将该地址发送给第一应用,第一应用可以通过全局内存地址访问第二应用的数据。图7是本技术提供的一种数据访问方法的流程示意图,示例性地,第二应用的数据存储在图3所示的存储系统的存储节点20a中,第一应用位于计算节点100,存储节点20a与计算节点100是两个设备。下面以分布式的管理方式为例,阐述本技术实施例提供的数据访问方法,该数据访问方法可以由图4所示管理节点30上的接口卡301执行。需要说明的是,当存储系统采用分布式目录的管理方式时,存储节点20a即为管理节点,如图7所示,具体步骤包括:
[0086]
s701、接口卡301接收第一应用的数据访问请求。
[0087]
数据访问请求包括数据的全局内存地址。
[0088]
s702、接口卡301根据全局内存地址确定不可变元数据的地址。
[0089]
接口卡301可以根据全局内存地址的meta_data_address的字段,确定不可变元数据的首地址。还可以根据全局内存地址的block_count的字段确定内存块的个数。
[0090]
s703、接口卡301读取内存块的信息。
[0091]
接口卡301根据不可变元数据的首地址以及内存块个数,读取不可变元数据对应的内存块的信息,包括每一个内存块的index、address和offset。
[0092]
可选地,当全局内存地址包括first_block_address字段,并且block_count字段的数目为1时,可以直接根据first_block_address字段所指示的地址读取对应内存块的信息。
[0093]
s704、接口卡301获取内存块的数据。
[0094]
接口卡301可以根据内存块的index、address和offset,在存储器中获取对应地址段的数据。示例性地,当内存块的信息为index1、address1和offset1时,标识数据在index1的内存块中,接口卡可以从address1对应的地址开始,读取长度为offset1的数据。
[0095]
s705、接口卡301将数据发送给第一应用。
[0096]
图8是本技术提供的一种分布式的管理方式下的数据访问方法的数据流示意图,第一应用需要获取第二应用在内存池的存储节点20a上的数据,存储节点20a即为管理节
点,如图8所示:
[0097]
①
第二应用向存储节点20a的接口卡301发送存储空间分配请求。
[0098]
②
接口卡301将存储空间分配请求转发给cpu302。
[0099]
③
cpu302为第二应用分配内存块,并且将分配的内存块的信息以不可变元数据存储在存储器中。cpu302还可以刷新地址查表以记录使用的内存块的信息。
[0100]
④
cpu302生成全局内存地址,发送至接口卡301。
[0101]
⑤
接口卡301将全局内存地址发送给第二应用。
[0102]
⑥
第二应用根据全局内存地址将数据发送给接口卡301。
[0103]
⑦
接口卡301将第二应用的数据存储在为第二应用分配的内存块中。
[0104]
⑧
第二应用将全局内存地址发送给第一应用。
[0105]
⑨
第一应用根据全局内存地址中的节点标识向存储节点20a的接口卡301发送数据访问请求。
[0106]
⑩
接口卡301根据数据访问请求中的全局内存地址确定内存块的不可变元数据地址,并且可以进一步根据不可变元数据地址获取内存块的信息。
[0107]
接口卡301可以根据内存块的信息获取第二应用的数据。
[0108]
接口卡301将第二应用的数据发送给第一应用。
[0109]
通过上述方法,第一应用在读取存储节点中的数据时,可以直接通过管理节点的控制器获取到数据的地址,而不需要通过地址查表查表后获得,将现有技术中需要处理器参与查表的双边通信变成了不需要处理器参与的单边通信,减少了数据访问的时间,提高了内存池中数据操作的效率。
[0110]
作为另一种可能的实施例,当存储系统采用集中式目录的管理方式时,管理节点30与存储节点20a是不同的设备。正如前面所述,当第一应用访问存储节点20a的数据时,首先由第一应用向管理节点30发送携带全局内存地址的数据请求,由管理节点30根据全局内存地址索引到物理地址,返回给第一应用后,再由第一应用根据物理地址从存储节点20a中获取数据或写入数据。因此管理节点30上的接口卡301执行完步骤701至步骤703后,直接将获取到的内存块的信息发送给第一应用,由第一应用根据接收到的内存块信息得到数据在存储节点20a中的存放的内存块的标识和地址,最后第一应用在根据该地址从存储节点20a中访问数据。
[0111]
可选地,当cpu302在步骤503中将不可变元数据存储在内存块所在的存储节点时,第一应用可以直接根据全局内存地址,向存储节点20a发送携带全局内存地址的数据请求,然后由存储节点20a的接口卡执行步骤701至步骤705。
[0112]
图9是本技术提供的一种集中式的管理方式下的数据访问方法的数据流示意图,第一应用需要获取第二应用在内存池的存储节点20a上的数据,管理节点30为第二应用分配内存块,如图9所示:
[0113]
①
第二应用向管理节点30的接口卡301发送存储空间分配请求。
[0114]
②
接口卡3011将存储空间分配请求转发给cpu302。
[0115]
③
cpu302为第二应用分配内存块,并且将分配的内存块的信息以不可变元数据存储在存储器中。cpu302还可以刷新地址查表以记录使用的内存块的信息。
[0116]
④
cpu302生成全局内存地址,发送至接口卡301。
[0117]
⑤
接口卡3011将全局内存地址发送给第二应用。
[0118]
⑥
第二应用根据全局内存地址将数据发送给存储节点20a的接口卡3012。
[0119]
⑦
接口卡3012将第二应用的数据存储在为第二应用分配的内存块中。
[0120]
⑧
第二应用将全局内存地址发送给第一应用。
[0121]
⑨
第一应用根据全局内存地址向管理节点30的接口卡3011发送数据访问请求。
[0122]
⑩
接口卡3011根据数据访问请求中的全局内存地址确定内存块的不可变元数据地址,并且可以进一步根据不可变元数据地址获取内存块的信息。接口卡3011将内存块的信息发送给第一应用。
[0123]
第一应用根据接收到的内存块信息得到数据在存储节点20a中的存放的内存块的标识和数据在内存块的地址,并且根据全局内存地址中的节点标识向存储节点20a的接口卡3012发送数据获取请求。
[0124]
接口卡3012根据内存块的地址确定第二应用的数据。
[0125]
接口卡3012读取存储器中的第二应用的数据。
[0126]
接口卡3012将第二应用的数据发送给第一应用。
[0127]
可选地,在步骤
③
中,cpu302可以将不可变元数据存放在存储节点20a的存储器中,则无需执行步骤
⑨
和步骤
⑩
,步骤至步骤变为:
[0128]
第一应用根据全局内存地址中的节点标识向存储节点20a的接口卡3012发送数据访问请求。
[0129]
接口卡3012根据数据访问请求中的全局内存地址确定内存块的不可变元数据地址,并且可以进一步根据不可变元数据地址获取内存块的信息。
[0130]
接口卡3012可以根据内存块的信息获取第二应用的数据。
[0131]
接口卡3012将第二应用的数据发送给第一应用。
[0132]
作为另一种可能的实施例,本技术提供的地址管理方法和数据访问方法可以在开源丛集运算框架apache spark
tm
的项目里实施,该项目采用分布式管理方法,每个存储节点中均部署cpu,在apache spark
tm
项目中,内存池的使用者即应用可以被称为spark executor,spark executor1可以通过memory fabric daemon进程向存储节点的接口卡发送存储空间分配申请,并由该存储节点的cpu采用图5所示的地址管理方法为spark executor1分配内存池的内存块。不仅如此,spark executor1可以将内存块的全局内存地址通过地址交换器发送给spark executor2,示例性地,地址交换器可以为spark driver或redis。spark executor2获取到全局内存地址后,可以采用图7所示的数据访问方法访问spark executor1存储的数据。
[0133]
值得说明的是,对于上述方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是,本技术并不受所描述的动作顺序的限制,其次,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本技术所必须的。
[0134]
根据以上描述的内容,能够想到的其他合理的步骤组合,也属于本技术的保护范围内。其次,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本技术所必须的。
[0135]
上文中结合图3至图9,详细描述了根据本技术实施例所提供的地址管理方法以及
数据访问方法,下面将结合图10,描述根据本技术实施例所提供的一种地址管理装置。该装置可以执行如图5所示的地址管理方法。
[0136]
图10为本技术实施例提供的一种地址管理装置1000的示意图,该装置包括获取单元1001、分配单元1002、存储单元1003、地址生成单元1004以及发送单元1005。
[0137]
其中,获取单元1001,用于接收第二应用为目标数据分配存储空间的分配请求,具体实现可参考图5中s501的步骤,这里不再赘述。
[0138]
分配单元1002,用于在内存池中为第二应用分配目标内存块,具体实现可参考图5中s502的步骤,这里不再赘述。
[0139]
存储单元1003,用于存储目标内存块的信息,具体实现可参考图5中s503的步骤,这里不再赘述。
[0140]
地址生成单元1004,用于生成目标全局内存地址,该目标全局内存地址包括根据存储目标数据的节点的标识、目标内存块的数量以及存储目标内存块的标识的存储空间的起始地址,具体实现可参考图5中s504的步骤,这里不再赘述。
[0141]
发送单元1005,用于将目标全局内存地址发送给第二应用,具体实现可参考图5中s505的步骤,这里不再赘述。
[0142]
应理解的是,本技术实施例的数据的地址管理装置1000可以通过cpu实现,例如图4中管理节点30的cpu302。当通过软件实现图5的地址管理方法时,地址管理装置1000及其各个模块也可以为软件模块。
[0143]
可选地,地址生成单元还用于根据存储目标数据的节点的标识、目标内存块的数量、存储目标内存块的信息的存储空间的起始地址,以及目标内存块中第一个内存块的标识生成目标全局内存地址。
[0144]
综上所述,本技术实施例提供的地址管理装置可以采用两层分离的存储方法,将内存块的信息作为不可变元数据单独存储,而将存储目标数据的节点的标识、目标内存块的数量以及存储不可变元数据的地址作为可变元数据加入全局内存地址。从而使得接口卡在获得目标数据的全局内存地址后快速通过寻址到内存块的信息,提高内存池中数据访问的效率。
[0145]
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本技术实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质。半导体介质可以是固态硬盘(solid state drive,ssd)。
[0146]
以上所述,仅为本技术的具体实施方式。根据本技术提供的具体实施方式,可想到
变化或替换,都应涵盖在本技术的保护范围之内。
技术特征:
1.一种数据访问方法,其特征在于,存储系统包括多个节点,所述存储系统的内存池包括所述多个节点中的复数个节点的内存,所述多个节点中包括第一节点,所述第一节点包括中央处理器cpu和接口卡,所述方法包括:所述接口卡接收第一应用的数据访问请求,所述数据访问请求包括目标数据在所述内存池中的目标全局内存地址,所述目标全局内存地址对应于所述内存池中唯一的存储空间;所述接口卡根据所述目标全局内存地址得到所述目标数据在存储所述目标数据的节点的目标局部内存地址,所述目标局部内存地址用于指示所述目标数据在存储所述目标数据的节点的内存中的存储位置;所述接口卡向所述第一应用发送所述目标数据,或者向所述第一应用发送所述目标局部内存地址。2.根据权利要求1所述方法,其特征在于,所述内存池包括多个内存块,每个内存块属于一个所述节点,每个所述内存块在所属的节点中具有唯一的标识,所述接口卡得到所述目标数据的局部内存地址,具体包括:所述接口卡根据所述目标全局内存地址得到所述目标内存块的标识以及所述目标内存块所在节点的标识,所述目标内存块是所述内存池中用于存储所述目标数据的内存块。3.根据权利要求2所述方法,其特征在于,所述目标数据的目标全局内存地址的组成中包括第一数据、第二数据和第三数据,所述第一数据为所述目标内存块所在节点的标识,所述第二数据用于指示所述目标内存块的数量,所述第三数据为存储所述目标内存块的标识的存储空间的起始地址。4.根据权利要求2所述方法,其特征在于,在所述接口卡接收第一应用的数据访问请求之前,所述方法还包括:所述cpu接收第二应用为所述目标数据分配存储空间的分配请求;所述cpu从所述内存池中,为所述第二应用分配所述目标内存块;所述cpu存储所述目标内存块的标识;所述cpu生成所述目标全局内存地址,所述目标全局内存地址包括:所述目标数据的节点的标识、所述目标内存块的数量以及存储所述目标内存块的标识的存储空间的起始地址,将所述目标全局内存地址发送至所述第二应用;所述第二应用根据所述目标全局内存地址将所述目标数据存储进所述目标内存块中;所述第二应用将所述目标全局内存地址发送给所述第一应用。5.根据权利要求4所述方法,其特征在于,所述分配请求包括存储所述目标数据所需的存储空间的大小,所述目标内存块的数量为n,存储所述目标数据所需的存储空间的大小大于n-1个内存块的存储空间,并且存储所述目标数据所需的存储空间的大小小于n个内存块的存储空间。6.根据权利要求3至5任一所述方法,其特征在于,所述目标内存块的数量为一个或多个,所述目标全局内存地址的组成还包括第四数据,所述第四数据为所述目标内存块中第一个内存块的标识。7.根据权利要求6所述方法,其特征在于,当所述目标全局内存地址的所述第二数据所指示的内存块的数量为1时,所述接口卡根据所述目标全局内存地址得到所述目标内存块
的信息,具体包括:所述接口卡根据所述目标全局内存地址的第四数据直接得到所述目标内存块的标识。8.根据权利要求1至7任一所述方法,其特征在于,所述内存池还包括所述多个节点中的复数个节点的支持被所述接口卡访问的硬盘。9.根据权利要求1至8任一所述方法,其特征在于,所述接口卡为网络接口卡nic或者总线接口卡。10.根据权利要求1至9任一所述方法,所述第一应用的数据访问请求使用远程直接内存访问rdma协议、开放式一致性加速器处理器接口opencapi协议以及新一代genz总线协议中的任意一种协议。11.根据权利要求2至10任一所述方法,其特征在于,所述接口卡得到所述目标数据的局部内存地址,还包括:所述接口卡根据所述目标全局内存地址得到所述目标数据在所述目标内存块中的起始地址以及所述目标数据的长度。12.一种管理设备,其特征在于,所述管理设备包括接口卡、内存和中央处理器cpu,存储系统包括多个设备,所述多个设备中至少一个设备是所述管理设备,所述存储系统的内存池包括所述多个设备中的复数个设备的内存:所述接口卡,用于接收第一应用的数据访问请求,所述数据访问请求包括目标数据在所述内存池中的目标全局内存地址,所述目标全局内存地址对应于所述内存池中唯一的存储空间;还用于根据所述目标全局内存地址得到所述目标数据在存储所述目标数据的节点的目标局部内存地址,所述目标局部内存地址用于指示所述目标数据在存储所述目标数据的设备的内存中的存储位置;还用于向所述第一应用发送所述目标数据,或者向所述第一应用发送所述目标局部内存地址。13.根据权利要求12所述管理设备,其特征在于,所述内存池包括多个内存块,每个内存块属于一个所述设备,每个所述内存块在所述内存池中具有唯一的标识,所述接口卡还用于:根据所述目标全局内存地址得到所述目标内存块的标识以及所述目标内存块所在设备的标识,所述目标内存块是所述内存池中用于存储所述目标数据的内存块。14.根据权利要求13所述管理设备,其特征在于,所述目标数据的目标全局内存地址的组成中包括第一数据、第二数据和第三数据,所述第一数据为所述目标内存块所在设备的标识,所述第二数据用于指示所述目标内存块的数量,所述第三数据为存储所述目标内存块的标识的存储空间的起始地址。15.根据权利要求13所述管理设备,其特征在于,在所述接口卡接收第一应用的数据访问请求之前,所述cpu用于:接收第二应用为所述目标数据分配存储空间的分配请求;从所述内存池中,为所述第二应用分配所述目标内存块;存储所述目标内存块的标识;生成所述目标全局内存地址,所述目标全局内存地址包括:所述目标数据的设备的标识、所述目标内存块的数量以及存储所述目标内存块的标识的存储空间的起始地址,将所述目标全局内存地址发送至所述第二应用。
16.根据权利要求15所述管理设备,其特征在于,所述分配请求包括存储所述目标数据所需的存储空间的大小,所述目标内存块的数量为n,存储所述目标数据所需的存储空间的大小大于n-1个内存块的存储空间,并且存储所述目标数据所需的存储空间的大小小于n个内存块的存储空间。17.根据权利要求14至16任一所述管理设备,其特征在于,所述目标内存块的数量为一个或多个,所述目标全局内存地址的组成还包括第四数据,所述第四数据为所述目标内存块中第一个内存块的标识。18.根据权利要求17所述管理设备,其特征在于,当所述目标全局内存地址的所述第二数据所指示的内存块的数量为1时,所述接口卡还用于:根据所述目标全局内存地址的第四数据直接得到所述目标内存块的标识。19.根据权利要求12至18任一所述管理设备,其特征在于,所述内存池还包括所述多个设备中的复数个设备的支持被所述接口卡访问的硬盘。20.根据权利要求12至19任一所述管理设备,其特征在于,所述接口卡为网络接口卡nic或者总线接口卡。21.根据权利要求12至20任一所述管理设备,所述第一应用的数据访问请求使用远程直接内存访问rdma协议、开放式一致性加速器处理器接口opencapi协议以及新一代genz总线协议中的任意一种协议。22.根据权利要求13至21任一所述管理设备,其特征在于,所述接口卡还用于:根据所述目标全局内存地址得到所述目标数据在所述目标内存块中的起始地址以及所述目标数据的长度。23.一种地址管理装置,其特征在于,存储系统包括多个节点,所述存储系统的内存池包括多个节点中的复数个节点的内存,所述多个节点包括第一节点,所述第一节点包括所述地址管理装置,所述地址管理装置包括获取单元、分配单元、存储单元、地址生成单元以及发送单元:所述获取单元,用于接收第二应用为目标数据分配存储空间的分配请求;所述分配单元,用于从所述内存池中,为所述第二应用分配目标内存块;所述存储单元,用于存储所述目标内存块的标识;所述地址生成单元,生成所述目标全局内存地址,所述目标全局内存地址包括:所述目标数据的节点的标识、所述目标内存块的数量以及存储所述目标内存块的标识的存储空间的起始地址;所述发送单元,用于将所述目标全局内存地址发送给所述第二应用。24.根据权利要求23所述的地址管理装置,其特征在于,所述目标全局内存地址,还包括根据所述目标内存块中第一个内存块的标识生成所述目标全局内存地址。25.一种存储系统,所述存储系统包括多个设备,所述存储系统的内存池包括多个节点中的复数个设备的内存,所述多个节点包括第一节点:所述第一节点用于实现如权利要求1至11中任一所述的数据访问方法的操作步骤的功能。
技术总结
一种数据访问方法,在该方法中,存储系统包括多个节点,其中,存储系统的内存池包括多个节点中的复数个节点的内存,多个节点中还包括第一节点,该第一节点包括接口卡,则该方法包括:接口卡接收第一应用的数据访问请求,该数据访问请求包括目标数据在内存池中的目标全局内存地址,其中,第一应用可以来自于存储系统中任意一个节点,并且目标全局内存地址对应所述内存池中唯一的存储空间;然后,接口卡根据目标全局内存地址得到目标数据的目标局部内存地址,其中,目标局部内存地址用于指示目标数据在存储目标数据的节点的内存中的存储空间;最后,接口卡向第一应用发送目标数据,或者目标局部内存地址。该方法能有效提高内存池中数据操作性能。池中数据操作性能。池中数据操作性能。
技术研发人员:
包小明 徐华 游俊 刘春
受保护的技术使用者:
华为技术有限公司
技术研发日:
2021.09.06
技术公布日:
2022/12/12