CN108431774A - 无限存储器结构流和api - Google Patents
无限存储器结构流和api Download PDFInfo
- Publication number
- CN108431774A CN108431774A CN201680045283.9A CN201680045283A CN108431774A CN 108431774 A CN108431774 A CN 108431774A CN 201680045283 A CN201680045283 A CN 201680045283A CN 108431774 A CN108431774 A CN 108431774A
- Authority
- CN
- China
- Prior art keywords
- node
- memory
- hardware based
- based processing
- processing node
- 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.)
- Granted
Links
Classifications
-
- 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/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
-
- 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
-
- 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/0635—Configuration or reconfiguration of storage systems by changing the path, e.g. traffic rerouting, path reconfiguration
-
- 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]
-
- 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/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/543—User-generated data transfer, e.g. clipboards, dynamic data exchange [DDE], object linking and embedding [OLE]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Computer Networks & Wireless Communication (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明的实施例提供了用于管理处理、存储器、存储体、网络和云计算以显著地改善处理节点的效率和性能的***和方法。更具体地,本发明的实施例针对与用以实现分布式对象存储器和用以支持硬件、软件和混合实现方案的方法相对应的对象存储器结构流和应用编程接口(API)。该流API可以从任意点被定义为两个相反方向的单向流。有利的是,可以以各种拓扑来实现该API流。该流API可以处理对象一致性,以便任何装置随后都可以移动或远程地执行任意函数,这是因为函数在对象元数据中,而对象元数据是一致性对象地址空间的一部分。
Description
相关申请的交叉引用
本申请要求Frank等人于2016年5月31日提交的题为“Infinite Memory FabricStreams and APIs”的美国非临时申请No.15/168,968的优先权,其中该非临时申请要求Frank等人于2015年6月9日提交的题为“Infinite Memory Fabric Architecture”的美国临时申请No.62/173,037在35USC 119(e)下的权益,其全部公开内容通过引用并入本文用于所有目的。
本申请还涉及以下共同未决和共同转让的美国专利申请:
由Frank于2016年1月20日提交的题为“Object Based Memory Fabric”的美国专利申请No.15/001,320;
由Frank于2016年1月20日提交的题为“Trans-Cloud Object Based Memory”的美国专利申请No.15/001,332;
由Frank于2016年1月20日提交的题为“Universal Single Level Object MemoryAddress Space”的美国专利申请No.15/001,340;
由Frank于2016年1月20日提交的题为“Object Memory Fabric PerformanceAcceleration”的美国专利申请No.15/001,343;
由Frank于2016年1月20日提交的题为“Distributed Index for FaultTolerance Object Memory Fabric”的美国专利申请No.15/001,451;
由Frank于2016年1月20日提交的题为“Implementation of an Object MemoryCentric Cloud”的美国专利申请No.15/001,494;
由Frank于2016年1月20日提交的题为“Managing MetaData in an ObjectMemory Fabric”的美国专利申请No.15/001,524;
由Frank于2016年1月20日提交的题为“Utilization of a Distributed Indexto Provide Object Memory Fabric Coherency”的美国专利申请No.15/001,652;
由Frank于2016年1月20日提交的题为“Object Memory Data Flow InstructionExecution”的美国专利申请No.15/001,366;
由Frank于2016年1月20日提交的题为“Object Memory Data Flow Trigger”的美国专利申请No.15/001,490;
由Frank于2016年1月20日提交的题为“Object Memory Instruction Set”的美国专利申请No.15/001,526;
由Frank于2016年5月31日提交的题为“Infinite Memory Fabric HardwareImplementation with Memory”的美国专利申请No.15/169,580;以及
由Frank于2016年5月31日提交的题为“Infinite Memory Fabric HardwareImplementation with Router”的美国专利申请No.15/169,585,其每一个的全部公开内容通过引用并入本文用于所有目的。
背景技术
本发明的实施例总体上涉及用于改善结构(fabric)中的处理节点的性能的方法和***,且更具体地,涉及改变管理处理(processing)、存储器(memory)、存储体(storage)、网络和云计算的方式以显著地改善商品硬件的效率和性能的方法和***。
随着数据以及其上执行的进程的大小和复杂性不断增加,计算机硬件面临着满足这些需求的挑战。来自现有服务器、网络和存储体供应商的当前商品硬件和软件解决方案无法满足云计算和大数据环境的需求。这至少部分地是由于这些***管理处理、存储器和存储体的方式。具体地,在目前的***中,处理与存储器分离,存储器进而与存储体分离,并且处理、存储器和存储体中的每一个单独地由软件管理。每个服务器和其他计算装置(本文称为节点)进而通过物理计算机网络与其他节点分离,它们单独地由软件管理,且进而,与每个节点相关联的单独的处理、存储器和存储体由该节点上的软件管理。
图1是示出了现有技术的商品服务器和网络部件内的分离数据存储体、存储器和处理的示例的框图。该示例示出了***100,其中商品服务器105和110经由本领域中已知的物理网络115和网络软件155彼此通信地耦合。本领域中还已知,服务器均可以执行任何种类的任何数量的一个或多个应用120a、120b、120c。本领域中已知,使用存储在物理存储体150中的数据来在服务器105和110的处理器(未示出)和存储器(未示出)上执行每个应用120a、120b、120c。服务器105和110中的每一个保持映射应用120a、120b、120c所使用的数据的位置的目录125。此外,每个服务器为每个执行中的应用120a、120b、120c实现软件堆栈,所述软件堆栈包括数据的应用表示130、数据库表示135、文件***表示140、以及存储体表示145。
虽然有效,但存在三个原因,使得这些来自现有的服务器、网络和存储体供应商的当前的商品硬件和软件解决方案的实现无法满足云计算和大数据环境日益增长的需求。这些实现的缺点的一个原因在于其复杂性。软件堆栈必须就位,且每个应用必须管理存储体、存储器和处理的分离、以及应用并行服务器资源。每个应用必须权衡算法并行性、数据组织和数据移动,这对于正确性来说是非常有挑战性的,更不用说考虑性能和经济性。这往往导致在应用中实施更多批量定向解决方案,而不是大多数企业所偏好的集成实时解决方案。此外,在这种实现中的存储体、存储器和处理的分离也为软件堆栈的每一层寻找、移动和存取数据块造成显著的低效率,这是由于所需的指令执行、以及软件堆栈每一层的延迟和层之间的延迟。另外,这种低效率限制了经济规模的可能性,并且限制了除了最为并行的算法之外的所有算法的数据大小。后者的原因是服务器(处理器或线程)可以交互的效率限制了由于阿姆达尔定律(Amdahl's law)引起的并行度。因此,需要用以管理处理、存储器和存储体从而显著地改善处理节点的性能的改善的方法和***。
发明内容
本发明的实施例提供用于管理处理、存储器、存储体、网络和云计算的以显著地改善处理节点的效率和性能的***和方法。更具体地,本发明的实施例是针对与实现分布式对象存储器并支持硬件、软件和混合实现的方法相对应的对象存储器结构流以及应用编程接口(API)。该流API可以从任意点被定义为两个相反方向的单向流。有利的是,可以以各种拓扑来实现该API流。流API可以处理对象一致性,以便任何装置随后都可以移动或远程地执行任意函数,这是因为函数在对象元数据中,而对象元数据是一致性对象地址空间的一部分。
一方面,公开了一种对象存储器结构的基于硬件的处理节点。基于硬件的处理节点可以包括存储和管理一个或多个存储器对象的存储器模块。可以在存储器模块中本地创建每个存储器对象。可以使用单个存储器引用指令而不用输入/输出(I/O)指令来存取每个存储器对象。该基于硬件的处理节点可以被配置为利用流应用编程接口(API)来与一个或多个另外的节点进行通信,以作为对象存储器结构的一组节点进行操作。该组节点可以进行操作,使得当以多个不同拓扑中的任何一个拓扑来实现该组节点时,该组节点中的所有存储器对象是至少部分地基于该流API可存取的。该流API可将来自该组节点中的任何节点的通信定义为包括第一方向上的第一单向流和与第一方向相反的第二方向上的第二单向流的两个单向流。
另一方面,公开了一种用于便于对象存储器结构的节点之间的通信的方法。可以在对象存储器结构的基于硬件的处理节点的存储器模块内本地创建一个或多个存储器对象。可以使用单个存储器引用指令而不用输入/输出(I/O)指令来存取该一个或多个存储器对象中的每个存储器对象。该基于硬件的处理节点可以利用流应用编程接口(API)来与一个或多个另外的节点进行通信,以作为对象存储器结构的一组节点进行操作。该组节点可以进行操作,使得当以多个不同拓扑中的任何一个拓扑来实现该组节点时,该组节点中的所有存储器对象是至少部分地基于该流API可存取的。该流API可将来自该组节点中的任何节点的通信定义为包括第一方向上的第一单向流和与第一方向相反的第二方向上的第二单向流的两个单向流。
在各种实施例中,由流API定义的通信可以对应于根据该组节点中的多个节点间的单向环形组织的环形流。在各种实施例中,单向流各自可以包括指令封包。指令封包中的至少一个指令封包可以包括扩展指令和关联数据。在各种实施例中,该至少一个指令封包可以对应于包括带有对象信息的拉取(pull)指令或确认(acknowledge)指令的指令封包。
在各种实施例中,可以至少部分地基于用对象寻址方案在每个对象的基础上分配的对象地址空间,用一个或多个存储器对象中的每个存储器对象来管理存储器和存储体的物理地址,以便根据该对象寻址方案将对象地址分配到该一个或多个存储器对象。指令封包可以包括用于指定以下内容的一个或多个字段:与各个存储器对象的对象地址中的各个对象地址中的对象起始点相对应的对象ID;用以对各个存储器对象的特定部分寻址的对象偏移;和/或各个存储器对象的对象大小。
在各种实施例中,指令封包可以包括一个或多个字段,该字段指定请求节点的分层节点标识的字段,该请求节点与多个基于硬件的处理节点中的发出请求的基于硬件的处理节点和/或发出请求的基于软件的节点相对应。该组节点中的至少一个节点被配置为至少部分地基于该分层节点标识将响应路由到该请求节点。
在各种实施例中,可以至少部分地基于用对象寻址方案在每个对象的基础上分配的对象地址空间,用一个或多个存储器对象中的每个存储器对象来管理存储器和存储体的物理地址,以便根据该对象寻址方案将块对象地址分配到一个或多个存储器对象。该至少一个指令封包可以对应于包括推送(push)指令、对象信息和由块对象地址中的特定块对象地址指定的单个块的对象数据封包。
在各种实施例中,该组节点中的至少一个节点可以被配置为至少部分地基于该单个块的位置、流API请求和push指令来路由该至少一个指令封包。在各种实施例中,该组节点中的至少一个节点可以被配置为至少部分地基于该单个块的位置、流API请求和push指令来路由该至少一个指令封包。
又一方面,公开了一种对象存储器结构。该对象存储器结构可以包括多个基于硬件的处理节点。每个基于硬件的处理节点可以包括一个或多个存储和管理一个或多个存储器对象的存储器模块。可以在存储器模块内本地创建每个存储器对象。可以使用单个存储器引用指令而不用输入/输出(I/O)指令来存取每个存储器对象。多个基于硬件的处理节点中的每个基于硬件的处理节点可以被配置为利用流应用编程接口(API)来与多个基于硬件的处理节点中的其他基于硬件的处理节点进行通信,以作为对象存储器结构的一组节点进行操作。该组节点进行操作,以使得多个基于硬件的处理节点中的任何基于硬件的处理节点可以被配置为:至少部分地基于该流API,移动一个或多个存储器对象和/或对多个基于硬件的处理节点中的其他基于硬件的处理节点远程地执行函数。
又一方面,公开了一种用于便于对象存储器结构的节点间的通信的方法。可以在多个基于硬件的处理节点中的一个或多个基于硬件的处理节点的一个或多个存储器模块内本地创建一个或多个存储器对象。可以使用单个存储器引用指令而不用输入/输出(I/O)指令来存取每个存储器对象。多个基于硬件的处理节点中的每个基于硬件的处理节点可以利用流应用编程接口(API)来与多个基于硬件的处理节点中的其他基于硬件的处理节点进行通信,以作为对象存储器结构的一组节点进行操作。该组节点可以进行操作,以使得多个基于硬件的处理节点中的任何基于硬件的处理节点可以被配置为:至少部分地基于该流API,移动一个或多个存储器对象和/或对多个基于硬件的处理节点中的其他基于硬件的处理节点远程地执行函数。
在各种实施例中,所述移动一个或多个存储器对象和/或所述对多个基于硬件的处理节点中的其他基于硬件的处理节点远程地执行函数是响应于流API请求的,该API请求来自多个基于硬件的处理节点中的请求节点和/或来自与对象存储器结构进行接口的软件层。在各种实施例中,多个基于硬件的处理节点中的每个基于硬件的处理节点还可以被配置为利用流API从所述对象存储器结构内发起请求。在各种实施例中,多个基于硬件的处理节点中的每个基于硬件的处理节点可以被进一步配置为响应于所述请求利用所述流API来传播和/或发起操作。
在各种实施例中,对象存储结构可以包括使用软件模拟多个基于硬件的处理节点中的至少一个硬件节点的部件。在各种实施例中,这些函数可以包括一个或多个高速缓存一致性函数,高速缓存一致性函数用于确定本地对象高速缓存状态对于与来自请求节点的流API请求相对应的预期操作是否是足够的、并且在所述确定之后向该请求节点转发响应或将该流API请求转发至另一节点。
在各种实施例中,至少部分地基于该流API,移动一个或多个存储器对象和/或对多个基于硬件的处理节点中的其他基于硬件的处理节点远程地执行函数可以包括:在多个基于硬件的处理节点中的至少两个基于硬件的处理节点之间拉取和/或推送一个或多个存储器对象中的至少一部分。所述拉取可以包括至少一个基于硬件的处理节点请求将该一个或多个存储器对象中的至少一部分移动到对应于该至少一个基于硬件的处理节点的位置。所述推送可以包括至少一个基于硬件的处理节点请求将该一个或多个存储器对象中的至少一部分移动到远离所述至少一个基于硬件的处理节点的远程位置。
在各种实施例中,一个或多个存储器对象中的至少一部分包括存储器对象数据和存储器对象元数据。存储器对象元数据包括一个或多个触发器,所述一个或多个触发器指定当所述一个或多个存储器对象中的所述至少一部分位于各个对象存储器模块处并且响应于所述拉取和/或所述推送而作为各个对象存储器模块的部分被存取时要由所述多个基于硬件的处理节点中的任何对象存储器模块执行的另外的一个或多个操作。
附图说明
图1是示出了现有技术的商品服务器和网络部件内的分离数据存储体、存储器、处理、网络和云计算的示例的框图。
图2是示出了本发明的各种实施例可以在其中实现的示范性分布式***的部件的框图。
图3是示出了本发明的各种实施例可以在其中实现的示范性计算机***的框图。
图4是示出了根据本发明的一个实施例的示范性对象存储器结构架构的框图。
图5是示出了根据本发明的一个实施例的示范性存储器结构对象存储器的框图。
图6是示出了根据本发明的一个实施例的示范性对象存储器动态和物理组织的框图。
图7是示出了根据本发明的一个实施例的对象存储器的对象存储器结构分层结构的方面的框图,其使工作集本地化并允许几乎无限的可扩展性。
图8是示出了根据本发明的一个实施例的对象地址空间、虚拟地址和物理地址之间的示例关系的方面的框图。
图9是示出了根据本发明的一个实施例的对象大小和对象地址空间指针之间的示例关系的方面的框图。
图10是示出了根据本发明的一个实施例的示例对象存储器结构分布式对象存储器和索引结构的方面的框图。
图11示出了根据本发明的一个实施例的完全在对象存储器内执行的对象存储器命中情况的方面。
图12示出了根据本发明的一个实施例的对象存储器未命中情况以及对象存储器和对象索引的分布式性质的方面。
图13是示出了根据本发明的一个实施例的、考虑了对象存储器结构分布式对象存储器和索引结构的叶级对象存储器的示例的方面的框图。
图14是示出了根据本发明的一个实施例的对象存储器结构路由器对象索引结构的示例的方面的框图。
图15A和图15B是示出了据本发明的一个实施例的包括节点索引树结构和叶索引树的示例索引树结构的方面的框图。
图16是示出了根据本发明的一个实施例的示例物理存储器组织的方面的框图。
图17A是示出了根据本发明的一个实施例的示例对象寻址的方面的框图。
图17B是示出了根据本发明的一个实施例的示例对象存储器结构指针和块寻址的方面的框图。
图18是示出了根据本发明的一个实施例的示例对象元数据的方面的框图。
图19是示出了根据本发明的一个实施例的示例微线程模型的方面的框图。
图20是示出了根据本发明的一个实施例的代码、帧和对象的示例关系的方面的框图。
图21是示出了根据本发明的一个实施例的微线程并发性的示例的方面的框图。
图22A是示出了根据本公开的某些实施例的带有基于硬件的对象存储器结构的节点间对象路由器的节点上存在的流的示例的框图。
图22B是示出了根据本公开的某些实施例的节点上的对象存储器和路由器的软件模拟的示例的框图。
图23是图示了根据本公开的某些实施例的对象存储器结构节点对象路由器内的流的示例的框图。
具体实施方式
在下面的描述中,为了解释的目的,阐述了许多具体细节,以便提供对本发明的各种实施例的透彻的理解。然而,对于本领域技术人员显而易见的是,可以在没有这些具体细节中的一些的情况下实施本发明的实施例。在其他情况下,公知的结构和装置以框图形式示出。
接下来的描述仅提供示范性实施例,并不意图限制本公开的范围、适用性或配置。相反,对示范性实施例的接下来的描述将为本领域技术人员提供能够实现示范性实施例的描述。应当理解,在不脱离如所附权利要求中阐述的本发明的精神和范围的情况下,可以对元件的功能和布置进行各种改变。
在以下描述中给出具体细节以提供对实施例的透彻理解。然而,本领域普通技术人员将理解,可以在没有这些具体细节的情况下实践实施例。例如,电路、***、网络、进程和其他部件可以以框图形式被示出为部件,以免不必要的细节使实施例变得模糊。在其他情况下,可以示出公知的电路、过程、算法、结构和技术,而不需要不必要的细节,以免使实施例变得模糊。
另外,应当注意,各个实施例可以被描述为进程,其被绘示为流程表、流程图、数据流程图、结构图或框图。尽管流程图可能将操作描述为顺序进程,但是许多操作可以并行或同时执行。此外,可以重新布置操作的顺序。进程在其操作完成后终止,但是可以具有图中未包括的另外的步骤。进程可以对应于方法、函数、程序、子例程、子程序等。当进程对应于函数时,其终止可以对应于函数返回到调用函数或主函数。
术语“机器可读介质”包括但不限于便携式或固定式存储装置、光学存储装置、无线信道、以及能够存储、包含或携带(多个)指令和/或数据的各种其他介质。代码段或机器可执行的指令可以表示过程、函数、子程序、程序、例程、子例程、模块、软件包、类或指令、数据结构、或程序语句的任何组合。通过传递和/或接收信息、数据、实参、形参或存储器内容,代码段可以耦合到另一代码段或硬件电路。信息、实参、形参、数据等可以经由任何合适的手段传递、转发或传输,包括存储器共享、消息传递、令牌传递、网络传输等。为了清楚起见,现在限定本文所使用的各种其他术语。
虚拟存储器是一种存储器管理技术,其为每个软件进程提供存储器与虚拟地址空间一样大的错觉。与不同程度的硬件相结合的操作***将物理存储器管理为虚拟地址空间的高速缓存,其位于辅助存储体中,并可通过输入/输出指令存取。虚拟存储器与文件***分离,但是也可以与其进行交互。
单级存储是虚拟存储器的扩展,其中没有文件,仅有使用虚拟存储器技术映射到进程的地址空间的持久对象或段。计算***的整个存储体被认为是段和段内的地址。因此,至少有三个单独的地址空间被软件管理,即物理存储器地址/节点、虚拟地址/进程、以及辅助存储体地址/磁盘。
对象存储体是指存储体的单元(被称为对象)的组织方式。每个对象包含容器,该容器包含三件事物:实际数据;可扩展元数据;以及全局唯一的标识符(本文称为对象地址)。对象的元数据用于限定关于数据的情景信息、以及如何使用和管理数据,其包括与其他对象的关系。
对象地址空间由软件在存储装置、节点和网络上进行管理,以在不知道对象的物理位置的情况下查找对象。对象存储体与虚拟存储器和单级存储分离,但一定可以通过软件进行互操作。
块存储体由均匀大小的数据块组成,具有基于物理位置的地址,且没有元数据。
网络地址是IP网络内的节点的与物理位置相关联的物理地址。
节点或处理节点是由共享物理存储器描绘的计算的物理单元,所述共享物理存储器由节点内的任何处理器寻址。
对象存储器是由处理器存储器引用指令且不需要隐式或显式软件或者输入/输出指令而可作为存储器直接存取的对象存储。对象能力直接在对象存储器内提供,以通过存储器引用指令进行处理。
对象存储器结构将对象存储器模块和节点连接到单个对象存储器中,在这种情况下,通过在硬件中对象数据、元数据和对象地址的直接管理,任何对象对于任何对象存储器模块来说都是本地的。
对象路由器基于对象地址在对象存储器结构中路由对象或对象的部分。这与基于网络地址将数据封包转发到网络的适当部分的常规路由器不同。
实施例可以由硬件、软件、固件、中间件、微代码、硬件描述语言或其任何组合来实现。当以软件、固件、中间件或微代码来实现时,用于执行必要任务的程序代码或代码段可以存储在机器可读介质中。(多个)处理器可以执行必要任务。
本发明的实施例提供了用于管理处理、存储器、存储体、网络和云计算的以显著地改善处理节点的效率和性能的***和方法。本文所述的实施例可以以硬件部件的集合来实现,其通过打破当今的商品解决方案中的处理、存储器、存储体和网络之间的人为区别,实质上改变了管理处理、存储器和存储体、网络和云计算的方式,从而显著地改善商品硬件的效率和性能。例如,硬件元件可以包括标准格式存储器模块,例如(DIMM)和一个或多个对象路由器的集合。存储器模块可以被添加到诸如服务器节点的商品或“现成”硬件,并作为该节点内的大数据加速器。对象路由器可以用于互连与存储器模块适配的两个或更多个服务器或其他节点,并帮助跨越这些不同的服务器管理处理、存储器和存储体。节点可以物理上相距很近或甚远。这些硬件部件可以一起与商品服务器或其他类型的计算节点以任何组合来一起使用,以实现本文所述的实施例。
根据一个实施例,这样的硬件部件可以实现基于对象的存储器,其在存储器内并且在存储器层而不是在应用层中管理对象。即是说,在存储器中本地地实现和管理对象和相关联的属性,使得对象存储器***在无需任何软件的情况下能够提供增强的功能,且通过动态地管理对象特性(包括但不限于,持久性、位置和处理)提高了性能。对象属性也可以传播到更高的应用级。
这样的硬件部件也可以通过在对象内实现和管理存储器(临时的)和存储体(持久的),来消除存储器和存储体之间的区别。这些部件可以通过透明地管理对象(或对象的部分)的位置来消除本地和远程存储器之间的区别,因此所有对象都同时对于所有节点呈现为本地的。这些部件还可以通过对象的将处理置于存储器本身内的方法,来消除处理和存储器之间的区别。
根据一个实施例,这样的硬件部件可以消除由地址大小施加的、商品服务器的存储器空间上的典型大小限制。相反,可以在存储器对象本身内管理物理寻址,并且进而可以通过对象名称空间来存取和管理对象。
本文所述的实施例可以通过减少或消除通常与存储器管理、存储体管理、网络和数据目录相关联的开销(overhead),来提供透明和动态的性能加速,特别是对于大数据或其他存储器密集型应用。相反,在存储器级对存储器对象的管理可以显著地缩短存储器和存储体之间、以及存储器和处理之间的通路,从而消除其每一个之间的相关开销。下面将参考附图描述本发明实施例的各种另外的细节。
图2是可以实现本发明的各种实施例的示范性分布式***的部件的框图。在示出的实施例中,分布式***200包括一个或多个客户端计算装置202、204、206和208,其配置为在一个或多个网络210上执行或操作客户端应用,客户端应用例如是Web浏览器、专用客户端、等等。服务器212可以经由网络210与远程客户端计算装置202、204、206和208通信地耦合。
在各种实施例中,服务器212可以适用于运行由***的一个或多个部件提供的一个或多个服务或软件应用。在一些实施例中,这些服务可以作为基于Web的服务或云服务或以软件即服务(Software as a Service,SaaS)模式提供给客户端计算装置202、204、206、和/或208的用户。操作客户端计算装置202、204、206、和/或208的用户可以进而利用一个或多个客户端应用来与服务器212交互,以利用由这些部件提供的服务。为了清楚起见,应当注意,服务器212和数据库214、216可以对应于上文参考图1所述的服务器105。网络210可以是物理网络115的部分或扩展。还应当理解,可以存在任何数量的客户端计算装置202、204、206、208和服务器212,其每一个具有一个或多个数据库214、216。
在图中绘示的配置中,***200的软件部件218、220和222被示出为在服务器212上实现。在其他实施例中,***200的一个或多个部件和/或由这些部件提供的服务也可以由客户端计算装置202、204、206、和/或208中的一个或多个来实现。操作客户端计算装置的用户则可以利用一个或多个客户端应用来使用由这些部件提供的服务。可以以硬件、固件、软件或其组合来实现这些部件。应当理解,不同于分布式***200的各种不同的***配置是可能的。因此,图中所示的实施例是用于实现实施例***的分布式***的一个示例,而非意在限制。
客户端计算装置202、204、206、和/或208可以是便携式手持装置(例如,蜂窝电话、计算平板、个人数字助理(PDA))或可穿戴装置(例如,Google头戴式显示器),其运行诸如Microsoft Windows的软件,和/或各种移动操作***,例如iOS、Windows Phone、Android、BlackBerry 10、Palm OS等等,且可支持互联网、电子邮件、短信息服务(SMS)、或其他允许的通信协议的功能。客户端计算装置可以是通用个人计算机,例如包括运行各种版本的MicrosoftApple和/或Linux操作***的个人计算机和/或膝上计算机。客户端计算装置可以是运行各种可商购的或类UNIX操作***中的任一个的工作站计算机,所述操作***包括但不限于各种GNU/Linux操作***,例如Google Chrome OS。替代地或另外的地,客户端计算装置202、204、206和208可以是任何其他电子装置,例如瘦客户端电脑、支持互联网的游戏***(例如,具有或不具有手势输入装置的Microsoft Xbox游戏控制台),和/或能够在(多个)网络210上通信的个人消息传递装置。
尽管示范性分布式***200被示出为具有四个客户端计算装置,但其可以支持任何数量的客户端计算装置。其他装置(例如具有传感器的装置等)可以与服务器212进行交互。
分布式***200中的(多个)网络210可以是本领域技术人员所熟悉的任何类型的网络,其可以支持使用各种可商购的协议中的任一个(包括但不限于TCP/IP(传输控制协议/互联网协议)、SNA(***网络架构)、IPX(互联网封包交换)、AppleTalk、等等)的数据通信。仅作为示例,(多个)网络210可以是局域网(LAN),例如基于以太网、令牌环和/或诸如此类的局域网。(多个)网络210可以是广域网和互联网。其可以包括虚拟网络(包括但不限于虚拟专用网络(VPN))、内部网、外部网、公共交换电话网络(PSTN)、红外网络、无线网络(例如,在任何电气与电子工程师协会(IEEE)802.11协议套件、和/或任何其他无线协议下操作的网络);和/或这些和/或其他网络的任何组合。这些网络的元件可以具有任意距离,即可以是远程或共同定位的。软件定义网络(SDN)可以通过非智能(dumb)路由器和在服务器上运行的软件的组合来实现。
服务器212可以由以下中的一个或多个组成:通用计算机、专用服务器计算机(例如包括个人计算机(PC)服务器、服务器、中等服务器、大型计算机、机架安装式服务器、等等)、服务器场、服务器集群、或任何其他合适的布置和/或组合。在各种实施例中,服务器212可以适用于运行前述公开中描述的一个或多个服务或软件应用。例如,服务器212可以对应于执行根据本公开的实施例的上述处理的服务器。
服务器212可以运行包括上述中的任一个的操作***、以及任何可商购的服务器操作***。服务器212还可以运行各种另外的服务器应用和/或中间层应用中的任一个,包括超文本传输协议(HTTP)服务器、文件传输协议(FTP)服务器、公共网关接口(CGI)服务器、服务器、数据库服务器等等。示范性数据库服务器包括但不限于可从Oracle、Microsoft、Sybase、International Business Machines(IBM)等商购的那些。
在一些实施方式中,服务器212可以包括一个或多个应用,以分析和整合从客户端计算装置202、204、206和208的用户接收的数据馈送和/或事件更新。作为示例,数据馈送和/或事件更新可以包括但不限于馈送、更新、或从一个或多个第三方信息源和连续数据流接收的实时更新,其可以包括与传感器数据应用、财务收报机、网络性能测量工具(例如网络监控和流量管理应用)、点击流分析工具、汽车交通监控等相关的实时事件。服务器212还可以包括一个或多个一个或多个应用,以经由客户端计算装置202、204、206和208中的一个或多个显示装置来显示数据馈送和/或实时事件。
分布式***200还可以包括一个或多个数据库214和216。数据库214和216可以驻留在各种位置。作为示例,数据库214和216中的一个或多个可以驻留在服务器212本地的非暂时性存储介质上(和/或驻留在服务器212中)。替代地,数据库214和216可以远离服务器212且经由基于网络或专用的连接与服务器212通信。在一组实施例中,数据库214和216可以驻留在存储区域网络(SAN)中。类似地,按照需要,用于执行归属于服务器212的功能的任何必需文件可以本地存储在服务器212和/或远程地存储。在一组实施例中,数据库214和216可以包括关系数据库,其适用于响应于命令(例如,MySQL-格式的命令)来储存、更新或取回数据。另外地或替代地,服务器212可以提供并支持对非结构化数据的大数据处理,包括但不限于Hadoop处理、NoSQL数据库、图形数据库等。在又一实施方式中,服务器212可以执行非数据库类型的大数据应用,包括但不限于机器学习。
图3是示出了本发明的实施例可以在其中实现的示范性计算机***的框图。***300可以用于实现上述计算机***中的任一个。如图所示,计算机***300包括处理单元304,其经由总线子***302与多个***子***通信。这些***子***可以包括处理加速单元306、I/O子***308、存储体子***318和通信子***324。存储体子***318包括有形计算机可读存储介质322和***存储器310。
总线子***302提供了用于使计算机***300的各种部件和子***按预期相互通信的机制。尽管总线子***302被示意性地示为单个总线,但总线子***的替代实施例可以利用多个总线。总线子***302可以是若干类型的总线结构中的任一个,包括存储器总线或存储器控制器、***总线、以及使用各种总线架构中的任一个的本地总线。例如,这样的架构可以包括工业标准架构(ISA)总线、微通道架构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)本地总线、***部件互连(PCI)总线、其可以实现为以IEEE P1386.1标准制造的夹层总线、或PCI增强(PCIe)总线。
处理单元304控制计算机***300的操作,其可以实现为一个或多个集成电路(例如,常规微处理器或微控制器)。一个或多个处理器可以包括在处理单元304中。这些处理器可以包括单核或多核处理器。在某些实施例中,处理单元304可以实现为一个或多个独立的处理单元332和/或334,在每个处理单元中包括单核或多核处理器。在其他实施例中,处理单元304也可以实现为通过将两个双核处理器集成到单个芯片中而形成的四核处理单元。
在各种实施例中,处理单元304可以响应于程序代码执行各种程序,并且可以保持多个同时执行的程序或进程。在任何给定的时间,要执行的程序代码的一些或全部可以驻留在(多个)处理器304和/或存储体子***318中。通过适当的编程,(多个)处理器304可以提供上述各种功能。计算机***300可以另外地包括处理加速单元306,其可以包括数字信号处理器(DSP)、专用处理器、和/或诸如此类。
I/O子***308可以包括用户接口输入装置和用户接口输出装置。用户接口输入装置可以包括键盘、诸如鼠标或轨迹球之类的指点装置、并入显示器中的触摸板或触摸屏、滚轮、点击轮、转盘、按钮、开关、小键盘、具有语音命令识别***的音频输入装置、麦克风、或其他类型的输入装置。用户接口输入装置可以例如包括运动感测和/或手势识别装置,例如Microsoft运动传感器,其允许用户通过使用手势和口说命令的自然用户接口来控制输入装置(例如Microsoft360游戏控制器)和与该输入装置进行交互。用户接口输入装置还可以包括眼部动作识别装置,例如Google眨眼检测器,其检测来自用户的眼部活动(例如,在拍摄照片和/或进行菜单选择时的“眨眼”),并将眼部动作转换为到输入装置(例如,Google)的输入。此外,用户接口输入装置可以包括语音识别感测装置,其允许用户通过语音命令与语音识别***(例如,导航器)进行交互。
用户接口输入装置还可以包括但不限于:三维(3D)鼠标、操作杆或指点杆、游戏手柄和图形平板、以及音频/视频装置,诸如扬声器、数码相机、数字摄像机、便携式媒体播放器、网络摄像机、图像扫描仪、指纹扫描仪、条形码读取器、3D扫描仪、3D打印机、激光测距仪和眼睛注视跟踪装置。此外,用户接口输入装置可以例如包括医学成像输入装置,例如计算机断层扫描、磁共振成像、位置发射断层摄影、医学超声检查装置。用户接口输入装置还可以例如包括音频输入装置,例如MIDI键盘、数字乐器等等。
用户接口输出装置可以包括显示子***、指示灯、或诸如音频输出装置之类的非视觉显示器等。显示子***可以是阴极射线管(CRT)、平板装置(例如使用液晶显示器(LCD)或等离子显示器的平板装置)、投影装置、触摸屏等等。通常,使用术语“输出装置”旨在包括用于从计算机***300向用户或其他计算机输出信息的所有可能类型的装置和机构。例如,用户接口输出装置可以包括但不限于可视地传递文本、图形、以及音频/视频信息的各种显示装置,例如监控器、打印机、扬声器、耳机、汽车导航***、绘图仪、语音输出装置、以及调制解调器。
计算机***300可以包括存储体子***318,其包括被示出为当前位于***存储器310内的软件元件。***存储器310可以存储可在处理单元304上加载并执行的程序指令、以及在执行这些程序期间产生的数据。
根据计算机***300的配置和类型,***存储器310可以是易失性的(例如随机存取存储器(RAM))和/或非易失性的(例如只读存储器(ROM)、闪存存储器等等)。RAM通常包含数据和/或程序模块,其可由处理单元304立即存取和/或正在由处理单元304操作和执行。在一些情况下,***存储器310可以包括一个或多个双数据速率四代(DDR4)双列直插存储器模块(DIMM)。在一些实施方式中,***存储器310可以包括多种不同类型的存储器,例如静态随机存取存储器(SRAM)或动态随机存取存储器(DRAM)。在一些实施方式中,基本输入/输出***(BIOS)通常可以存储在ROM中,其中BIOS包含有助于例如在启动期间在计算机***300内的元件之间传递信息的基本例程。作为示例而非限制,***存储器310还示出了应用程序312、程序数据314、以及操作***316,应用程序312可以包括客户端应用、Web浏览器、中间层应用、关系数据库管理***(RDBMS)等。作为示例,操作***316可以包括各种版本的MicrosoftApple和/或Linux操作***、各种可商购的或类UNIX操作***(包括但不限于GNU/Linux操作***、GoogleOS、等等)和/或移动操作***,例如iOS、手机、OS、10OS、以及OS操作***。
存储体子***318还可以提供有形的计算机可读取存储介质,用于存储提供一些实施例的功能的基本编程和数据结构。当由处理器执行时提供上述功能的软件(程序、代码模块、指令)可以存储在存储体子***318中。这些软件模块或指令可以由处理单元304执行。存储体子***318还可以提供用于存储根据本发明所使用的数据的存储库(repository)。
存储体子***300还可以包括计算机可读存储介质读取器320,其可以进一步连接到计算机可读取存储介质322。与***存储器310一起并且可选地与***存储器310结合,计算机可读取存储介质322可以全面地表示远程、本地、固定、和/或可移除存储装置加上用于暂时地和/或更加永久地包含、存储、传输和取回计算机可读信息的存储介质。
包含代码、或代码的部分的计算机可读取存储介质322可以包括本领域已知或使用的任何合适的介质,包括存储介质和通信介质,例如但不限于,以任何方法或技术实现以存储和/或传输信息的易失性和非易失性、可移除和不可移除介质。这可以包括有形的计算机可读取存储介质,例如RAM、ROM、电可擦除可编程ROM(EEPROM)、闪存存储器或其他存储器技术、CD-ROM、数字通用盘(DVD)、或其他光学存储体、磁带盒、磁带、磁盘存储体或其他磁存储装置、或其他有形的计算机可读取介质。这也可以包括无形的计算机可读介质,例如数字信号、数据传输、或可以用于传输期望的信息且可以由计算***300存取的任何其他介质。
作为示例,计算机可读取存储介质322可以包括:从不可移除、非易失性磁介质读取或向其写入的硬盘驱动器;从可移除、非易失性磁盘读取或向其写入的磁盘驱动器;从可移除、非易失性光盘(例如,CD ROM、DVD和盘,或其他光学介质)读取或向其写入的光盘驱动器。计算机可读取存储介质322可以包括但不限于,驱动器、闪存存储器卡、通用总线(USB)闪存驱动器、安全数字(SD)卡、DVD盘、数字视频带等等。计算机可读取存储介质322还可以包括基于非易失性存储器的固态驱动器(SSD)、例如基于闪存存储器的SSD、企业闪存驱动器、固态ROM等;基于易失性存储器的SSD,例如固态RAM、动态RAM、静态RAM、基于DRAM的SSD、磁致电阻RAM(MRAM)SSD、以及使用DRAM和基于闪存存储器的SSD的组合的混合SSD。盘驱动器及其相关联的计算机可读介质可以提供计算机***300的计算机可读指令、数据结构、程序模块和其他数据的非易失性存储。
通信子***324提供与其他计算机***和网络的接口。通信子***324用作计算机***300从其他***接收数据并向其发送数据的接口。例如,通信子***324可以允许计算机***300经由互联网连接到一个或多个装置。在一些实施例中,通信子***324可以包括射频(RF)收发器部件、全球定位***(GPS)接收器部件、和/或其他部件,该射频(RF)收发器部件用于存取无线语音和/或数据网络(例如,使用蜂窝电话技术、高级数据网络技术,例如3G、4G或全球演进增强数据速率(EDGE)、WiFi(IEEE 802.11系列标准或其他移动通信技术)、或其任何组合)。在一些实施例中,作为无线接口的替代或另外地,通信子***324可以提供有线网络连接(例如,以太网)。在一些情况下,通信子***324可以整体或部分地实现为一个或多个PCIe卡。
在一些实施例中,通信子***324还可以代表可能使用计算机***300的一个或多个用户接收结构化和/或非结构化的数据馈送326、事件流328、事件更新330等形式的输入通信。
作为示例,通信子***324可以配置为从社交网络和/或其他通信服务(例如,馈送、更新、诸如丰富站点摘要(Rich Site Summary,RSS)馈送的web馈送)的用户实时地接收数据馈送326,和/或从一个或多个第三方信息源接收实时更新。
此外,通信子***324还可以被配置为接收连续数据流形式的数据,其可以包括实时事件的事件流328和/或事件更新330,其本质上可以是连续或无界的而没有明确的结束。生成连续数据的应用的示例可以例如包括传感器数据应用、财务收报机、网络性能测量工具(例如,网络监控和流量管理应用)、点击流分析工具、汽车交通监控等等。
通信子***324还可以配置为输出结构化和/或非结构化的数据馈送326、事件流328、事件更新330等到一个或多个数据库,所述数据库可以与耦合到计算机***300的一个或多个流数据源计算机通信。
计算机***300可以是各种类型的中一个,包括手持便携式装置(例如,蜂窝电话、计算平板、PDA)、可穿戴装置(例如,Google头戴式显示器)、PC、工作站、主机、资讯站(kiosk)、服务器机架、或任何其他数据处理***。
由于计算机和网络的不断变化的性质,图中所绘示的计算机***300的描述仅旨在作为具体示例。与图中所示的***相比,具有更多或更少部件的许多其他配置是可能的。例如,也可以使用定制的硬件和/或可以以硬件、固件、软件(包括小程序)、或组合来实现特定的元件。另外,可以采用到其他计算装置(例如网络输入/输出装置)的连接。基于本文所提供的公开和教导,本领域技术人员将理解实现各种实施例的其他方式和/或方法。
如上面所介绍的,本发明的实施例提供了用于管理处理、存储器、存储体、网络和云计算以显著地改善处理节点的效率和性能的***和方法,其中处理节点是诸如上述服务器或其他计算机或计算装置中的任一个。本文所述的实施例可以实现为硬件部件的集合,其通过打破当今的商品解决方案中的处理、存储器、存储体、网络和云之间的人为区别,实质上改变了管理处理、存储器和存储体、网络和云计算的方式,从而显著地改善商品硬件的性能。例如,硬件元件可以包括标准格式存储器模块,例如双列直插存储器模块(DIMM),其可以被添加到上述计算机***中的任一个。例如,存储器模块可以被添加到诸如服务器节点的商品或“现成”硬件,并作为该节点内的大数据加速器。部件也可以包括一个或多个对象路由器。对象路由器可以例如包括与存储器模块和一个或多个外部对象路由器(例如,机架安装路由器)一起添加到服务器节点的PCIe卡。对象路由器可以用于互连两个或更多个服务器或与存储器模块适配的其他节点,并有助于在这些不同的服务器上管理处理、存储器和存储体。对象路由器可以基于对象地址来转发对象或对象的部分,并参与对象存储器结构中的操作。这些硬件部件可以与商品服务器或其他类型的计算节点以任何组合方式一起使用,以实现对象存储器结构架构。
图4是示出了根据本发明的一个实施例的示范性对象存储器结构架构的框图。如这里所示,架构400包括支持任何数量的应用(App)410a-g的对象存储器结构405。如将在下面更详细地描述的,该对象存储器结构405可以包括任何数量的处理节点,例如已经安装了本文所述的一个或多个存储器模块的一个或多个服务器。这些节点可以通过本文所述的一个或多个内部和/或外部对象路由器来互连。尽管被描述为包括一个或多个服务器,应当注意,对象存储器结构405的处理节点可以包括任何数量的各种不同的计算机和/或计算装置,其适用于在本文所述的对象存储器结构405内操作。
根据一个实施例,对象存储器结构405提供基于对象的存储器,其在对象存储器结构405的各节点的存储器内并且在存储器层而不是在应用层中管理存储器对象。即是说,可以在对象存储器结构405的节点中本地地实现和管理对象和相关联的属性,使得在无需任何软件的情况下能够提供增强的功能并通过动态地管理对象特性(包括但不限于,持久性、位置和处理)来提高效率和性能。对象属性也可以传播到应用410a-g。对象存储器结构405的存储器对象可用于消除由地址大小施加在商品服务器或其他节点的存储器空间上的典型大小限制。相反,物理寻址可以在存储器对象本身内进行管理,且对象可以进而通过对象名称空间被存取和管理。通过在对象内实现和管理存储器(临时)和存储体(持久),对象存储器结构405的存储器对象也可以用来消除存储器和存储体之间的区别。通过透明地管理对象(或对象的部分)的位置,对象存储器结构405也可以消除本地和远程存储器之间的区别,因此所有对象都同时对于所有节点呈现为本地的。通过对象将处理置于存储器本身内的方法,存储器对象还可以来消除处理和存储器之间的区别。换言之,本发明的实施例提供了对计算和存储以及存储和计算加以结合的单级存储器,直接且从而消除了在多级软件各级上通信的多级软件开销以及移动待处理的数据的人为开销。
按照这些方式,通过减少或消除通常与***和应用软件层上的存储器管理、存储体管理、网络、数据目录和数据缓冲器相关联的开销,本文所述的对象存储器结构405的实施例及其部件可以提供透明且动态的性能加速,特别是对于大数据或其他存储器密集型应用。相反,在存储器级管理存储器对象可以显著缩短存储体和存储器之间以及存储器和处理之间的通路,从而消除其每一个之间的相关的开销。
实施例提供了一致性的、基于硬件的、无限的存储器,其作为存储器中性能加速的、跨越所有节点、且在所有节点上可扩展的存储器对象来加以管理。这允许基于对象和终端应用的透明动态性能加速。使用根据本发明的实施例的架构,应用和***软件可以被视为与单个标准服务器一样和简单,但是另外地允许存储器结构对象来捕获启发式(heuristics)。实施例提供多维度的加速性能,包括本地加速。根据一个实施例,与存储器对象相关联的对象存储器结构元数据可以包括触发器,其使得对象存储器结构架构能够本地化且在使用前将数据移动到快速DRAM存储器。触发器可以是使得存储器***能够基于存储器存取来执行任意函数的基本概括。各种实施例还可以包括指令集,该指令集可以基于在与每个存储器对象相关联的元数据中定义的触发器来为对象存储器结构提供唯一指令模型,支持核心操作和优化,并且允许在IMF内以高度并行的方式更高效地执行应用程序的存储器密集部分。
实施例还可以通过用少量的存储器引用来代替复杂的应用、存储体和网络堆栈以减少软件路径长度。当在本发明的实施例下存储器和存储体可作为存储器直接寻址时,可以实现这一点。实施例可以另外地提供高级别存储器操作的加速性能。对于许多情况,对象存储器结构架构的实施例可以消除将数据移动到处理器并移回到存储器的需要(其对于目前具有三个或更多级别的高速缓存的现代处理器来说是非常低效的)。
图5是示出了根据本发明的一个实施例的示范性存储器结构对象存储器的框图。更具体地,该示例示出了如何可以组织存储器结构对象存储器的应用视图。存储器结构对象地址空间500可以是128位线性地址空间,在这种情况下,对象ID对应于可寻址对象的开始。对象510可以是从212到264字节的可变大小。由于对象存储体是以每个块为基础来进行分配,地址空间500可以在对象内或跨对象高效地稀疏地利用。对象空间500的大小必须足够大,使得不需要垃圾回收且能够使不相交的***容易地组合。
与每个对象510相关联的对象元数据505可以相对于对象地址空间500是透明的,且可以利用对象存储器结构来管理对象和对象内的块,且可以通过对象存储器结构的应用编程接口(API)由应用515a-g以适当的权限进行存取。该API为应用提供了设定和保持对象存储器结构的函数,例如通过使用修改的Linux libc函数库。通过少量的另外的工作,例如SQL数据库或图形数据库的应用可以利用API来创建存储器对象,并提供和/或扩展对象元数据,以允许对象存储器结构更好地管理对象。对象元数据505可以包括对象方法,其通过动态的基于对象的处理、分发和并行化来实现性能优化。元数据可以使得每个对象具有可定义的安全策略,并在对象内存取封装。
根据本发明的实施例,应用515a-g现在可以存取捕获其工作和/或持久数据的单个对象(例如App0 515a),或者为了更精细的粒度而存取多个对象(例如App1 515b)。应用也可以共享对象。根据这些实施例的对象存储器500可以通过物理组织(其将在下面参考图6更详细地描述)和对象存储器动态性的组合在物理上实现这种强力的简单应用视图。一般来说,对象存储器500可以被组织为分布式分层结构,其为对象存储体和应用程序515a-g创建分层邻域。对象存储器动态性与分层组织交互并且利用分层组织,来动态地创建对象的局域变量(locals)以及在对象上操作的应用(对象方法)。由于对象方法可以与存储器对象相关联,当对象在存储器结构上迁移和复制时,对象方法自然地获得了对象大小所保证的增加的并行性。结合对象动态性的分层结构可以基于对象方法的大小和动态性进一步创建邻域的邻域。
图6是示出了根据本发明的一个实施例的示范性对象存储器动态性和物理组织的框图。如该示例所示,上述对象存储器结构600可以包括任何数量的处理节点605和610,其经由一个或多个外部对象路由器615通信地耦合。节点605和610中的每一个还可以包括内部对象路由器620以及一个或多个存储器模块。每个存储器模块625可以包括支持任何数量的应用515a-g的节点对象存储器635。一般来说,存储器模块625、节点对象路由器620和节点间对象路由器615可以共享关于对象存储器635的共同功能及其索引。换言之,底层设计对象可以在所有三者中重复使用,从而提供除了适合于通过示例描述的那些实施方式之外的还适合于各种不同形式因素和类型中的任何一种的硬件的通用设计。
更具体地,节点可以包括单个节点对象路由器620以及一个或多个存储器模块625和630。根据一个实施例,节点605可以包括商品或“现成”服务器,存储器模块625可以包括诸如双列直插存储器模块(DIMM)卡的标准格式存储器卡,且节点对象路由器620可以类似地包括诸如***部件高速互连(PCIe)卡的标准格式卡。节点对象路由器620可以实现覆盖了在相同节点605内的存储器模块625和630的(多个)对象存储器635内被保持的对象/块的对象索引。存储器模块625和630中的每一个可以保持对象内的实际对象和块、对应的对象元数据、以及覆盖了当前本地存储在该存储器模块的对象的对象索引。存储器模块625和630中的每一个可以按以下方式独立地管理DRAM存储器(快速且相对昂贵)和闪存存储器(不那么快但是便宜得多),即,使得节点605的处理器(未示出)认为存在闪存数量的快速DRAM。存储器模块625和630以及节点对象路由器620均可以通过以与其他索引相同的方式实现的空闲存储体索引来管理空闲存储体。可以由处理器高速缓存和处理器存储器引用指令通过标准DDR存储器总线来直接存取存储器模块625和630。按照这种方式,存储器模块625和630的存储器对象可以仅使用常规存储器引用指令而无需用隐式或显式的输入/输出(I/O)指令来加以存取。
可以通过对象存储器结构API(未示出)来创建并保持每个节点625的对象存储器635内的对象。节点对象路由器620可以通过libc函数库的修改的对象存储器结构版本和对象存储器结构驱动器(未示出)与API通信。然后,节点对象路由器620可以根据需要更新本地对象索引,朝向根(root)(即朝向节点间对象路由器615)发送命令,并与适当的存储器模块625或630进行通信,以在本地完成API命令。存储器模块625或630可以将管理请求传送回可以适当地处理管理请求的节点对象路由器620。
根据一个实施例,节点对象路由器620的内部架构可以非常类似于存储器模块625,差异与路由功能相关,例如管理节点存储器对象索引、以及向或者从存储器模块625和630及节点间对象路由器615路由适合的封包。即是说,节点对象路由器620可以具有另外的路由功能,但是不需要实际地存储存储器对象。
节点间对象路由器615可以被认为类似于IP路由器。然而,第一个差异在于使用的寻址模型。IP路由器对每个节点使用固定的静态地址,并基于目的IP地址路由到固定的物理节点。然而,对象存储器结构600的节点间对象路由器615利用存储器结构对象地址(OA),所述OA指定对象和对象的具体块。对象和块可以动态地驻留在任何节点处。节点间对象路由器615可以基于对象和块的(多个)动态位置来路由OA封包,并且实时动态地追踪对象/块位置。第二个差异在于,对象路由器可以实现对象存储器结构分布式协议,该协议提供对象/块位置和对象函数的动态性质,例如包括但不限于触发器。节点间对象路由器615可以实现为具有增加的对象索引存储容量、处理速率和总路由带宽的、节点对象路由器620的扩大版本。另外,节点间对象路由器615可以连接到多个节点对象路由器和/或多个其他节点间对象路由器,而不是连接到单个PCIe或其他总线或信道以连接到存储器模块。根据一个实施例,节点对象路由器620可以通过节点605的PCIe和存储器总线(未示出)上的直接存储器存取来与存储器模块625和630通信。不同的节点605和610的节点对象路由器可以进而通过高速网络(未示出)与一个或多个节点间对象路由器615连接,高速网络例如是使用通过标准IP隧道传输的若干层的千兆位以太网协议或对象存储器结构协议的25/100GE光纤。多个节点间对象路由器可以与相同的网络连接。
在操作中,存储器结构对象存储器可以利用物理组织和对象存储器动态性的组合实现上文参考图4和5所述的其强大的简单应用视图。根据一个实施例且如参考图5所介绍的,存储器结构对象存储器可以被组织为分布式分层结构,该分层结构形成对象存储体和应用515a-g的分层邻域。节点对象路由器可以保持追踪哪个对象或对象的部分对于邻域是本地的。实际的对象存储器可以位于靠近应用515a-g和存储器结构对象方法的节点605或610上。
同样如上文所介绍的,对象存储器动态性可以与分层组织交互并利用分层组织来动态地创建对象的局域变量以及在对象上操作的应用(对象方法)。由于对象方法可以与对象相关联,当对象在节点上迁移和复制时,对象方法自然地获得了对象大小所保证的增加的并行性。结合对象动态性的该对象分层结构可以进而基于对象方法的大小和动态创建邻域的邻域。
例如,App0 515a跨越单个级别的对象存储器结构邻域(在这种情况下是节点605)内的多个存储器模块625和630。对象移动可以停留在该邻域和其节点对象路由器620内,而无需任何其他通信链路或路由器。沿着分层限定的邻域的自组织性质提供了从性能和最小带宽的角度的效率。在另一示例中,App1(Al)515b可以具有相同的特性但是在不同的邻域中,即,在节点610中。App2(A2)515c可以是跨两级分层邻域(即,节点605和610)的并行应用。交互可以在各自的邻域中自成一体。
如上所述,某些实施例可以包括数据类型和元数据架构,某些实施例还可以包括促进本发明的多个优点的数据类型和元数据架构。关于架构,以下描述公开了以下各方面:对象存储器结构地址空间;对象存储器结构一致性对象地址空间;对象存储器结构分布式对象存储器和索引;对象存储器结构索引;对象存储器结构对象;以及扩展的指令执行模型。各种实施例可以包括这些方面中的任何一个或组合。
图7是示出了根据本发明的一个实施例的对象存储器的对象存储器结构分层结构的方面的框图,其将工作集本地化且允许几乎无限的可扩展性。如本文所公开的,某些实施例可以包括使对象存储器结构能够动态地操作以提供对象存储器应用视图的核心组织和数据类型。核心组织和数据类型有助于***的类分形特性,其允许***以与规模无关的方式进行相同的表现。在绘示的示例中,本文所公开的对象存储器结构700可以包括任何数量的处理节点705和710,其经由一个或多个外部对象路由器通信地耦合到更高的级别,外部对象路由器例如是对象路由器715,且该外部对象路由器可以进而耦合到一个或多个更高级别的对象路由器。
具体地,***可以是由节点、从叶节点到(多个)根节点构建的胖树。根据某些实施例,每个节点可以仅理解其范围是否包含对象,并且基于此理解是否将请求/响应路由到根或叶。将这些节点放在一起使得***能够动态地扩展到任何容量,而不影响任何节点的操作或视点。在一些实施例中,叶节点可以是由标准存储器芯片构建的DIMM加上在FPGA内实现的对象存储器结构700。在一些实施例中,标准存储器芯片可以嵌入对象存储器结构700。在各种实施例中,实施方式可以具有远程节点,例如移动电话、无人机、汽车、物联网部件、和/或诸如此类。
为了促进对象存储器结构700的各种有利性质,某些实施例可以采用一致性对象存储器结构地址空间。下面的表1标识了根据本公开的某些实施例的地址空间的各个方面的非限制性示例。根据某些实施例,连接到单个对象存储器结构700的本地或分布的所有节点都可以被认为是单个***环境的一部分。如表1所示,对象存储器结构700可以提供一致性对象地址空间。在一些实施例中,可以提供128位对象地址空间。然而,其他实施例是可能的。大型对象地址空间有几个原因,包括以下内容。对象地址空间直接唯一地对对象存储器结构***内的所有节点上的所有存储器、存储体进行寻址和管理,并为对象存储器结构***之外的常规存储体提供唯一的地址。对象地址空间可以允许地址被使用一次且永不进行垃圾回收,这是主要的效率。对象地址空间可以允许对分配地址空间和分配存储体进行区分。换言之,对象地址空间可以稀疏地用作具有简单性、性能和灵活性的有效技术。
如表1进一步所示,对象存储器结构700可以直接支持每个进程的虚拟地址空间、以及物理地址空间。通过一些实施例,每个进程的虚拟地址空间和物理地址空间可以与x86-64架构兼容。在某些实施例中,单个虚拟地址空间的跨度可能在Linux OS的单个实例中,并且可能通常与单个节点重合。对象存储器结构700可以使相同的虚拟地址空间能够跨越多于单个节点。物理地址空间可以是实际物理存储器寻址(例如,在一些实施例中,在x86-64节点内)。
图8是示出了根据本公开的某些实施例的对象地址空间805、虚拟地址810和物理地址815之间的示例关系800的框图。对于对象地址空间805,单个对象的大小可以在范围内变化。作为示例而非限制,单个对象的大小范围可以从2兆字节(221)到16PB(264)。其他范围是可能的。在一些实施例中,在对象存储器结构700中,对象地址空间805可以在对象粒度的基础上分配。在一些实施例中,可以在4k字节块的基础上(例如,块806、807)对存储体进行分配。因此,在一些实施例中,对象地址空间块806、807可以对应于x86-64架构内的4k字节页面大小。当创建对象地址空间805时,只可能存在地址空间和对象元数据。当以每个块为基础分配存储体时,可以有存储在对象的对应的块中的数据。可以以稀疏或非稀疏方式分配块存储体,并且预先分配和/或按需分配块存储体。例如,在一些实施例中,软件可以使用对象作为哈希函数,并且只为有效的哈希分配物理存储体。
参考图8的示例,在在一些实施例中可以是常规服务器的节点820、825内,可以在与虚拟地址810对应的动态基础上分配对应于物理地址815的物理页面。由于对象存储器结构700实际上通过对象存储器结构DIMM提供节点820、825内的物理存储器,当分配虚拟地址段811、812、813、814时,也可以创建对应于特定段811、812、813、814的对象地址空间805对象。这使得节点820、825上的相同或不同的虚拟地址810寻址或存取相同的对象。对象内的块/页面在节点820、825内所驻留的实际物理地址815可以在节点820、825内或节点820、825上对于应用软件透明地随时间变化。
对象存储器结构700的某些实施例可以提供关键优点:对象存储器结构700的实施例可以提供集成的寻址、具有透明不变指针的对象(不需要旋转(swizzle))、以及跨节点访问大地址空间的方法—某些实施例与x84-64、Linux和应用兼容。通常,***具有许多不同的地址(例如,对于具有单独的地址空间、扇区、柱面、物理磁盘、数据库***、文件***、等等的存储器地址),这需要在不同的地址层之间转换、缓冲及移动对象和块的显著的软件开销。使用集成寻址来寻址对象、及对象内的块并且使用对象命名空间,通过实现跨所有节点/***不变的单级寻址而消除了软件的各层。在足够大的地址空间的情况下,一个地址***与特定数据库应用程序和一起工作的所有这些***并不是不变的。
因此,节点可以包括存储器模块,该存储器模块可以存储并管理一个或多个存储器对象,其中至少部分地基于在每个对象基础上使用单级对象寻址方案分配的对象地址空间,以一个或多个存储器对象中的每一个来管理存储器和存储体的物理地址。节点可以配置为利用该对象寻址方案来可操作地耦合到一个或多个另外的节点,以作为对象存储器结构的一组节点来操作,其中该组节点进行操作以使得该组节点的所有存储器对象至少部分地基于该对象寻址方案是可存取的,该对象寻址方案为所述一个或多个存储器对象限定不变的对象地址,所述对象地址相对于一个或多个存储器对象在存储器模块内和跨越与对象存储器结构相接口的所有模块间的物理存储器存储位置和存储***置变化是不变的。相应地,不管对象是否在单个服务器中,对象地址在模块内以及跨越对象存储器结构相接口的所有模块是不变的。即使对象可以存储在任何或所有模块上,无论当前或将要把对象存储在哪个物理存储器位置,对象地址仍然是不变的。以下提供某些实施例的细节,其可以通过对象地址空间和对象地址空间指针提供这样的优点。
对象存储器结构700的某些实施例可以支持多种各种指针格式。图9是示出了根据本公开的某些实施例的对象大小905和对象地址空间指针910之间的示例关系900的框图。下面的表2标识了根据本公开的某些实施例的对象地址空间指针910的方面的非限制性示例。如表2所示,一些示例实施例可以支持三种指针格式。对象地址空间格式可以是对象存储器结构本地128位格式,并且可以为任何对象和对象内的偏移提供具有完全可寻址性的单个指针。对象存储器结构700可以支持另外的格式,例如,64位格式的两种另外的格式,以允许与x86-64虚拟存储器和虚拟地址的直接兼容性。一旦通过对象存储器结构API(在一些实施例中,可以在Linux libc函数库中对应用程序透明地处理)建立对象存储器结构对象和虚拟地址段之间的关系,标准x86linux程序可以高效且透明地利用x86-64寻址机制来直接引用对象(x86段)内的数据。
下面的表3标识了根据本公开的某些实施例的对象地址空间指针相对于对象大小的方面的非限制性示例。对象地址空间的实施例可以支持多种段大小,例如,如下面的表3所示的从221到264的六个段大小。对象大小对应于x86-64虚拟存储器段和大页面大小。对象可以从模0对象大小边界开始。对象地址空间指针910可以分解为ObjStart和ObjOffset字段,ObjStart和ObjOffset字段大小如下面的示例所示取决于对象大小。ObjStart字段对应于对象的对象地址空间开始,也对应于ObjectID。ObjOffset是从零到(ObjectSize-1)的范围中的无符号值,指定对象内的偏移。对象元数据可以指定对象大小和对象地址空间指针910的对象存储器结构解释。任意大小和稀疏度的对象都可以仅通过为对象内的感兴趣块分配存储体来指定。
由于大部分应用的性质及对象存储器结构700的对象性质,大多数寻址可以是相对于对象的。在一些实施例中,所有对象存储器结构地址指针格式可以由处理器本地存储和加载。在一些实施例中,对象相对(Object Relative)和对象虚拟地址可以直接利用x86-64寻址模式进行工作。对象虚拟地址指针可以是或包括在x86-64段和对应的对象存储器结构对象内工作的进程虚拟地址。可以通过将对象虚拟地址用作对象偏移来计算对象存储器结构对象地址空间。对象相对指针可以是或包括x86-64虚拟地址段中的偏移,因此基准加索引寻址模式完美地运行。可以通过将对象相对用作对象偏移来计算对象存储器结构对象地址空间。下面的表3标识了根据本公开的某些实施例的、从对象虚拟地址或对象相对指针生成128位对象地址空间作为对象大小的函数的细节的非限制性示例。
如本文所公开的,某些实施例可以包括对象存储器结构分布式对象存储器和索引。使用分布式索引,各个节点可以在每个对象的基础上对本地对象和对象的块进行索引。对象存储器结构分布式对象存储器和索引的某些实施例可以至少部分地基于细胞自动机和胖树的交叉点概念。具有实时动态索引的现有的分布式硬件和软件***使用两种方法:集中式索引或分布式单一概念索引。对象存储器结构的实施例可以使用在胖树分层网络之上覆盖独立的本地索引功能的新方法。
图10是示出根据本公开的某些实施例的示例对象存储器结构分布式对象存储器和索引结构1000的框图。结构1000的叶(leaf)处是任何数量的处理节点1005和1010对象存储器1035。这些对象存储器1035均可以具有描述当前本地存储在对象存储器1035中的对象和对象的部分的对象索引。一些对象存储器1035(其在一些实施例中可以是单个节点内的DDR4-DIMM接口兼容卡)与对象存储器结构节点对象索引1040逻辑连接。对象存储器结构节点对象索引1040均可以具有描述当前本地存储和/或当前存储在对象存储器1035中的对象和对象的部分的对象索引。在一些实施例中,对象存储器结构节点对象索引1040可以实例化为PCIe卡。通过一些实施例,对象存储器结构对象存储器DDR4-DIMM和对象存储器结构节点对象索引PCIe卡可以通过PCIe和存储器总线进行通信。
在一些实施例中,对象存储器结构节点对象索引1040的工作方式与对象存储器1035内的对象索引相似,除了对象存储器结构节点对象索引1040跟踪所连接的任何对象存储器1035内的所有对象和对象的部分,并将对象和对象的部分映射到特定对象存储器1035。树中的下一个级别是可由对象存储器结构路由器提供的节点对象路由器对象索引1020,所述对象存储器结构路由器对其所连接的所有对象存储器结构节点对象索引1040执行相同的对象索引功能。节点对象路由器对象索引1020均可以具有描述当前本地存储在较低级别(例如,1040、1035)中的对象和对象的部分的对象索引。因此,根据一些实施例,路由器模块可以具有目录和路由器功能,而存储器模块可以具有目录和路由器功能以及存储存储器对象的存储器功能。然而,其他实施例是可能的,并且在替代实施例中,路由器模块可以另外地具有存储存储器对象的存储器功能。
可由结构1000示出的模式可以持续到另一更高级别的节点间对象路由器对象索引1015,对象路由器对象索引1015可以由对象存储器结构路由器提供,该对象存储器结构路由器对其所连接的所有对象存储器结构节点对象索引执行相同的对象索引功能并且以此类推直到树的根。因此,在某些实施例中,每个对象索引和每个级别可以独立地执行相同的功能,但是将对象索引和级别聚合为树形网络可以提供具有很大可扩展性的实时动态分布式索引,其有效地跟踪和本地化存储器对象和块。另外的属性可以是:树、分布式索引和高速缓存的组合使得能够显著地降低带宽要求。这可以由对象存储器结构路由器划定为叶(在这种情况中向下)的分层指示的邻域来说明。随着限定的分层结构的级别增加,聚合对象存储器高速缓存能力也随之增加。因此,当应用工作集适配在给定级别的聚合容量内时,在朝向根的级别上的带宽要求可以变为零。
如本文所公开的,每个处理节点配置为利用一组算法来可操作地耦合到一个或多个另外的处理节点,以独立于该组处理节点的规模作为一组处理节点来进行操作。该组节点可以进行操作,以使得该组节点的所有存储器对象可由该组处理节点的任何节点存取。在处理节点处,对象存储器模块可以存储并管理存储器对象(其每一个在其中本地实例化且在存储器层被管理)、以及对象目录(其在每个对象的基础上对存储器对象及其块进行索引)。存储器模块可以至少部分地基于一个或多个对象目录来处理请求,该请求可以从应用层接收。在一些情况下,该请求可以从一个或多个另外的处理节点接收。响应于该请求,给定的存储器模块可以处理对应于给定请求的对象标识符,且可以确定存储器模块是否具有被请求的对象数据。如果存储器模块具有被请求的对象数据,则存储器模块可以至少部分地基于被请求的对象数据来生成对该请求的响应。如果存储器模块没有被请求的对象数据,则对象路由模块可以将第一请求路由到树中的另一节点。该请求的路由可以至少部分地基于对象路由模块响应于该请求而做出关于对象数据的位置的确定。如果对象路由模块至少部分地基于对象路由模块的目录功能来识别位置,则对象路由模块可以向该位置(即,具有被请求的对象数据的较低级别的节点)向下路由该请求。然而,如果对象路由模块确定位置是未知的,则对象路由模块可以将该请求路由到根节点(即,到一个或多个更高级别的对象路由器—节点间对象路由器),以进一步在每个级别进行确定,直到被请求的对象被定位、存取并返回到原始的存储器模块。
另外,如本文所公开的,可以为对象元数据中的对象和/或对象内的块限定触发器。基于对象的触发器可以预测将需要什么操作,并且可以通过提前执行操作来提供加速。当节点接收到指定对象(例如,具有128位对象地址)的请求时,节点使用对象目录来确定节点是否具有该对象的任何部分。如果是这样,则对象目录指向可以用于本地定位感兴趣的块的每对象树(一个单独的树,其大小基于对象的大小)。可以存在另外的触发元数据,当特定的感兴趣块被传送到/传送通过存储器模块时,该触发元数据为特定的感兴趣块指示以预定义的方式来解释特定的地址。触发器可以对于对象内的一个或多个数据块在每个块的基础上指定一个或多个预定义的硬件和/或软件动作(例如,获取特定地址、运行更复杂的触发程序、执行预获取、计算这其它三个块、并向软件发送信号等等)。触发器可以对应于硬件方式,来随着对象流过对象存储器结构的任何存储器模块时在需要移动数据和/或其他动作之前动态地移动数据和/或执行其他动作。相应地,当具有一个或多个触发器的特定存储器对象位于相应的存储器模块并且作为处理一个或多个其他请求的相应的存储器模块的一部分被存取时,可以实现这样的动作。
图11和图12是示出了根据本公开的某些实施例的、对象索引的分布式性质如何与对象存储器结构协议分层进行操作和互操作的、逻辑层面上的示例的框图。对象存储器结构协议分层的某些实施例可能与常规分层通信协议类似,但具有重要差异。通信协议可以基本上是无状态的,但是对象存储器结构协议的实施例可以保持对象状态并直接实现分布式和并行执行,而不需要任何集中协调。
图11示出了根据本公开的某些实施例的完全在对象存储器1135内执行的对象存储器命中情况1100。对象存储器1135可以接收处理器请求1105或后台触发器活动1106。对象存储器1135可以基于处理器物理地址将本地DRAM存储器作为高速缓存1130进行管理。最常见的情况可能是被请求的物理地址存在,并且它立即被返回到处理器,如1110所示。对象存储器1135可以使用触发器将数据从较慢的闪存存储器透明地移动到快速DRAM存储器中,如1115所示。
对于未命中的情况1115或后台触发器活动1106,一些实施例可以包括以下中的一个或组合。在一些实施例中,可以从物理地址生成对象存储器结构对象地址,如块1140所示。对象索引可以从对象地址空间生成本地闪存存储器中的位置,如块1145所示。对象索引查找可以通过两种方法加速:(1)用于索引查找的基于硬件的辅助;以及(2)对象索引查找的结果在本地高速缓存。对象存储器结构高速缓存一致性可以用于确定本地状态是否足以满足预期的操作,如块1150所示。基于索引,可以执行查找以确定对象和/或对象内的块是否是本地的,如块1155所示。在命中的情况1160下,可以传送对应于请求1105或触发器活动1106的数据,如1165所示。并且,在一些实施例中,当缓存状态足够时,可以做出将块高速缓存到DRAM中的决定。
图12示出了根据本公开的某些实施例的对象存储器未命中的情况1200以及对象存储器和对象索引的分布式性质。对象存储器1235可以经历前面描述的步骤,但是路由/决定阶段125可以确定对象和/或块不是本地的。结果,算法可以涉及请求朝向根向上遍历1270树,直到找到对象/块为止。可以遍历任何数量的级别和对应的节点元素,直到找到对象/块为止。在一些实施例中,在沿着路径的每个步骤中,可以遵循相同或相似的过程步骤来独立地确定路径上的下一步。不需要中央协调。另外,如果本文所公开的,对象存储器结构API和触发器通常在叶中执行,但可以在任何索引以分布式方式执行。
作为简化示例,在所示的情况下,请求从对应于对象存储器1235的对象存储器结构节点对象索引1240向上遍历1270到对象路由器1220。对象路由器1220及其对象路由器对象索引可以将请求对象/块识别为朝向对象存储器结构节点对象索引1241从分支向下。因此,在对象路由器1220的索引处,该请求可以然后朝向可以供给该对象/块的(多个)叶进行路由1275。在示出的示例中,对象存储器1236可以供给该对象/块。在对象存储器1236处,可以执行存储器存取/高速缓存1241(其可以包括对于执行的命中情况的之前描述的过程步骤),且该对象/块可以返回1280到原始请求叶1235以进行最终返回1290。再次地,在一些实施例中,在沿着路径的每个步骤,可以遵循相同或相似的过程步骤来独立地确定路径上的下一步。例如,原始请求叶1235可以执行对于命中情况的之前描述的过程步骤1285,然后返回1290请求的数据。
如本文所公开的,单个对象存储器结构索引结构的操作、对象存储器结构索引结构可以基于相同的树实施方式的若干层。使用树结构的某些实施例可以在对象存储器结构内具有若干用途,如下表4所描述。然而,各种其他实施例是可能的。
图13是示出了根据本公开的某些实施例的鉴于对象存储器结构分布式对象存储器和索引结构的叶级对象存储器结构1300的示例的框图。在一些实施例中,叶级对象存储器结构1300可以包括一组嵌套的B树。根树可以是对象索引树(OIT)1305,其可以索引本地存在的对象。对象索引树1305的索引可以是对象存储器结构对象地址,因为对象从对象大小模0开始。对于每个对象(该对象至少有本地存储在对象存储器内的单个块),可以存在一个对象索引树1305。
对象索引树1305可以向每对象索引树(per object index tree,POIT)1310中的一个或多个提供一个或多个指针(例如,本地指针)。例如,每个本地对象可以具有每对象索引树1310。每对象索引树1310可以索引对象元数据和属于本地存在的对象的块。每对象索引树1310叶指向DRAM 1315和闪存1320中的对应的元数据和块(例如,基于对象内的偏移)。特定块的叶可以指向DRAM 1315和闪存1320两者,例如在叶1325的情况下。对象元数据和数据的组织在本文中进一步公开。
所用的树结构可以是友好地写入时复制(copy-on-write,COW)的修改后的B树。COW是一种优化策略,其在大多数数据未被修改情况下,可以使多个任务高效地共享信息而无需复制所有存储体。COW将修改后的块存储在新的位置,其适用于闪存存储器和高速缓存。在某些实施例中,所用的树结构可以类似于开源Linux文件***btrfs的树结构,主要区别在于对于单个对象/存储器空间的利用、硬件加速、以及之前所述的独立本地索引的聚合能力。通过利用B树的多个层,可以有更高程度的共享和更少的波动变化。例如文件***和数据库存储管理器的应用可以利用这种底层高效机制进行更高级别的操作。
图14是示出根据本公开的某些实施例的对象存储器结构路由器对象索引结构1400的示例的框图。通过一些实施例,对象存储器结构路由器对象索引和节点对象索引可以对每个对象使用对象索引树1405和每对象索引树1410的几乎相同的结构。对象索引树1405可以索引本地存在的对象。对象索引树1405中所述的每个对象可以具有每对象索引树1410。每对象索引树1410可以索引本地存在的块和段。
对象存储器结构路由器对象索引和节点对象索引可以对存在于树结构1400内的子项1415中的对象和对象内的块进行索引,子项1415即(多个)子路由器或叶对象存储器。每对象索引树1410中的叶内的条目具有表示对象内的多个块的能力。由于对象的块可能倾向于自然地聚集在一起,并且由于后台管理,每个对象趋向于在更靠近树根的对象索引中被更加紧凑地表示。对象索引树1405和每对象索引树1410可以允许在对象和块级上实现重复复制,这是由于多个叶可以指向相同的块,例如如同叶1425和1430中的情况。索引写入时复制(COW)支持使例如能够仅为对象更新经修改的块。
图15A和15B是根据本公开的某些实施例的索引树结构的非限制性示例的框图,其包括节点索引树结构1500和叶索引树1550。索引树字段的各个方面的进一步非限制性示例在下表5中标识。其他实施例是可能的。各个索引树可以包括节点块和叶块。每个节点块或叶块可以基于类型和大小包括可变数量的条目。类型指定节点块、叶和/或叶块、节点的类型。
大小独立地指定LPointer和Index Val(或对象偏移)的大小。在平衡的树内,单个块可以指向所有节点块或所有叶块。为了传递最高性能,树可能会变得不平衡,例如在通过树的所有路径的级别的数量是等同的情况下。节点块和叶块可以提供字段来支持不平衡的树。后台活动可能会重新平衡作为其他后台操作一部分的树。例如,OIT中的内部节点(非叶)可以包括LPointer和NValue字段。NValue可以包括对象大小和Object ID。Object ID需要107(128-21)位来指定最小的可能对象。每个LPointer可以指向内部节点或叶节点的下一个级别。LPointer可能需要足够的位来表示其本地存储体中的所有块(大约32位表示16TB)。对于POIT中的节点,NValue可以由基于对象大小的对象偏移组成。对象大小可以在NSize字段内进行编码。大小字段可以使得节点能够基于使用情况来保有最大数量的LPointer和NValue字段。索引树根节点可以存储在多个闪存装置上的多个位置处,以实现OIT的可靠的冷启动。树根块更新可以在镜像之间交替,以提供磨损均衡。
默认情况下,每个POIT叶条目可以指向单个块(例如,4k字节)的位置。POIT叶OM条目和POIT叶路由器(POIT Leaf Router)条目可以包含一个允许支持超出单个块的字段,从而通过能够匹配持久存储体的页面大小,实现更加压缩的索引树、导致更高的索引树性能和更高的持久存储性能。
节点和叶可以通过在每个4k块的开始处的类型字段来区分。NNize字段可以编码节点内的NValue字段的大小,并且LSize字段可以编码叶内的LValue字段的大小。LPointer字段的大小可以由固定用于单个装置(例如,RDIMM、节点路由器、或路由器)的本地存储体的物理寻址确定。LPointer可以仅在单个装置中有效,而不是跨装置有效。LPointer可以指定相应的块是否存储在持久存储器(例如,闪存)或更高速存储器(例如DRAM)中。存储在DRAM中的块也可以具有在持久存储器内分配的存储体,从而存在指示块、节点或叶的两个存储位置的两个条目。在单个块类型内,所有NValue和/或LValue字段可以是单个大小。
OIT节点可以包括几个节点级字段(Type(类型)、NSize和LParent)以及包括OIT节点(OIT Node)条目或OIT叶(OIT Leaf)条目的条目。由于索引树有时可以不平衡,节点可以包括节点条目和叶条目两者。POIT节点可以包括一个或多个节点级字段(例如,Type、NSize和/或LParent)以及包括OIT叶条目的条目。OIT叶类型可以通过otype字段来区分。OIT叶(对象索引表叶)可以指向指定对象块和对象元数据的、POIT(每对象索引表)的头部。OIT叶R可以指向POIT的远程头部。这可以用于引用跨越网络驻留在远程装置上的对象。该叶可以使远程装置能够管理对象。
POIT叶(POIT Leaf)类型可以由ptype字段区分。POIT叶OM可以指向对象存储器的块或元数据。Object offset字段可以比位数多一位,以指定特定对象大小的偏移,从而指定元数据。例如,对于221的对象大小,可能需要10个位(9加1位)。实施方式可以选择以二的补码(two's complement)形式(符号形式,第一块元数据为-1)来表示偏移,或者以一的补码(one's complement)且另外的位表示元数据来表示偏移(元数据的第一块由1表示,且设定有元数据位)。
POIT叶远程(POIT Leaf Remote)可以指向远离本地DIMM的、对象存储器的块或元数据。这可以用于通过流化封包接口引用跨越网络驻留在远程装置上的块。例如,该装置可以是移动装置。该叶可以使得对象存储器结构硬件能够在块的基础上对于远程装置来管理一致性。
POIT叶路由器(POIT Leaf Router)可以在节点对象路由器和节点间对象路由器内使用,以用于为最多16个下游节点中的每一个指定对应的对象存储器结构块对象地址的状态。如果在节点对象路由器内,则在一些实施例中最多可以指定16个DIMM(或在其他实施例中更多)。如果在节点间对象路由器内,则在一些实施例中可以指定多达16个(在其他实施例中更多)下游路由器或节点对象路由器(例如,服务器节点)。块对象地址可以基于有效的状态组合而存在于一个或多个下游装置中。
索引查找、索引COW更新和索引高速缓存可以在对象存储器、节点对象索引和对象存储器结构路由器中的对象存储器结构硬件中得到直接支持。除了对象存储器结构索引的节点格式之外,还可以支持应用定义的索引。这些可以通过对象存储器结构API进行初始化。应用定义的索引的优点可以是:可以支持基于对象存储器结构硬件的索引查找、COW更新、索引高速缓存和并行性。
各种实施例可以提供用于后台操作和垃圾回收。由于对象存储器结构内的每个DIMM和路由器可以在本地保持其自己的目录和存储体,可以在本地且独立地完成后台操作和垃圾收集。每个DIMM或路由器可以具有用于存储索引树和数据块的存储器分层结构,其可以包括片上高速缓存、快速存储器(例如,DDR4或HMC DRAM)、以及其可以管理的较慢的非易失性存储器(例如,闪存)、以及索引树。
分层结构内的每个级别可以执行以下操作:(1)树平衡,以优化查找时间;(2)引用计数和老化,以确定各块何时在不同存储体之间移动;(3)分层结构的每个本地级别的自由列表更新、以及保持本地分层结构的主要级别的填充水平参数;(4)将周期性填充水平递送到分层结构的下一级,以使得能够在本地服务器上的DIMM之间和对象存储器结构分层结构的级别之间实现存储体的负载平衡;(5)如果是路由器,则在子节点之间进行负载平衡。
对象存储器结构可以使用块引用计数来指示存取的相对频率。较高的值可以指示随时间更频繁地使用,较低的值指示较不频率的使用。当块引用计数与持久存储器中的块相关联时,具有最低值的块可以是移动到具有更多可用空间的另一个DIMM或节点的候选。每当块被加速到易失性存储器中时,引用计数可以增加。如果对象不在易失性存储器中,低频率后台扫描可以递减该值,如果对象在易失性存储器中,则可以递增该值。可以预期,扫描算法可以随时间演变为基于引用值来递增或递减,从而提供适当的滞后。频繁加速到或存在于易失性存储器中的块可以具有较高的引用计数值。
当块引用计数与易失性存储器中的块相关联时,具有最低值的块可以是移回另一个DIMM或节点内的持久存储器或存储器的候选。当块移动到易失性存储器中时,可以基于启动移动的指令或用例来初始化引用计数。例如,需求未命中可以将值设置为中点,并且推测性提取(speculative fetch)可以将其设置为四分之一点。单次使用可能会将其设置为低于四分之一点。适度的频率后台扫描可能会使得引用值递减。因此,需求提取可以在初始时被加权高于推测性提取。如果没有使用推测性提取,则可能会迅速降低到可能首先被替换的较低引用值。单次使用可以被加权较低,以作为比其他块更早的替代候选。因此,单次使用和推测性块可能不会替代其他频繁访问的块。
图16是示出根据本公开的某些实施例的示例物理存储器组织1600的方面的框图。对象存储器结构可以提供多种访问对象和块的方法。例如,直接方法可以基于对象存储器结构或装置中的执行单元,所述执行单元可以直接生成完整的128位存储器结构地址,其可以具有完整的直接访问。
相关联的方法可以考虑具有有限虚拟地址和物理地址空间的常规服务器。对象存储器结构可以提供API,来动态地将对象(例如,段)和块(例如,页面)与较大的对象存储器结构128位存储器结构地址相关联。由AssocObj和AssocBlk操作提供的关联可以被与标准处理器存储器管理相接的对象存储器结构驱动器(例如,Linux驱动器)和对象存储器结构***库(Syslib)使用,以使对象存储器结构能够对操作***和应用表现为透明的。对象存储器结构可以提供:(a)将处理器段及其虚拟地址的范围与对象存储器结构对象相关联的API,从而确保无缝指针和虚拟寻址兼容性;(b)将虚拟地址空间的页面和对应的对象存储器结构块与对象存储器结构DIMM内的本地物理存储器的页面/块相关联的API(这可以确保处理器存储器管理和物理寻址兼容性);和/或(c)划分为标准常规服务器DIMM插槽的本地物理存储器,每个DIMM插槽具有512GB(239字节)。在每个槽的基础上,如下图所示,对象存储器结构可以保留由已经与对应的物理地址相关联的每个块的对象存储器结构地址的物理地址索引的另外的目录,如下图所示。
图16是示出根据本公开的某些实施例的示例物理存储器组织1600的框图。用于物理存储器1630的物理存储器目录1605可以包括:对象存储器结构对象块地址1610;对象大小1615;引用计数1620;修改的字段1625,其可以指示块是否相对于持久存储器被修改;和/或写使能(write enable)1630,其可以指示本地块高速缓存状态是否足以进行写入。例如,如果高速缓存状态是复制,则写入可能被阻止,并且对象存储器结构将可能具有足够的状态以进行写入。在基于引导(boot)的对象存储器结构DIMM SPD(串行存在检测)配置上,物理地址范围可以由***BIOS分配给每一个。
图17A是根据本公开的某些实施例的示例对象寻址1700的框图。图17B是示出了根据本公开的某些实施例的对象存储器结构指针和块寻址1750的示例方面的框图。对象存储器结构对象1705可以包括对象数据1710和元数据1715,两者在一些实施例中被划分为4k块作为存储分配的一个单元,由对象存储器结构地址空间1720引用。对象起始地址可以是ObjectID 1755。数据1710可以作为自ObjectID 1755的正偏移来存取。最大的偏移可以基于ObjectSize 1760。
对象元数据1715可以作为自ObjectStart 1725(对象ID)的负偏移来访问。元数据1715也可以由对象地址空间1720的顶部1/16中的对象存储器结构地址引用。特定对象元数据的起始可以是2128-2124+ObjStart/16。该布置可以使得POIT能够紧凑地表示元数据1715,且使得元数据1715具有对象地址空间,从而可以像数据一样一致地管理它。尽管可以为对象数据1710和元数据1715分配完整的对象地址空间,但是可以以块为基础来稀疏地分配存储体。在最低限度上,在一些实施例中,对象1705具有为元数据1715的第一块分配的单个存储块。对象存取权限可以通过对象存储器结构文件***ACL等来确定。由于对象存储器结构以4k块为单位管理对象,所以对象存储器结构对象存储器中的寻址是被称为块对象地址1765(BOA)的块地址,其对应于对象地址空间[127:12]。BOA[11:0]可以被对象存储器用于ObjectSize(BOA[7:0])和对象元数据指示(BOA[2:0])。
图18是示出了根据本公开的某些实施例的对象元数据1805的示例方面1800的框图。下面的表6指示每个某些实施例的元数据1805的第一块1810的元数据。在一些实施例中,元数据1805的第一块1810可以保存有如图所示的对象的元数据。
***定义的元数据可以包括任何与Linux相关的数据,以便跨服务器无缝地协调某些对象的使用。应用定义的元数据可以包括来自文件***或数据库存储管理器的、与应用相关的数据,以实现由该应用管理的对象之间的搜索和/或关系。
对于具有少量触发器的对象,基础触发器可以存储在第一块内;否则,触发器B树根可以引用对应的对象的元数据扩展区域。触发器B树叶可以指定基础触发器。基础触发器可以是单个触发器动作。当需要多于单个动作时,可以调用触发程序。触发程序被调用时,它们可以驻留在扩展区域中。远程对象表可以指定可以通过扩展指令集从该对象可存取的对象。
某些实施例可以提供扩展指令执行模型。扩展执行模型的一个目标可以是提供轻量级的动态机制来提供存储器和执行并行性。该动态机制实现了数据流执行方法,使得能够将高度的并行性与对象的部分的存取延迟的变化的容限相结合。可以基于实际的相关性(dependency)来完成工作,而不是基于耽搁该计算的单个存取延迟。
各种实施方案可以包括以下的一种或组合。负载和存储器引用可以是具有单独的请求和响应的拆分事务,使得线程和存储器路径在整个事务期间不被利用。每个线程和执行单元能够在接收到响应之前向(本地和远程的)对象存储器结构发出多个负载。对象存储器结构可以是处理来自多个源的多个请求和响应的流水线,从而可以充分利用存储器资源。执行单元能够以与发出请求不同的顺序来接受响应。执行单元可以切换到不同的线程以被完全利用。对象存储器结构可以实现策略以动态地确定何时移动对象或对象的部分,而不是移动线程或创建线程。
图19是示出了根据本公开的某些实施例的示例性微线程模型1900的各方面的框图。线程可以是执行的基本单元。线程可以至少部分地通过指令指针(IP)和帧指针(FP)来定义。指令指针可以指定正在执行的当前指令。帧指针可以指定线程的当前执行状态的位置。
线程可以包括多个微线程。在所示的示例中,线程1905包括微线程1906和1907。然而,线程可以包括更多数量的微线程。特定线程的微线程可以共享相同的帧指针,但具有不同的指令指针。在所示的示例中,帧指针1905-1和1905-2指定相同的位置,但指令指针1910和1911指定不同的指令。
微线程的一个目的可以是通过启用多个异步待决(pending)存储器操作来启用线程内的数据流式的操作。可以由分叉(fork)指令的版本创建微线程,并且可以由加入指令重新加入微线程。扩展指令集可以通过对自帧指针起的偏移执行操作,来将帧指针当作堆栈或寄存器集合的顶部。负载和存储指令可以在帧和对象之间移动数据。
图20是示出根据本公开的某些实施例的代码、帧和对象的示例关系2000的各方面的框图。具体地,图20说明了如何通过帧2010来引用对象数据2005。缺省情况可以是在本地范围内引用对象2005的负载和存储指令。通过存取控制和安全策略,可以以安全的方式给出对超出本地范围的对象2005的存取。一旦给出了这种访问权限,就可以以相同的效率存取本地和非本地范围内的对象2005。对象存储器结构通过鼓励高效的对象封装,来鼓励强大的安全性。通过共享帧,微线程提供了非常轻量级的机制,来实现动态和数据流存储器和执行并行性,例如,大约10-20个微线程或更多的量级。多线程实现了几乎无限的基于存储器的并行性。
图21是示出根据本公开的某些实施例的微线程并发性2100的示例的方面的框图。具体地,图21示出了对几个随机位置的值进行求和的简单示例的并行数据流并发性。根据本公开的某些实施例,串行版本2105和并行版本2110是并列的。并行版本2110几乎可以快n倍,因为负载是并行重叠的。
再次参考图20,该方法可以以动态方式扩展到交互式和递归方法。现在可以在没有使用预取、以最小的本地性的情况下,实现提前预取的优点。当对象被创建时,单个默认线程2015(单个微线程2020被创建)可以正在等待以发到默认线程2015的开始消息作为开始。默认线程2015然后可以使用线程创建微线程,或使用分叉指令的版本来创建新线程。
在一些实施示例中,指令指针和帧指针两者可以被限制到扩展元数据区域1815,扩展元数据区域1815从块2开始并延伸到段大小(SegSize)/16。随着对象的数量、对象大小和对象容量的增加,线程和微线程并行性可以增加。由于线程和微线程可以与对象绑定,随着对象移动和分配,线程和微线程也可以移动和分配。对象存储器结构的实施例可以具有将对象或对象的部分移动到线程、或将线程分配到(多个)对象的动态选择。这可以通过由扩展执行模型实现的封装对象方法来促成。
如上面进一步指出的,本发明的实施例还可以包括对象存储器结构指令集,其可以基于支持核心操作及优化的触发来提供唯一的指令模型,并且允许在对象存储器结构内以高度并行的方式更高效地执行应用的存储器密集部分。
由于几个特性,对象存储器结构指令集可以是数据使能的(date-enabling)。首先,通过由常规处理器、对象存储器结构活动、另一序列或显式对象存储器结构API调用进行的数据存取,可以灵活地触发指令序列。第二,序列可以是任意长度,但是短序列可以更高效。第三,对象存储器结构指令集可以具有高度多线程的存储器规模。第四,对象存储器结构指令集可以为常规处理器提供高效的共线程(co-threading)。
本发明的实施例包括两类指令。第一类指令是触发器指令。触发器指令包括基于对特定对象地址(OA)的引用的单个指令和动作。触发器指令可以调用扩展指令。第二类指令是扩展指令。扩展指令定义了从API调用到完整的高级软件函数的任意并行函数。在对指令集模型进行讨论之后,将依次讨论这两类指令。如前所述,在没有触发器之外的情景下,触发器指令实现高效的单用途存储器相关函数。
使用上面定义的元数据和触发器,可以实现基于存储器数据流的执行模型。该模型可以表示动态数据流执行方法,其中基于存储器对象的实际相关性来执行进程。这提供了高度的存储器和执行并行性,这进而又提供了存储器对象之间的存取延迟的变化的容限。在这个模型中,指令序列是基于数据存取来执行和管理的。这些序列可以是任意长度,但短序列更高效并且提供更大的并行性。
扩展指令集实现高效、高度线程化的、存储器中的执行。指令集以几种方式获得效率。首先,指令集可以包括直接对象地址处理和生成,而不需要复杂地址转换的开销和软件层来管理不同的地址空间。第二,指令集可以包括直接对象认证,而不需要可以基于安全第三方认证软件设置的运行时开销。第三,指令集可以包括对象相关的存储器计算。例如,随着对象移动,计算可以与它们一起移动。第四,指令集可以包括基于规模和活动来说是动态的和透明的并行性。第五,指令集可以包括可以对象存储器结构操作,其可以使用集成存储器指令集来实现,使得存储器行为可以针对应用需求而定制。第六,指令集可以处理存储器中的存储器密集型计算目录的功能。这包括在接触存储器时的添加操作。可能的操作可以包括但不限于搜索、图像/信号处理、加密和压缩。与常规处理器的低效交互显著地减少。
扩展指令功能可以针对存储器密集型计算,其主要用于存储器引用以及基于这些引用的简单操作,所述存储器引用用于大于高速缓存或主存储器的感兴趣的大小问题。一些示例可以包括但不限于:
-从常规处理器定义API宏。
-定义对象存储器结构的分层部件之间的交互流。每个部件可以使用核心指令序列集来实现对象存储器结构功能。
-用于宏来加速诸如BFS(广度优先搜索)等关键应用内核的短序列。BFS是搜索图形的核心策略,且被图形数据库和图形应用大量使用。例如,BFS用于各种各样的问题空间,以找到最短或最佳路径。其为表示了分析大规模图形的挑战(即,无本地性)的一个代表性的算法,这是因为图形大于高速缓存和主存储器并且几乎所有的工作都是通过存储器引用。在BFS的情况下,本文所述的扩展指令能力与线程耦合,通过线程的递归实例以基于图形大小和可用节点搜索邻接列表,来处理几乎整个BFS。高度并行的直接存储器中的处理和高级存储器操作可以减少软件路径长度。当结合上述对象存储器结构能力以使所有数据在存储器中并使其在使用之前进行本地化时,每个节点的性能和效率显著地增加。
-完整的层功能,例如:
○用于构建在平面对象存储器的顶部上的分层文件***的存储引擎。存储引擎例如是从对象内存储、处理和取回适当的(多个)对象和信息的引擎。对于MySQL,对象可能是表。对于文件***,对象可以是文件或目录。对于图形数据库,对象可以是图形,且信息可以由顶点和边缘组成。支持的操作符可以例如基于对象的类型(文件、图形、SQL等)。
○用于例如MySQL的结构化数据库的存储引擎
○用于例如图形数据库的非结构化数据的存储引擎
○用于NoSQL键值存储的存储引擎
-完整应用:文件***、例如MySQL的结构化数据库、例如图形数据库的非结构化数据、或NoSQL键值存储
-用户可编程。
根据一个实施例,基准触发器可以基于对特定OA的引用来调用单个触发器动作。每个OA可以有一个基准触发器。当需要多于一个动作时,可以使用触发器函数(TrigFunction)基准触发器来调用触发器程序。基准触发器可以由以下表7所包含的指令组成。
如上所述,触发器指令集可以包括基于指定的触发器条件和动作在指定的对象偏移处获取在指针中指定的块。触发器指令二级制格式可以表示为:
Trigger PtrType TrigType TrigAction RefPolicy ObjOffset
触发器指令集的操作数的示例集合包含在下面的表8-12中。
如上所述,TrigFunction(或TriggerFunct)指令集可以包括在指定的数据对象偏移和指定的触发器条件时,从指定的元数据偏移处开始执行触发器程序。TriggerFunct可以实现比待执行的单个触发器指令更复杂的序列。TrigFunct指令二进制格式可以表示为:
TrigFunct PtrType TrigType MetaDataOffset ObjOffset
触发器指令集的操作数的示例集合包含在下面的表13-16中。
根据一个实施例,扩展指令可以以3种格式的64位字块解释,包括短(每个字2个指令)、长(每个字单个指令)、以及保留。
一般来说,触发器与扩展指令集的组合可用于定义任意、并行的功能,例如:直接对象地址处理和生成,而不需要复杂地址转换的开销和软件层来管理不同的地址空间;直接对象认证,而不需要可以基于安全第三方认证软件设置的运行时开销;对象相关的存储器计算,其中当对象在节点之间移动时,计算可以与它们一起移动;以及基于规模和活动来说是动态的且透明的并行性。这些指令分为三个概念类:存储器引用,包括加载、存储和特殊存储器结构指令;控制流,包括分叉(fork)、加入(join)和分支(branch);以及执行,包括算术和比较指令。
存储器引用指令的不同类型的列表如下表18所示。
可以在对象存储器结构内使用pull(拉取)指令,作为将指定的块复制或移动到(例如本地)存储体的请求。可以按照由priority指定的优先级以pull_state指定的状态,来请求在由src_offset指定的对象偏移处的由src_oid指定的对象中的4k字节块操作数。数据随后可以通过push指令被移动。Pull指令二进制格式可以表示为:
Pull指令集的示例操作数集合包含在下表19-23中。
表21.src_off-源对象偏移 |
描述 |
指定自线程帧指针起的无符号偏移,以读取对应于对象偏移的源操作数 |
可以使用Push(推送)指令,以将指定的块从本地存储体复制或移动到远程位置。可以按照由priority指定的优先级以pull_state指定的状态,来请求在由src_offset指定的对象偏移处的由src_oid指定的对象中4k字节块操作数。数据可以在先前由pull指令来请求。Push指令二进制格式可以表示为:
Push指令集的示例操作数集合包含在下表24-28中。
表26.src_off-源对象偏移 |
描述 |
指定自线程帧指针起的无符号偏移,以读取对应于对象偏移的源操作数 |
PushAck(推送确认)或Ack(确认)指令可用于确认与Push相关联的块已经在一个或多个位置被接受。在由src_offset指定的对象偏移处的由src_oid指定的对象中的4k字节块操作数可以被确认。Ack指令二进制格式可以表示如下:
Push指令集的示例操作数集合包含在下表29-31中。
表31.src_off-源对象偏移 |
描述 |
指定自线程帧指针起的无符号偏移,以读取对应于对象偏移的源操作数 |
Load(加载)指令集包括在由src_offset指定的对象偏移处由src_oid指定的对象中的osize操作数。src_offset可以被写入到从由dst_fp指定的帧指针起的字偏移。Load指令忽略空状态。
Load指令集的示例操作数集合包含在下表32-36中。
表35.Src_off-源对象偏移 |
描述 |
指定自线程帧指针起的无符号偏移,以读取对应于对象偏移的源操作数 |
表36.dst_fp-自帧指针起的目的地偏移 |
描述 |
指定自线程帧指针起的无符号偏移,以写入源操作数 |
Store(存储)指令集包括由src_fp指定的字,该字可以被截断为由osize指定的大小且可以被存储在dst_offst的位移处由dst_oid指定的对象中。例如,仅存储ssize字节。Store指令忽略空状态。Store指令二进制格式可以表示为:
Store指令集的示例操作数集合包含在下表37-41中。
表40.dst_off-源对象偏移 |
描述 |
指定自线程帧指针起的无符号偏移,以读取对应于对象偏移的源操作数 |
表41.src_fp-自帧指针起的目的地偏移 |
描述 |
指定自线程帧指针起的无符号偏移,以读取源操作数 |
ReadPA(读物理地址)指令通过本地存储器模块的物理地址读取64字节。由src_pa指定的对象中的操作数可以被写入到从由dst_fp指定的帧指针起的字偏移。ReadPA指令二进制格式可以表示为:
ReadPA指令集的示例操作数集合包含在下表42-44中。
表43.src_pa-源物理地址 |
描述 |
指定对于当前节点/服务器来说是本地的物理地址 |
表44.dst_fp-自帧指针起的目的地偏移 |
描述 |
指定自线程帧指针起的无符号偏移,以写入源操作数 |
WritePA(写物理地址)指令通过本地存储器模块的物理地址写入64字节。由src_fp指定的64字节存储在由dst_pa指定的物理地址中。ReadPA指令二进制格式可以表示为:
WritePA指令集的示例操作数集合包含在下表45-47中。
表46.dst_pa-目的地物理地址 |
描述 |
指定对于当前节点/服务器来说是本地的物理地址 |
表47.src_fp–源帧指针 |
描述 |
指定自线程帧指针起的无符号偏移,以读取源操作数 |
对象存储器结构对象内的每个字都可以包括指示空(empty)或满(full)状态的状态。空状态在概念上意味着对应的字的值已被清空。满状态在概念上意味着对应的字的值已被填充。某些指令可以使用这种状态,以不可分割地确保只有一个线程可以读取或写入该字。空指令可以类似于加载指令来操作,如下表48所示。
在由src_offset指定的对象偏移处由src_oid指定的对象中的osize操作数可以被写入到从由dst_fp指定的帧指针起的字偏移。清空(empty)指令二进制格式可以表示为:
Empty指令集示例操作数集合包含在下表49-52中。
表52.dst_fp-自帧指针起的目的地偏移 |
描述 |
指定自线程帧指针起的无符号偏移,以写入源操作数 |
对象存储器结构对象内的每个字都可以包括表示空或满状态的状态。空状态在概念上意味着对应的字的值已被清空。全状态在概念上意味着对应的字的值已被填充。某些指令可以使用这种状态,以不可分割地确保只有一个线程可以读取或写入该字。Fill(填充)指令二进制格式可以表示为:
Fill指令的操作类似于store,如下表53所示。
由src_fp指定的字可以被存储在dst_offst的偏移处由dst_oid指定的对象中。仅储存ssize字节。Store忽略空状态。Fill指令集的示例操作数集合包含在下表54-57中。
表56.dst_off-源对象偏移 |
描述 |
指定自线程帧指针起的无符号偏移,以读取对应于对象偏移的源操作数 |
表57.src_fp-自帧指针起的目的地偏移 |
描述 |
指定自线程帧指针起的无符号偏移,以读取源操作数 |
Pointer(指针)指令集可以向对象存储器结构指定ptr_type的指针可以位于由src_offset指定的对象偏移处的由scrod指定的对象中。该信息可以由对象存储器结构利用,用于预阶段的数据移动。Pointer指令二进制格式可以表示为:
Pointer指令集示例操作数集合包含在下表58-61中。
表61.src_off-源对象偏移 |
描述 |
指定自线程帧指针起的无符号偏移,以读取对应于对象偏移的源操作数 |
Prefetch Pointer Chain(预获取指针链)指令集可以基于由src_oid指定的对象中的策略指定的策略,在由src_offset_st到src_offset_end指定的范围中。在由src_offset指定的对象偏移处由src_oid指定的对象中的osize操作数可以被写入到从由dst_fp指定的帧指针起的字偏移。Load忽略空状态。PrePtrChn指令二进制格式可以表示为:
Prefetch Pointer Chain指令集示例操作数集合包含在下表62-66中。
Scan and Set Empty or Full(扫描及置空/满)指令集可以通过指定的策略在由src_offset指定的偏移处的由src_oid指定的对象中初始化。Scan可用于进行广度优先或深度优先搜索,并且清空或填充下一个可用位置。ScanEF指令二进制格式可以表示为:
Scan and Set Empty or Full指令集的示例操作数集合包含在下表67-71中。
表70.src_off-源对象偏移 |
描述 |
指定自线程帧指针起的无符号偏移,以读取对应于对象偏移的源操作数 |
Create(创建)指令集包括指定的ObjSize的对象存储器结构对象,其具有OA的对象ID以及DataInit和Type的初始化参数。没有数据块存储体可以分配,并且可以分配用于第一元数据块的存储体。Create指令的二进制格式可以表示为:
Create Type Redundancy ObjSize OID
Create指令集的示例操作数集合包含在下表72-75中。
表74.ObjSize-对象大小 |
描述 |
指定对象大小 |
表75.OID-对象Id |
描述 |
对象存储器结构对象ID,其也是对象的起始地址 |
CopyObj(复制对象)指令集包括将由SOID指定的源对象复制到由DOID指定的目的地对象。如果DOID是大于SOID的对象,则超出SOID大小的所有DOID块被复制为未分配。如果SOID是大于DOID的对象,则复制以DOID大小结束。CopyObj指令二进制格式可以表示为:
CopyObj Ctype SOID DOID
CopyObj指令集的示例操作数集合包含在表76-78中。
表77.SOID-源对象ID |
描述 |
对象存储器结构对象ID,其为复制的源。 |
表78.DOID-目的地对象ID |
描述 |
对象存储器结构对象ID,其为复制的目的地 |
CopyBlk(复制块)指令集包括将从SourceObjectAddress(SOA)开始的cnum个源块复制到从DestinationObjectAddress(DOA)开始的目的地。如果cnum块延伸超出与SOA相关联的对象大小,则未定义的块被复制为未分配的。CopyBlk指令二进制格式可以表示为:
CopyBlk ctype cnum SOA DOA
CopBlk指令集的示例操作数集合包含在下表79-82中。
表80.cnum-复制的块的数量 |
描述 |
指定复制的块的数量 |
表81.SOA-源对象存储器结构块对象地址 |
描述 |
对象存储器结构块对象地址,其为复制的源 |
表82.DOA-目的地对象存储器结构块对象地址 |
描述 |
对象存储器结构块对象地址,其为复制的目的地 |
Allocate(分配)指令集包括存储到由OID指定的对象。Allocate指令二进制格式可以表示为:
Allocate init ASize OID
Allocate指令集的示例操作数集合包含在下表83-85中。
表85.OID-对象ID
描述
对象存储器结构对象ID,为其分配了存储体
Deallocate(解除分配)指令集包括存储从OA开始的cnum个块。如果解除分配到达对象的末尾,则操作终止。Deallocate指令二进制格式可以表示为:
Deallocate cnum OA
Deallocate指令集的示例操作数集合包含在下表86和87中。
表86.cnum-复制的块的数量 |
描述 |
指定解除分配的块的数量 |
表87.OA-对象地址 |
描述 |
对象存储器结构块对象地址,其为解除分配的起始块编号 |
Destroy(销毁)指令集包括完全删除对应于由OID指定的对象的所有数据和元数据。Destroy指令二进制格式可以表示为:
Destroy OID
Destroy指令集的示例操作数集合包含在下表88中。
表88.OID-对象ID |
描述 |
待删除的对象的对象ID |
Persist(存留)指令集包括存留指定的OID的任何经修改的块。Persist指令二进制格式可以表示为:
Persist OID
Persist指令集的示例操作数集合包含在下表89中。
表89.OID-对象ID |
描述 |
待存留的对象的对象ID |
AssocObj(关联对象)指令集包括将对象OID与VaSegment和ProcessID相关联。将OID与VaSegment相关联使得ObjectRelative和ObjectVA地址能够被对象存储器结构正确地访问。AssocObj指令二进制格式可以表示为:
AssocObj OID ProcessID VaSegment
AssocObj指令集的示例操作数集合包含在下表90-92中。
表91.ProcessID-进程ID |
描述 |
与VaSegment相关联的进程ID |
表92.OID-对象ID |
描述 |
待关联的对象的对象ID |
DeAssocObj(解关联对象)指令集包括将对象OID与VaSegment和ProcessID解关联。如果ProcessID和VaSegment与以前和OID相关联的ProcessID和VaSegment不匹配,则可以返回错误。DeAssocObj指令二进制格式可以表示为:
DeAssocObj OID ProcessID VaSegment
DeAssocObj指令集的示例操作数集合包含在下表93-95中。
表93.OID-对象ID |
描述 |
待解关联的对象的对象ID |
表94.ProcessID-进程ID |
描述 |
与VaSegment相关联的进程ID |
AssocBlk(关联块)指令集包括将块OA与本地物理地址PA相关联。这允许对象存储器将对象存储器结构块与PA块相关联,以用于本地处理器访问。AssocBlk指令二进制格式可以表示为:
AssocBlk place OA PA LS[15:00]
AssocBlk指令集的示例操作数集合包含在下表96-99中。
表97.OA-对象存储器结构块对象地址 |
描述 |
待关联的对象的对象ID |
DeAssocBlk(解关联块)指令集包括将块OA与本地物理地址PA解关联。然后该OA将不再可以从本地PA访问。DeAssocBlk指令二进制格式可以表示为:
DeAssocBlk OA PA
DeAssocBlk指令集的示例操作数集合包含在下表100和101中。
表100.OA-对象存储器结构块对象地址 |
描述 |
待解关联的块的块对象地址 |
表101.PA-物理块地址 |
描述 |
待解关联的块的本地物理块地址。对应于封装报头内的操作数2 |
OpenObj(打开对象)指令集包括在咨询(advisory)的基础上以由TypeFetch和CacheMode指定的方式高速缓存由OID指定的对象。OpenObj指令二进制格式可以表示为:
OpenObj TypeFetch CacheMode OID
OpenObj指令集的示例操作数集合包含在下表102-104中。
表102.OID-对象ID |
描述 |
待关联的对象的对象ID |
OpenBlk(打开块)指令集包括以由TypeFetch和CacheMode指定的方式高速缓存由OID指定的(多个)块。当预取超出对象的末尾时,预取终止。OpenBlk指令二进制格式可以表示为:
OpenBlk TypeFetch CacheMode OID
OpenBlk指令集的示例操作数集合包含在下表105-107中。
表105.OID-对象ID |
描述 |
待关联的对象的对象ID |
Control Flow(控制流)(短指令格式)指令集的示例操作数集合包含在下表108中。
Fork(分叉)指令集提供了创建新的线程或微线程的指令机制。分叉指定用于新创建的线程的新指令指针(NIP)和新帧指针。在fork指令结束时,执行该指令的线程(或微线程)以及新线程(例如微线程)以fork_count(计数)递增1来运行。如果新的FP与旧的FP没有关系,其可以被视为新线程,或以其他方式被视为新的微线程。Fork指令二进制格式可以表示为:
Fork指令集的示例操作数集合包含在下表109-113中。
Join(加入)是创建新的线程或微线程的指令机制。join指令集使得微线程能够退出(retire)。Join指令递减fork_count(计数),且fork_count大于零,则没有进一步的动作。如果fork_count为零,则指示执行join的微线程是该fork_count的最后一个生成的微线程,并且以由FP指定的FP在下一个顺序指令中继续执行。Join指令二进制格式可以表示为:
Join指令集的示例操作数集合包含在下表114-117中。
branch(分支)指令集允许添加分支或其他常规指令。Branch指令二进制格式可以表示为:
Execute(执行)(短指令格式)指令集的示例操作数集合包含在下表118中。
对象存储器结构流和API
对象存储器结构流促成了一种机制,对象存储器结构利用该机制来实现带有分布式对象方法的分布式一致性(coherent)对象存储器。根据某些实施例,对象存储器结构流可以定义一种通用机制,其使得任何组合中的硬件和软件模块能够在单个方向上通信。环形流可以支持流水线式环形组织,其中两个模块的环可以正好是两个单向流。
流格式的API可以被至少部分地定义为两个单向流。因此,作为在一些实施例中提供无限存储器结构架构的一部分,可以利用流格式的API来执行两个或更多个模块之间的通信,所述流格式API至少部分地根据对象存储器结构流协议来定义通信,以使得该通信是基于不同的单向流的。
每个流可以在逻辑上由指令封包构成。每个指令封包可以包含扩展指令和关联数据。在一些实施例中,每个流可以使请求和响应的序列相交织(interleave)。流可以包括短封包和长封包。短封包在本文中可以简称为“指令封包”,它可以描述包含簿记(bookkeeping)信息和命令的指令封包。短封包可以包括Pull或Ack指令以及对象信息。与不承载对象数据的短封包(“指令封包”)不同,长封包在本文中可以称为“对象数据封包”,其可以描述承载对象数据的对象数据封包。对象数据封包可以包括一个或多个push指令、对象信息和由对象地址空间块地址指定的单个块。所有其他的指令和数据可以在块内被传送。
在一些实施例中,例如,短封包可以是64字节(1块),而长封包可以是4160字节(65块)。然而,其他实施例也是可能的。在一些实施例中,可以存在分隔符(例如,1字节的分隔符)。对象存储结构流可以以类似于UDP的方式是无连接的,并可以有效地嵌入在UDP协议或具有与UDP相同或相似的某些特性的UDP类型的协议上。在各种实施例中,属性可以包括以下中的任何一个或其组合:
·面向事务的请求-响应,以使得能够有效地移动对象存储器结构命名的(例如,128位对象存储器结构对象地址)数据块。
·可以基于块的位置、请求对象存储器结构对象地址(对象地址空间)和对象存储器结构指令来路由封包,而不是基于静态类IP节点地址来路由封包。
·可以直接实现一致性和对象存储器结构协议。
·可以在对象存储器结构端到端(end-to-end)协议内提供可靠性。
·无连接。
·***中唯一的状态可以是每个端节点处的各个块一致性状态,这可以在对象存储器结构路由节点处对其进行总结以提高效率。
根据本公开的某些实施例,下表119标识了短封包定义的各个方面的非限制性示例。
根据本公开的某些实施例,下表120标识了长封包定义的各个方面的非限制性示例。
根据本公开的某些实施例,下表121标识了对象大小编码的各个方面的非限制性示例。
基于软件和/或硬件的对象可以接口(interface)到2个单向流,每个方向一个流。取决于对象,可以有更多的低级别协议层,包括加密、校验和以及可靠的链路协议。对象存储器结构流协议提供了对请求响应封包对(和超时)进行匹配,以增强遍历任意数量流的封包的可靠性。
在某些情况下,每个请求-响应封包对平均大约为50%的短封包和50%的长封包,相对于块传输的平均效率为204%,利用如下方程:
效率=1/(50%*4096/(40+4136))
=1/(50%*块大小/(小封包大小+大封包大小))
对于具有随机错误率的链路,可以利用可靠的链路协议来本地检测错误。
节点ID
对象地址空间(对象存储器结构对象地址)可以动态地存在于对象存储器结构中的任何对象存储器中,也可以动态迁移。仍然可以具有(或,例如需要)一种机制,以使对象存储器和路由器(统称为节点)能够出于多种目的而彼此进行通信,多种目的包括对原始请求者进行簿记、设置和维护。封包内的NodeID字段可以用于这些目的。DIMM和路由器可以基于其分层组织进行寻址。当较低有效字段为零时,可以寻址非叶节点。DIMM/软件/移动字段可以实现多达256个或更多的DIMM、以及其余代理软件线程和/或移动装置。此寻址方案最多可支持多达240个服务器或服务器等效装置、多达248个DIMM和多达264个移动装置或软件线程。这些字段的示例如下表122-124所示。
根据本发明的某些实施例,下表125和126标识了确认字段(acknowledge field)和细节的各个方面的非限制性示例。
根据本公开的某些实施例,下表126标识了确认细节字段(acknowledge detailfield)的各个方面的非限制性示例。确认细节字段可以基于封包指令字段提供对应请求的详细状态信息。
在一些实施例中,在对象存储器结构内使用的拓扑可以是单向的点对点(point-to-point)环。然而,在各种实施例中,流格式将支持其他拓扑。逻辑环可以包括硬件、固件和/或软件流对象接口的任何组合。双对象(two-object)环可以包括对象之间的两个单向流。连接到多个环的对象可以具有在环之间移动、翻译和/或生成封包的能力,以创建对象存储器结构分层。
图22A是示出根据本公开的某些实施例的、存在于具有基于硬件的对象存储结构节点间对象路由器2205的节点2200上的流的示例的框图。在一些实施例中,节点2200可以对应于服务器节点。节点间对象路由器2205可以包括以环形取向与物理流2215相连接的环对象2210。在各种实施例中,环对象可以连接在环2220中,环2220在一些实施例中可以是虚拟(时分复用)TDM环。当共享硬件时,环对象2210和流2215可以是物理对象和流或TDM环对象和流的任何组合。如所描绘的,一个环对象2210可以连接在节点间对象路由器环2220内并且连接至朝向对象存储器结构路由器的流2225。在一些实施例中,多于一个的环对象2210可以连接在节点间对象路由器环内和相应的流内。
如所描绘的,节点2200可以包括PCIe 2230、节点存储器控制器和DD4存储器总线2235以及对象存储器结构对象存储器2240。每个对象存储器结构对象存储器2240可以具有至少一对流,所述至少一对流通过以硬件性能运行的DD4存储器总线2235和PCIe 2230连接至节点间对象路由器环对象2210。如所描绘的,可以存在运行在任何处理器核心2250上的软件对象2245,所述处理器核心2250可以用作路由代理和/或对象存储器的任何组合。软件对象2245可以具有连接了节点间对象路由器2205内的环对象2210的流。因此,这样的软件对象2245流可以流过PCIe 2230。
图22B是图示根据本公开某些实施例的节点2200-1上的对象存储器和路由器的软件模拟示例的框图。软件对象2245可以例如模拟对象存储器结构对象存储器2240。与实际对象存储器结构对象存储器2240相同地,软件对象2245可以包括相同的数据结构以跟踪对象和块,并且对来自节点间对象路由器2205的请求做出响应。软件对象2245-1通过模拟节点间对象路由器2205功能,可以例如对应于路由代理。这样做,软件对象2245-1可以通过标准有线和/或无线网络,将流传送到例如移动、有线和/或物联网(IoT)设备2255。
在一些实施例中,整个节点间对象路由器功能可以在运行在一个或多个处理核心2250上的一个或多个软件对象2245中实现,其唯一区别在于性能。而且,如上所述,一个或多个处理核心2250也可以按照常规存储器引用来直接存取对象存储器结构对象存储器。
图23是示出根据本公开的某些实施例的对象存储结构节点对象路由器2300内的流的示例的框图。对象存储结构路由器2300可以包括与流2310连接的环对象2305。如所描绘的,环对象2305可以以环形拓扑由流2310连接。环对象2305和流2310可以是物理或TDM的任何组合。一个或多个环对象2305可以连接至朝向叶节点的物理流2315。如所描绘的,一个环对象2305可以连接至朝向根节点的物理流2320。在一些实施例中,多于一个的环对象2305可以连接至朝向根节点的各自的物理流2320。
API后台
尽管代表应用编程接口的API听起来应该是关于软件是如何接口(interface)到对象存储结构的,但是在一些实施例中,对象存储结构的主接口可以对应于存储器。在一些实施例中,对象存储器结构API可以对应于如何为应用透明地建立和维护对象存储器结构(例如,通过修改的Linux libc函数库)。诸如SQL数据库或图形数据库的应用可以利用API来创建对象存储器结构对象,并提供/扩充元数据以使得对象存储器结构能够更好地管理对象。
在各种实施例中,API的整体功能可以包括:
1.在对象存储器结构内创建对象和维护对象;
2.将对象存储器结构对象与本地虚拟地址和物理地址相关联;
3.提供和扩充元数据,以使得对象存储器结构能够更好地管理对象;和/或
4.指定扩展指令函数和方法。
API函数可以利用最后一个功能来实现所有功能。通过能够创建函数和方法,可以将整个本机处理器序列卸载到对象存储结构,以获得诸如以上关于扩展指令环境和扩展指令所公开的效率。
API接口可以通过基于PCle的服务器对象索引,所述基于PCle的服务器对象索引也被称为对象存储器结构节点间对象路由器。API编程模型可以直接与应用集成。可以提供多线程(通过存储器命令队列),以便每个应用在逻辑上发出命令。每个命令都可以提供返回状态和可选数据。API命令可以作为触发程序的一部分。
在前面的描述中,为了说明的目的,以特定顺序描述了方法。应当理解,在替代实施例中,可以以与所描述的顺序不同的顺序执行方法。还应当理解,上述方法可以由硬件部件执行,或者可以实施在机器可执行指令的序列(sequence)中,所述序列可以用于使得机器(诸如用指令编程的通用或专用处理器或逻辑电路)来执行该方法。这些机器可执行指令可以存储在一个或多个机器可读介质上,诸如CD-ROM或其他类型的光盘、软盘、ROM、RAM、EPROM、EEPROM、磁盘或光卡、闪存存储器、或其他类型的适用于存储电子指令的机器可读介质。可选地,该方法可以由硬件和软件的组合来执行。
虽然本文已经详细描述了本发明的说明性的和目前优选的实施例,但是应当理解,本发明的构思可以以各种其他方式实施和使用,并且所附权利要求旨在被解释为包括除了受现有技术的限制以外的这样的变型。
Claims (34)
1.一种对象存储器结构的基于硬件的处理节点,所述基于硬件的处理节点包括:
存储并管理一个或多个存储器对象的存储器模块,其中:
每个存储器对象是在所述存储器模块内本地创建的,并且
每个存储器对象是使用单个存储器引用指令而不用输入/输出(I/O)指令存取的,
其中所述基于硬件的处理节点被配置为利用流应用编程接口(API)来与一个或多个另外的节点进行通信,以作为所述对象存储器结构的一组节点进行操作,其中该组节点进行操作以使得当以多个不同拓扑中的任何一个拓扑来实现该组节点时,该组节点中的所有存储器对象是至少部分地基于所述流API可存取的,所述流API将来自该组节点中的任何节点的通信定义为包括第一方向上的第一单向流和与所述第一方向相反的第二方向上的第二单向流的两个单向流。
2.如权利要求1所述的对象存储器结构的基于硬件的处理节点,其中由所述流API定义的通信对应于根据该组节点中的多个节点间的单向环形组织的环形流。
3.如权利要求1所述的对象存储器结构的基于硬件的处理节点,其中所述单向流各自包括指令封包,其中所述指令封包中的至少一个指令封包包括扩展指令和关联数据。
4.如权利要求3所述的对象存储器结构的基于硬件的处理节点,其中所述至少一个指令封包对应于包括带有对象信息的拉取指令或确认指令的指令封包。
5.如权利要求4所述的对象存储器结构的基于硬件的处理节点,其中:
至少部分地基于用对象寻址方案在每个对象的基础上分配的对象地址空间,用所述一个或多个存储器对象中的每个存储器对象来管理存储器和存储体的物理地址,以便根据所述对象寻址方案将对象地址分配到所述一个或多个存储器对象;并且
所述指令封包包括一个或多个字段,用于指定:
对象ID,所述对象ID对应于各个存储器对象的对象地址中的各个对象地址的对象起始点;
对象偏移,所述对象偏移用以对各个存储器对象的特定部分进行寻址;和/或
各个存储器对象的对象大小。
6.如权利要求4所述的对象存储器结构的基于硬件的处理节点,其中:
所述指令封包包括一个或多个用于指定请求节点的分层节点标识的字段,所述请求节点与所述多个基于硬件的处理节点中的发出请求的基于硬件的处理节点和/或发出请求的基于软件的节点相对应,其中该组节点中的至少一个节点被配置为至少部分地基于所述分层节点标识将响应路由到所述请求节点。
7.如权利要求3所述的对象存储器结构的基于硬件的处理节点,其中:
至少部分地基于用对象寻址方案在每个对象的基础上分配的对象地址空间,用所述一个或多个存储器对象中的每个存储器对象来管理存储器和存储体的物理地址,以便根据所述对象寻址方案将块对象地址分配到所述一个或多个存储器对象;并且
所述至少一个指令封包对应于对象数据封包,所述对象数据封包包括推送指令、对象信息和由所述块对象地址中的特定块对象地址指定的单个块。
8.如权利要求7所述的对象存储器结构的基于硬件的处理节点,其中该组节点中的至少一个节点被配置为至少部分地基于所述单个块的位置、流API请求和所述推送指令来路由所述至少一个指令封包。
9.如权利要求7所述的对象存储器结构的基于硬件的处理节点,其中该组节点中的至少一个节点被配置为至少部分地基于所述单个块的位置、流API请求和所述推送指令来路由所述至少一个指令封包。
10.一种对象存储器结构,包括:
多个基于硬件的处理节点,每个基于硬件的处理节点包括:
存储并管理一个或多个存储器对象的一个或多个存储器模块,其中:
每个存储器对象是在所述存储器模块内本地创建的,并且
每个存储器对象是使用单个存储器引用指令而不用输入/输出(I/O)指令存取的,
其中所述多个基于硬件的处理节点中的每个基于硬件的处理节点被配置为利用流应用编程接口(API)来与所述多个基于硬件的处理节点中的其他基于硬件的处理节点进行通信,以作为所述对象存储器结构的一组节点进行操作,其中该组节点进行操作以使得所述多个基于硬件的处理节点中的任何基于硬件的处理节点被配置为至少部分地基于所述流API,移动所述一个或多个存储器对象和/或对所述多个基于硬件的处理节点中的其他基于硬件的处理节点远程地执行函数。
11.如权利要求10所述的对象存储器结构的基于硬件的处理节点,其中所述移动所述一个或多个存储器对象和/或所述对所述多个基于硬件的处理节点中的其他基于硬件的处理节点远程地执行函数是响应于流API请求的,所述API请求来自所述多个基于硬件的处理节点中的请求节点和/或来自与所述对象存储器结构进行接口的软件层。
12.如权利要求10所述的对象存储器结构的基于硬件的处理节点,其中所述多个基于硬件的处理节点中的每个基于硬件的处理节点进一步被配置为利用所述流API从所述对象存储器结构内发起请求。
13.如权利要求12所述的对象存储器结构的基于硬件的处理节点,其中所述多个基于硬件的处理节点中的每个基于硬件的处理节点进一步被配置为响应于所述请求利用所述流API来传播和/或发起操作。
14.如权利要求10所述的对象存储器结构的基于硬件的处理节点,其中所述对象存储结构包括使用软件来模拟所述多个基于硬件的处理节点中的至少一个硬件节点的部件。
15.如权利要求10所述的对象存储器结构的基于硬件的处理节点,其中所述函数包括一个或多个高速缓存一致性函数,所述高速缓存一致性函数用于确定本地对象高速缓存状态对于与来自请求节点的流API请求相对应的预期操作是否是足够的、并且在所述确定之后向所述请求节点转发响应或将所述流API请求转发至另一节点。
16.如权利要求10所述的对象存储器结构的基于硬件的处理节点,其中所述至少部分地基于所述流API,移动所述一个或多个存储器对象和/或对所述多个基于硬件的处理节点中的其他基于硬件的处理节点远程地执行函数包括:
在所述多个基于硬件的处理节点中的至少两个基于硬件的处理节点之间拉取和/或推送所述一个或多个存储器对象中的至少一部分,其中:
所述拉取包括至少一个基于硬件的处理节点请求将所述一个或多个存储器对象中的至少一部分移动到对应于所述至少一个基于硬件的处理节点的位置;并且
所述推送包括至少一个基于硬件的处理节点请求将所述一个或多个存储器对象中的至少一部分移动到远离所述至少一个基于硬件的处理节点的远程位置。
17.如权利要求16所述的对象存储器结构的基于硬件的处理节点,其中:
所述一个或多个存储器对象中的所述至少一部分包括存储器对象数据和存储器对象元数据;并且
所述存储器对象元数据包括一个或多个触发器,所述一个或多个触发器指定当所述一个或多个存储器对象中的所述至少一部分位于各个对象存储器模块处并且响应于所述拉取和/或所述推送而作为各个对象存储器模块的部分被存取时要由所述多个基于硬件的处理节点中的任何对象存储器模块执行的另外的一个或多个操作。
18.一种用于便于对象存储器结构的节点之间的通信的方法,所述方法包括:
在所述对象存储器结构的基于硬件的处理节点的存储器模块内本地创建一个或多个存储器对象;
使用单个存储器引用指令而不用输入/输出(I/O)指令来存取所述一个或多个存储器对象中的每个存储器对象;以及
由所述基于硬件的处理节点利用流应用编程接口(API)来与一个或多个另外的节点进行通信,以作为所述对象存储器结构的一组节点进行操作,其中该组节点进行操作以使得当以多个不同拓扑中的任何一个拓扑来实现该组节点时,该组节点中的所有存储器对象是至少部分地基于所述流API可存取的,所述流API将来自该组节点中的任何节点的通信定义为包括第一方向上的第一单向流和与所述第一方向相反的第二方向上的第二单向流的两个单向流。
19.如权利要求18所述的用于便于对象存储器结构的节点之间的通信的方法,其中由所述流API定义的通信对应于根据该组节点中的多个节点间的单向环形组织的环形流。
20.如权利要求18所述的用于便于对象存储器结构的节点之间的通信的方法,其中所述单向流各自包括指令封包,其中所述指令封包中的至少一个指令封包包括扩展指令和关联数据。
21.如权利要求20所述的用于便于对象存储器结构的节点之间的通信的方法,其中所述至少一个指令封包对应于包括带有对象信息的拉取指令或确认指令的指令封包。
22.如权利要求21所述的用于便于对象存储器结构的节点之间的通信的方法,其中所述方法进一步包括:
至少部分地基于用对象寻址方案在每个对象的基础上分配的对象地址空间,用所述一个或多个存储器对象中的每个存储器对象来管理存储器和存储体的物理地址,以便根据所述对象寻址方案将对象地址分配到所述一个或多个存储器对象;并且
所述指令封包包括一个或多个字段,用于指定:
对象ID,所述对象ID对应于各个存储器对象的对象地址中的各个对象地址的对象起始点;
对象偏移,所述对象偏移用以对各个存储器对象的特定部分进行寻址;和/或
各个存储器对象的对象大小。
23.如权利要求21所述的用于便于对象存储器结构的节点之间的通信的方法,其中:
所述指令封包包括一个或多个用于指定请求节点的分层节点标识的字段,所述请求节点与所述多个基于硬件的处理节点中的发出请求的基于硬件的处理节点和/或发出请求的基于软件的节点相对应,其中该组节点中的至少一个节点被配置为至少部分地基于所述分层节点标识将响应路由到所述请求节点。
24.如权利要求20所述的用于便于对象存储器结构的节点之间的通信的方法,其中:
至少部分地基于用对象寻址方案在每个对象的基础上分配的对象地址空间,用所述一个或多个存储器对象中的每个存储器对象来管理存储器和存储体的物理地址,以便根据所述对象寻址方案将块对象地址分配到所述一个或多个存储器对象;
其中所述至少一个指令封包对应于对象数据封包,所述对象数据封包包括推送指令、对象信息和由所述块对象地址中的特定块对象地址指定的单个块。
25.如权利要求24所述的用于便于对象存储器结构的节点之间的通信的方法,其中该组节点中的至少一个节点被配置为至少部分地基于所述单个块的位置、流API请求和所述推送指令来路由所述至少一个指令封包。
26.如权利要求24所述的用于便于对象存储器结构的节点之间的通信的方法,其中该组节点中的至少一个节点被配置为至少部分地基于所述单个块的位置、流API请求和所述推送指令来路由所述至少一个指令封包。
27.一种用于便于对象存储器结构的节点之间的通信的方法,所述方法包括:
在多个基于硬件的处理节点中的一个或多个基于硬件的处理节点的一个或多个存储器模块内本地创建一个或多个存储器对象;
使用单个存储器引用指令而不用输入/输出(I/O)指令来存取每个存储器对象;并且
由所述多个基于硬件的处理节点中的每个基于硬件的处理节点利用流应用编程接口(API)来与所述多个基于硬件的处理节点中的其他基于硬件的处理节点进行通信,以作为所述对象存储器结构的一组节点进行操作,其中该组节点进行操作以使得所述多个基于硬件的处理节点中的任何基于硬件的处理节点被配置为至少部分地基于所述流API,移动所述一个或多个存储器对象和/或对所述多个基于硬件的处理节点中的其他基于硬件的处理节点远程地执行函数。
28.如权利要求27所述的用于便于对象存储器结构的节点之间的通信的方法,其中所述移动所述一个或多个存储器对象和/或所述对所述多个基于硬件的处理节点中的其他基于硬件的处理节点远程地执行函数是响应于流API请求的,所述API请求来自所述多个基于硬件的处理节点中的请求节点和/或来自与所述对象存储器结构进行接口的软件层。
29.如权利要求27所述的用于便于对象存储器结构的节点之间的通信的方法,进一步包括:
由所述多个基于硬件的处理节点中的每个基于硬件的处理节点利用所述流API从所述对象存储器结构内发起请求。
30.如权利要求29所述的用于便于对象存储器结构的节点之间的通信的方法,进一步包括:
由所述多个基于硬件的处理节点中的每个基于硬件的处理节点响应于所述请求利用所述流API利用所述流API来传播和/或发起操作。
31.如权利要求27所述的用于便于对象存储器结构的节点之间的通信的方法,进一步包括:
用所述对象存储结构的部件来模拟所述多个基于硬件的处理节点中的至少一个硬件节点,所述对象存储结构的部件使用软件来执行所述模拟。
32.如权利要求27所述的用于便于对象存储器结构的节点之间的通信的方法,其中所述函数包括一个或多个高速缓存一致性函数,所述高速缓存一致性函数用于确定本地对象高速缓存状态对于与来自请求节点的流API请求相对应的预期操作是否是足够的、并且在所述确定之后向所述请求节点转发响应或将所述流API请求转发至另一节点。
33.如权利要求27所述的用于便于对象存储器结构的节点之间的通信的方法,其中所述至少部分地基于所述流API,移动所述一个或多个存储器对象和/或对所述多个基于硬件的处理节点中的其他基于硬件的处理节点远程地执行函数包括:
在所述多个基于硬件的处理节点中的至少两个基于硬件的处理节点之间拉取和/或推送所述一个或多个存储器对象中的至少一部分,其中:
所述拉取包括至少一个基于硬件的处理节点请求将所述一个或多个存储器对象中的至少一部分移动到对应于所述至少一个基于硬件的处理节点的位置;以及
所述推送包括至少一个基于硬件的处理节点请求将所述一个或多个存储器对象中的至少一部分移动到远离所述至少一个基于硬件的处理节点的远程位置。
34.如权利要求33所述的用于便于对象存储器结构的节点之间的通信的方法,其中:
所述一个或多个存储器对象中的所述至少一部分包括存储器对象数据和存储器对象元数据;并且
所述存储器对象元数据包括一个或多个触发器,所述一个或多个触发器指定当所述一个或多个存储器对象中的所述至少一部分位于各个对象存储器模块处并且响应于所述拉取和/或所述推送而作为各个对象存储器模块的部分被存取时要由所述多个基于硬件的处理节点中的任何对象存储器模块执行的另外的一个或多个操作。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562173037P | 2015-06-09 | 2015-06-09 | |
US62/173,037 | 2015-06-09 | ||
US15/168,965 | 2016-05-31 | ||
US15/168,965 US9971542B2 (en) | 2015-06-09 | 2016-05-31 | Infinite memory fabric streams and APIs |
PCT/US2016/035203 WO2016200649A1 (en) | 2015-06-09 | 2016-06-01 | Infinite memory fabric streams and apis |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108431774A true CN108431774A (zh) | 2018-08-21 |
CN108431774B CN108431774B (zh) | 2022-04-12 |
Family
ID=57504326
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680045283.9A Active CN108431774B (zh) | 2015-06-09 | 2016-06-01 | 无限存储器结构流和api |
Country Status (5)
Country | Link |
---|---|
US (4) | US9971542B2 (zh) |
EP (1) | EP3308268A4 (zh) |
CN (1) | CN108431774B (zh) |
CA (1) | CA2988963A1 (zh) |
WO (1) | WO2016200649A1 (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9965185B2 (en) | 2015-01-20 | 2018-05-08 | Ultrata, Llc | Utilization of a distributed index to provide object memory fabric coherency |
US11086521B2 (en) | 2015-01-20 | 2021-08-10 | Ultrata, Llc | Object memory data flow instruction execution |
US10698628B2 (en) | 2015-06-09 | 2020-06-30 | Ultrata, Llc | Infinite memory fabric hardware implementation with memory |
US9886210B2 (en) | 2015-06-09 | 2018-02-06 | Ultrata, Llc | Infinite memory fabric hardware implementation with router |
US9971542B2 (en) | 2015-06-09 | 2018-05-15 | Ultrata, Llc | Infinite memory fabric streams and APIs |
US11250217B1 (en) * | 2015-07-14 | 2022-02-15 | Soundhound, Inc. | Conditional responses to application commands in a client-server system |
US10248337B2 (en) | 2015-12-08 | 2019-04-02 | Ultrata, Llc | Object memory interfaces across shared links |
EP3387548B1 (en) | 2015-12-08 | 2023-08-02 | Ultrata LLC | Memory fabric operations and coherency using fault tolerant objects |
CA3006773A1 (en) | 2015-12-08 | 2017-06-15 | Ultrata, Llc | Memory fabric software implementation |
US10241676B2 (en) | 2015-12-08 | 2019-03-26 | Ultrata, Llc | Memory fabric software implementation |
KR20180058328A (ko) * | 2016-11-24 | 2018-06-01 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그의 동작 방법 |
CN109669991A (zh) * | 2018-11-26 | 2019-04-23 | 广州海格通信集团股份有限公司 | 一种基于分布式目录服务的信息调度***和方法 |
DE102019104307B4 (de) * | 2019-02-20 | 2021-12-23 | Minebea Mitsumi Inc. | Verfahren zum Betrieb eines Speichers und Speichervorrichtung |
US11200158B1 (en) * | 2020-06-02 | 2021-12-14 | The Governing Council Of The University Of Toronto | Methods, devices, and media for hardware-supported object metadata retrieval |
WO2022005732A1 (en) * | 2020-06-30 | 2022-01-06 | Arris Enterprises Llc | Virtual elastic queue |
US11262923B2 (en) | 2020-07-08 | 2022-03-01 | Samsung Electronics Co., Ltd. | Method for managing namespaces in a storage device using an over-provisioning pool and storage device employing the same |
CN114995882B (zh) * | 2022-07-19 | 2022-11-04 | 沐曦集成电路(上海)有限公司 | 一种异构结构***包处理的方法 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050044187A1 (en) * | 2003-08-21 | 2005-02-24 | Microsoft Corporation | Systems and methods for providing conflict handling for peer-to-peer synchronization of units of information manageable by a hardware/software interface system |
CN1906914A (zh) * | 2004-01-09 | 2007-01-31 | 日本电气株式会社 | 通信方法 |
US20090125639A1 (en) * | 2007-11-11 | 2009-05-14 | Weed Instrument Company, Inc. | Method, apparatus and computer program product for ring network communication |
US20090271790A1 (en) * | 2006-03-17 | 2009-10-29 | Paul Williams | Computer architecture |
CN101946466A (zh) * | 2007-12-21 | 2011-01-12 | 英特尔公司 | 多个应用的对等流传输和api服务 |
US20120017037A1 (en) * | 2010-04-12 | 2012-01-19 | Riddle Thomas A | Cluster of processing nodes with distributed global flash memory using commodity server technology |
EP2377032A4 (en) * | 2008-12-05 | 2012-11-07 | Social Communications Co | CADISM IN REAL INVISIBLE TIME |
US20140146062A1 (en) * | 2012-11-26 | 2014-05-29 | Nvidia Corporation | System, method, and computer program product for debugging graphics programs locally utilizing a system with a single gpu |
US20150039840A1 (en) * | 2013-08-05 | 2015-02-05 | Iii Holdings 2, Llc | Remote memory ring buffers in a cluster of data processing nodes |
CN104380256A (zh) * | 2012-04-19 | 2015-02-25 | 加泰罗尼亚理工大学 | 用于虚拟化与计算机***关联的硬件资源的方法、***和执行代码段 |
Family Cites Families (192)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US1059247A (en) | 1912-05-15 | 1913-04-15 | Ulysses G White | Airship. |
US4326247A (en) | 1978-09-25 | 1982-04-20 | Motorola, Inc. | Architecture for data processor |
US4736317A (en) | 1985-07-17 | 1988-04-05 | Syracuse University | Microprogram-coupled multiple-microprocessor module with 32-bit byte width formed of 8-bit byte width microprocessors |
US5297279A (en) | 1990-05-30 | 1994-03-22 | Texas Instruments Incorporated | System and method for database management supporting object-oriented programming |
AU5550194A (en) | 1993-09-27 | 1995-04-18 | Giga Operations Corporation | Implementation of a selected instruction set cpu in programmable hardware |
US5664207A (en) | 1994-12-16 | 1997-09-02 | Xcellenet, Inc. | Systems and methods for automatically sharing information among remote/mobile nodes |
US5781030A (en) | 1995-06-02 | 1998-07-14 | Advanced Micro Devices, Inc. | Programmable uniform symmetrical distribution logic allocator for a high-density complex PLD |
EP0976034B1 (en) | 1996-01-24 | 2005-10-19 | Sun Microsystems, Inc. | Method and apparatus for stack caching |
US5781906A (en) | 1996-06-06 | 1998-07-14 | International Business Machines Corporation | System and method for construction of a data structure for indexing multidimensional objects |
US5889954A (en) * | 1996-12-20 | 1999-03-30 | Ericsson Inc. | Network manager providing advanced interconnection capability |
US5859849A (en) | 1997-05-06 | 1999-01-12 | Motorola Inc. | Modular switch element for shared memory switch fabric |
US6115790A (en) | 1997-08-29 | 2000-09-05 | Silicon Graphics, Inc. | System, method and computer program product for organizing page caches |
US6240501B1 (en) | 1997-09-05 | 2001-05-29 | Sun Microsystems, Inc. | Cache-less address translation |
US6366876B1 (en) | 1997-09-29 | 2002-04-02 | Sun Microsystems, Inc. | Method and apparatus for assessing compatibility between platforms and applications |
US6804766B1 (en) | 1997-11-12 | 2004-10-12 | Hewlett-Packard Development Company, L.P. | Method for managing pages of a designated memory object according to selected memory management policies |
US5987468A (en) | 1997-12-12 | 1999-11-16 | Hitachi America Ltd. | Structure and method for efficient parallel high-dimensional similarity join |
US6480927B1 (en) | 1997-12-31 | 2002-11-12 | Unisys Corporation | High-performance modular memory system with crossbar connections |
EP0933776A3 (en) | 1998-01-30 | 2006-05-17 | Victor Company of Japan, Ltd. | Signal encoding apparatus, audio data transmitting method, audio data recording method, audio data decoding method and audio disc |
US6230151B1 (en) | 1998-04-16 | 2001-05-08 | International Business Machines Corporation | Parallel classification for data mining in a shared-memory multiprocessor system |
US9361243B2 (en) | 1998-07-31 | 2016-06-07 | Kom Networks Inc. | Method and system for providing restricted access to a storage medium |
US6470436B1 (en) * | 1998-12-01 | 2002-10-22 | Fast-Chip, Inc. | Eliminating memory fragmentation and garbage collection from the process of managing dynamically allocated memory |
JP2003501880A (ja) | 1999-05-14 | 2003-01-14 | ダンティ・コーポレーション | パケット化セキュリティ・コード、パリティ交換、および優先伝送スキームをもつモジュラ・スイッチを介する分散ルーティングを有する相対的階層通信ネットワーク |
US6470344B1 (en) | 1999-05-29 | 2002-10-22 | Oracle Corporation | Buffering a hierarchical index of multi-dimensional data |
US6587874B1 (en) | 1999-06-29 | 2003-07-01 | Cisco Technology, Inc. | Directory assisted autoinstall of network devices |
US6421769B1 (en) | 1999-12-30 | 2002-07-16 | Intel Corporation | Efficient memory management for channel drivers in next generation I/O system |
EP1364308A2 (en) | 2000-02-24 | 2003-11-26 | Findbase, L.L.C. | Method and system for extracting, analyzing, storing, comparing and reporting on data stored in web and/or other network repositories and apparatus to detect, prevent and obfuscate information removal from information servers |
US6651163B1 (en) | 2000-03-08 | 2003-11-18 | Advanced Micro Devices, Inc. | Exception handling with reduced overhead in a multithreaded multiprocessing system |
US6957230B2 (en) | 2000-11-30 | 2005-10-18 | Microsoft Corporation | Dynamically generating multiple hierarchies of inter-object relationships based on object attribute values |
US6941417B1 (en) | 2000-12-15 | 2005-09-06 | Shahram Abdollahi-Alibeik | High-speed low-power CAM-based search engine |
US20040205740A1 (en) | 2001-03-29 | 2004-10-14 | Lavery Daniel M. | Method for collection of memory reference information and memory disambiguation |
EP1367778A1 (en) | 2002-05-31 | 2003-12-03 | Fujitsu Siemens Computers, LLC | Networked computer system and method using dual bi-directional communication rings |
JP3851228B2 (ja) | 2002-06-14 | 2006-11-29 | 松下電器産業株式会社 | プロセッサ、プログラム変換装置及びプログラム変換方法、並びにコンピュータプログラム |
US8612404B2 (en) | 2002-07-30 | 2013-12-17 | Stored Iq, Inc. | Harvesting file system metsdata |
US20040133590A1 (en) | 2002-08-08 | 2004-07-08 | Henderson Alex E. | Tree data structure with range-specifying keys and associated methods and apparatuses |
US7178132B2 (en) | 2002-10-23 | 2007-02-13 | Microsoft Corporation | Forward walking through binary code to determine offsets for stack walking |
US20080008202A1 (en) | 2002-10-31 | 2008-01-10 | Terrell William C | Router with routing processors and methods for virtualization |
US7457822B1 (en) | 2002-11-01 | 2008-11-25 | Bluearc Uk Limited | Apparatus and method for hardware-based file system |
US20060041731A1 (en) | 2002-11-07 | 2006-02-23 | Robert Jochemsen | Method and device for persistent-memory mangement |
KR100918733B1 (ko) | 2003-01-30 | 2009-09-24 | 삼성전자주식회사 | 포워딩정보를 동적으로 관리하는 분산구조라우터 및 그방법 |
JP2004280752A (ja) | 2003-03-19 | 2004-10-07 | Sony Corp | データ記憶装置、およびデータ記憶装置における管理情報更新方法、並びにコンピュータ・プログラム |
US7587422B2 (en) | 2003-04-24 | 2009-09-08 | Neopath Networks, Inc. | Transparent file replication using namespace replication |
US20050004924A1 (en) | 2003-04-29 | 2005-01-06 | Adrian Baldwin | Control of access to databases |
US7617510B2 (en) * | 2003-09-05 | 2009-11-10 | Microsoft Corporation | Media network using set-top boxes as nodes |
US7865485B2 (en) | 2003-09-23 | 2011-01-04 | Emc Corporation | Multi-threaded write interface and methods for increasing the single file read and write throughput of a file server |
US7630282B2 (en) | 2003-09-30 | 2009-12-08 | Victor Company Of Japan, Ltd. | Disk for audio data, reproduction apparatus, and method of recording/reproducing audio data |
US20050102670A1 (en) * | 2003-10-21 | 2005-05-12 | Bretl Robert F. | Shared object memory with object management for multiple virtual machines |
US7149858B1 (en) | 2003-10-31 | 2006-12-12 | Veritas Operating Corporation | Synchronous replication for system and data security |
US7620630B2 (en) | 2003-11-12 | 2009-11-17 | Oliver Lloyd Pty Ltd | Directory system |
US7333993B2 (en) | 2003-11-25 | 2008-02-19 | Network Appliance, Inc. | Adaptive file readahead technique for multiple read streams |
US7188128B1 (en) | 2003-12-12 | 2007-03-06 | Veritas Operating Corporation | File system and methods for performing file create and open operations with efficient storage allocation |
US7657706B2 (en) | 2003-12-18 | 2010-02-02 | Cisco Technology, Inc. | High speed memory and input/output processor subsystem for efficiently allocating and using high-speed memory and slower-speed memory |
KR100600862B1 (ko) * | 2004-01-30 | 2006-07-14 | 김선권 | 인터넷상의 정보자원에 대한 접근 경로를 체계적으로수집하고 검색하는 방법, 및 이 방법을 실행할 수 있는컴퓨터 프로그램을 수록한 기록매체 |
US20050240748A1 (en) | 2004-04-27 | 2005-10-27 | Yoder Michael E | Locality-aware interface for kernal dynamic memory |
US7251663B1 (en) | 2004-04-30 | 2007-07-31 | Network Appliance, Inc. | Method and apparatus for determining if stored memory range overlaps key memory ranges where the memory address space is organized in a tree form and partition elements for storing key memory ranges |
US20050273571A1 (en) * | 2004-06-02 | 2005-12-08 | Lyon Thomas L | Distributed virtual multiprocessor |
US7278122B2 (en) | 2004-06-24 | 2007-10-02 | Ftl Systems, Inc. | Hardware/software design tool and language specification mechanism enabling efficient technology retargeting and optimization |
US8713295B2 (en) | 2004-07-12 | 2014-04-29 | Oracle International Corporation | Fabric-backplane enterprise servers with pluggable I/O sub-system |
US8769106B2 (en) | 2004-07-29 | 2014-07-01 | Thomas Sheehan | Universal configurable device gateway |
US7769974B2 (en) | 2004-09-10 | 2010-08-03 | Microsoft Corporation | Increasing data locality of recently accessed resources |
US7350048B1 (en) | 2004-10-28 | 2008-03-25 | Sun Microsystems, Inc. | Memory system topology |
US7467272B2 (en) | 2004-12-16 | 2008-12-16 | International Business Machines Corporation | Write protection of subroutine return addresses |
US7694065B2 (en) | 2004-12-28 | 2010-04-06 | Sap Ag | Distributed cache architecture |
US7315871B2 (en) | 2005-01-19 | 2008-01-01 | International Business Machines Inc. Corporation | Method, system and program product for interning invariant data objects in dynamic space constrained systems |
US20060174089A1 (en) | 2005-02-01 | 2006-08-03 | International Business Machines Corporation | Method and apparatus for embedding wide instruction words in a fixed-length instruction set architecture |
US9104315B2 (en) | 2005-02-04 | 2015-08-11 | Sandisk Technologies Inc. | Systems and methods for a mass data storage system having a file-based interface to a host and a non-file-based interface to secondary storage |
US7689784B2 (en) | 2005-03-18 | 2010-03-30 | Sony Computer Entertainment Inc. | Methods and apparatus for dynamic linking program overlay |
US7287114B2 (en) | 2005-05-10 | 2007-10-23 | Intel Corporation | Simulating multiple virtual channels in switched fabric networks |
US7200023B2 (en) | 2005-05-12 | 2007-04-03 | International Business Machines Corporation | Dual-edged DIMM to support memory expansion |
US9171585B2 (en) | 2005-06-24 | 2015-10-27 | Google Inc. | Configurable memory circuit system and method |
US8089795B2 (en) | 2006-02-09 | 2012-01-03 | Google Inc. | Memory module with memory stack and interface with enhanced capabilities |
US7689602B1 (en) | 2005-07-20 | 2010-03-30 | Bakbone Software, Inc. | Method of creating hierarchical indices for a distributed object system |
US20070038984A1 (en) | 2005-08-12 | 2007-02-15 | Gschwind Michael K | Methods for generating code for an architecture encoding an extended register specification |
US7421566B2 (en) | 2005-08-12 | 2008-09-02 | International Business Machines Corporation | Implementing instruction set architectures with non-contiguous register file specifiers |
US7917474B2 (en) | 2005-10-21 | 2011-03-29 | Isilon Systems, Inc. | Systems and methods for accessing and updating distributed data |
US7804769B1 (en) | 2005-12-01 | 2010-09-28 | Juniper Networks, Inc. | Non-stop forwarding in a multi-chassis router |
US7710872B2 (en) | 2005-12-14 | 2010-05-04 | Cisco Technology, Inc. | Technique for enabling traffic engineering on CE-CE paths across a provider network |
US7647329B1 (en) | 2005-12-29 | 2010-01-12 | Amazon Technologies, Inc. | Keymap service architecture for a distributed storage system |
US9002795B2 (en) | 2006-01-26 | 2015-04-07 | Seagate Technology Llc | Object-based data storage device |
US7584332B2 (en) | 2006-02-17 | 2009-09-01 | University Of Notre Dame Du Lac | Computer systems with lightweight multi-threaded architectures |
US8423954B2 (en) | 2006-03-31 | 2013-04-16 | Sap Ag | Interactive container of development components and solutions |
US20070245111A1 (en) | 2006-04-18 | 2007-10-18 | International Business Machines Corporation | Methods, systems, and computer program products for managing temporary storage |
US7472249B2 (en) | 2006-06-30 | 2008-12-30 | Sun Microsystems, Inc. | Kernel memory free algorithm |
US8165111B2 (en) | 2006-07-25 | 2012-04-24 | PSIMAST, Inc | Telecommunication and computing platforms with serial packet switched integrated memory access technology |
US8244718B2 (en) | 2006-08-25 | 2012-08-14 | Teradata Us, Inc. | Methods and systems for hardware acceleration of database operations and queries |
US7853752B1 (en) | 2006-09-29 | 2010-12-14 | Tilera Corporation | Caching in multicore and multiprocessor architectures |
US7647471B2 (en) | 2006-11-17 | 2010-01-12 | Sun Microsystems, Inc. | Method and system for collective file access using an mmap (memory-mapped file) |
WO2008070813A2 (en) | 2006-12-06 | 2008-06-12 | Fusion Multisystems, Inc. (Dba Fusion-Io) | Apparatus, system, and method for a front-end, distributed raid |
US8151082B2 (en) | 2007-12-06 | 2012-04-03 | Fusion-Io, Inc. | Apparatus, system, and method for converting a storage request into an append data storage command |
US20080163183A1 (en) * | 2006-12-29 | 2008-07-03 | Zhiyuan Li | Methods and apparatus to provide parameterized offloading on multiprocessor architectures |
US20080209406A1 (en) | 2007-02-27 | 2008-08-28 | Novell, Inc. | History-based call stack construction |
US8001539B2 (en) | 2007-02-28 | 2011-08-16 | Jds Uniphase Corporation | Historical data management |
US8706914B2 (en) | 2007-04-23 | 2014-04-22 | David D. Duchesneau | Computing infrastructure |
US20090006831A1 (en) | 2007-06-30 | 2009-01-01 | Wah Yiu Kwong | Methods and apparatuses for configuring add-on hardware to a computing platform |
US7730278B2 (en) | 2007-07-12 | 2010-06-01 | Oracle America, Inc. | Chunk-specific executable code for chunked java object heaps |
US7716449B2 (en) | 2007-07-12 | 2010-05-11 | Oracle America, Inc. | Efficient chunked java object heaps |
US9824006B2 (en) | 2007-08-13 | 2017-11-21 | Digital Kiva, Inc. | Apparatus and system for object-based storage solid-state device |
US8195912B2 (en) | 2007-12-06 | 2012-06-05 | Fusion-io, Inc | Apparatus, system, and method for efficient mapping of virtual and physical addresses |
US8069311B2 (en) | 2007-12-28 | 2011-11-29 | Intel Corporation | Methods for prefetching data in a memory storage structure |
US8484307B2 (en) | 2008-02-01 | 2013-07-09 | International Business Machines Corporation | Host fabric interface (HFI) to perform global shared memory (GSM) operations |
US8250308B2 (en) * | 2008-02-15 | 2012-08-21 | International Business Machines Corporation | Cache coherency protocol with built in avoidance for conflicting responses |
US8018729B2 (en) | 2008-02-19 | 2011-09-13 | Lsi Corporation | Method and housing for memory module including battery backup |
EP2096564B1 (en) | 2008-02-29 | 2018-08-08 | Euroclear SA/NV | Improvements relating to handling and processing of massive numbers of processing instructions in real time |
US8219564B1 (en) | 2008-04-29 | 2012-07-10 | Netapp, Inc. | Two-dimensional indexes for quick multiple attribute search in a catalog system |
US8775373B1 (en) | 2008-05-21 | 2014-07-08 | Translattice, Inc. | Deleting content in a distributed computing environment |
US8775718B2 (en) | 2008-05-23 | 2014-07-08 | Netapp, Inc. | Use of RDMA to access non-volatile solid-state memory in a network storage system |
US7885967B2 (en) | 2008-05-30 | 2011-02-08 | Red Hat, Inc. | Management of large dynamic tables |
US8060692B2 (en) | 2008-06-27 | 2011-11-15 | Intel Corporation | Memory controller using time-staggered lockstep sub-channels with buffered memory |
CN102150147A (zh) | 2008-07-03 | 2011-08-10 | 惠普开发有限公司 | 存储器服务器 |
US8412878B2 (en) | 2008-07-14 | 2013-04-02 | Marvell World Trade Ltd. | Combined mobile device and solid state disk with a shared memory architecture |
FR2934447A1 (fr) * | 2008-07-23 | 2010-01-29 | France Telecom | Procede de communication entre une pluralite de noeuds, les noeuds etant organises suivant un anneau |
US8572036B2 (en) | 2008-12-18 | 2013-10-29 | Datalight, Incorporated | Method and apparatus for fault-tolerant memory management |
US8918623B2 (en) | 2009-08-04 | 2014-12-23 | International Business Machines Corporation | Implementing instruction set architectures with non-contiguous register file specifiers |
US9122579B2 (en) | 2010-01-06 | 2015-09-01 | Intelligent Intellectual Property Holdings 2 Llc | Apparatus, system, and method for a storage layer |
US8392661B1 (en) | 2009-09-21 | 2013-03-05 | Tilera Corporation | Managing cache coherence |
US20110103391A1 (en) | 2009-10-30 | 2011-05-05 | Smooth-Stone, Inc. C/O Barry Evans | System and method for high-performance, low-power data center interconnect fabric |
US8751533B1 (en) | 2009-11-25 | 2014-06-10 | Netapp, Inc. | Method and system for transparently migrating storage objects between nodes in a clustered storage system |
US8484259B1 (en) | 2009-12-08 | 2013-07-09 | Netapp, Inc. | Metadata subsystem for a distributed object store in a network storage system |
US8949529B2 (en) | 2009-12-30 | 2015-02-03 | International Business Machines Corporation | Customizing function behavior based on cache and scheduling parameters of a memory argument |
WO2011083505A1 (en) | 2010-01-05 | 2011-07-14 | Hitachi, Ltd. | Method and server system for testing and executing migration between virtual servers |
US8244978B2 (en) | 2010-02-17 | 2012-08-14 | Advanced Micro Devices, Inc. | IOMMU architected TLB support |
US8589650B2 (en) | 2010-05-17 | 2013-11-19 | Texas Instruments Incorporated | Dynamically configurable memory system |
US8321487B1 (en) | 2010-06-30 | 2012-11-27 | Emc Corporation | Recovery of directory information |
US9165015B2 (en) | 2010-07-29 | 2015-10-20 | International Business Machines Corporation | Scalable and user friendly file virtualization for hierarchical storage |
US8392368B1 (en) | 2010-08-27 | 2013-03-05 | Disney Enterprises, Inc. | System and method for distributing and accessing files in a distributed storage system |
US8650165B2 (en) | 2010-11-03 | 2014-02-11 | Netapp, Inc. | System and method for managing data policies on application objects |
US8904120B1 (en) | 2010-12-15 | 2014-12-02 | Netapp Inc. | Segmented fingerprint datastore and scaling a fingerprint datastore in de-duplication environments |
US8898119B2 (en) | 2010-12-15 | 2014-11-25 | Netapp, Inc. | Fingerprints datastore and stale fingerprint removal in de-duplication environments |
US9317637B2 (en) | 2011-01-14 | 2016-04-19 | International Business Machines Corporation | Distributed hardware device simulation |
US20130060556A1 (en) | 2011-07-18 | 2013-03-07 | Et International, Inc. | Systems and methods of runtime system function acceleration for cmp design |
US8812450B1 (en) | 2011-04-29 | 2014-08-19 | Netapp, Inc. | Systems and methods for instantaneous cloning |
US20120331243A1 (en) | 2011-06-24 | 2012-12-27 | International Business Machines Corporation | Remote Direct Memory Access ('RDMA') In A Parallel Computer |
US9417823B2 (en) | 2011-07-12 | 2016-08-16 | Violin Memory Inc. | Memory system management |
US8930714B2 (en) | 2011-07-19 | 2015-01-06 | Elwha Llc | Encrypted memory |
US8738868B2 (en) | 2011-08-23 | 2014-05-27 | Vmware, Inc. | Cooperative memory resource management for virtualized computing devices |
US8615745B2 (en) | 2011-10-03 | 2013-12-24 | International Business Machines Corporation | Compiling code for an enhanced application binary interface (ABI) with decode time instruction optimization |
WO2013063486A1 (en) | 2011-10-28 | 2013-05-02 | The Regents Of The University Of California | Multiple-core computer processor for reverse time migration |
US9063939B2 (en) | 2011-11-03 | 2015-06-23 | Zettaset, Inc. | Distributed storage medium management for heterogeneous storage media in high availability clusters |
US10061534B2 (en) | 2011-12-01 | 2018-08-28 | Intel Corporation | Hardware based memory migration and resilvering |
US20140081924A1 (en) | 2012-02-09 | 2014-03-20 | Netapp, Inc. | Identification of data objects stored on clustered logical data containers |
US8844032B2 (en) | 2012-03-02 | 2014-09-23 | Sri International | Method and system for application-based policy monitoring and enforcement on a mobile device |
US9069710B1 (en) | 2012-03-28 | 2015-06-30 | Netapp, Inc. | Methods and systems for replicating an expandable storage volume |
US9043567B1 (en) | 2012-03-28 | 2015-05-26 | Netapp, Inc. | Methods and systems for replicating an expandable storage volume |
US20130318268A1 (en) | 2012-05-22 | 2013-11-28 | Xockets IP, LLC | Offloading of computation for rack level servers and corresponding methods and systems |
US9280788B2 (en) | 2012-06-13 | 2016-03-08 | Oracle International Corporation | Information retrieval and navigation using a semantic layer |
US9449068B2 (en) | 2012-06-13 | 2016-09-20 | Oracle International Corporation | Information retrieval and navigation using a semantic layer and dynamic objects |
US9134981B2 (en) | 2012-06-22 | 2015-09-15 | Altera Corporation | OpenCL compilation |
AU2013278969B2 (en) | 2012-06-23 | 2017-05-25 | Pmda Services Pty Ltd | A computing device for state transitions of recursive state machines and a computer-implemented method for the definition, design and deployment of domain recursive state machines for computing devices of that type |
US9111081B2 (en) | 2012-06-26 | 2015-08-18 | International Business Machines Corporation | Remote direct memory access authentication of a device |
US9390055B2 (en) | 2012-07-17 | 2016-07-12 | Coho Data, Inc. | Systems, methods and devices for integrating end-host and network resources in distributed memory |
KR101492603B1 (ko) | 2012-07-25 | 2015-02-12 | 모글루(주) | 전자문서 제작 시스템과 그 제어 방법 |
WO2014021821A1 (en) | 2012-07-30 | 2014-02-06 | Empire Technology Development Llc | Writing data to solid state drives |
US8768977B2 (en) | 2012-07-31 | 2014-07-01 | Hewlett-Packard Development Company, L.P. | Data management using writeable snapshots in multi-versioned distributed B-trees |
US20150063349A1 (en) | 2012-08-30 | 2015-03-05 | Shahab Ardalan | Programmable switching engine with storage, analytic and processing capabilities |
US8938559B2 (en) | 2012-10-05 | 2015-01-20 | National Instruments Corporation | Isochronous data transfer between memory-mapped domains of a memory-mapped fabric |
US20140137019A1 (en) | 2012-11-14 | 2014-05-15 | Apple Inc. | Object connection |
US9325711B2 (en) | 2012-12-11 | 2016-04-26 | Servmax, Inc. | Apparatus and data processing systems for accessing an object |
US20150370721A1 (en) | 2013-01-31 | 2015-12-24 | Hewlett-Packard Development Company, L.P. | Mapping mechanism for large shared address spaces |
US9552288B2 (en) | 2013-02-08 | 2017-01-24 | Seagate Technology Llc | Multi-tiered memory with different metadata levels |
US9405688B2 (en) | 2013-03-05 | 2016-08-02 | Intel Corporation | Method, apparatus, system for handling address conflicts in a distributed memory fabric architecture |
US9495468B2 (en) | 2013-03-12 | 2016-11-15 | Vulcan Technologies, Llc | Methods and systems for aggregating and presenting large data sets |
US9384037B2 (en) | 2013-03-14 | 2016-07-05 | Intel Corporation | Memory object reference count management with improved scalability |
US9756128B2 (en) | 2013-04-17 | 2017-09-05 | Apeiron Data Systems | Switched direct attached shared storage architecture |
US9195542B2 (en) | 2013-04-29 | 2015-11-24 | Amazon Technologies, Inc. | Selectively persisting application program data from system memory to non-volatile data storage |
CN104346372B (zh) | 2013-07-31 | 2018-03-27 | 国际商业机器公司 | 用于评估预测模型的方法和装置 |
US9825857B2 (en) | 2013-11-05 | 2017-11-21 | Cisco Technology, Inc. | Method for increasing Layer-3 longest prefix match scale |
US9141676B2 (en) | 2013-12-02 | 2015-09-22 | Rakuten Usa, Inc. | Systems and methods of modeling object networks |
US9372752B2 (en) | 2013-12-27 | 2016-06-21 | Intel Corporation | Assisted coherent shared memory |
US10592475B1 (en) | 2013-12-27 | 2020-03-17 | Amazon Technologies, Inc. | Consistent data storage in distributed computing systems |
US9734063B2 (en) | 2014-02-27 | 2017-08-15 | École Polytechnique Fédérale De Lausanne (Epfl) | Scale-out non-uniform memory access |
US9524302B2 (en) | 2014-03-05 | 2016-12-20 | Scality, S.A. | Distributed consistent database implementation within an object store |
US9965185B2 (en) | 2015-01-20 | 2018-05-08 | Ultrata, Llc | Utilization of a distributed index to provide object memory fabric coherency |
US8868825B1 (en) | 2014-07-02 | 2014-10-21 | Pure Storage, Inc. | Nonrepeating identifiers in an address space of a non-volatile solid-state storage |
US9805080B2 (en) | 2014-08-22 | 2017-10-31 | Xcalar, Inc. | Data driven relational algorithm formation for execution against big data |
US9582301B2 (en) * | 2014-09-17 | 2017-02-28 | International Business Machines Corporation | Method of defining javascript objects |
US9703768B1 (en) | 2014-09-30 | 2017-07-11 | EMC IP Holding Company LLC | Object metadata query |
US9858140B2 (en) | 2014-11-03 | 2018-01-02 | Intel Corporation | Memory corruption detection |
US10049112B2 (en) * | 2014-11-10 | 2018-08-14 | Business Objects Software Ltd. | System and method for monitoring of database data |
US9710421B2 (en) | 2014-12-12 | 2017-07-18 | Intel Corporation | Peripheral component interconnect express (PCIe) card having multiple PCIe connectors |
CN105760325A (zh) | 2014-12-16 | 2016-07-13 | 鸿富锦精密工业(武汉)有限公司 | 支持usb存储设备在dos***下热插拔的***及方法 |
US10025669B2 (en) | 2014-12-23 | 2018-07-17 | Nuvoton Technology Corporation | Maintaining data-set coherency in non-volatile memory across power interruptions |
WO2016118559A1 (en) | 2015-01-20 | 2016-07-28 | Ultrata Llc | Object based memory fabric |
US11086521B2 (en) | 2015-01-20 | 2021-08-10 | Ultrata, Llc | Object memory data flow instruction execution |
US9747108B2 (en) | 2015-03-27 | 2017-08-29 | Intel Corporation | User-level fork and join processors, methods, systems, and instructions |
US9880769B2 (en) * | 2015-06-05 | 2018-01-30 | Microsoft Technology Licensing, Llc. | Streaming joins in constrained memory environments |
US9886210B2 (en) | 2015-06-09 | 2018-02-06 | Ultrata, Llc | Infinite memory fabric hardware implementation with router |
US9971542B2 (en) | 2015-06-09 | 2018-05-15 | Ultrata, Llc | Infinite memory fabric streams and APIs |
US10698628B2 (en) | 2015-06-09 | 2020-06-30 | Ultrata, Llc | Infinite memory fabric hardware implementation with memory |
US9881040B2 (en) | 2015-08-20 | 2018-01-30 | Vmware, Inc. | Tracking data of virtual disk snapshots using tree data structures |
US10241676B2 (en) | 2015-12-08 | 2019-03-26 | Ultrata, Llc | Memory fabric software implementation |
US10248337B2 (en) | 2015-12-08 | 2019-04-02 | Ultrata, Llc | Object memory interfaces across shared links |
CA3006773A1 (en) | 2015-12-08 | 2017-06-15 | Ultrata, Llc | Memory fabric software implementation |
EP3387548B1 (en) | 2015-12-08 | 2023-08-02 | Ultrata LLC | Memory fabric operations and coherency using fault tolerant objects |
-
2016
- 2016-05-31 US US15/168,965 patent/US9971542B2/en active Active
- 2016-06-01 WO PCT/US2016/035203 patent/WO2016200649A1/en active Application Filing
- 2016-06-01 EP EP16808045.5A patent/EP3308268A4/en not_active Withdrawn
- 2016-06-01 CA CA2988963A patent/CA2988963A1/en active Pending
- 2016-06-01 CN CN201680045283.9A patent/CN108431774B/zh active Active
-
2018
- 2018-04-06 US US15/946,860 patent/US10235084B2/en active Active
-
2019
- 2019-01-22 US US16/254,079 patent/US10606504B2/en active Active
-
2020
- 2020-03-10 US US16/814,583 patent/US10922005B2/en active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050044187A1 (en) * | 2003-08-21 | 2005-02-24 | Microsoft Corporation | Systems and methods for providing conflict handling for peer-to-peer synchronization of units of information manageable by a hardware/software interface system |
CN1906914A (zh) * | 2004-01-09 | 2007-01-31 | 日本电气株式会社 | 通信方法 |
US20090271790A1 (en) * | 2006-03-17 | 2009-10-29 | Paul Williams | Computer architecture |
US20090125639A1 (en) * | 2007-11-11 | 2009-05-14 | Weed Instrument Company, Inc. | Method, apparatus and computer program product for ring network communication |
CN101946466A (zh) * | 2007-12-21 | 2011-01-12 | 英特尔公司 | 多个应用的对等流传输和api服务 |
EP2377032A4 (en) * | 2008-12-05 | 2012-11-07 | Social Communications Co | CADISM IN REAL INVISIBLE TIME |
US20120017037A1 (en) * | 2010-04-12 | 2012-01-19 | Riddle Thomas A | Cluster of processing nodes with distributed global flash memory using commodity server technology |
CN104380256A (zh) * | 2012-04-19 | 2015-02-25 | 加泰罗尼亚理工大学 | 用于虚拟化与计算机***关联的硬件资源的方法、***和执行代码段 |
US20140146062A1 (en) * | 2012-11-26 | 2014-05-29 | Nvidia Corporation | System, method, and computer program product for debugging graphics programs locally utilizing a system with a single gpu |
US20150039840A1 (en) * | 2013-08-05 | 2015-02-05 | Iii Holdings 2, Llc | Remote memory ring buffers in a cluster of data processing nodes |
Also Published As
Publication number | Publication date |
---|---|
WO2016200649A1 (en) | 2016-12-15 |
CN108431774B (zh) | 2022-04-12 |
CA2988963A1 (en) | 2016-12-15 |
US10922005B2 (en) | 2021-02-16 |
US20190155537A1 (en) | 2019-05-23 |
US20200210092A1 (en) | 2020-07-02 |
US20180225061A1 (en) | 2018-08-09 |
US20160364171A1 (en) | 2016-12-15 |
US9971542B2 (en) | 2018-05-15 |
EP3308268A4 (en) | 2019-02-20 |
EP3308268A1 (en) | 2018-04-18 |
US10235084B2 (en) | 2019-03-19 |
US10606504B2 (en) | 2020-03-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108431774A (zh) | 无限存储器结构流和api | |
CN107924371A (zh) | 带有路由器的无限存储器结构硬件实现方案 | |
CN108885607A (zh) | 使用容错对象的存储器结构操作和一致性 | |
US11573699B2 (en) | Distributed index for fault tolerant object memory fabric | |
CN108885604A (zh) | 存储器结构软件实现方案 | |
CN107533457A (zh) | 对象存储器数据流指令执行 | |
US11256438B2 (en) | Infinite memory fabric hardware implementation with memory | |
US10241676B2 (en) | Memory fabric software implementation | |
CN107533517A (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 |