CN108885607A - 使用容错对象的存储器结构操作和一致性 - Google Patents
使用容错对象的存储器结构操作和一致性 Download PDFInfo
- Publication number
- CN108885607A CN108885607A CN201680080699.4A CN201680080699A CN108885607A CN 108885607 A CN108885607 A CN 108885607A CN 201680080699 A CN201680080699 A CN 201680080699A CN 108885607 A CN108885607 A CN 108885607A
- Authority
- CN
- China
- Prior art keywords
- memory
- node
- 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/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/167—Interprocessor communication using a common memory, e.g. mailbox
-
- 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
- G06F11/00—Error detection; Error correction; Monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3034—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a storage system, e.g. DASD based or network based
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3037—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a memory, e.g. virtual memory, cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/3485—Performance evaluation by tracing or monitoring for I/O devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/04—Addressing variable-length words or parts of words
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
-
- 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/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
- G06F3/0649—Lifecycle management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/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/065—Replication 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/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0662—Virtualisation aspects
- G06F3/0667—Virtualisation aspects at data level, e.g. file, record or object virtualisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Quality & Reliability (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
根据一个实施例,一种对象存储器结构的多个基于硬件的处理节点中的基于硬件的处理节点可以包括存储器模块,所述存储器模块在所述对象存储器结构的分层结构中存储并管理多个存储器对象。每个存储器对象可以是在所述存储器模块内本地创建的,使用单个存储器引用指令而不用输入/输出(I/O)指令存取,并由所述存储器模块在单个存储器层管理。所述对象存储器结构可以在每对象的基础上跨所述对象存储器结构的分层结构和所述多个基于硬件的处理节点分布和追踪存储器对象。跨所述对象存储器结构的分层结构和所述多个基于硬件的处理节点分布存储器对象可以包括在每对象的基础上在所述对象存储器结构的多个基于硬件的处理节点中的两个或更多的节点上存储每个存储器对象。
Description
相关申请的交叉引用
本申请要求Frank等人于2015年12月8日提交的题为“Infinite Memory FabricOperations,Coherency,and Interfaces”的美国临时申请No.62/264,652在35 USC 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 Streams andAPIS”的美国专利申请No.15/168,965;
由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;
与本申请同时提交的题为“Memory Fabric Software Implementation”的美国专利申请No.15/371,393(代理人案号8620-15);以及
与本申请同时提交的题为“Object Memory Interfaces Across Shared Links”的美国专利申请No._______________(代理人案号8620-17),其每一个的全部公开内容通过引用并入本文用于所有目的。
背景技术
本发明的实施例总体上涉及用于改善结构(fabric)中的处理节点的性能的方法和系统,且更具体地,涉及改变管理处理(processing)、存储器(memory)、存储体(storage)、网络和云计算的方式以显著地改善商品硬件的效率和性能的方法和系统。
随着数据以及对其执行的进程的大小和复杂性不断增加,计算机硬件面临着满足这些需求的挑战。来自现有服务器、网络和存储体供应商的当前商品硬件和软件解决方案无法满足云计算和大数据环境的需求。这至少部分地是由于这些系统管理处理、存储器和存储体的方式导致的。具体地,在目前的系统中,处理与存储器分离,存储器进而与存储体分离,处理、存储器和存储体中的每一个单独地由软件管理。每个服务器和其他计算装置(本文称为节点)进而通过物理计算机网络与其他节点分离,单独地由软件管理,并且进而,与每个节点相关联的单独的处理、存储器和存储体由该节点上的软件管理。
图1是示出了现有技术的商品服务器和网络部件内的分离数据存储体、存储器和处理的示例的框图。该示例示出了系统100,其中商品服务器105和110经由本领域中已知的物理网络115和网络软件155彼此通信地耦合。本领域中还已知,服务器各自可以执行任何种类的任何数量的一个或多个应用120a、120b、120c。本领域中已知,使用存储在物理存储体150中的数据来在服务器105和110的处理器(未示出)和存储器(未示出)上执行每个应用120a、120b、120c。服务器105和110中的每一个保持目录125,该目录125映射应用120a、120b、120c所使用的数据的位置。此外,每个服务器为每个执行中的应用120a、120b、120c实现软件堆栈,所述软件堆栈包括数据的应用表示130、数据库表示135、文件系统表示140、以及存储表示145。
虽然有效,但存在三个原因,使得这些来自现有的服务器、网络和存储体供应商的当前的商品硬件和软件解决方案的实现方案无法满足云计算和大数据环境日益增长的需求。这些实现方案的缺点的一个原因在于其复杂性。软件堆栈必须就位,且每个应用必须管理存储体、存储器和处理的分离以及应用并行服务器资源。每个应用必须权衡算法并行性、数据组织和数据移动,这对于正确性来说是非常有挑战性的,更不用说考虑性能和经济性。这往往导致在应用中实施更多面向批量的解决方案,而不是大多数企业所偏好的集成实时解决方案。此外,在这种实现中的存储体、存储器和处理的分离也为软件堆栈的每一层寻找、移动和存取数据块造成显著的低效率,这是由于所需的指令执行、以及软件堆栈的每一层的延迟和层之间的延迟。另外,这种低效率限制了经济规模的可能性,并且限制了除了最为并行的算法之外的所有算法的数据大小。后者的原因是,由于阿姆达尔定律(Amdahl’slaw),服务器(处理器或线程)可以交互的效率限制了并行度。因此,需要用以管理处理、存储器和存储体从而显著地改善处理节点的性能的改善的方法和系统。
发明内容
本发明的实施例提供了用于管理处理、存储器、存储体、网络和云计算的以显著地改善处理节点的效率和性能的系统和方法。本文描述的实施例可以实现基于对象的存储器结构,其中,存储器结构中的存储器对象是跨处理节点的分层结构而被分布和追踪的。每个处理节点可以追踪存在于从该节点朝向其分层结构中的叶节点的路径上的存储器对象和存储器对象内的块。此外,每个处理节点可以利用相同的用于存储器对象管理的算法,例如存储器对象创建、块分配、块一致性等。这样,分层结构的每个更高级别创建了更大的高速缓存,可以显著减少在该级别处出入处理节点的带宽。
根据一个实施例,通过使存储器对象能够在每对象(per-object)的基础上被存储在多于一个的节点中,可以基于该分层分布和追踪,来实现容错能力。这种跨多个节点的存储器对象分布可以是跨分层结构和/或跨多个物理位置。存储器对象容错副本可以通过块一致性机制进行处理,作为存储器结构操作的一部分。以这种方式,可以使每个存储器对象存在于多个不同的节点上。存储器对象可以作为整体被包含在多个节点中的每个节点内,或者在分层结构的给定级别中,或者可以被存储为不同的部分,其中每个部分被包含在多个不同的节点内。
根据一个实施例,对象存储器结构中的多个基于硬件的处理节点中的基于硬件的处理节点可以包括存储器模块,所述存储器模块在对象存储器结构的分层结构中存储并管理多个存储器对象。每个存储器对象可以是在存储器模块内本地创建的,使用单个存储器引用指令而不用输入/输出(I/O)指令存取,并由存储器模块在单个存储器层管理。对象存储器结构可以在每对象的基础上跨对象存储器结构的分层结构和多个基于硬件的处理节点分布和追踪存储器对象。跨对象存储器结构的分层结构和多个基于硬件的处理节点分布存储器对象可以包括:在每对象的基础上,在对象存储器结构的多个基于硬件的处理节点中的两个或更多的节点上存储每个存储器对象。多个基于硬件的处理节点中的两个或更多的节点可以在对象存储器结构的分层结构中彼此远离和/或处于不同的物理位置。
跨对象存储器结构的分层结构追踪存储器对象可以包括:由基于硬件的处理节点追踪存在于基于硬件的处理节点上的存储器对象和存储器对象内的块。另外地或可选地,跨对象存储器结构的分层结构追踪存储器对象可以包括:追踪存在于对象存储器结构的分层结构的每个级别上的以及从分层结构的每个级别朝向对象存储器结构的分层结构的叶的分支上的存储器对象和存储器对象内的块。基于硬件的处理节点可以利用与多个基于硬件的处理节点中的每个其他节点相同的用于对象管理的算法。用于对象管理的算法可以包括用于对象创建的算法、用于块分配的算法、和/或用于块一致性的算法。
在一个实施例中,基于硬件的处理节点可以包括双列直插存储器模块(DIMM)卡。在其他情况下,基于硬件的处理节点可以包括商品服务器,并且其中存储器模块包括安装在商品服务器内的DIMM卡。在其他情况下,基于硬件的处理节点可以包括移动计算设备。在其他实施方式中,基于硬件的处理节点可以包括单个芯片。
根据另一实施例,对象存储器结构可以包括多个基于硬件的处理节点。每个基于硬件的处理节点可以包括存储器模块,所述存储器模块在对象存储器结构的分层结构中存储并管理多个存储器对象。每个存储器对象可以是在存储器模块内本地创建的,使用单个存储器引用指令而不用输入/输出(I/O)指令存取,并在单个存储器层管理。节点路由器可以与节点的一个或多个存储器模块中的每一个通信地耦合,并且可以适配为在节点的一个或多个存储器模块之间路由存储器对象或存储器对象的部分。一个或多个节点间路由器可以与每个节点路由器通信地耦合。对象存储器结构的多个节点中的每个可以与至少一个节点间路由器通信地耦合,并且可以适配为在多个节点之间路由存储器对象或存储器对象的部分。
对象存储器结构可以在每对象的基础上跨对象存储器结构的分层结构和多个基于硬件的处理节点分布和追踪存储器对象。跨对象存储器结构的分层结构和多个基于硬件的处理节点分布存储器对象可以包括:在每对象的基础上,在对象存储器结构的多个基于硬件的处理节点中的两个或更多的节点上存储每个存储器对象。多个基于硬件的处理节点中的两个或更多的节点可以在对象存储器结构的分层结构中彼此远离和/或处于不同的物理位置。
跨对象存储器结构的分层结构追踪存储器对象可以包括:由每个基于硬件的处理节点追踪存在于基于硬件的处理节点上的存储器对象和存储器对象内的块。跨对象存储器结构的分层结构追踪存储器对象还可以包括:追踪存在于对象存储器结构的分层结构的每个级别上的以及从分层结构的每个级别朝向对象存储器结构的分层结构的叶的分支上的存储器对象和存储器对象内的块。每个基于硬件的处理节点可以利用相同的用于对象管理的算法。用于对象管理的算法可以包括用于对象创建的算法、用于块分配的算法、和/或用于块一致性的算法。
根据另一实施例,用于在包括多个基于硬件的处理节点的对象存储器结构中提供一致性和容错性的方法可以包括:由基于对象的存储器结构的基于硬件的处理节点,在基于硬件的处理节点的存储器模块内本地创建每个存储器对象;由基于硬件的处理节点,使用单个存储器引用指令而不用输入/输出(I/O)指令存取每个存储器对象;由基于硬件的处理节点,在单个存储器层管理存储器模块内的每个存储器对象。可以在每对象的基础上,跨对象存储器结构的分层结构和多个基于硬件的处理节点分布和追踪存储器对象。跨对象存储器结构的分层结构和多个基于硬件的处理节点分布存储器对象可以包括:在每对象的基础上,在对象存储器结构的多个基于硬件的处理节点中的两个或更多的节点上存储每个存储器对象。两个或更多的节点可以在对象存储器结构的分层结构中彼此远离和/或处于不同的物理位置。跨对象存储器结构的分层结构追踪存储器对象可以包括:追踪存在于基于硬件的处理节点上的和/或存在于所述对象存储器结构的分层结构的每个级别上的以及从所述分层结构的每个级别朝向所述对象存储器结构的分层结构的叶的分支上的存储器对象和存储器对象内的块。
附图说明
图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是示出了根据本公开的某些实施例的存储器结构路由器内的流的示例的框图。
图24是示出了根据本发明的某些实施例的产品系列硬件实现架构的框图。
图25是示出了根据本公开的某些实施例的替代产品系列硬件实现架构的框图。
图26是示出了根据本公开的某些实施例的硬件实现架构的存储器结构服务器视图的框图。
图27是示出了根据本公开的某些实施例的硬件实现架构的存储器模块视图的框图。
图28是示出了根据本公开的某些实施例的硬件实现架构的存储器模块视图的框图。
图29是示出了根据本公开的某些实施例的硬件实现架构的节点路由器视图的框图。
图30是示出了根据本公开的某些实施例的硬件实现架构的节点间路由器视图的框图。
图31是示出了根据本公开的某些实施例的硬件实现架构的存储器结构路由器视图的框图。
图32是示出了根据本公开的一个实施例的可以代替软件函数的对象存储器结构函数的框图。
图33是示出了根据本公开的一个实施例的对象存储器结构软件堆栈的框图。
图34是示出了根据一个实施例的存储器模块高速缓存的概要的框图。
图35是示出了根据一个实施例的用于与存储器模块相关的若干功能的DDR4 dram高速缓存的示例性分区的图。
图36是示出了根据一个实施例的节点和叶高速缓存的框图。
具体实施方式
在下面的描述中,为了解释的目的,阐述了许多具体细节,以便提供对本发明的各种实施例的透彻的理解。然而,对于本领域技术人员显而易见的是,可以在没有这些具体细节中的一些的情况下实施本发明的实施例。在其他情况下,公知的结构和装置以框图形式示出。
接下来的描述仅提供示范性实施例,并不意图限制本公开的范围、适用性或配置。相反,对示范性实施例的接下来的描述将为本领域技术人员提供能够实现示范性实施例的描述。应当理解,在不脱离如所附权利要求中阐述的本发明的精神和范围的情况下,可以对元件的功能和布置进行各种改变。
在以下描述中给出具体细节以提供对实施例的透彻理解。然而,本领域普通技术人员将理解,可以在没有这些具体细节的情况下实践实施例。例如,电路、系统、网络、进程和其他部件可以以框图形式被示出为部件,以免不必要的细节使实施例变得模糊。在其他情况下,可以示出公知的电路、过程、算法、结构和技术,而不需要不必要的细节,以免使实施例变得模糊。
另外,应当注意,各个实施例可以被描述为进程,其被绘示为流程表、流程图、数据流程图、结构图或框图。尽管流程图可能将操作描述为顺序进程,但是许多操作可以并行或同时执行。此外,可以重新布置操作的顺序。进程在其操作完成后终止,但是可以具有图中未包括的额外的步骤。进程可以对应于方法、函数、过程、子例程、子程序等。当进程对应于函数时,其终止可以对应于函数返回到调用函数或主函数。
术语“机器可读介质”包括但不限于便携式或固定式存储装置、光学存储装置、无线信道、以及能够存储、包含或携带(多个)指令和/或数据的各种其他介质。代码段或机器可执行的指令可以表示过程、函数、子程序、程序、例程、子例程、模块、软件包、类、或指令、数据结构、或程序语句的任何组合。通过传递和/或接收信息、数据、实参、形参或存储器内容,代码段可以耦合到另一代码段或硬件电路。信息、实参、形参、数据等可以经由任何合适的手段传递、转发或传输,包括存储器共享、消息传递、令牌传递、网络传输等。为了清楚起见,现在限定本文所使用的各种其他术语。
虚拟存储器是一种存储器管理技术,其为每个软件进程提供存储器与虚拟地址空间一样大的错觉。与不同程度的硬件相结合的操作系统将物理存储器管理为虚拟地址空间的高速缓存,其位于辅助存储体中,并可通过输入/输出指令存取。虚拟存储器与文件系统分离,但是可以与其进行交互。
单级存储是虚拟存储器的扩展,其中没有文件,仅有使用虚拟存储器技术映射到进程的地址空间的持久对象或段。计算系统的整个存储体被认为是段以及段内的地址。因此,至少有三个单独的地址空间被软件管理,即物理存储器地址/节点、虚拟地址/进程、以及辅助存储体地址/磁盘。
对象存储体是指存储体的单元(被称为对象)被组织的方式。每个对象包含容器,该容器包含三件事物:实际数据;可扩展元数据;以及全局唯一的标识符(本文称为对象地址)。对象的元数据用于限定关于数据的情景信息、以及如何使用和管理该数据(包括与其他对象的关系)。
对象地址空间由软件在存储装置、节点和网络上进行管理,以在不知道对象的物理位置的情况下查找对象。对象存储体与虚拟存储器和单级存储分离,但当然可以通过软件进行互操作。
块存储体由均匀大小的数据块组成,具有基于物理位置的地址,且没有元数据。
网络地址是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),其可以被添加到上述计算机系统中的任一个。例如,存储器模块可以被添加到诸如服务器节点的商品或“现成”硬件,并作为该节点内的大数据加速器。部件也可以包括一个或多个对象路由器。对象路由器可以例如包括与存储器模块和一个或多个外部对象路由器(例如,机架安装路由器)一起添加到服务器节点的PCI高速卡。对象路由器可以用于互连两个或更多个服务器或与存储器模块适配的其他节点,并有助于跨越这些不同的服务器管理处理、存储器和存储体。对象路由器可以基于对象地址来转发对象或对象的部分,并参与对象存储器结构中的操作。这些硬件部件可以与商品服务器或其他类型的计算节点以任何组合方式一起使用,以实现对象存储器结构架构。
图4是示出了根据本发明的一个实施例的示范性对象存储器结构架构的框图。如这里所示,架构400包括支持任何数量的应用(App)410a-g的对象存储器结构405。如将在下面更详细地描述的,该对象存储器结构405可以包括任何数量的处理节点,例如已经安装了本文所述的一个或多个存储器模块的一个或多个服务器。这些节点可以通过本文所述的一个或多个内部和/或外部对象路由器来互连。尽管被描述为包括一个或多个服务器,应当注意,对象存储器结构405的处理节点可以包括任何数量的各种不同的计算机和/或计算装置,其适用于在本文所述的对象存储器结构405内操作。
根据一个实施例,对象存储器结构405提供基于对象的存储器,其在对象存储器结构405的各节点的存储器内并且在存储器层而不是在应用层中管理存储器对象。即是说,可以在对象存储器结构405的节点中本地地实现和管理对象和相关联的属性,使得在无需任何软件的情况下能够提供增强的功能并通过动态地管理对象特性(包括但不限于,持久性、位置和处理)来提高效率和性能。对象属性也可以传播到应用410a-g。对象存储器结构405的存储器对象可用于消除由地址大小施加在商品服务器或其他节点的存储器空间上的典型大小限制。相反,物理寻址可以在存储器对象本身内进行管理,且对象可以进而通过对象名称空间被存取和管理。通过在对象内实现和管理存储器(临时)和存储体(持久),对象存储器结构405的存储器对象也可以用来消除存储器和存储体之间的区别。通过透明地管理对象(或对象的部分)的位置,对象存储器结构405也可以消除本地和远程存储器之间的区别,因此所有对象都同时对于所有节点呈现为本地的。通过将处理置于存储器本身内的对象的方法,存储器对象还可以来消除处理和存储器之间的区别。换言之,本发明的实施例提供了对计算和存储以及存储和计算加以结合的单级存储器,直接且从而消除了跨越多级软件通信的多级软件开销以及移动待处理的数据的人为开销。
按照这些方式,通过减少或消除通常与系统和应用软件层处的存储器管理、存储体管理、网络、数据目录和数据缓冲器相关联的开销,本文所述的对象存储器结构405的实施例及其部件可以提供透明且动态的性能加速,特别是对于大数据或其他存储器密集型应用。相反,在存储器级管理存储器对象可以显著缩短存储体和存储器之间以及存储器和处理之间的通路,从而消除其每一个之间的相关的开销。
实施例提供了一致性的、基于硬件的、无限的存储器,其作为存储器中性能加速的、跨越所有节点、且在所有节点上可扩展的存储器对象来加以管理。这允许基于对象和终端应用的透明动态性能加速。使用根据本发明的实施例的架构,应用和系统软件可以被视为与单个标准服务器一样和简单,但是额外地允许存储器结构对象来捕获启发式(heuristics)。实施例提供多维度的加速性能,包括本地加速。根据一个实施例,与存储器对象相关联的对象存储器结构元数据可以包括触发器,其使得对象存储器结构架构能够使数据本地化且在使用前将数据移动到快速DRAM存储器。触发器可以是使得存储器系统能够基于存储器存取来执行任意函数的基本概括。各种实施例还可以包括指令集,该指令集可以基于在与每个存储器对象相关联的元数据中定义的触发器来为对象存储器结构提供唯一指令模型,并且支持核操作和优化并且允许在存储器结构内以高度并行的方式更高效地执行应用的存储器密集部分。
实施例还可以通过用少量的存储器引用来代替复杂的应用、存储体和网络堆栈,以减少软件路径长度。当在本发明的实施例下存储器和存储体可作为存储器直接寻址时,可以实现这一点。实施例可以额外地提供高级别存储器操作的加速性能。对于许多情况,对象存储器结构架构的实施例可以消除将数据移动到处理器并移回到存储器(其对于目前具有三个或更多级别的高速缓存的现代处理器来说是非常低效的)的需要。
图5是示出了根据本发明的一个实施例的示范性存储器结构对象存储器的框图。更具体地,该示例示出了如何可以组织存储器结构对象存储器的应用视图。存储器结构对象地址空间500可以是128位线性地址空间,其中,对象ID对应于可寻址对象的开始。对象510可以是从212到264字节的可变大小。由于对象存储体是在每块的基础上进行分配,地址空间500可以高效地在对象内或跨对象稀疏地利用。对象空间500的大小必须足够大,使得不需要垃圾回收且能够使不相交的系统容易地组合。
与每个对象510相关联的对象元数据505可以相对于对象地址空间500是透明的,且可以利用对象存储器结构来管理对象和对象内的块,且可以由应用515a-g通过对象存储器结构的应用编程接口(API)以适当的权限进行存取。该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)到16拍字节(petabyte)(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函数库中对于应用透明地处理)建立对象存储器结构对象和虚拟地址段之间的关系,标准x86 linux程序可以高效且透明地利用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位对象地址)的请求时,节点使用对象目录来确定该节点是否具有该对象的任何部分。如果是这样,则对象目录指向可以用于本地定位感兴趣的块的每(per)对象树(一个单独的树,其大小基于对象的大小)。可以存在额外的触发元数据,当特定的感兴趣块被传送到/传送通过存储器模块时,该触发元数据为特定的感兴趣块指示以预定义的方式来解释特定的地址。触发器可以对于对象内的一个或多个数据块在每块的基础上指定一个或多个预定义的硬件和/或软件动作(例如,获取特定地址、运行更复杂的触发程序、执行预获取、计算这其它三个块、并向软件发送信号等等)。触发器可以对应于硬件方式,来随着对象流过对象存储器结构的任何存储器模块时在需要移动数据和/或其他动作之前动态地移动数据和/或执行其他动作。相应地,当具有一个或多个触发器的特定存储器对象位于相应的存储器模块并且作为处理一个或多个其他请求的相应的存储器模块的一部分被存取时,可以实现这样的动作。
图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树。根树可以是对象索引树(object index tree,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中标识。其他实施例是可能的。各个索引树可以包括节点块和叶块。每个节点块或叶块可以基于类型和大小包括可变数量的条目。类型指定节点、节点块、叶和/或叶块的类型。
大小(Size)独立地指定LPointer和Index Val(或对象偏移)的大小。在平衡的树内,单个块可以指向所有节点块或所有叶块。为了传递最高性能,树可能会变得不平衡,例如在通过树的所有路径的级别的数量是等同的情况下。节点块和叶块可以提供字段来支持不平衡的树。后台活动可能会重新平衡作为其他后台操作一部分的树。例如,OIT中的内部节点(非叶)可以包括LPointer和NValue字段。NValue可以包括对象大小和Object ID。Object ID需要107(128-21)位来指定最小的可能对象。每个LPointer可以指向内部节点或叶节点的下一个级别。LPointer可能需要足够的位来表示其本地存储体中的所有块(大约32位表示16TB)。对于POIT中的节点,NValue可以由基于对象大小的对象偏移组成。对象大小可以在NSize字段内进行编码。大小(Size)字段可以使得节点能够基于使用情况来保有最大数量的LPointer和NValue字段。索引树根节点可以存储在多个闪存装置上的多个位置处,以实现OIT的可靠的冷启动。树根块更新可以在镜像之间交替,以提供磨损均衡。
默认情况下,每个POIT叶条目可以指向单个块(例如,4k字节)的位置。POIT叶OM条目和POIT叶路由器(POIT Leaf Router)条目可以包含一个允许支持超出单个块的字段,从而通过能够匹配持久存储体的页面大小,实现更加压缩的索引树、导致更高的索引树性能和更高的持久存储性能。
节点和叶可以通过在每个4k块的开始处的类型(Type)字段来区分。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)指令的版本创建,并且可以由加入(join)指令重新加入。扩展指令集可以通过对自帧指针起的偏移执行操作,来将帧指针当作堆栈或寄存器集合的顶部。加载和存储指令可以在帧和对象之间移动数据。
图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中。
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中。
表47.src_fp–源帧指针 |
描述 |
指定自线程帧指针起的无符号偏移,以读取源操作数 |
对象存储器结构对象内的每个字都可以包括指示空(empty)或满(full)状态的状态。空状态在概念上意味着对应的字的值已被清空。满状态在概念上意味着对应的字的值已被填充。某些指令可以使用这种状态,以不可分割地确保只有一个线程可以读取或写入该字。空指令可以类似于加载指令来操作,如下表48所示。
在由src_offset指定的对象偏移处由src_oid指定的对象中的osize操作数可以被写入到从由dst_fp指定的帧指针起的字偏移。清空(empty)指令二进制格式可以表示为:
Empty指令集示例操作数集合包含在下表49-52中。
表51.src_off-源对象偏移 |
描述 |
指定自线程帧指针起的无符号偏移,以读取对应于对象偏移的源操作数 |
表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指定的对象中由policy指定的策略,在由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中。
表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,其为复制的源。 |
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中。
AssocObj(关联对象)指令集包括将对象OID与VaSegment和ProcessID相关联。将OID与VaSegment相关联使得ObjectRelative和ObjectVA地址能够被对象存储器结构正确地访问。AssocObj指令二进制格式可以表示为:
AssocObj OID ProcessID VaSegment
AssocObj指令集的示例操作数集合包含在下表90-92中。
表90.OID-对象ID |
描述 |
待关联的对象的对象ID |
表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 |
表95.OID-对象ID |
描述 |
待解关联的对象的对象ID |
AssocBlk(关联块)指令集包括将块OA与本地物理地址PA相关联。这允许对象存储器将对象存储器结构块与PA块相关联,以用于本地处理器访问。AssocBlk指令二进制格式可以表示为:
AssocBlk place OA PA LS[15:00]
AssocBlk指令集的示例操作数集合包含在下表96-99中。
表97.OA-对象存储器结构块对象地址 |
描述 |
待关联的对象的对象ID |
表98.PA-物理块地址 |
描述 |
待关联的块的本地物理块地址 |
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(Node 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,可以用作路由代理和/或对象存储器的任何组合。软件对象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命令可以作为触发程序的一部分。
如关于“存储器结构分布式对象存储器和索引”(例如,关于本文所描述的图10-12)所述,引入三个部件来描述对象存储器和索引的数据结构和操作。这三个部件如下表127所示。本节将更深入地讨论物理实例。
由于所有三种构成因素都共享关于对象存储器和索引的通用功能,因此底层设计对象可以在这三者中被重复使用(一种通用设计)。
图24是示出根据本公开的某些实施例的产品系列硬件实现架构的框图。
在服务器内,存储器模块或DIMM可以插入标准的DDR4存储器插槽。每个存储器模块/DIMM都可以以处理器认为存在闪存量的快速dram的方式独立地管理dram存储器(快速和相对昂贵的)和闪存(不是那么快,但是便宜得多)(参见,例如本文中的“对象存储器缓存部分”)。每个处理器插槽可能有8个存储器插槽,或者双插槽服务器可能有16个存储器插槽。节点路由器或“uRouter”可以通过PCle和存储器总线、利用直接存储器存取来与存储器模块/DIMM进行通信。存储器结构可以保留每个存储器模块/DIMM物理存储器映射的一部分,以实现到基于PCIe的节点路由器/uRouter和从PCIe的节点路由器/uRouter的通信。因此,PCle、存储器总线和存储器模块/DIMM存储器的存储器结构专用部分的组合可以形成虚拟高带宽链路。这对于应用执行来说可以都是透明的。
节点路由器/uRouter可以通过使用千兆以太网协议多个层的25/100GE光纤与节点间路由器或“IMF-Router”进行连接。节点间路由器可以利用同样的25/100GE光纤进行连接。节点间路由器可以提供16个下行链路和朝向根的2个上行链路。一个实施例可以利用专门的链路。另一实施例可以与标准链路和路由器进行互操作。
图25是示出了根据本公开的某些实施例的替代产品系列硬件实现架构的框图。该实施例可以提供额外的存储器触发指令集和扩展对象方法执行资源。这使得能够减少所需的服务器的数量,因为更多的数据库存储体管理器和引擎可以在对象存储器内执行而不需要服务器处理器资源。无服务器的存储器结构节点可以包含16个具有节点路由器/uRouter的对象存储器。10个节点可以被封装进单个1U机架安装机箱中,提供了16倍的空间减少且性能提升高达5倍。
服务器节点
服务器可以包含单个节点路由器/uRouterr和一个或多个存储器模块/DIMM。节点路由器可以实现对象索引,该对象索引覆盖了对保存在同一服务器内的对象存储器(或多个对象存储器)(存储器模块)内的所有对象/块。存储器模块可以保存实际对象和对象中的块、相应的对象元数据、和覆盖了当前本地存储对象的对象索引。每个存储器模块都可以以处理器认为存在闪存量的快速dram的方式独立地管理dram存储器(其可以是,例如快速且相对昂贵的)和闪存(其可以是,例如不是那么快,但是便宜得多)。存储器模块和节点路由器都可以通过自由存储体索引来管理自由存储体,这可以通过与其他索引相同的方式来实现。
图26是图示根据本公开的某些实施例的硬件实现架构的存储器结构服务器视图的框图。
如本文所述,可以通过存储器结构API来创建和维护对象。API可以通过libc的存储器结构版本和存储器结构驱动器来与节点路由器/uRouter进行通信。然后,节点路由器可以更新本地对象索引,根据需要朝向根发送命令,并与适当的存储器模块/DIMM进行通信以完成API命令(例如以本地方式)。存储器模块可以将管理请求传送回节点路由器,而节点路由器可以关于存储器结构和本地Linux二者来适当地处理管理请求。节点路由器和存储器模块可参与到移动对象和块(例如以参照图12的“对象存储器未命中”中描述的方式)。
存储器模块/RDIMM
RDIMM可以包含dram(例如32千兆字节(Gbyte))、闪存(例如4太字节(Tbyte))、以及FPGA和DDR4兼容缓冲器(每个存储器模块的第一代产品容量)。FPGA可以包含所有的资源、结构和内部数据结构,以将dram和闪存作为整合在存储器结构整体中的对象存储器进行管理。
图27是图示根据本公开的某些实施例的硬件实现架构的存储器模块视图的框图。
可以使用单个可扩展和可参数化架构来实现存储器模块/DIMM上的存储器结构以及节点路由器/uRouter和节点间路由器/IMF-Router。
内部架构可以围绕高性能、可扩展的环形互连来组织,该环形互连可以实现存储器结构一致性协议的本地版本。每个子系统可以通过一致性高速缓存来连接环。所存储的元数据、数据和对象的类型可以取决于子系统的功能。全部三个子系统中的路由引擎可以从通用设计中合成、可以是高度多线程化的,并可以没有长期的线程或状态。路由引擎的示例集合可以如下:
1.Dram路由引擎(流引擎(StreamEngine)):控制存储器模块/DDR4存取,监视用于处理器存取数据的触发器,并且包含DDR4高速缓存。流引擎可以为触发器监视DDR4操作,并通过映射0.5Tbyte物理DIMM地址空间的内部表格来验证DDR4高速缓存存取。该表格有几种可能的实现,包括:
a.完全关联:可以将每个页面物理编号(不包括低12位地址)转换为DDR4中的页面偏移量的表格。这具有可以缓存任意一组页面的优势。
b.部分关联:除了RAS对关联集的位进行寻址并且给予StreamEngine进行转换的时间之外,与关联技术相同。这样可以实现16-32种关联级别,非常接近完全关联的性能。这种技术需要大约128k x 4位(512k位)的表格。
2.存储器结构后台和API引擎(执行引擎(ExecuteEngine)):可以提供核心存储器结构算法,如一致性、触发器、存储器结构API,以加速图形和其他大数据以及更高级别的存储器结构指令序列。可以提供更高级别的API和存储器结构触发器执行。也可以处理后台维护。
3.OIT/POIT引擎:管理OIT/POIT并将此服务提供给其他引擎。该引擎可以在2个循环内处理一个索引内的级别,提供高性能索引搜索和管理。管理对象、元数据块、数据块和索引的闪存。
图28是图示根据本公开的某些实施例的硬件实现架构的存储器模块视图的框图。
根据该实施例,可以在功能上增加多线程存储器结构后台和API引擎的能力,以执行各种各样的存储器结构触发器指令。可以添加更新的多线程存储器结构后台和API引擎的额外实例以获得更高的存储器结构触发器程序性能。功能添加和更多实例的组合可以旨在使存储器结构能够利用更少的服务器来执行大数据和数据管理器软件,例如在图28中所示。
节点路由器
节点路由器/uRouter的内部架构可以与存储器模块/DIMM相同,区别在于节点路由器的功能性、管理存储器结构服务器对象索引,以及向/从PCIe(存储器模块)和节点间路由器/IMF-Router路由适当的封包。其可以有额外的路由功能,并可以实际上不存储对象。如上所述,路由引擎的示例集合可以如下:
图29是示出根据本公开的某些实施例的硬件实现架构的节点路由器视图的框图。
1.路由引擎:对向/从PCIe(存储器模块)和节点间路由器的封包的路由进行控制。通常,通过一条路径进入的封包将在内部处理并在其中一条路径退出。
2.OIT/POIT引擎(ObjMemEngine):管理OIT/POIT并将此服务提供给其他引擎。引擎可以在2个循环内处理一个索引内的级别,以提供高性能索引搜索和管理。管理用于索引的闪存和HMC(混合存储器立方体)存储。在HMC中对最常用的索引进行高速缓存。
3.存储器结构后台和API引擎:提供更高级别的API和存储器结构触发器执行。也处理后台维护。
节点间路由器
图30是示出根据本公开的某些实施例的硬件实现架构的节点间路由器视图的框图。
节点间路由器可以类似于IP路由器。其区别可以在于寻址模型、以及静态vs.动态。IP路由器可以对每个节点利用固定静态地址,并基于目的地IP地址路由到固定的物理节点(可以虚拟化为中等和长时间帧)。节点间路由器可以利用指定了对象和对象的特定块的存储器结构对象地址(OA)。对象和块可以动态地驻留在任何节点上。节点间路由器可以基于对象和块的动态位置(或多个动态位置)来路由OA封包,并可以实时动态地跟踪对象/块位置。
节点间路由器可以是节点路由器的扩展版本。其可以连接多个(例如12-16个,但是预期为16个)下行链路节点路由器或节点间路由器以及两个上行链路节点间路由器,而不是连接到单个PCIe总线以连接叶存储器模块。对象索引存储容量、处理速率和整体路由带宽也可以有所扩展。
图31是示出根据本公开的某些实施例的硬件实现架构的存储器结构路由器视图的框图。存储器结构架构可以为其连接的每个下行链路或上行链路使用存储器结构路由器。存储器结构路由器可以几乎等同于节点路由器(例如,除了支持内部存储器结构环(其可能与片上版本相同)和删除了PCle)。存储器结构环可以利用存储器结构路由器之间的因特拉肯(Interlaken)协议。封包级别的因特拉肯协议可以与将10G和100G以太网用于下行链路和上行链路相兼容。每个存储器结构路由器可以具有与节点路由器相同的对象索引存储容量、处理速率和路由带宽,从而允许节点间路由器扩展以支持下行链路和上行链路的数量。
每个下行链路存储器结构路由器的对象索引可以反映来自其下行链路的所有对象或块。所以即使是节点间路由器,也可以使用分布式的内部对象索引和路由。
任何级别的节点间路由器相对于叶而言都可以是相同的。由于可以在每个级别存储更多的数据,来自叶的每个级别的较大聚合分层对象存储器(高速缓存)可以倾向于降低级别之间的数据移动。高度使用的数据可以存储在多个位置中。
用标准软件实现
以上描述的基于对象的存储器结构可以提供本地函数(native function),这些本地函数可以替代虚拟存储器、存储器中文件系统和数据库存储体管理器中的部分,并以非常有效的格式存储它们各自的数据。图32是示出根据本公开的一个实施例的可以替代软件函数的对象存储器结构函数的框图。如上面详细描述的,这些基于对象的存储器结构函数可以包括函数3205和函数3210,函数3205用于通过对象地址空间在存储器中处理对象内的块,函数3210用于通过对象地址和节点的本地虚拟地址空间来处理对象。建立在软件函数3205和3210上,基于对象的存储器结构还可以提供存储器中文件处理函数3215、存储器中数据库函数3220和其他存储器中函数3225。如上所述,这些存储器中函数3215、3220和3225中的每一个可以通过对象地址空间和基于对象的存储器结构的各个节点的虚拟地址空间,对基于对象的存储器结构内的存储器对象进行操作。在对存储体管理器进行微小更改的情况下,基于对象的存储器结构和由此提供的函数能够对于终端用户应用是透明的。尽管很小,但这些更改可以通过在对象无限地址空间中以存储器中对象格式存储数据,来大大提高效率。效率提高是双重的:1)底层的存储器中对象格式和;2)消除从存储体和各种数据库和/或应用格式进行的转换。
如上所述,本发明的实施例提供了到基于对象的存储器结构的接口,该接口可以实现在软件堆栈中的应用层之下。通过这种方式,基于对象的存储器与标准地址空间之间的差异对于应用来说是透明的,该应用可以利用基于对象的存储器而无需进行修改,具有基于对象的存储器的功能和性能优势。相反,修改后的存储体管理器可以将系统软件(诸如标准操作系统,例如Linux)接口到基于对象的存储器。这些修改后的存储体管理器可以提供对标准处理器硬件(诸如缓冲器和高速缓存)的管理,可以控制基于对象的存储器空间的部分对处理器可用的较窄物理地址空间可见,并且可以是可由应用通过标准的系统软件进行存取的。通过这种方式,应用可以通过系统软件(例如,通过标准的操作系统存储器分配进程)对基于对象的存储器结构进行存取和利用而无需进行修改。
图33是图示根据本公开的一个实施例的对象存储器结构软件堆栈的框图。如该示例中所示,堆栈3300如上面详细描述的以基于对象的存储器结构3305开始并且构建于其上。存储器结构操作系统驱动器3310可以通过节点的操作系统的存储器分配函数,提供对基于对象的存储器结构3305的基于对象的存储器空间的存取。在某些情况下,操作系统可以包括Linux或安全增强型Linux(SELinux)。存储器结构操作系统驱动器3310还可以向操作系统的一个或多个虚拟机提供挂钩(hook)。
在一个实施方式中,堆栈3300还可以包括操作系统的库文件3315的基于对象的存储器的特定版本。例如,该库文件3315可以包括标准c语言库libc的基于对象的存储器结构的特定版本。该库文件3315可以以适于基于对象的存储器并且取得利用基于对象的存储器结构的优势的方式,处理存储器分配和文件系统API。另外,该库文件3135及其中的函数的使用对于应用程序和用户可以是透明的,即,它们不需要被视为与相应的标准库函数不同。
堆栈3300可以进一步包括一组存储体管理器3325、3330、3335、3340和3345。一般而言,存储体管理器3325、3330、3335、3340和3345可以包括一组修改的存储体管理器,其适配为利用基于对象的存储器空间的格式和寻址。存储体管理器3325、3330、3335、3340和3345可以提供基于对象的存储器空间与由处理器执行的操作系统之间的接口,并且提供对使用该接口层文件系统、数据库或其他软件透明的、替代的基于对象存储器的存储体。存储体管理器3325、3330、3335、3340和3345可以包括但不限于:图形数据库存储体管理器3325、SQL或其他关系数据库存储体管理器3330、文件系统存储体管理器3335和/或一个或多个其他不同类型的存储体管理器3340。
根据一个实施例,直接存取接口3320允许直接存储器中存储体管理器3334通过对象存储器结构库文件3315相接,来直接存取对象存储器结构3305。由于存储器结构3305以完整且一致的方式管理对象,该直接存储体管理器3345可以直接存取存储器结构3305。直接存取接口3320和直接存储器管理器3345二者都是通过存储器结构3305一致地管理对象的能力来实现。这给出了修改后的应用直接接口到存储器结构类库3315或直接接口到存储器结构3305的路径。
对软件堆栈3300的基于对象的存储器结构添加位于应用层之下,以提供一组未修改的应用3350、3355、3360和3365与基于对象的存储器结构3305之间的兼容性。这样的应用可以包括但是不限于,一个或多个标准图形数据库应用3350、一个或多个标准SQL或其他关系型数据库应用3355、一个或多个标准文件系统存取应用3360、和/或一个或多个其他标准的未修改应用3365。对软件堆栈3300的基于对象的存储器结构添加包括存储器结构操作系统驱动器3310、基于对象的存储器特定库文件3315、存储体管理器3325、3330、3335、3340和3345,并且可以由此提供应用3350、3355、3360和3365与基于对象的存储器结构3305之间的接口。该接口层可以控制基于对象的存储器空间的部分对于处理器的虚拟地址空间和物理地址空间可见,即,页面错误和页面处理程序(handler),该页面处理程序控制对象地址空间的哪个部分当前在每个节点的物理地址空间中是可见的并且协调存储器对象与应用程序段和文件之间的关系。根据一个实施例,可以通过基于对象的存储器结构存取控制列表(ACL)或等同物,来确定每个应用3350、3355、3360和3365的对象存取权限。
换句话说,对象存储器结构3305的每个基于硬件的处理节点(例如上面详细描述的)可以包括在基于对象的存储器空间内存储并管理一个或多个存储器对象的存储器模块。此外如上所述,每个存储器对象可以在存储器模块内本地创建,使用单个存储器引用指令而不用输入/输出(I/O)指令进行存取,并且由存储器模块在单个存储器层进行管理。存储器模块可以在软件堆栈3300的应用层3350、3355、3360和3365之下提供接口层3310、3315、3320、3325、3330、3335、3340和3345。接口层可以包括一个或多个存储体管理器3325、3330、3335、3340和3345,这些存储体管理器管理处理器的硬件并控制基于对象的存储器空间的部分对于基于对象的存储器结构3305的每个基于硬件的处理节点的处理器的虚拟地址空间和物理地址空间可见。一个或多个存储体管理器3325、3330、3335、3340和3345可以进一步提供基于对象的存储器空间和由每个基于硬件的处理节点的处理器执行的操作系统之间的接口,并且提供替代的基于对象存储器的存储体,该替代的基于对象存储器的存储体对软件堆栈3300的应用层3350、3355、3360和3365的、使用接口层3310、3315、3320、3325、3330、3335、3340和3345的文件系统、数据库或其他软件透明。在某些情况下,操作系统可以包括Linux或安全增强型Linux(SELinux)。可以从具有存储器结构的任何节点等效地创建和管理由存储器结构创建和管理的存储器对象。因此,多节点存储器结构不需要集中式的存储体管理器或存储器结构类库。
接口层3310、3315、3320、3325、3330、3335、3340和3345可以通过操作系统的存储器分配函数,向在软件堆栈存取的应用层中执行的一个或多个应用提供对基于对象的存储器空间的存取。在一种实施方式中,接口层可以包括操作系统的库文件3315的基于对象的存储器的特定版本。一个或多个存储体管理器3325、3330、3335、3340和3345可以利用基于对象的存储空间的格式和寻址。一个或多个存储体管理器可以包括例如数据库管理器3330、图形数据库管理器3325和/或文件系统管理器3335。
使用容错对象的操作和一致性
如上所讨论的,本文描述的实施例可以实现基于对象的存储器结构,其中,存储器结构中的存储器对象是跨处理节点的分层结构而被分布和追踪的。每个处理节点可以追踪存在于从该节点朝向其分层结构中的叶节点的路径上的存储器对象和存储器对象内的块。此外,每个处理节点可以利用相同的用于存储器对象管理的算法,存储器对象管理例如存储器对象创建、块分配、块一致性等。这样,分层结构的每个更高级别创建了更大的缓存,其可以显著减少在该级别进出处理节点的带宽。
通过使存储器对象能够在每对象(per-object)的基础上被存储在多于一个的节点中,可以基于该分层分布和追踪,来实现容错能力。这种跨多个节点的存储器对象的分布可以是跨分层结构和/或跨多个物理位置。存储器对象容错副本可以通过块一致性机制进行处理,作为存储器结构操作的一部分。以这种方式,可以使每个存储器对象存在于多个不同的节点上。存储器对象可以作为整体被包含在多个节点中的每个节点内,或者在分层结构的给定级别中,或者可以被存储为不同的部分,其中每个部分被包含在多个不同的节点内。
为了说明的目的,现在将参考图7。对象存储器结构700可以在每对象的基础上,跨对象存储器结构700的分层结构和多个基于硬件的处理节点705和710分布和追踪存储器对象。跨对象存储器结构700的分层结构和多个基于硬件的处理节点705和710分布存储器对象可以包括:在每对象的基础上,在对象存储器结构700的多个基于硬件的处理节点705和710中的两个或更多的节点上存储每个存储器对象。多个基于硬件的处理节点705和710中的两个或更多的节点可以在对象存储器结构的分层结构中彼此远离和/或处于不同的物理位置中。
更具体地,并且如上所述,分层结构可以是胖树结构。每个基于硬件的处理节点、节点路由器或节点间路由器上的对象索引树(OIT)和每对象索引树(POIT)可以追踪从该节点到其叶的所有路径上存在的对象和对象内的块。因此,用于对象创建、块分配和块一致性的算法在分层结构的每个节点处可以是相同的。这种分层结构的强大功能提供了这些算法的简单性和高效性。分层结构的每个级别都可以创建更大的缓存,从而减少出/入该级别的带宽。在工作集保持在分层结构的相应级别内的正常操作状态中,出/入该级别的带宽接近零。
现将在分层结构的节点内描述算法操作,其具有朝向根和/或朝向叶的任何交互。如本文所用,“朝向根”(根路径)是指从节点到树根的方向,而“朝向叶”(叶路径)是指从节点到树叶的方向。基于硬件的处理节点存储器模块(例如,DIMM)被认为是分层结构内的叶。
分层结构中的每个节点可以追踪朝向叶的一些路径,称为树跨度(tree-span)因子。在一种实施方式中,分层结构的任何级别处的跨度因子可以是16。因此,存储器模块可以追踪本地存储的对象。其他节点(例如节点路由器和节点间路由器)可以追踪例如朝向叶的多达16个路径。在这样的示例中,节点路由器和节点间路由器OIT可以为这16个路径保持对象状态,并且POIT追踪16个路径的块状态。稳定状态(Steady-state)下,大多数对象或块可以存在于单个(或少量)叶路径(或多个路径)中。
虽然追踪的单位可以是单个块,但是POIT可以被组织以便其可以为一组块提供单个条目以提高POIT存储效率。这种分组可以对应于存储块、分层结构的持久级别(通常为4个块)或定义的对象大小。
对象是使用从服务器内的处理器或者从分层结构叶(存储器模块/DIMM)上的处理发出的CreateObject指令来创建的。如果对象在存储器结构中已经有效,则返回“已经有效”的指示。接收CreateObject指令的叶可以本地检查以确定该对象是否有效。如果不是,则该叶可以将CreateObject指令向根传递,并且可以记录本地状态“pending_create”。最终,CreateObject指令可以到达分层结构根。对象被创建,并且CreateObject封包作为成功而被传递回请求叶,其中沿途每个节点从pending_create转变为有效对象。如果同一对象同时存在CreateObject指令,则第一个到达根可以成功,而另一个CreateObject指令返回该对象已经有效。因此,软件不必保持控制创建的外部锁。
DestroyObject指令可以以类似于CreateObject的分层结构方式,删除与对应对象相关联的块和元数据。
一旦对象被创建,就可以分配对象内的任何单独的块,从而在存储器结构内为该块创建存储体。AllocateBlk指令可以像CreateObject指令一样工作。AllocateBlk指令可以在存储器结构内的特定IOA处分配存储体的块。如果对块所属的对象启用了对象容错,则该块可以存储在存储器结构内的至少一个存储器模块中或者存储在两个或更多个存储器模块内。
AllocateBlk指令可以从服务器内的处理器发出,或者从分层结构叶(存储器模块/DIMM)上的处理发出。如果块已在存储器结构中被分配,则可以返回已分配的响应。接收AllocateBlk指令的叶可以本地检查,以确定块是否被分配。如果不是,那么该叶可以将AllocateBlk指令朝向根传递,并记录pending_allocate的本地状态。最终,AllocateBlk到达分层结构根。块可以被分配,并且AllocateBlk封包可以作为成功而被传递回请求叶,其中沿途每个节点从pending_allocate转换到有效块状态(通常是自己的)。如果同一个块同时存在AllocateBlk指令,则第一个到达根可以成功,而其他AllocateBlk指令可以返回该块已经被分配。因此,软件不必保持控制分配的外部锁。
当对被IOT显示为无效的OA对象(invalid_object或no_local_object)进行来自叶的OA引用时,可以进行根路径搜索,以建立该对象是有效的并且隐式地在向请求节点返回的叶路径中创建该对象。如果该对象无效,则可以返回无效状态。当对被IOT或PIOT显示为未分配的IOA块(invalid_block)进行来自叶的IOA引用时,可以进行根路径搜索,以建立该块是被分配的并将请求路由到所分配的块的叶路径上。随后,利用响应叶和请求叶之间的路径,通过它们最近的共同根,叶可以将块数据返回到请求叶。如果未在存储器结构中分配该块,则可以返回未分配的状态。
根据一个实施例,存储器结构可以可选地支持多个块的分配和释放(deallocation),以用于更有效的分配。附加地或替代地,存储器结构可以利用协议,该协议如下面将更详细描述的并且可以为包括数据库和文件系统的应用提供跨存储器结构的顺序一致性和向前移动保证(forward progress guarantee)。例如,协议可以是AllCache、基于所有权、支持更新和无效模式。使用这样的协议可以提供无锁同步并且可以支持整体对象/块容错。该协议可以匹配对象索引的分层结构分布特性,从而使得一致性算法在每个路由器处可以是相同的。因此,在单个路由器中证明正确性提供了用于任何任意大小的存储器结构的构造的正确性。
根据一个实施例,存储器结构可以在4k块的基础上支持对象数据和元数据的一致性。存储器结构块状态描述了包含所有叶的分层结构的级别的状态。存储器结构封包具有可选地将请求链在一起的能力,从而使得许多块(例如,多达227个块)可以在单个初始请求上移动。在某些情况下,链可能会断裂并可以重试。出于一致性的目的,每个链式封包都可以作为单个封包推送。
表128:存储器结构块&对象状态
根据一个实施例,当在存储器结构内请求和/或移动块时,存储器模块、节点路由器和节点间路由器内的对象索引的实例可以追踪具有未决(pending)块状态的请求和移动。未决状态允许多个同时请求以单个或最少数量的响应来获取服务。未决状态可以分为2类,即叶请求和远程根请求。叶请求可以由节点从叶方向接收。远程请求可以是从根方向接收的请求,用于向IMF根发展最大所需深度的请求。虽然不常见,但可以将请求作为一种简单的硬件机制进行重试,以处理最复杂的情况。通过具有集成索引树的基于硬件的分层存储器结构,如本文所述,该集成索引树在每个节点处包括未决状态,软件可以免于检测性能抢夺边界(robbing boundaty)情况的负担。
表129:存储器结构未决块状态
表130:路由器内封包状态位
通过分层存储器结构的路由可以基于封包指令、对象地址上的目录匹配、在节点ID的适当级别上匹配、确认字段和/或块的高速缓存状态。路由决策输出可以包括但不限于封包路由到的位置、对块状态的更新和/或设置/清除确认字段。
在一个实施方式中,如本文所述的存储器结构存储器模块可以包括32千兆字节(Gbyte)的快速DDR4dram和2-4太字节(Tbyte)的较慢/较便宜的闪存的DIMM。从处理器的角度来看,其管理一个带有32千兆字节dram高速缓存的2-4太字节对象存储器。通过利用两个构思,可以将存储器结构作为三级存储器分层结构进行管理。首先,DDR DIMM可以通过直接物理寻址(PA)向处理器指示最大容量为0.5TB。存储器模块通过0.5太字节的物理地址范围可以向处理器指示其具有0.5太字节的dram,并且可以通过从较大的闪存进行高速缓存来伪造该数量。其次,存储器模块可以利用对象触发器来预测并移动数据到dram中,这可以在使用之前作为高速缓存进行管理。可以利用引用计数算法,来确定哪些对象/块可以从dram高速缓存中移除。还可以实现修改页面的后台清理。在低概率事件下,处理器请求的0.5太字节范围内的物理地址不能立即可用,则存储器模块可以发出特定的恢复异常信号,然后可以由存储器结构异常处理程序进行处理,并使该请求物理地址可用。然后可以重新开始应用和存取。
这种技术的性能优势是双重的。首先,存储器模块表现为其似乎大了125倍,或者看起来闪存存储器的性能接近dram,速度提高了1000倍。其次,几乎消除了切换页表条目(PTE)和PTE击落(shoot-down)的操作系统开销。
图34是示出了根据一个实施例的存储器模块高速缓存的概要的框图。如该示例中所示,存储器模块可以动态地管理存储器模块/DIMM内的3级高速缓存。可以基于集合关联方法来管理DRAM高速缓存,其中RAS地址形成集合索引。这可以为DRAM高速缓存提供大约256路的关联性,该关联性通过所有高速缓存研究都非常接近完全关联。
图35是示出了根据一个实施例的用于与存储器模块相关的若干功能的DDR4dram高速缓存的示例性分区的图。在此示例中,PA Memory是从处理器物理寻址的存储器。根据一个实施例,几乎90%的dram被分配用于该功能。该分区可以高速缓存存储器模块的512千兆字节物理存储器地址空间。
索引树高速缓存(OIT&POIT高速缓存)可以是缓存OIT和POIT的部分以最小化闪存存取的分区。如此示例中所指示的分配空间可以高速缓存用于4太字节对象存储器的大约10%的索引树。
PA目录可以包含PA IOA目录和PA DS目录,它们都由PA索引。PA OA目录可以保存与处理器物理地址关联的每个块的OA(对象地址)。PA DS目录可以保存与每个处理器物理地址对应的DRAM插槽号。PA DS目录还可以保存有关PA存取的有效、修改和引用信息。
DramSlot目录可以是来自PA目录的块的目录,这些块当前在DRAM中并且可以由DRAM块地址进行索引。如果DRAM块正在使用中,则相应的条目可以包含IOA(~128位)和相关联的PA(如果相关联,则为27+1有效位)。如果相应的块是自由的,则其可以包含在自由列表链中的指针。
DIMM利用引用计数算法在高速缓存的级别之间维护和移动块。以上参考后台操作和垃圾收集解释了示例性算法。
图36是示出了根据一个实施例的节点和叶高速缓存的框图。根据一个实施例,每个存储器模块、节点路由器和节点间路由器可以基于它们在存储器结构分层结构中的位置来保持OIT和POIT的独立实例。每个实例基于活动和可能的活动独立地缓存OIT和POIT节点和叶。此外,可以以最快的级别对直接IOA到POIT转换进行高速缓存。在这种情况下,OIT和POIT存取被消除。从最快到最慢的高速缓存级别是:1.IOA(IMF对象地址)到POIT叶的转换;2.OIT/POIT节点和叶的对象存储器片上高速缓存;3.OIT/POIT节点和叶的本地dram缓存;和4.本地闪存。本地闪存还可以提供持久性。
通过高速缓存各个节点和叶,可以减少OIT和POIT存取的延迟,并且可以增加整体吞吐量存储器存取。通过缓存IOA到POIT叶的转换,OIT和POIT查找可以简化为单个片上引用。根据一个实施例,每个存储器模块可以利用引用计数算法以在高速缓存的级别之间维护和移动块。以上参考后台操作和垃圾收集解释了示例性算法。
通过使得对象能够在每对象的基础上被存储在多于一个节点中和/或多个物理位置中,可以实现容错能力。对象容错副本可以由标准块一致性机制处理,作为基本存储器结构操作的一部分。因此,块可以被跟踪,并且仅对正被更新的块更新副本。因此,由于完成了最小数据移动,对象容错可以具有如本文所述的存储器结构的固有高性能。对于容错对象的每个块,除了own_copy,own_snapcopy或own_shadcopy之外,还可以有copy、snapcopy或shadcopy。Snapcopy和相应的own_snapcopy使得当对象持久时更新第二副本。Shadcopy和相应的own_shadcopy可以实现更实时但更懒惰的更新。Copy和相应的own_copy使能实时更新。根据一个实施例,容错可以扩展到3-5个副本的模式。该模式可以利用如上所述的路由器16到1的跨度来将副本并行放置在若干叶路径上。当节点物理地分布时,对象容错可以在物理分布的两侧的叶上提供副本。
存储器结构协议和接口
本发明的实施例提供用于管理处理、存储器、存储体、网络和云计算的系统和方法,以显著提高处理节点的效率和性能。本文描述的实施例可以实现基于对象的存储器结构,其中,存储器结构中的存储器对象跨处理节点的分层结构被分布和追踪。每个处理节点可以追踪存在于从该节点朝向其分层结构中的叶节点的路径上的存储器对象和存储器对象内的块。此外,每个处理节点可以利用相同的用于存储器对象管理的算法,存储器对象管理例如存储器对象创建、块分配、块一致性等。这样,分层结构的每个更高级别创建了更大的高速缓存,可以显著减少在该级别处出入处理节点的带宽。
根据一个实施例,可以在存储器结构内的节点和路由器之间使用高度线程化和延迟容忍的存储器结构协议。该协议可以跨专用链路实现,例如25/100GE(千兆以太网),或者可以通过标准链路(例如,因特网协议(IP)链路)进行隧道传输,从而使得在存储器结构路由器之间利用标准路由器(例如IP路由器)。通过该改变,可以构建物理上分布式的存储器结构系统,其可以用相等距离节点的邻域在本地高速缓存数据,和/或积极地缓存和复制在多个物理位置中使用的对象。在这样的链路上使用存储器结构协议,可以在每对象的基础上,在存储器结构分层结构中的任何节点处发起跨存储器结构的存储器对象的移动。一旦存储器对象跨节点被复制,通过仅移动更改了的数据而不是复制或拷贝存储器对象,可以将对该存储器对象的更改传播到其他节点(或多个节点)。
为了说明的目的,现在将参考图7。如该示例中所示,对象存储器结构700可以包括多个基于硬件的处理节点705和710。每个基于硬件的处理节点705和710可以包括一个或多个存储器模块725和730,该一个或多个存储器模块725和730存储和管理在对象存储器结构700的分层结构中的多个存储器对象。每个存储器对象可以在存储器模块725或730内本地创建,使用单个存储器引用指令而不用输入/输出(I/O)指令进行存取,并由存储器模块725或730在单个存储器层进行管理。节点路由器720可以与节点705的一个或多个存储器模块725和730中的每一个通信地耦合,并且可以适配为使用存储器结构协议在节点705的一个或多个存储器模块725和730之间路由存储器对象或存储器对象的部分。一个或多个节点间路由器715可以与每个节点路由器720通信地耦合。对象存储器结构700的多个节点705和710中的每个可以与至少一个节点间路由器715通信地耦合,并且可以适配为使用存储器结构协议在多个节点705和710之间路由存储器对象或存储器对象的部分。
多个基于硬件的处理节点中的两个或更多的节点705和710可以在对象存储器结构700的分层结构中彼此远离。在这种情况下,跨对象存储器结构700分布和追踪存储器对象可以包括:在对象存储器结构的分层结构中创建等距节点的邻域。附加地或替代地,多个基于硬件的处理节点中的两个或更多的节点705和710可以各自处于不同的物理位置。在这种情况下,跨对象存储器结构分布和追踪存储器对象可以包括:在多个不同的物理位置中高速缓存和复制对象。
可以由基于硬件的处理节点705中的一个节点,在每对象的基础上,发起跨对象存储器结构分布存储器对象。跨对象存储器结构705追踪存储器对象可以包括:由基于硬件的处理节点705追踪存在于基于硬件的处理节点705上的存储器对象和存储器对象内的块。跨对象存储器结构700追踪存储器对象还可以包括:将对存储器对象的更改从基于硬件的处理节点705中的一个节点传播到多个基于硬件的处理节点中的一个或多个其他节点710。将对存储器对象的更改从基于硬件的处理节点705传播到多个基于硬件的处理节点中的一个或多个其他节点710可以包括:仅移动存储器对象内已经更改的数据而不复制或拷贝存储器对象。
如上所述,存储器结构700可以利用协议,该协议可以为包括数据库和文件系统的应用提供跨存储器结构700的顺序一致性和向前移动保证。使用这样的协议可以提供无锁同步并且可以支持整体对象/块容错。该协议可以匹配对象索引的分层结构分布特性,从而使得一致性算法在每个路由器处可以是相同的。因此,在单个路由器中证明正确性提供了用于任何任意大小的存储器结构的构造的正确性。节点间路由器715和/或节点路由器720之间的底层存储器结构协议可以是高度线程化和延迟容忍的。
对象存储器结构700可以利用基于硬件的处理节点705与多个基于硬件的处理节点中的一个或多个其他节点710之间的存储器结构协议,来跨对象存储器结构700分布和追踪存储器对象。可以跨基于硬件的处理节点705与多个基于硬件的处理节点中的一个或多个其他节点710之间的专用链路,利用存储器结构协议。例如,专用链路可以包括以太网链路。在其他实施方式中,存储器结构协议可以跨基于硬件的处理节点705与多个基于硬件的处理节点中的一个或多个其他节点710之间的共享链路进行隧道传输。例如,共享链路可以包括因特网协议(IP)链路。在这种情况下,存储器结构协议可以在基于硬件的处理节点705与多个基于硬件的处理节点中的一个或多个其他节点710之间提供专用通信链路,并且共享链路支持除存储器结构协议之外的通信。
作为示例,在IP链路的情况下,通过使用用户数据报协议(UDP),可以在标准IP网络路由器和交换机内,将存储器结构协议封装在节点路由器与节点间路由器之间的以及节点间路由器之间的UDP消息中。存储器结构节点路由器和节点间路由器负责存储器结构协议和错误检查。因此,标准IP网络路由器和交换机在不具有基于对象的存储器结构或存储器结构协议的知识的情况下,正确地路由存储器结构UDP封包。现在,节点路由器和节点间路由器之间的以及不同的节点间路由器之间的链路在虚拟意义上是点对点的,但利用共享IP网络提供在数据中心内、跨数据中心的存储器结构节点、分布式存储器结构节点或移动存储器结构节点的分布式虚拟连接。
如上所述,通过使用这样的协议和一致性机制,存储器结构用相等距离节点的邻域在本地高速缓存数据的底层能力可以被利用来更积极地高速缓存和复制在多个物理位置中使用的对象。链式和存储器结构指令集使得能够在每对象的基础上在存储器结构分层结构中的任何节点处发起该数据移动。一旦对象被复制,仅移动更改了的数据。
在节点间路由器和/或节点路由器之间发送的存储器结构封包可以通过OA(对象地址)并且基于传统的存储器类型协议进行引用。可以包括具有封包编号和确认的链路级可靠性协议,并且可以减少对相对低效的IP协议的依赖。
本公开在各个方面、实施例和/或配置中包括实质上如本文描绘和描述的组件、方法、处理、系统,和/或装置,包括各个方面、实施例、配置实施例、子组合和/或其子集。在理解本公开之后,本领域技术人员将理解如何实现和使用所公开的方面、实施例和/或配置。在各个方面、实施例和/或配置中,本公开包括在缺少本文未描绘和/或描述的项目的情况下或在本发明的各个方面、实施例和/或配置中提供装置和处理,包括缺少可能已经在先前设备或处理中使用的这些项目,例如,用于改进性能、容易实现和/或降低实施成本。
已经出于说明和描述的目的呈现了前述讨论。前述内容并非旨在将本公开限制于本文公开的一种或多种形式。在前述的详细描述中,为了简化本公开的目的,本公开的各种特征例如在一个或多个方面、实施例和/或配置中被组合在一起。本公开的方面、实施例和/或配置的特征可以被组合于除了上面所讨论之外的替代方面、实施例和/或配置中。本公开方法不应被解释为反映出权利要求需要比每个权利要求中明确记载的更多特征的意图。而是如下列权利要求所反映的,发明方面在于比单个前述公开的方面、实施例和/或配置的所有特征要少。因此,下列权利要求在此被并入该详细描述中,其中每个权利要求自身作为本公开单独的优选实施例。
此外,尽管描述已经包括了对一个或多个方面、实施例和/或配置以及某些变型和修改的描述,但是其他变型、组合和修改也在本公开的范围内,例如,在理解了本公开之后的本领域技术人员的技能和知识的范围内。其目的是在允许的范围内获得包括替代方面、实施例和/或配置的权利,包括替代的、可互换的和/或等同的结构、功能、范围或步骤,无论本文是否公开了这些替代的、可互换的和/或等同的结构、功能、范围或步骤,并且不旨在公开专用于任何可专利的主题。
Claims (38)
1.一种对象存储器结构中的多个基于硬件的处理节点中的基于硬件的处理节点,所述基于硬件的处理节点包括:
存储器模块,在所述对象存储器结构的分层结构中存储并管理多个存储器对象,其中:
每个存储器对象是在所述存储器模块内本地创建的,
每个存储器对象是使用单个存储器引用指令而不用输入/输出(I/O)指令存取的,
每个存储器对象是由所述存储器模块在单个存储器层管理的,以及
所述对象存储器结构在每对象的基础上,跨所述对象存储器结构的分层结构和所述多个基于硬件的处理节点分布和追踪存储器对象。
2.如权利要求1所述的基于硬件的处理节点,其中跨所述对象存储器结构的分层结构和所述多个基于硬件的处理节点分布存储器对象包括:在每对象的基础上,在所述对象存储器结构的多个基于硬件的处理节点中的两个或更多的节点上存储每个存储器对象。
3.如权利要求2所述的基于硬件的处理节点,其中所述多个基于硬件的处理节点中的两个或更多的节点在所述对象存储器结构的分层结构中彼此远离。
4.如权利要求2所述的基于硬件的处理节点,其中所述多个基于硬件的处理节点中的两个或更多的节点处于不同的物理位置。
5.如权利要求1所述的基于硬件的处理节点,其中跨所述对象存储器结构的分层结构追踪存储器对象包括:由所述基于硬件的处理节点追踪存在于所述基于硬件的处理节点上的存储器对象和存储器对象内的块。
6.如权利要求1所述的基于硬件的处理节点,其中跨所述对象存储器结构的分层结构追踪存储器对象包括:追踪存在于所述对象存储器结构的分层结构的每个级别上的以及从所述分层结构的每个级别朝向所述对象存储器结构的分层结构的叶的分支上的存储器对象和存储器对象内的块。
7.如权利要求1所述的基于硬件的处理节点,其中所述基于硬件的处理节点利用与所述多个基于硬件的处理节点中的每个其他节点相同的用于对象管理的算法。
8.如权利要求7所述的基于硬件的处理节点,其中所述用于对象管理的算法包括用于对象创建的算法。
9.如权利要求7所述的基于硬件的处理节点,其中所述用于对象管理的算法包括用于块分配的算法。
10.如权利要求7所述的基于硬件的处理节点,其中所述用于对象管理的算法包括用于块一致性的算法。
11.如权利要求1所述的基于硬件的处理节点,其中所述基于硬件的处理节点包括双列直插存储器模块(DIMM)卡。
12.如权利要求1所述的基于硬件的处理节点,其中所述基于硬件的处理节点包括商品服务器,并且其中所述存储器模块包括安装在所述商品服务器内的双列直插存储器模块(DIMM)卡。
13.如权利要求1所述的基于硬件的处理节点,其中所述基于硬件的处理节点包括移动计算设备。
14.如权利要求1所述的基于硬件的处理节点,其中所述基于硬件的处理节点包括单个芯片。
15.一种对象存储器结构,包括:
多个基于硬件的处理节点,每个基于硬件的处理节点包括:
存储器模块,在所述对象存储器结构的分层结构中存储并管理多个存储器对象,其中每个存储器对象是在所述存储器模块内本地创建的,每个存储器对象是使用单个存储器引用指令而不用输入/输出(I/O)指令存取的,每个存储器对象是由所述存储器模块在单个存储器层管理的,以及所述对象存储器结构在每对象的基础上,跨所述对象存储器结构的分层结构和所述多个基于硬件的处理节点分布和追踪存储器对象,以及
节点路由器,与所述节点的一个或多个存储器模块中的每一个存储器模块通信地耦合,并且适配为在所述节点的一个或多个存储器模块之间路由存储器对象或存储器对象的部分;以及
一个或多个节点间路由器,与每个节点路由器通信地耦合,其中所述对象存储器结构的多个节点中的每个节点与所述节点间路由器中的至少一个节点间路由器通信地耦合,并且适配为在所述多个节点之间路由存储器对象或存储器对象的部分。
16.如权利要求15所述的对象存储器结构,其中跨所述对象存储器结构的分层结构和所述多个基于硬件的处理节点分布存储器对象包括:在每对象的基础上,在所述对象存储器结构中的多个基于硬件的处理节点中的两个或更多的节点上存储每个存储器对象。
17.如权利要求16所述的对象存储器结构,其中所述多个基于硬件的处理节点中的两个或更多的节点在所述对象存储器结构的分层结构中彼此远离。
18.如权利要求16所述的对象存储器结构,其中所述多个基于硬件的处理节点中的两个或更多的节点处于不同的物理位置。
19.如权利要求15所述的对象存储器结构,其中跨所述对象存储器结构的分层结构追踪存储器对象包括:由每个基于硬件的处理节点追踪存在于所述基于硬件的处理节点上的存储器对象和存储器对象内的块。
20.如权利要求15所述的对象存储器结构,其中跨所述对象存储器结构的分层结构追踪存储器对象包括:追踪存在于所述对象存储器结构的分层结构的每个级别上的以及从所述分层结构的每个级别朝向所述对象存储器结构的分层结构的叶的分支上的存储器对象和存储器对象内的块。
21.如权利要求15所述的对象存储器结构,其中每个基于硬件的处理节点利用相同的用于对象管理的算法。
22.如权利要求21所述的对象存储器结构,其中所述用于对象管理的算法包括用于对象创建的算法。
23.如权利要求21所述的对象存储器结构,其中所述用于对象管理的算法包括用于块分配的算法。
24.如权利要求21所述的对象存储器结构,其中所述用于对象管理的算法包括用于块一致性的算法。
25.如权利要求15所述的对象存储器结构,其中所述多个基于硬件的处理节点中的至少一个包括双列直插存储器模块(DIMM)卡。
26.如权利要求15所述的对象存储器结构,其中所述多个基于硬件的处理节点中的至少一个包括商品服务器,并且其中所述存储器模块包括安装在所述商品服务器内的双列直插存储器模块(DIMM)卡。
27.如权利要求15所述的对象存储器结构,其中所述多个基于硬件的处理节点中的至少一个包括移动计算设备。
28.如权利要求15所述的对象存储器结构,其中所述多个基于硬件的处理节点中的至少一个包括单个芯片。
29.一种用于在对象存储器结构中提供一致性和容错性的方法,所述对象存储器结构包括多个基于硬件的处理节点,所述方法包括:
由所述基于对象的存储器结构的基于硬件的处理节点,在所述基于硬件的处理节点的存储器模块内本地创建每个存储器对象,
由所述基于硬件的处理节点,使用单个存储器引用指令而不用输入/输出(I/O)指令存取每个存储器对象,
由所述基于硬件的处理节点,在单个存储器层管理存储器模块内的每个存储器对象,以及
在每对象的基础上,跨所述对象存储器结构的分层结构和所述多个基于硬件的处理节点分布存储器对象;以及
在每对象的基础上,跨所述对象存储器结构的分层结构和所述多个基于硬件的处理节点追踪存储器对象。
30.如权利要求29所述的方法,其中跨所述对象存储器结构的分层结构和所述多个基于硬件的处理节点分布存储器对象包括:在每对象的基础上,在所述对象存储器结构的多个基于硬件的处理节点中的两个或更多的节点上存储每个存储器对象。
31.如权利要求30所述的方法,其中所述多个基于硬件的处理节点中的两个或更多的节点在所述对象存储器结构的分层结构中彼此远离。
32.如权利要求30所述的方法,其中所述多个基于硬件的处理节点中的两个或更多的节点处于不同的物理位置。
33.如权利要求29所述的方法,其中跨所述对象存储器结构的分层结构追踪存储器对象包括:由所述基于硬件的处理节点追踪存在于所述基于硬件的处理节点上的存储器对象和存储器对象内的块。
34.如权利要求29所述的方法,其中跨所述对象存储器结构的分层结构追踪存储器对象包括:追踪存在于所述对象存储器结构的分层结构的每个级别上的以及从所述分层结构的每个级别朝向所述对象存储器结构的分层结构的叶的分支上的存储器对象和存储器对象内的块。
35.如权利要求29所述的方法,其中所述基于硬件的处理节点利用与所述多个基于硬件的处理节点中的每个其他节点相同的用于对象管理的算法。
36.如权利要求35所述的方法,其中所述用于对象管理的算法包括用于对象创建的算法。
37.如权利要求35所述的方法,其中所述用于对象管理的算法包括用于块分配的算法。
38.如权利要求35所述的方法,其中所述用于对象管理的算法包括用于块一致性的算法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210314174.XA CN115061971A (zh) | 2015-12-08 | 2016-12-07 | 使用容错对象的存储器结构操作和一致性 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562264652P | 2015-12-08 | 2015-12-08 | |
US62/264,652 | 2015-12-08 | ||
PCT/US2016/065330 WO2017100288A1 (en) | 2015-12-08 | 2016-12-07 | Memory fabric operations and coherency using fault tolerant objects |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210314174.XA Division CN115061971A (zh) | 2015-12-08 | 2016-12-07 | 使用容错对象的存储器结构操作和一致性 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108885607A true CN108885607A (zh) | 2018-11-23 |
CN108885607B CN108885607B (zh) | 2022-04-12 |
Family
ID=59013235
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210314174.XA Pending CN115061971A (zh) | 2015-12-08 | 2016-12-07 | 使用容错对象的存储器结构操作和一致性 |
CN201680080699.4A Active CN108885607B (zh) | 2015-12-08 | 2016-12-07 | 使用容错对象的存储器结构操作和一致性 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210314174.XA Pending CN115061971A (zh) | 2015-12-08 | 2016-12-07 | 使用容错对象的存储器结构操作和一致性 |
Country Status (5)
Country | Link |
---|---|
US (4) | US10895992B2 (zh) |
EP (1) | EP3387548B1 (zh) |
CN (2) | CN115061971A (zh) |
CA (1) | CA3006776A1 (zh) |
WO (2) | WO2017100288A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020220534A1 (zh) * | 2019-04-28 | 2020-11-05 | 平安科技(深圳)有限公司 | 一种基于中间件的数据处理方法和相关装置 |
CN112286928A (zh) * | 2019-09-16 | 2021-01-29 | 重庆傲雄在线信息技术有限公司 | 一种链式存储系统 |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3248097B1 (en) | 2015-01-20 | 2022-02-09 | Ultrata LLC | Object memory data flow instruction execution |
CN112214424B (zh) | 2015-01-20 | 2024-04-05 | 乌尔特拉塔有限责任公司 | 对象存储器结构、处理节点、存储器对象存储和管理方法 |
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 |
US9886210B2 (en) | 2015-06-09 | 2018-02-06 | Ultrata, Llc | Infinite memory fabric hardware implementation with router |
CA3006776A1 (en) | 2015-12-08 | 2017-06-15 | Ultrata, Llc. | Memory fabric operations and coherency using fault tolerant objects |
WO2017100281A1 (en) | 2015-12-08 | 2017-06-15 | Ultrata, Llc | Memory fabric software implementation |
US10200372B2 (en) * | 2016-06-02 | 2019-02-05 | Microsoft Technology Licensing, Llc | Principal access determination in an enviroment |
US10229065B2 (en) * | 2016-12-31 | 2019-03-12 | Intel Corporation | Unified hardware and software two-level memory |
US11071076B2 (en) * | 2018-04-27 | 2021-07-20 | Qualcomm Incorporated | Synchronization signal block indexing |
US10867605B2 (en) * | 2018-04-30 | 2020-12-15 | Avnera Corporation | Earbud having audio recognition neural net processor architecture |
US10715622B2 (en) * | 2018-12-14 | 2020-07-14 | Nutanix, Inc. | Systems and methods for accelerating object stores with distributed caching |
US20210311871A1 (en) | 2020-04-06 | 2021-10-07 | Samsung Electronics Co., Ltd. | System and method for aggregating server memory |
US11481319B2 (en) | 2020-05-22 | 2022-10-25 | Vmware, Inc. | Using data mirroring across multiple regions to reduce the likelihood of losing objects maintained in cloud object storage |
US11544147B2 (en) | 2020-05-22 | 2023-01-03 | Vmware, Inc. | Using erasure coding across multiple regions to reduce the likelihood of losing objects maintained in cloud object storage |
US11556423B2 (en) * | 2020-05-22 | 2023-01-17 | Vmware, Inc. | Using erasure coding in a single region to reduce the likelihood of losing objects maintained in cloud object storage |
CN115729444A (zh) * | 2021-09-01 | 2023-03-03 | 华为技术有限公司 | 一种数据处理方法及装置 |
CN114398314A (zh) * | 2021-12-30 | 2022-04-26 | 宝宝巴士股份有限公司 | 一种云平台服务商对象存储的文件管理工具 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060143360A1 (en) * | 2004-12-28 | 2006-06-29 | Petev Petio G | Distributed cache architecture |
US7689602B1 (en) * | 2005-07-20 | 2010-03-30 | Bakbone Software, Inc. | Method of creating hierarchical indices for a distributed object system |
CN102057366A (zh) * | 2008-06-12 | 2011-05-11 | 微软公司 | 分布式高速缓存安排 |
US20130031364A1 (en) * | 2011-07-19 | 2013-01-31 | Gerrity Daniel A | Fine-grained security in federated data sets |
CN103095687A (zh) * | 2012-12-19 | 2013-05-08 | 华为技术有限公司 | 元数据处理方法及装置 |
US20150124806A1 (en) * | 2013-11-05 | 2015-05-07 | Cisco Technology, Inc. | Hierarchical routing with table management across hardware modules |
US20150186215A1 (en) * | 2013-12-27 | 2015-07-02 | Debendra Das Sharma | Assisted Coherent Shared Memory |
Family Cites Families (207)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US1045226A (en) | 1907-09-12 | 1912-11-26 | Krell Auto Grand Piano Co Of America | Pneumatic action for single-system musical instruments. |
US1024833A (en) | 1909-05-20 | 1912-04-30 | Joseph H Dickinson | Cableway logging apparatus. |
US1023508A (en) | 1910-06-09 | 1912-04-16 | Elie Delafond | Decorticating-machine. |
US1024167A (en) | 1910-09-26 | 1912-04-23 | Cork Insert Company | Pipe-wrench. |
US1023506A (en) | 1911-09-01 | 1912-04-16 | George J Coutu | Fire-extinguishing apparatus. |
US1043010A (en) | 1912-03-25 | 1912-10-29 | Charles F Frothingham | Dish-washing machine. |
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 |
US6532531B1 (en) | 1996-01-24 | 2003-03-11 | Sun Microsystems, Inc. | Method frame storage using multiple memory circuits |
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 |
US6148377A (en) * | 1996-11-22 | 2000-11-14 | Mangosoft Corporation | Shared memory computer networks |
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 |
US6449700B2 (en) | 1997-09-05 | 2002-09-10 | Sun Microsystems, Inc. | Multiprocessing computer system employing a cluster protection mechanism |
US6366876B1 (en) | 1997-09-29 | 2002-04-02 | Sun Microsystems, Inc. | Method and apparatus for assessing compatibility between platforms and applications |
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 |
EP1179249A2 (en) | 1999-05-14 | 2002-02-13 | Dunti Corporation | Method for routing in hierarchical networks |
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 |
US6804786B1 (en) | 1999-09-10 | 2004-10-12 | Canon Kabushiki Kaisha | User customizable secure access token and multiple level portable interface |
US6477620B1 (en) | 1999-12-20 | 2002-11-05 | Unisys Corporation | Cache-level return data by-pass system for a hierarchical memory |
US6421769B1 (en) | 1999-12-30 | 2002-07-16 | Intel Corporation | Efficient memory management for channel drivers in next generation I/O system |
WO2001063486A2 (en) | 2000-02-24 | 2001-08-30 | 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 |
AU2001243275B2 (en) | 2000-02-29 | 2006-09-14 | Benjamin D. Baker | Intelligence driven paging process for a chat room |
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 |
US6647466B2 (en) | 2001-01-25 | 2003-11-11 | Hewlett-Packard Development Company, L.P. | Method and apparatus for adaptively bypassing one or more levels of a cache hierarchy |
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 |
EP1573550A2 (en) | 2002-11-07 | 2005-09-14 | Koninklijke Philips Electronics N.V. | Method and device for persistent-memory management |
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 |
US7512638B2 (en) | 2003-08-21 | 2009-03-31 | 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 |
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 |
US7386566B2 (en) | 2004-07-15 | 2008-06-10 | Microsoft Corporation | External metadata processing |
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 |
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 |
US8089795B2 (en) * | 2006-02-09 | 2012-01-03 | Google Inc. | Memory module with memory stack and interface with enhanced capabilities |
US9171585B2 (en) | 2005-06-24 | 2015-10-27 | Google Inc. | Configurable memory circuit system and method |
CN100367727C (zh) | 2005-07-26 | 2008-02-06 | 华中科技大学 | 一种可扩展的基于对象的存储系统及其控制方法 |
US7421566B2 (en) | 2005-08-12 | 2008-09-02 | International Business Machines Corporation | Implementing instruction set architectures with non-contiguous register file specifiers |
US20070038984A1 (en) | 2005-08-12 | 2007-02-15 | Gschwind Michael K | Methods for generating code for an architecture encoding an extended register specification |
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 |
US7739239B1 (en) | 2005-12-29 | 2010-06-15 | Amazon Technologies, Inc. | Distributed storage system with support for distinct storage classes |
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 |
GB0605383D0 (en) | 2006-03-17 | 2006-04-26 | Williams Paul N | Processing system |
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 |
US20080189251A1 (en) | 2006-08-25 | 2008-08-07 | Jeremy Branscome | Processing elements of a hardware accelerated reconfigurable processor for accelerating database operations and queries |
US7853755B1 (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) |
CN101689131B (zh) | 2006-12-06 | 2013-03-20 | 弗森-艾奥公司 | 用于共享的、前端、分布式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 |
US7716449B2 (en) | 2007-07-12 | 2010-05-11 | Oracle America, Inc. | Efficient chunked java object heaps |
US7730278B2 (en) | 2007-07-12 | 2010-06-01 | Oracle America, Inc. | Chunk-specific executable code for 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 |
US8200850B2 (en) | 2007-11-11 | 2012-06-12 | Weed Instrument, Inc. | Method, apparatus and computer program product for ring network communication |
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 |
KR20090096942A (ko) | 2008-03-10 | 2009-09-15 | 이필승 | 스틸그레이팅 |
US7877456B2 (en) * | 2008-04-08 | 2011-01-25 | Post Dahl Co. Limited Liability Company | Data file forwarding storage and search |
US8219564B1 (en) | 2008-04-29 | 2012-07-10 | Netapp, Inc. | Two-dimensional indexes for quick multiple attribute search in a catalog system |
US9619295B1 (en) | 2008-05-21 | 2017-04-11 | Qualcomm Incorporated | Distributed system for application processing |
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 |
WO2010002411A1 (en) | 2008-07-03 | 2010-01-07 | Hewlett-Packard Development Company, L.P. | Memory server |
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 |
US8277645B2 (en) | 2008-12-17 | 2012-10-02 | Jarvis Jr Ernest | Automatic retractable screen system for storm drain inlets |
US8572036B2 (en) | 2008-12-18 | 2013-10-29 | Datalight, Incorporated | Method and apparatus for fault-tolerant memory management |
US8140555B2 (en) | 2009-04-30 | 2012-03-20 | International Business Machines Corporation | Apparatus, system, and method for dynamically defining inductive relationships between objects in a content management system |
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 |
US8799624B1 (en) | 2009-09-21 | 2014-08-05 | Tilera Corporation | Configurable device interfaces |
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 |
US8346934B2 (en) | 2010-01-05 | 2013-01-01 | Hitachi, Ltd. | Method for executing migration between virtual servers and server system used for the same |
US8244978B2 (en) | 2010-02-17 | 2012-08-14 | Advanced Micro Devices, Inc. | IOMMU architected TLB support |
US8402547B2 (en) | 2010-03-14 | 2013-03-19 | Virtual Forge GmbH | Apparatus and method for detecting, prioritizing and fixing security defects and compliance violations in SAP® ABAP™ code |
US9047351B2 (en) | 2010-04-12 | 2015-06-02 | Sandisk Enterprise Ip Llc | Cluster of processing nodes with distributed global flash memory using commodity server technology |
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 |
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 |
EP2771721A4 (en) | 2011-10-28 | 2017-03-29 | 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 |
WO2013081616A1 (en) | 2011-12-01 | 2013-06-06 | 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 |
US8844036B2 (en) | 2012-03-02 | 2014-09-23 | Sri International | Method and system for application-based policy monitoring and enforcement on a mobile device |
US9043567B1 (en) | 2012-03-28 | 2015-05-26 | Netapp, Inc. | Methods and systems for replicating an expandable storage volume |
US9069710B1 (en) | 2012-03-28 | 2015-06-30 | Netapp, Inc. | Methods and systems for replicating an expandable storage volume |
US20130318269A1 (en) | 2012-05-22 | 2013-11-28 | Xockets IP, LLC | Processing structured and unstructured data using offload processors |
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 |
EP2864867A4 (en) | 2012-06-23 | 2016-06-22 | Pmda Services Pty Ltd | COMPUTER-BASED DEVICE FOR TRANSITION OF RECURSIVE FINITE STATE-BASED AUTOMATED STATES AND COMPUTERIZED METHOD FOR DEFINING, DESIGNING AND DEPLOYING FIELD-ADJUSTABLE FINITE STATE-BASED AUTOMATA FOR COMPUTER-BASED COMPUTER DEVICES |
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 |
WO2014142861A1 (en) | 2013-03-14 | 2014-09-18 | 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 |
US9075557B2 (en) | 2013-05-15 | 2015-07-07 | SanDisk Technologies, Inc. | Virtual channel for data transfers between devices |
US9304896B2 (en) | 2013-08-05 | 2016-04-05 | Iii Holdings 2, Llc | Remote memory ring buffers in a cluster of data processing nodes |
US9141676B2 (en) | 2013-12-02 | 2015-09-22 | Rakuten Usa, Inc. | Systems and methods of modeling object networks |
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 |
US8868825B1 (en) | 2014-07-02 | 2014-10-21 | Pure Storage, Inc. | Nonrepeating identifiers in an address space of a non-volatile solid-state storage |
KR200475383Y1 (ko) | 2014-07-02 | 2014-11-27 | 주식회사 새온누리그린테크 | 오물 및 악취 차단 기능을 갖는 그레이팅 |
US9805079B2 (en) | 2014-08-22 | 2017-10-31 | Xcalar, Inc. | Executing constant time relational queries against structured and semi-structured data |
US9558020B2 (en) | 2014-09-17 | 2017-01-31 | International Business Machines Corporation | Method of processing javascript (JS) API requests |
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 |
US10025669B2 (en) | 2014-12-23 | 2018-07-17 | Nuvoton Technology Corporation | Maintaining data-set coherency in non-volatile memory across power interruptions |
CN112214424B (zh) | 2015-01-20 | 2024-04-05 | 乌尔特拉塔有限责任公司 | 对象存储器结构、处理节点、存储器对象存储和管理方法 |
WO2016118559A1 (en) | 2015-01-20 | 2016-07-28 | Ultrata Llc | Object based memory fabric |
EP3248097B1 (en) | 2015-01-20 | 2022-02-09 | 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 |
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 |
US9886210B2 (en) | 2015-06-09 | 2018-02-06 | Ultrata, Llc | Infinite memory fabric hardware implementation with router |
US9881040B2 (en) | 2015-08-20 | 2018-01-30 | Vmware, Inc. | Tracking data of virtual disk snapshots using tree data structures |
CA3006776A1 (en) | 2015-12-08 | 2017-06-15 | Ultrata, Llc. | Memory fabric operations and coherency using fault tolerant objects |
US10248337B2 (en) | 2015-12-08 | 2019-04-02 | Ultrata, Llc | Object memory interfaces across shared links |
WO2017100281A1 (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 |
-
2016
- 2016-12-07 CA CA3006776A patent/CA3006776A1/en not_active Abandoned
- 2016-12-07 WO PCT/US2016/065330 patent/WO2017100288A1/en active Application Filing
- 2016-12-07 CN CN202210314174.XA patent/CN115061971A/zh active Pending
- 2016-12-07 WO PCT/US2016/065334 patent/WO2017100292A1/en active Application Filing
- 2016-12-07 CN CN201680080699.4A patent/CN108885607B/zh active Active
- 2016-12-07 EP EP16873742.7A patent/EP3387548B1/en active Active
-
2019
- 2019-01-22 US US16/254,043 patent/US10895992B2/en active Active
- 2019-02-04 US US16/266,460 patent/US10809923B2/en active Active
-
2020
- 2020-08-18 US US16/996,690 patent/US11281382B2/en active Active
-
2022
- 2022-03-18 US US17/698,584 patent/US20220326859A1/en not_active Abandoned
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060143360A1 (en) * | 2004-12-28 | 2006-06-29 | Petev Petio G | Distributed cache architecture |
US7689602B1 (en) * | 2005-07-20 | 2010-03-30 | Bakbone Software, Inc. | Method of creating hierarchical indices for a distributed object system |
CN102057366A (zh) * | 2008-06-12 | 2011-05-11 | 微软公司 | 分布式高速缓存安排 |
US20130031364A1 (en) * | 2011-07-19 | 2013-01-31 | Gerrity Daniel A | Fine-grained security in federated data sets |
CN103095687A (zh) * | 2012-12-19 | 2013-05-08 | 华为技术有限公司 | 元数据处理方法及装置 |
US20150124806A1 (en) * | 2013-11-05 | 2015-05-07 | Cisco Technology, Inc. | Hierarchical routing with table management across hardware modules |
US20150186215A1 (en) * | 2013-12-27 | 2015-07-02 | Debendra Das Sharma | Assisted Coherent Shared Memory |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020220534A1 (zh) * | 2019-04-28 | 2020-11-05 | 平安科技(深圳)有限公司 | 一种基于中间件的数据处理方法和相关装置 |
CN112286928A (zh) * | 2019-09-16 | 2021-01-29 | 重庆傲雄在线信息技术有限公司 | 一种链式存储系统 |
CN112286928B (zh) * | 2019-09-16 | 2023-11-28 | 重庆傲雄在线信息技术有限公司 | 一种链式存储系统 |
Also Published As
Publication number | Publication date |
---|---|
EP3387548A1 (en) | 2018-10-17 |
CN108885607B (zh) | 2022-04-12 |
WO2017100288A1 (en) | 2017-06-15 |
CA3006776A1 (en) | 2017-06-15 |
US20190155524A1 (en) | 2019-05-23 |
US20190171373A1 (en) | 2019-06-06 |
CN115061971A (zh) | 2022-09-16 |
WO2017100292A1 (en) | 2017-06-15 |
EP3387548B1 (en) | 2023-08-02 |
US20220326859A1 (en) | 2022-10-13 |
EP3387548A4 (en) | 2019-08-14 |
US20200379656A1 (en) | 2020-12-03 |
US10809923B2 (en) | 2020-10-20 |
US10895992B2 (en) | 2021-01-19 |
US11281382B2 (en) | 2022-03-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108885607A (zh) | 使用容错对象的存储器结构操作和一致性 | |
CN108885604A (zh) | 存储器结构软件实现方案 | |
CN107924371A (zh) | 带有路由器的无限存储器结构硬件实现方案 | |
US11573699B2 (en) | Distributed index for fault tolerant object memory fabric | |
CN108431774A (zh) | 无限存储器结构流和api | |
CN107533457B (zh) | 对象存储器数据流指令执行 | |
US20170160963A1 (en) | Object memory interfaces across shared links | |
WO2016200655A1 (en) | Infinite memory fabric hardware implementation with memory |
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 |