CN111324308B - 用于访问存储器的存储器装置 - Google Patents
用于访问存储器的存储器装置 Download PDFInfo
- Publication number
- CN111324308B CN111324308B CN202010100570.3A CN202010100570A CN111324308B CN 111324308 B CN111324308 B CN 111324308B CN 202010100570 A CN202010100570 A CN 202010100570A CN 111324308 B CN111324308 B CN 111324308B
- Authority
- CN
- China
- Prior art keywords
- memory
- smc
- command
- data
- controller
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- 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/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17306—Intercommunication techniques
- G06F15/17331—Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]
-
- 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/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0646—Configuration or reconfiguration
- G06F12/0653—Configuration or reconfiguration with centralised address assignment
-
- 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/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0646—Configuration or reconfiguration
- G06F12/0692—Multiconfiguration, e.g. local and global addressing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Human Computer Interaction (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Stored Programmes (AREA)
- Computer And Data Communications (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Logic Circuits (AREA)
- Programmable Controllers (AREA)
- Information Transfer Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
描述了一种存储器装置,其包括通过命令接口耦合至一个或多个通信信道的处理器,其中处理器被配置用于通过通信信道通信命令。多个智能存储器立方体(SMC)通过通信信道耦合至处理器。每个SMC包括可编程的控制器和多个存储器设备。控制器被配置成响应于来自命令接口的命令以访问多个存储器设备中的一个或多个存储器设备中存储的内容并且对从多个存储器设备访问的内容执行数据操作。
Description
本申请是于2014年12月19日提交的、申请号为201480069497.0、发明名称为“用于访问存储器的存储器装置”的中国发明专利申请的分案申请。
相关申请的交叉引用
本申请要求2013年12月20日提交的、代理人备案编号为765-0083P(10154US01)的、名称为“HIGH DENSITY RACK-MOUNT MEMORY WITH PROCESSING CAPABILITY”的共同拥有的临时专利申请美国序列第61/919,318号的优先权和权益,其全部内容通过引用合并于此。本申请要求2014年3月13日提交的、代理人备案编号为RMBS-0001-00.00US的、名称为“AMEMORY APPLIANCE SYSTEM AND ARCHITECTURE INCLUDING ONE OR MORE PROGRAMMABLEINTERFACES FOR ACCESSING MEMORY”的共同拥有的临时专利申请美国序列第61/952,784号的优先权和权益,其全部内容通过引用合并于此。本申请要求2014年3月13日提交的、代理人备案编号为RMBS-0002-00.00US的、名称为“METHOD AND SYSTEM FOR APPLICATIONAWARE ACCELERATION OF PROGRAMMABLE MEMORY INTERFACES FOR ACCESSING MEMORY INA MEMORY APPLIANCE ARCHITECTURE”的共同拥有的临时专利申请美国序列第61/952,800号的优先权和权益,其全部内容通过引用合并于此。本申请要求2014年3月13日提交的、代理人备案编号为RMBS-0003-00.00US的、名称为“RELIABILITY,AVAILABILITY,ANDSERVICEABILITY(RAS)WITHIN A MEMORY APPLIANCE ARCHITECTRE INCLUDING ONE ORMORE PROGRAMMABLE INTERFACES FOR ACCESSING MEMORY”的共同拥有的临时专利申请美国序列第61/952,798号的优先权和权益,其全部内容通过引用合并于此。本申请要求2014年3月13日提交的、代理人备案编号为RMBS-0004-00.00US的、名称为“REDUCING LATENCYWITHIN A MEMORY APPLIANCE ARCHITECTURE INCLUDING ONE OR MORE PROGRAMMABLEINTERFACES FOR ACCESSING MEMORY”的共同拥有的临时专利申请美国序列第61/952,778号的优先权和权益,其全部内容通过引用合并于此。本申请要求2014年3月13日提交的、代理人备案编号为RMBS-0005-00.00US的、名称为“BLOB POOLS AND SELECTORS,LEVERAGINGVERTICAL INTEGRATION,CREATING SUSTAINABLE ADVANTAGE,AND OXFORD COMMAND SET”的共同拥有的临时专利申请美国序列第61/952,796号的优先权和权益,其全部内容通过引用合并于此。本申请要求2014年5月7日提交的、代理人备案编号为RMBS-0007-00.00US的、名称为“HIGH LEVEL INSTRUCTIONS WITH LOWER-LEVEL ASSEMBLY CODE STYLE PRIMITIVESWITHIN A MEMORY APPLIANCE ARCHITECTURE INCLUDING ONE OR MORE PROGRAMMABLEINTERFACES FOR ACCESSING MEMORY”的共同拥有的临时专利申请美国序列第61/990,009号的优先权和权益,其全部内容通过引用合并于此。本申请要求2014年5月7日提交的、代理人备案编号为RMBS-0008-00.00US的、名称为“MEMORY APPLIANCE ARCHITECTUREINCLUDING ONE OR MOER PROGRAMMABLE INTERFACES(E.G.,FPGAS)FOR ACCESSINGMEMORY”的共同拥有的临时专利申请美国序列第61/990,014号的优先权和权益,其全部内容通过引用合并于此。本申请要求2014年5月7日提交的、代理人备案编号为RMBS-0009-00.00US的、名称为“ARCHITECTURE OF A MEMORY PACKET INCLUDING DATA STRUCTURE ANDHIERARCHY USED WITHIN A MEMORY APPLIANCE ARCHITECTURE INCLUDING ONE OR MOREPROGRAMMABLE INTERFACES FOR ACCESSING MEMORY”的共同拥有的临时专利申请美国序列第61/990,033号的优先权和权益,其全部内容通过引用合并于此。
本申请涉及____日提交的、代理人备案编号为RMBS-10186US06的、名称为“HIGHLEVEL INSTRUCTIONS WITH LOWER-LEVEL ASSEMBLY CODE STYLE PRIMITIVES WITHIN AMEMORY APPLIANCE FOR ACCESSING MEMORY”的美国专利申请第号。本申请涉及____日提交的、代理人备案编号为RMBS-10187US05的、名称为“A MEMORY PACKET,DATA STRUCTURE ANDHIERARCHY WITHIN A MEMORY APPLIANCE FOR ACCESSING MEMORY”的美国专利申请第____号。本申请涉及____日提交的、代理人备案编号为RMBS-10187US06的、名称为“BLOB POOLS,SELECTORS,AND COMMAND SET IMPLEMENTED WITHIN A MEMORY APPLIANCE FOR ACCESINGMEMORY”的美国专利申请第____号。
背景技术
信息越来越多地存储在大的数据存储系统中。在基本水平,这些数据存储系统配置有多个处理器,每个处理器控制对对应存储器的访问。每个处理器被配置成控制某个量的存储器。然而,由于处理器成本约束和每个处理器的存储器的有限增加,通过添加具有对应存储器的处理器来缩放存储器不能够保持满足对于增加存储器能力的需求。
首字母缩略词、缩略语和术语
MA-存储器装置
NPU-网络处理单元
SMC-智能存储器立方体
OCP-开放式计算项目
FPGA-现场可编程门阵列
KV-密钥/值
AXI-先进的可扩展接口
RegEx或regexp-规则表达
QoS-服务质量
FF-形状因子
PDU-功率分布单元
PS-电源
POR-记录计划
RAS-可靠性、可用性和可服务性
MC-存储器控制器
HW或H/W-硬件
SW-软件
DMA-直接存储器访问
CRC-循环冗余校验
Rd或RD-读取
Wr或WR-写入
FIFO-先入先出
PHY-物理层
IO或I/o:输入/输出
ASIC-专用集成电路
DIMM-双列直插存储器模块
LRDIMM-负载降低型DIMM
CPU-中央处理单元
CA或C/A-命令/地址
ECC-纠错码
DDR-双数据速率
Addr-地址
RAM-随机存取存储器
DRAM-动态随机存取存储器
RDIMM-寄存式DIMM
B/W-带宽
OS-操作系统
GPU-图形处理单元
NVM-非易失性存储器
SSD-固态盘
DFS-分布式文件系统
IOPS-每秒钟的I/O
PCB-印刷电路板
IP-因特网协议
NIC-网络接口卡
PCI-外围部件互连
PCIe-快速外围部件互连
OSI-开放系统互连
TCP-传输控制协议
UDP-用户数据报
EEPROM-电可擦除可编程只读存储器
DPA-差分功率分析
PCQ-物理命令队列
CCD-命令控制或复制守护程序
RET-链中的最末命令
ROM-只读存储器
CD-ROM-光盘ROM
DVD-数字多功能盘
RF-射频
ISA-工业标准架构
SCSI-小型计算机系统接口
USB-通用串行总线
WAN-广域网
LAN-局域网
PAN-个域网
NAS-网络附接的存储装置
NFS-网络文件系统
SMB-服务器消息块
CIFS-公共因特网文件系统
SAN-存储区域网
附图说明
本公开的另外的方面根据仅作为示例给出的以下描述并且参考附图将会变得很清楚,在附图中:
图1A是根据本公开的一个实施例的包括SMC的存储器装置的框图,其中SMC包括被实现为FPGA和/或ASIC的SMC控制器。
图1B是根据本公开的一个实施例的包括NPU作为主机控制器的存储器装置的框图,其中NPU通过PCIe接口与多个SMC通信。
图2是根据本公开的一个实施例的多个存储器装置的框图。
图3是根据本公开的一个实施例的存储器装置接口的各种实现的图示。
图4是图示根据本公开的一个实施例的用于智能存储器立方体上电序列的方法中的步骤的流程图。
图5是图示根据本公开的一个实施例的用于在对应SMC内实现应用已知加速的存储器装置的方法的流程图。
图6A是根据本公开的一个实施例的包括与存储器装置通信耦合的客户端系统的系统的框图,其中存储器装置被配置成将高层指令翻译成由被实现为FPGA和/或ASIC的多个SMC控制器可执行的低层组件代码格式原语操作。
图6B是根据本公开的一个实施例的在主机处理器与一个或多个SMC之间匹配队列对的图示。
图7是图示根据本公开的一个实施例的用于访问存储器装置内的数据的方法中的步骤的流程图,其中存储器装置被配置成将高层指令翻译成由多个SMC及其SMC控制器可执行的低层组件代码格式原语操作。
图8是图示根据本公开的一个实施例的存储器装置内的数据的访问的信息流图,其中存储器装置被配置成将高层指令翻译成由多个SMC及其SMC控制器可执行的低层组件代码格式原语操作。
图9是根据本公开的一个实施例的用于存储命令链的主机系统/处理器本地缓冲器的图示。
图10是根据本公开的实施例的命令链及其变型阵列的图示。
图11A是根据本公开的一个实施例的在包括用于访问存储器的可编程存储器接口的存储器装置架构内实现的可重配置的存储器结构内使用的数据包的图示。
图11B是根据本公开的一个实施例的在包括用于访问存储器的可编程存储器接口的存储器装置架构内实现的所定义的可重配置的高性能缓存存储器结构内使用的数据包的图示。
图12是根据本公开的一个实施例的可重配置的高性能缓存存储器结构的图示。
图13是根据本公开的一个实施例的空闲列表内的可变大小的容器的分类的图示。
图14是根据本公开的一个实施例的空闲列表内的可变大小的容器的分类内的LRU容器列表的图示。
图15是根据本公开的一个实施例的可变大小的容器的分类内的空闲列表和LRU列表的组合的图示。
图16是根据本公开的一个实施例的基于包括用于访问存储器的可编程存储器接口的存储器装置架构内的容器的相同集合的两个存储器结构的图示。
图17是能够实现本公开的实施例的计算系统的示例的框图。
图18是能够实现本公开的实施例的网络架构的示例的框图。
具体实施方式
现在将详细参考本公开的各种实施例,其示例在附图中图示。另外,在本公开的以下详细描述中,给出大量具体细节以便提供对本公开的透彻理解。然而,应当理解,本公开可以在没有这些具体细节的情况下来实践。在其他情况下,没有描述众所周知的方法、过程、部件和电路以免不必要地模糊本公开的各个方面。
存储器装置系统
图1A是根据本公开的一个实施例的存储器装置系统100A的框图。在一个实施例中,存储器装置系统100A通过在网络接口125与SMC 140A-N之间的可编程存储器接口的使用向存储器提供更高容量以及更高带宽的存储器缩放和配置卸载。在另一实施例中,存储器装置系统100A通过硬件实现的ASIC存储器接口的使用提供更高速率的存储器缩放。接口的存储器侧的两个可编程和ASIC可实现存储器接口被配置成控制应用特定的原语操作和对存储器执行应用特定的原语操作,这些操作通常由在接口另一侧的处理器来控制。存储器装置系统100A被配置成接收高层命令或指令(例如OSI层7协议或来自客户端系统的接口命令),并且将指令翻译成由多个SMC控制器可执行的低层组件代码格式原语操作。通过控制和执行存储器处的这些原语操作,不需要通过接口来回递送来自每个原语操作的数据,从而极大地减小和/或避免了通常所经历的潜伏期建立同时增加了存储器缩放。存储器装置300A包括多个智能存储器立方体(SMC)340A-N,每个SMC包括存储器。这样,存储器遍及存储器装置300A分布在多个SMC 340A-N中。存储器装置300A可以被配置为单独的单元,或者被配置为可缩放单元。也就是,在可缩放配置中,可以组合多个类似地配置的存储器装置以形成非限制性可缩放存储器配置。
存储器装置100A包括多个智能存储器单元或智能存储器立方体(SMC)140A-N,其中每个包括存储器。术语“SMC”遍及本公开用于方便引用而非表示给予需要特定功能或方面的专门的定义或建议。这样,存储器遍及存储器装置100A分布在多个SMC 140A-N中。存储器装置100A可以被配置为单独的单元,或者配置为可缩放单元。也就是,在可缩放配置中,可以组合多个类似地配置的存储器装置以形成非限制性可缩放存储器配置。
在单独配置或可缩放配置中,装置控制器120通过命令接口耦合至多个SMC 140A-N以便提供包含在SMC 140A-N内的用于存储器的配置信息。装置控制器120可以耦合到高层控制器,高层控制器通过外部管理网络108远程管理一个或多个存储器装置。例如,由装置控制器120执行的操作单独地或者与远程管理器协同包括存储器的开发、存储器的提供(例如在虚拟存储器设备内)、事件日志、远程管理、功率和/或热管理、监测和控制。
如图1A所示,存储器装置系统包括被配置成执行处理和交换操作的主机控制器110。更特别地,主机控制器110管理在存储器装置系统100A中遍及多个SMC 140A-N分布的存储器。另外地,主机控制器110可操作以通过命令接口耦合至一个或多个通信信道,其中通信信道通过接口125耦合至存储器。另外,还通过接口125向主机控制器110递送回某些形式的通知(例如到存储器的指针)或结果。
在一个实现中,主机控制器110包括处理器112和可选交换机114。处理器112生成命令并且通过一个或多个通信信道通信命令,其中命令被配置用于访问遍及多个SMC分布的存储器。例如,处理器112被配置成接收高层命令(例如从实现高性能缓存的客户端侧数据库应用)并且将这些命令翻译成在每个SMC内可操作用于访问和/或操作存储器中存储的数据的一系列原语命令。另外,交换机114可配置以向适当的SMC递送对应的命令或一系列命令用于访问存储器和/或对存储器执行操作。
主机控制器110中的处理器112被配置成通过外部网络105发送和接收通信。在一个示例中,外部网络向接口提供客户端设备。在另一示例中,外部网络106被配置成在存储器装置之间提供通信。在一个示例中,外部网络105和106类似地配置。在一个实施例中,处理器112耦合至NIC以提供对外部网络的访问。在另一实施例中,处理器112被配置为包括用于与外部网络通信的内部通信接口的NPU。在又一实施例中,处理器112被配置为FPGA。
针对主机控制器支持各种配置。仅出于说明目的,如图1A所示,第一配置131包括CPU(例如,Intel 处理器);第二配置132包括被配置用于执行处理操作的NPU、以及用于执行切换操作的交换机;第三配置133包括被配置用于执行处理操作的FPGA、以及用于执行切换操作的交换机;以及第四配置134包括被配置用于执行处理操作的NPU、以及被配置用于执行切换操作的FPGA。支持其他配置,诸如Intel />处理器和用于执行切换操作的交换机。
图1B中还描述根据本公开的一个实施例的包括NPU作为主机控制器的具体配置。具体地,存储器装置110B包括多个SMC 180A-N,每个SMC包括存储器。装置控制器165通过作为PCIe交换机150的接口耦合至多个SMC 180A-N以向存储器提供配置信息。在一个实现中,装置控制器165通过用于远程管理的外部管理网络170耦合至高层控制器。另外,存储器装置系统100B包括作为NPU 160并且被配置用于管理遍及多个SMC 180A-N分布的存储器的主机控制器。每个SMC包括可编程SMC控制器(例如FPGA)181和存储器182。NPU 160与多个SMC180A-N之间的通信通过PCIe交换机150来实现。这样,由NPU 160生成并且被配置成访问和操作SMC 180A-N中的存储器的命令通过PCIe交换机150来递送用于由对应可编程SMC控制器来操作。还通过PCIe交换机150向NPU 160递送回某些形式的通知或结果。
返回图1A,如先前所呈现的,处理器112被配置成在执行主机控制器义务时管理存储器装置系统中遍及多个SMC的存储器。例如,主机控制器110中的处理器112被配置成提供存储器服务,诸如负载平衡、服务质量、连接管理和业务路由。另外,在一个实施例中,主机控制器110管理作为虚拟存储器系统的存储器装置系统中的存储器。
多个SMC 140A-N通过经由也称为SMC接口125的命令接口125建立的一个或多个通信信道耦合至处理器112。以这一方式,由处理器112生成或者通过处理器112传递的命令通过命令接口125被递送给多个SMC 140A-N。
在一个实施例中,命令接口125中的通信信道包括用于在主机控制器110与多个SMC 140A-N之间提供通信的网络接口。也就是,使用连网协议来实现处理器与多个SMC之间的通信。比如,可以使用以下协议之一来配置网络接口:TCP、UDP、以太网、无限频带、光纤信道和其他连网协议。
在另一实施例中,命令接口125中的通信信道包括直接接口。也就是,处理器112和多个SMC中的每个通过两个端口之间的点到点通信信道或链路来通信。例如,链路可以使用PCIe接口或者作为高速串行计算机扩展总线标准的其衍生物之一来建立点到点通信。
每个SMC包括硬连线或可编程以执行由外部客户端和/或应用生成的应用特定的命令和/或操作的程序块或单元控制器(也称为SMC控制器)。为了说明,SMC 140A、包括其部件代表多个SMC 140A-N中的每个。例如,SMC控制器141被配置成对被包括在存储器142中的内容执行数据操作。在一个实施例中,对于命令接口和/或请求客户端(通过外部网络105通信耦合)透明地执行数据操作。也就是,一旦通过命令接口从请求客户端递送高层命令或指令,则基于高层命令的原语数据操作的执行的控制被移交给SMC控制器141。例如,数据操作包括搜索、分类和其他定制加速。
在一个实施例中,SMC 140A中的SMC控制器141被配置为预先编程有适当的功能以处理所请求的命令的FPGA。在另一实施例中,FPGA取决于在SMC 140A中包含的存储器142上做出的请求在飞行中被编程。例如,FPGA被配置成在接收到一个或多个高层命令时生成和编译原语操作,其中原语操作由FPGA可执行。在另一实施例中,FPGA被配置成访问配置文件用于编程适当的功能。在又一实施例中,SMC控制器141通过提供应用特定的操作的ASIC设备来实现。
在实施例中,SMC控制器141被配置成响应于通过命令/SMC接口125递送的原语命令以访问存储器142中存储的内容和/或对存储器142中存储的内容执行操作。更具体地,处理器112被配置成通过外部网络105接收高层命令(例如从客户端应用)并且将每个命令翻译成一个或多个原语操作。通过命令/SMC接口125递送原语操作用于由SMC控制器141来处理。以这一方式,通过在存储器处处理这些原语操作,不需要处理器112来控制对与特定高层命令相关联的原语操作的按步控制,从而减小和/或避免了由于多个SMC 140A-N中存储器的缩放的增加而产生的任何潜伏期。
例如,存储器装置100A中的多个存储器设备可以被配置为作为通用分布式存储器缓存系统的高性能缓存存储器系统。这样,原语命令被设计成实现高性能缓存存储器系统内的数据的访问和操纵。特别地,使用如通过原语操作实现的密钥值对或密钥值函数来执行对高性能缓存存储器系统中的存储器的访问。例如,使用一个或多个原语操作,使用适当的算法来哈希命令内的密钥以便确定存储器内的适当寻址。典型的密钥值命令/函数包括“GET”和“SET”和“DELETE”操作,其每个被进一步翻译成由对应SMC处理的一个或多个原语操作。
另外,在一个实施例中,SMC 140A中的SMC控制器141被配置成响应于通过命令/SMC接口125递送的高层命令以访问存储器142中存储的内容和/或对存储器142中存储的内容执行操作。也就是,SMC控制器141可以被配置成在与存储器142对接时将高层命令翻译成适合在SMC控制器141内使用的格式。也就是,取代在处理器112处执行翻译,本地执行高层命令到适合在SMC控制器141中使用的原语操作的翻译。
在一个实施例中,SMC控制器141被配置成提供数据操作的定制加速。定制加速的一些示例包括但不限于错误恢复、数据操纵、和数据压缩。例如,SMC控制器141可以被配置成处理一个或多个应用特定的操作(例如高性能缓存搜索操作)。在一个实施例中,SMC控制器141诸如通过FPGA可编程以处理具体的操作。在另一实施例中,SMC控制器141在飞行中被编程以处理即将到来的操作。在又一实施例中,SMC控制器通过被配置成处理一个或多个应用特定的操作的ASIC来实现。
另外,SMC控制器141可以包括用于处理对时间不太敏感的功能(诸如存储器设备的管理和控制)的附加处理器。比如,来自装置控制器120的指令由这一附加处理器来处理(例如,图4中描述的SMC微控制器)。
另外,每个SMC包括多个存储器设备。例如,SMC 140A包括存储器142。在一个实施例中,对应SMC中的多个存储器设备包括封装在DIMM、寄存式存储器模块(RDIMM)和/或负载降低型存储器(LRDIMM)中的存储器设备。在一个另外的实施例中,封装在对应DIMM中的存储器设备包括DRAM存储器设备。在另一实施例中,封装在对应DIMM中的存储器设备包括非易失性读/写存储器(例如FLASH)。在又一实施例中,封装在对应DIMM中的存储器设备包括非易失性存储器设备(例如FLASH、EEPROM)。
在一个实施例中,每个SMC配置有多个信道(例如,4个),每个信道适合用于处理多个DIMM(例如,6个)。在示例中,SMC 140A在给定4个信道的情况下能够处理最高达以及多于24个DIMM,并且每个信道6个DIMM。如所演示的,本公开的实施例每个SMC提供更大量的DIMM以增加可缩放性。
图2是根据本公开的一个实施例的包括多个存储器装置260A-N的存储器系统200的框图。多个存储器装置260A-N提供对内部存储器设备的访问。也就是,存储器装置260A-N中的每个提供对对应存储器的访问。特别地,多个存储器装置260A-N包括第一存储器装置系统(例如,260A)和指示一个其他或第二存储器装置系统(例如,260B)。这两个存储器装置系统诸如图1A-B中所描述地类似地配置。例如,每个存储器装置系统包括用于管理对应多个SMC上的数据的主机控制器。
为了说明,存储器装置260A通过主机控制器261A提供对存储器262A的访问,其中存储器262A包括一个或多个SMC;存储器装置260B通过主机控制器261B提供对存储器262B的访问,其中存储器262B包括一个或多个SMC;并且存储器装置260N通过主机控制器261N提供对存储器262N的访问,其中存储器262N包括一个或多个SMC。在一个实施例中,存储器设备被配置为虚拟存储器,其中分布式存储器设备有多个存储器装置的主机控制器中的每个可访问。
在一个实施例中,多个存储器装置260A-N的主机控制器通信以促进分布式存储器系统200。例如,外部通信接口被配置成在多个存储器装置260A-N内的主机控制器之间提供通信以提供对在一个或多个存储器装置系统上虚拟化的存储器的访问。通信接口可以包括被配置为用于通信数据的高速高带宽通信信道的粗管以及被配置为被配置用于通信指令/控制的低速低带宽通信信道的细管。
图3是根据本公开的一个实施例的存储器装置系统310内的存储器装置命令接口的各种实现的图示,其中接口被建立以促进主机控制器与存储器装置310内的一个或多个SMC之间的通信。这些示例被提供仅用于说明,支持存储器装置接口的各种其他实现。
在第一示例中,存储器装置系统310被实现为基于网络的存储装置系统310A。比如,存储装置系统310A由网络接口来支持,并且包括耦合至一个或多个SMC(例如图3中所示的4个)的NPU 321,其中每个SMC包括可编程FPGA 322和存储器323,如先前所描述的。例如,NPU 321经由网络接口耦合至主机控制器以便传递命令和数据。也就是,网络接口依赖于识别主机控制器的网络节点的网络地址以及基于网络的存储器装置系统310A来递送通信。
在第二示例中,存储器装置系统310实现为PCIe存储器装置系统310B,其中PCIe在主机控制器的PCIe交换机311与一个或多个SMC(例如图3中所示的4个)之间提供直接对接。每个SMC包括可编程FPGA 332和存储器333。例如,PCIe交换机331经由直接接口(例如PCIe)耦合至主机控制器以便传递命令和数据。PCIe设备经由点到点连接或互连通信,其中计算设备的两个PCIe端口之间建立有直接信道以使得这两个PCIe端口能够发送/接收正常PCIe请求和中断。
在第三示例中,存储器装置系统310被实现为PCIe结构存储器装置系统310C。比如,存储器装置系统310C由在PCIe交换机和结构控制器341与一个或多个SMC(例如,图3所示的4个)之间提供直接对接的PCIe结构来支持。存储器装置系统310C中的每个SMC包括FPGA 342和存储器343。例如,基于PCIe的结构使得能够以低的成本直接共享I/O设备并且使用低功率包封。主机控制器直接耦合至PCIe结构并且然后耦合至存储器不需要其他中间设备,如在无限频带网络中。例如,PCIe结构控制器341通过基于PCIe的网络结构经由直接接口耦合至主机控制器以便传递命令和数据。基于PCIe的结构用作统一的结构以取代传统的通信互连(例如取代小的无限带宽集群)来实现高速集群。
图4是图示根据本公开的一个实施例的用于SMC上电序列的方法中的步骤的流程图400。图400在包括SMC的存储器控制器的上下文中描述,SMC具有SMC控制器,SMC控制器可实现为通过PCIe接口与主机控制器通信的FPGA,然而预期和支持其他SMC配置。在又一实施例中,流程图400图示用于实现存储器装置的对应SMC内的SMC上电序列的计算机实现的方法。在另一实施例中,流程图400在包括处理器和耦合至处理器的存储器并且存储有指令的计算机系统内实现,这些指令在由计算机系统执行时引起系统执行用于实现存储器装置的对应SMC内的SMC上电序列的方法。在又一实施例中,用于执行流程图400中给出的方法的指令存储在具有用于实现存储器装置的对应SMC内的SMC上电序列的计算机可执行指令的非暂态计算机可读存储介质上。流程图400中给出的方法由图1A-B的计算机系统1700、存储系统1800和存储器装置系统100A-B的一个或多个部件可实现。
流程图400描述可以由包括FPGA和单独的微控制器的SMC来实现的操作,其中FPGA用作存储器控制器并且微控制器执行一般管理。这样,在一些实施例中,微控制器可以执行流程图400中图示的上电序列,而在其他实施例中,微控制器在FPGA内实现,并且FPGA可以执行流程图400中图示的上电序列。
在410,方法包括从非易失性存储器(例如,FLASH)启动SMC控制器。在420,方法包括使得SMC控制器按照规定的顺序上电所有的FPGA和存储器电源。在430,方法包括使得SMC控制器读取附接存储器的DIMM配置。在440,SMC控制器将PCIe和自测试配置加载到FPGA并且开始自测试序列。在450,SMC控制器响应于主机控制器PCIe开发,同时检查DIMM存储器。在460,如果FPGA通过测试,则SMC控制器向FPGA加载默认操作配置。在另一实现中,主机控制器被配置成经由PCIe接口加载操作配置。在470,SMC控制器向主机控制器报告SMC、程序块或单元标识符、配置和初始化状态。在480,SMC控制器执行系统管理命令,监测传感器,并且处理关键系统错误。例如,SMC控制器执行从主机控制器接收的系统管理命令(例如,加载客户端FPGA配置,更新其自己的和FPGA启动闪存,进入/离开功率备用或断电,设置时钟等)。另外,SMC控制器周期性地监测所有的传感器(例如,温度、电源等)和FPGA状态,并且将其报告回给主机控制器。在另一情况下,SMC控制器处理关键系统错误(例如电源暂时低压、过热、硬件故障等)。
存储器装置系统中的可编程存储器接口的应用已知加速
在一个实施例中,图1A的存储器装置100A包括多个可编程SMC,其中主机控制器与可编程SMC通信以控制对存储器装置100A上的数据的管理。每个SMC包括用于独立地控制该SMC内的一个或多个存储器设备分组的可编程接口或SMC控制器。例如,在SMC 140A中,可编程SMC控制器141被配置成执行用于管理存储器142内的数据的多个预定义的或者飞行中已编译功能之一。
在一个实施例中,每个SMC控制器被配置成提供在对应存储器(例如,存储器设备)上执行的数据操作的定制加速。例如,SMC控制器141可以被配置成处理一个或多个应用特定的操作(例如,高性能缓存存储器系统中用于使用密钥值函数来访问存储器的搜索、得到、存储和/或删除操作)。在另一示例中,包括一个或多个SMC的存储器装置被配置为快速和大容量盘,其可以在高性能应用中用作突发缓冲器,或者用作用于虚拟机/操作系统的快速交换空间,或者用作在地图减小框架中使用的中间存储装置。在一个实施例中,SMC控制器141主通过FPGA可编程以处理具体的操作。在另一实施例中,SMC控制器141在飞行中编程以处理即将到来的操作。在又一实施例中,SMC控制器通过被配置成处理一个或多个应用特定的操作的ASIC来实现。
下面列出可编程功能的一些示例而非限于此:得到、存储、删除、最小化、寻找最大值、执行求和、执行表格连结操作、寻找和替换、移动数据、计数、错误恢复、数据操纵、和数据压缩、以及其他数据操纵操作。在另一实施例中,被编程的功能包括开放源软件框架中的Hadoop操作(例如,Apache Hadoop),其被配置用于数据集的企业存储和/或大规模处理。例如,Hadoop操作包括地图减小操作。
在一个实施例中,被编程用于SMC控制器141内的加速的功能包括被配置用于保护进入或离开对应SMC 140A的比特流的DPA操作。具体地,执行DPA以反洗SMC 140A的功率签名从而提取比特流内的任何密钥。然后可以执行DPA措施以通过改变功率签名来保证AMC140A不通过功耗分析释放信息。在一个实施例中,计数器DPA模块位于SMC 140A中并且被配置用于在SMC控制器141上执行DPA措施。比如,通过控制/网络接口通过控制信道从SMC控制器141递送控制消息。这些控制消息可以包括密钥(例如在高性能缓存存储器系统中使用的)。可以执行加密以生成包括密钥的加密比特流。在一个实施例中,在计数器DPA模块处采取DPA措施的加密比特流以便防止提取其他加密密钥。在另一实施例中,在SMC控制器141内采取DPA措施以在执行加密比特流中的命令时掩盖其功率签名。在又一实施例中,计数器DPA模块位于主机控制器处以在主机控制器110水平执行DPA。
在又一实施例中,被编程的功能包括从存储器装置内的故障恢复的恢复操作(例如,DIMM、SMC、比特等)。
在一个实施例中,主SMC 140A中的SMC控制器141等对应SMC控制器的可编程性可以通过库中一个或多个配置文件的选择来执行。配置文件用于重新配置可编程SIM控制器141的对应可编程接口以执行多个预定义的或者飞行中生成的功能之一。在一个实施例中,主机控制器110访问配置文件之一以便重新配置与涉及SMC 140A的命令相关联的可编程SMC存储器控制器141。在另一实施例中,SMC存储器控制器141访问配置文件之一以便重新配置与涉及可编程SMC 140A的命令相关联的SMC存储器控制器141。
在另一实施例中,诸如SMC 140A的SMC控制器141等特定SMC控制器的可编程性可以通过生成配置文件的加速功能的编译来在飞行中执行。配置文件用于重新配置可编程SMC控制器141的对应可编程接口以执行多个预定义的或者飞行中生成的功能之一。也就是,可编程SMC控制器141在飞行中响应于涉及与从主机控制器110递送的可编程SMC 140相关联的存储器的命令而被重新配置。
图5是图示根据本公开的一个实施例的用于实现对应SMC内的应用已知加速的存储器装置的方法的流程图。在又一实施例中,流程图500图示用于实现存储器装置的对应SMC内的应用已知加速的计算机实现的方法。在另一实施例中,流程图500在计算机系统内实现,计算机系统包括处理器和耦合至处理器的存储器,存储器中存储有指令,这些指令在由计算机系统执行时引起系统执行用于实现存储器装置的对应SMC内的应用已知加速的计算机实现的方法。在又一实施例中,用于执行如流程图500中给出的方法的指令存储在非暂态计算机可读存储介质上,该存储介质具有计算机可读指令,这些指令用于实现存储器装置的对应SMC内的应用已知加速的计算机实现的方法。流程图500中给出的方法分别由图17、18以及1A-B的计算机系统1700、存储系统1800和存储器装置系统100A-B的一个或多个部件可实现。
在510,方法包括在存储器装置系统的主机控制器处接收命令。如先前参考图1A所描述的,主机控制器管理通过网络在通信上耦合在一起的多个SMC中的一个或多个SMC上的数据。每个SMC包括存储器(例如,被封装成一个或多个DIMM的一个或多个存储器设备)和用于管理存储器内的数据的可编程SMC存储器控制器。命令与第一可编程SMC存储器控制器有关。
在520,方法包括确定对应于命令的功能类型。在一个实施例中,在主机控制器处在飞行中确定功能类型。例如,客户端应用在发送命令和/或请求时也发送功能类型。以这一方式,主机控制器可以向对应SMC转发信息,或者可以检索适当的配置文件用于向与命令和/或请求相关联的SMC递送。在一个实施例中,功能类型与第一配置文件相关联,其中第一配置文件用于重新配置第一可编程SMC存储器控制器以便执行命令和/或请求。在一个实施例中,配置文件是比特文件。在另一实施例中,配置文件由主机控制器从命令和/或请求来编译,并且然后被递送给可编程SMC控制器。
一旦功能类型已知,则方法包括从配置文件库访问第一配置文件。这样,第一配置文件可以用于重新配置、或者重新编程、或者预先编程与命令和/或请求相关联的第一可编程SMC存储器控制器。
在另一实施例中,从包括命令的应用来编译第一配置文件。也就是,在飞行中生成第一配置文件。然后,将第一配置文件提供给第一可编程SMC控制器。
这样,方法包括在第一可编程SMC存储器控制器处接收第一配置文件。方法还包括在第一可编程SMC存储器控制器处加载第一配置文件,并且使用第一配置文件重新编程第一可编程SMC存储器控制器。因此,第一可编程SMC存储器控制器被配置成并且执行命令。
可编程功能的一些示例包括但不限于以下:得到、存储、删除、最小化、寻找最大值、执行求和、执行表格接合操作、寻找和替换、计数、被配置用于保护比特流DPA操作进入或离开对应SMC、被配置成参考授权签名来认证对应SMC的部件的认证操作、以及恢复操作。
包括可编程存储器接口的存储器装置内的可靠性、可用性和可服务性(RAS)
RAS特征被包括在存储器装置系统中以便在可接受的潜伏期下维持吞吐量,并且寻址存储器错误而没有过度地访问存储器。可靠性给出存储器系统多久给出正确数据输出的指示,并且使用错误检测和这些错误的纠正。可用性给出存储器系统在任何给定时间点可用的可能性。可服务性或可维护性给出存储器系统的恢复过程有多简单或复杂的指示,并且提供与存储器系统的可靠性和可用性性能有关的线索。在一些实施例中,RAS特征在图1A-B的存储器装置系统100A-B中实现。
存储器装置系统(例如,图1的存储器装置系统100A)包括多个SMC,其中每个SMC包括用于独立地控制该SMC内的一个或多个存储器分组的可编程SMC控制器。主机控制器与被组合以控制存储器装置系统上的数据的管理的可编程SMC控制器通信。每个SMC包括存储器和可编程SMC控制器,其中SMC控制器包括用于管理存储器内的数据的可编程接口。特别地,可编程接口用于加速在对应存储器上执行的功能,如先前所描述的。SMC内数据的冗余使用其他SMC中的存储器来提供。另外,在特定SMC的恢复期间,SMC内的可编程FPGA被重新配置成执行恢复功能,并且特别地与其他SMC通信以取回数据以便在死机的SMC中重构数据文件。
特别地,存储器装置包括用于存储第一数据的第一SMC中的第一存储器。第一数据的冗余位于存储器装置中或者一个或多个存储器装置上的一个或多个剩余SMC上。特别地,存储器装置包括被包括在一个或多个剩余SMC中用于存储第二数据的第二存储器,其中第二数据包括第一数据的冗余数据。剩余SMC可以位于一个或多个存储器装置内。
在一个实施例中,第二数据包括第一数据的镜像副本。也就是,一个SMC中的存储器分组的镜像副本在另一SMC中的另一存储器分组中被镜像。作为镜像的示例,两个SMC控制器被配置成执行相同的指令(例如,几乎同时)。镜像可以在任何数据分组中发生(例如,RANK、DIMM等)。
在其他实施例中,针对数据冗余执行数据的明确复制或移动。在一个实现中,经由编程的I/O来执行数据的复制或移动。在另一实现中,直接经由DMA信道来执行数据的复制或移动。作为示例,可以向另一RANK复制或移动DIMM内的存储器的RANK。另外,可以向另一DIMM复制或移动DIMM。可以支持其他数据分组。
在另一实施例中,在一个或多个剩余SMC上剥离冗余的第二数据,其中SMC被包括在存储器装置内,或者被包括在一个或多个存储器应用上。这样,在一个或多个剩余SMC上交织数据,从而进一步防止数据损失并且提供对数据的更快访问。
在一个实施例中,在存储器装置水平在主机控制器之间管理冗余数据。比如,多个存储器装置包括第一存储器装置系统以及另一或第二存储器装置系统。两个存储器装置系统类似地被配置,如图1A-B中所描述的。每个存储器装置系统包括用于管理对应多个SMC上的数据的主机控制器。另外,外部通信接口被配置成在多个存储器装置的主机控制器之间提供通信以提供对在一个或多个存储器装置系统上虚拟化的存储器的访问。外部通信接口还提供数据的冗余和数据的恢复。例如,通信接口包括粗管线作为被配置用于通信数据的高速高带宽通信信道管线,并且包括细管线作为被配置用于通信指令/控制的低速低带宽通信信道。
在又一实施例中,在可编程SMC控制器水平管理冗余数据。也就是,SMC控制器彼此通信以管理冗余数据的存储以及冗余数据的恢复。也就是,建立通信接口以在多个SMC之间提供通信以便提供数据的冗余和恢复。
如先前所描述的,每个可编程SMC控制器包括用于管理对应存储器内的数据的可编程接口。特别地,可编程接口用于加速在对应存储器(例如,存储器设备)上执行的功能。在一个实施例中,可编程接口被配置成执行对应存储器内的数据的重构。
在另一实施例中,SMC被配置成提供内部冗余以保护防止灾难性故障。例如,SMC平台内的存储器包括用于存储数据的DRAM存储器设备以及被配置用于在故障期间备份DRAM存储器设备的非易失性存储器设备(例如,FLASH、EEPROM)。例如,FLASH设备的密度通常可以是DRAM存储器设备的5到10倍。在本示例中,可以使用FLASH设备形式的DRAM设备的数目的1/10来备份大量DRAM设备。备份可以周期性地进行,或者在故障时进行,其中在故障时,来自DRAM的数据被立刻存储在FLASH设备中。在另一实施例中,为了可服务性,SMC是现场可替换形式,并且被设计成能够热拔插。
在另一实施例中,SMC被配置成提供用于内部冗余以保护防止灾难性故障的另一方式。具体地,设置备用电源(例如,电池、电容器、超级电容器(ultra-capacitors、super-capacitors)、电耦合层电容器、伪电容器等)以向存储器设备提供备用功率。以这一方式,保存数据直到执行数据的更永久性的备份。例如,备用电池向被封装在对应SMC的DRAM的DIMM中的存储器设备提供电力。DRAM被提供地哪里以实现数据到诸如FLASH存储器设备等更永久性的设备的另外的复制,如先前所描述的。
减小存储器装置内的潜伏期
需要潜伏期的减小以实现存储器控制器的可接受性能。潜伏期可以遍及高层命令和返回结果的递送而发生。特别地,通信过程包括从客户端接收高层命令,从主机控制器向通过SMC接口执行相关原语命令的一个或多个SMC递送高层命令,并且向客户端设备返回结果。在一些实施例中,潜伏期的减小在图1A至图1B的存储器装置系统100A-B中实现。
本公开的实施例提供分布式存储器环境(诸如,图1A至图1B的存储器装置系统100A-B)中的网络附接DRAM的改进的存储器密度和功率效率。具体地,本公开的实施例通过将高层命令翻译成由对应SMC 140A-N处理和控制的原语操作来减小主机控制器/处理器110/112处理数据环境和I/O的时间量。由于存储器大小对于每个SMC增加,所以实现了处理器I/O的增加的减小,因为网络潜伏期对在本公开的实施例中与其大小成反比的净荷具有不成比例的影响。更简洁地,数据越大,实际受潜伏期的影响越小。这是由于往返时间的成本在净荷大小增加时在更多数据上被平摊。
本公开的实施例优化了SMC存储器与输出NIC(诸如,图6A中的NIC 665)之间的数据移动。通过使用Facebook作为权威的高性能缓存使用案例,期望所有请求中超过百分之九十的请求能够是基于UDP的“GET”请求。高性能缓存的Facebook使用的研究表明,超过百分之九十的对象的大小是五百字节或更小,其中缓存中的命中率接近百分之九十八。例如,本公开的实施例在处理GET请求时优化了SMC存储器与输出NIC之间的数据移动,同时限制主机控制器涉及。具体地,UDP响应数据包由(SMC控制器140A-N的)FPGA来制备,而NIC直接从设备存储器接收DMA数据包而没有使用主机控制器/处理器。通常,在FPGA开始与主机控制器/处理器协作(例如,向主机控制器通知来自命令和/或请求的结果)通过DMA信道传送数据之后,DMA控制器处理数据从设备存储器到NIC的传送而没有涉及主机控制器。比如,DMA控制器被配置成生成在传送完成时通知FPGA的中断。这消除了先于传输数据包从设备存储器向系统存储器复制的必要性,因为主机控制器的涉及受到限制。
在一个实施例中,存储器装置系统包括多个SMC,其中每个SMC包括用于独立地控制该SMC内的一个或多个存储器分组的可编程SMC控制器。主机控制器与被组合以控制存储器装置系统上的数据的管理的可编程SMC控制器通信。每个SMC包括存储器和对应的可编程SMC控制器,其中可编程SMC控制器包括用于管理存储器内的数据的可编程接口。可编程接口用于加速在对应存储器上执行的功能。
在一个实施例中,主机控制器通过互连(例如,网络或直接接口)向对应SMC推送一个或多个原语操作形式的命令。在另一实施例中,主机控制器向对应SMC推送到命令的指针以及存储在存储器中的其对应原语操作。对应SMC使用指针从存储器检索命令和/或原语操作。在又一实施例中,对应SMC投票主机控制器的主机队列以发现涉及该对应SMC的命令。在发现时,向对应SMC拉取和递送命令和/或原语操作。之后,对应SMC处理命令和/或原语操作的执行。在一个实施例中,返回到存储器内包含的数据的指针。
通过缩短设备存储器与被配置用于外部通信的存储器装置内支持一个或多个SMC的NIC之间的数据路径来减小SMC内的潜伏期。NIC被配置成向多个SMC中的一个或多个SMC提供外部通信。具体地,通过在对应SMC的存储器与网络接口之间直接建立通信来减小潜伏期。例如,DMA用于使得NIC能够直接访问对应SMC内的存储器(例如,指针)以使得能够通过外部网络递送数据。特别地,出于通过DMA信道在存储器与NIC之间传送数据的目的,经由DMA控制器在对应SMC的存储器与NIC之间直接建立通信。例如,DMA寄存/堆叠独立于主机控制器的命令堆叠操作以切换DMA寻址从而提供从NIC到存储器的直接访问,反之亦然。
被翻译成存储器装置架构内的低层组件代码格式原语的高层指令
本公开的实施例提供包括处理器和多个SMC的存储器装置,其中每个SMC包括多个存储器设备和SMC控制器,SMC控制器用于独立地控制对应SMC的多个存储器设备内的一个或多个存储器分组的管理。存储器装置被配置成从客户端系统接收高层指令(例如,OSI层7协议或接口命令),并且将这些指令翻译成由多个SMC控制器可执行的低层组件代码格式原语操作。也就是,将高层应用层命令翻译成用于由对应计算设备(例如,SMC控制器)来执行的原语命令(例如,对应于机器代码指令的低层操作)。
本公开的实施例中公开高层指令到低层原语操作的翻译的方法和系统在图1至图5中描述的系统和流程图中可实现。例如,图1A至图1B的存储器装置系统100A-B被配置成从客户端系统接收高层指令并且将这些指令翻译成低层原语操作,低层原语操作被格式化用于由每个被配置成管理对应存储器设备的多个SMC控制器来执行。
图6A是根据本公开的一个实施例的包括与存储器装置660通信耦合的客户端系统615的存储器系统660A的框图,其中存储器装置660被配置成将高层指令翻译成由被实现为FPGA和/或ASIC的多个SMC控制器可执行的低层组件代码格式原语操作。存储器装置系统提供存储器的更高容量和更高带宽缩放以及到使得SMC控制器管理原语操作的执行的存储器装置内的存储器的计算卸载。
如图6A所示,存储器系统600A包括客户端系统610和存储器装置系统660,其中存储器装置系统可以进一步分割成主机系统620、SMC互连/接口630和多个SMC 640。客户端系统610通过外部网络650与存储器装置系统660通信耦合。例如,外部网络650使得两个不同的计算网络能够使用通信协议来通信。
特别地,客户端系统610提供到存储器装置系统660的接口。主机系统中继用于访问存储器装置系统内存储的数据的客户端侧请求和命令。特别地,客户端系统610被配置成向存储器装置系统660递送高层命令/指令用于执行。例如,命令可以在OSI模型的最高层——应用层7内实现。也就是,命令被格式化为用于通信网络上的计算机系统的协议或接口。虽然示出了耦合至客户端系统610的一个存储器装置系统660,然而应当理解,客户端系统610可以耦合至提供分布式存储器存储的一个或多个存储器装置。
仅出于说明目的,客户端系统610可以是数据库系统,其由社交网络公司管理,将与其成员有关的数据存储在分布式存储器中,并且访问存储器装置系统660内包含的数据。在示例中,客户端系统610可以使用高层命令来访问和管理存储器装置660内存储的数据。作为示例,存储器装置660可以结构化为高性能缓存存储器系统,其中客户端系统610使用高性能缓存应用层指令来访问数据。在另一说明中,客户端系统610可以是与用户相关联的计算资源,其中计算资源用于通过外部网络650来访问存储在存储器装置660上的外部网络650信息。
如所示,存储器装置系统660的主机系统620包括处理器625和通信或网络接口665。网络接口665将存储器装置系统660通信耦合至外部网络650,使得客户端系统610能够使用通信协议与存储器装置系统660通信。在一个实现中,网络接口665可以是NIC。在另一实现中,网络接口665在NPU内部。比如,客户端系统610通过外部网络650向NIC 665递送高层命令。
处理器625被配置为管理遍及多个SMC分布的多个存储器设备的主机控制器,如先前所描述的。例如,处理器625能够提供存储器服务,诸如负载平衡、服务质量、连接管理和业务路由。
如所示,处理器625被配置成经由NIC 665接收源自客户端系统610的高层命令,并且将高层命令翻译成通过由多个SMC 640的执行来格式化的应用特定的原语命令或操作。例如,可以将高层命令构造为使用密钥值对或密钥值函数访问存储器来访问高性能缓存分布式存储器缓存数据库中的存储器。例如,命令内的密钥使用适当的算法被哈希以便确定存储器内适当的寻址。典型的密钥值函数包括“GET”、“SET”和“DELETE”操作。
另外,高层命令可以通过处理器625被翻译成由SMC可执行以访问存储器的一个或多个原语操作。比如,原语操作是功能或应用特定的(例如搜索、分类和其他定制加速,诸如错误恢复、数据操纵、数据压缩)。在高性能缓存数据库的示例中,原语操作被剪裁用于访问和操纵数据,和/或可以被剪裁用于执行到高性能缓存数据库中的存储器的特定操作(例如,搜索、写入等)。比如,“GET”通过搜索密钥匹配、检索到值域的指针以及更新密钥值元数据的原语操作集来实现。
处理器625通过SMC互连630连接至一个或多个通信信道。比如,互连630是命令接口635,命令接口635使得能够通过一个或多个通信信道从处理器625向多个SMC 640递送原语操作,其中原语操作被配置用于访问遍及SMC分布的存储器。在一个实现中,接口635包括使用网络协议被配置为网络接口(例如,TCP、UDP、以太网、无限频带等)的通信信道。在另一实现中,接口635包括被配置为通过两个端口之间的点到点通信信道/链路/连接提供通信的直接接口(例如PCI、PCIe、XAUI、快速路径、无限频带、串行快速IO(SRIO)、1/10/40/100兆比特以太网、Interlaken、光纤信道、以太网光纤信道(FCoE)、SAS、iSCSI、SATA、使用以太网作为下层的其他协议等)的通信信道。
在一个实施例中,原语操作和结果被递送给可选队列组合645A-N,其中每个队列组合与所选择的SMC相关联。每个队列组合包括输入队列(例如,向SMC控制器递送命令)和响应队列(例如,在执行命令之后返回结果)。在其他实施例中,每个SMC可以具有多个匹配队列组合,而非每个SMC单个队列组合。各个队列中的每个可以位于接口635的任一侧,使得它们可以共同定位在一侧,或者单独地定位在接口635的相对侧。例如,队列组合645A与SMC640A相关联,并且包括输入队列646A和响应队列647A。以这一方式,由多个SMC 640非同步地执行原语操作。
图6B图示根据本公开的一个实施例的位于图6A所示的存储器系统600A的接口635的任意侧的输入/命令队列对和响应队列对的一个实施例。也就是,位于多个SMC 640之一处的输入/命令队列具有位于主机系统620上的匹配的输入/命令队列。如图6B所示,主机系统620包括被配置成执行数据存储应用(例如,高性能缓存)的主机CPU/处理器625。主机系统通过诸如PCIe等接口635向多个SMC发送原语命令。
如所示,匹配队列对位于接口635(例如,PCIe)的相对侧,其中每个SMC命令/响应队列组合具有由主机处理器625维持的匹配的对或配对的命令/响应队列组合。例如,对应SMC 645A中的SMC控制器(未示出)管理命令/响应队列组合681(例如,SMC命令队列和响应队列),其具有由处理器625管理的匹配的对或配对的命令/响应队列组合682。以这一方式,主机处理器625能够通过向对应命令队列中加载命令来在发射后不管模块下执行,这些队列然后被递送给对应SMC用于执行并且经由匹配的命令队列对和响应队列对返回主机处理器625。这样,从主机处理器625向SMC传送执行命令的开销,从而减小处理器潜伏期。
通常,处理器625填充其命令队列,对应SMC控制器读取命令队列,并且将命令复制到其自己的队列中。SMC控制器然后在通过接口635将响应传送给处理器响应队列之前将响应放置到其即将输出的响应队列中。CCD 655管理处理器队列组合,而SMC控制器管理对应队列组合。例如,队列聚合/管理8向队列组合682中的命令队列中加载命令,队列组合682然后通过接口被递送并且被加载到傲对应SMC 645A的队列组合681中的匹配命令队列中。在一个实施例中,SMC 645A请求命令在匹配的命令队列对之间的递送。在处理之后,响应被SMC 645A加载到队列组合681中的响应队列中,队列组合681然后通过接口635被递送并且被加载到队列组合682中的匹配响应队列中。另外,SMC 645N的另一SMC控制器(未示出)管理命令/响应队列组合683,队列组合683具有由主机处理器625管理的匹配的对或配对的命令/响应队列组合684。
返回图6A,多个SMC 640中的每个包括SMC控制器和多个存储器设备。SMC控制器包括用于遍及对应存储器设备管理数据或存储器的接口。例如,接口可以用于加速在对应存储器上执行的功能。例如,SMC 640A包括SMC控制器641A和存储器设备642A。SMC控制器可以可编程(例如FPGA)或被静态地配置(例如ASIC)成执行由外部客户端和/或应用生成的应用特定的命令和/或操作。
如图6A所示,输入队列646A被配置成从处理器625接收多个原语操作并且向SMC控制器641A递送这些原语命令用于在被包括在存储器642A中的存储器设备上执行。原语操作从涉及SMC 640A上的存储器的高层命令翻译而来,并且由SMC控制器641来执行。原语操作的结果被递送给结果队列647A用于由处理器625来访问或者向处理器625递送。在一个实施例中,结果包括到存储器位置的指针,其中该存储器位置中存储的数据满足与高层命令和/或多个原语操作相关联的队列。
另外,在一个实施例中,向处理器通知结果,并且处理器使用指针通过网络接口665来开始存储器位置中存储的数据的直接存储器传送(例如DMA)。也就是,一旦处理器625开始直接存储器传送,并且指针被递送给网络接口665,则处理器625不再控制通过外部网络650的数据的传送。以这一方式,没有在与处理器625相关联的本地存储器中做出数据的冗余复制和不必要复制。例如,直接存储器传送可以作为DMA操作来被开始,其中DMA控制器(未示出)监测和/或控制数据从存储器642A跨外部网络650经由网络接口665到客户端系统610的移动。在这种情况下,DMA控制器可以向处理器发送指示已经通过外部网络650递送数据的中断。
图7是图示根据本公开的一个实施例的用于访问存储器装置内的数据的方法中的步骤的流程图700,存储器装置被配置成将(高层)指令翻译成由多个SMC及其SMC控制器可执行的低层组件代码格式原语操作。在又一实施例中,流程图700图示用于访问存储器装置内的数据的计算机实现的方法,存储器装置被配置成将高层指令翻译成由多个SMC及其SMC控制器可执行的低层组件代码格式原语操作。在另一实施例中,流程图700在包括处理器和耦合至处理器的存储器的计算机系统内实现,存储器内存储由指令,这些指令在如果由计算机系统来执行则引起系统执行用于访问存储器装置内的数据的计算机实现的方法,存储器装置被配置成将高层指令翻译成由多个SMC及其SMC控制器可执行的低层组件代码格式原语操作。在又一实施例中,用于执行流程图700中给出的方法的指令存储在具有计算机可执行指令的非暂态计算机可读存储介质上,这些指令用于访问被配置成将高层指令翻译成由多个SMC及其SMC控制器可执行的低层组件代码格式原语操作中的数据。
流程图700中给出的方法分别由图1A至图1B、图6A、图17和图18的计算机系统1700(例如,处理器1714)、存储系统1800(例如服务器1845)以及存储器装置系统100A-B(例如,处理器112、SMC控制器141等)和600A(例如处理器625、SMC控制器641A等)的一个或多个部件可实现。另外,在一个实施例中,关于信息流程图700来进一步描述在流程图700中执行的一些操作,信息流程图800图示在执行数据操纵时被翻译成低层原语操作的高层指令的执行。
流程图700在包括处理器的存储器装置内实现,处理器用作被配置成管理遍及多个SMC分布的多个存储器设备的主机控制器。每个SMC包括处理器和多个存储器设备,其中处理器被配置成访问对应存储器设备中的存储器。例如,多个存储器设备包括封装成DIMM的存储器设备(例如,DRAM、EEPROM、FLASH、非易失性存储器等)。
在710,方法包括接收高层命令。例如,在一个实施例中,使用通信协议通过网络接收高层命令,高层命令可以是从经由通信协议与存储器装置通信的客户端系统接收的存储器相关命令。接收可以处理器来执行,处理器诸如被配置成管理遍及多个SMC分布的多个存储器设备的主机控制器,如先前所描述的。例如,存储器相关命令可以是与OSI模型的应用层7相关联的高层命令。
在720,方法包括将命令翻译成一个或多个原语命令。例如,将存储器相关命令翻译成被格式化以对多个存储器设备的数据或者其内的数据执行数据操纵操作的多个原语命令。存储器设备被配置成数据结构。特别地,翻译由处理器来执行。另外,处理器被配置成将原语命令路由到适当的SMC用于数据操纵,诸如通过命令接口。命令接口可以配置为网络接口或直接接口(例如,PCIe)。以这一方式,处理器能够将存储器相关命令的执行的控制切换至对应SMC,从而减小由处理器处理的I/O业务的量。也就是,减小和/或消除了与在原语操作的中间状态期间执行的数据到处理器的传送相关联的I/O业务,因为可以由于原语命令相关的SMC的SMC控制器(诸如指针)来执行所有原语操作的控制。
在730,方法包括对数据执行多个原语命令以产生结果。特别地,由SMC控制器对处理器透明地执行上述执行,使得命令的执行在没有处理器输入的情况下进行。如先前所描述的,处理器将原语命令的执行的控制切换至对应SMC控制器,并且仅接收原语命令的执行的结果。在一个实施例中,结果包括规定或响应高层命令的数据。在另一实施例中,结果与用于访问满足或响应高层命令的数据的附加信息相关联。
在740,方法包括通过通信协议建立结果到网络的直接存储器传送。特别地,响应于由处理器接收结果来执行建立,并且对于处理器透明地执行直接存储器传送。也就是,直接存储器传送由另一设备来控制,诸如网络接口或控制器。例如,可以使用DMA控制器来控制结果的传送而没有来自处理器的参与。
在一个实施例中,结果与涉及存储数据的存储器的位置的指针相关联,其中数据满足或响应于原始高层命令和/或翻译后的原语操作。特别地,指针存储在处理器和/或网络接口可访问的缓冲器中。一旦处理器接收到指针或者缓冲器中存储的指针的通知,则开始数据的直接存储器传送。也就是,处理器将数据传送的控制切换至通过外部网络提供通信的网络接口。在开始之后,在一个实施例中,缓冲器中的网络接口访问指针。在另一实现中,处理器向网络接口递送指针。指针由网络接口用于请求和/或访问先前描述的存储器位置处的数据,其中数据响应于高层命令。在没有进一步涉及处理器的情况下,将数据返回网络接口用于通过网络来递送,诸如递送给客户端设备。可以向处理器递送递送的通知。
图8是图示根据本公开的一个实施例的访问存储器装置内的数据的信息流程图800,其中存储器装置被配置成将高层指令翻译成由SMC及其SMC控制器可执行的低层组件代码格式原语操作。信息流程图800在包括客户端系统810和存储器装置的系统内实现,其中存储器装置包括网络接口(例如,NIC)811、主机系统812、主机侧的输入队列898、主机侧的输出队列899、命令接口813(例如PCIe)、SMC侧的输入队列814、SMC侧的结果队列815、以及对应SMC 816。主机系统/处理器812被配置成管理遍及多个SMC分布的存储器设备,其中每个SMC包括SMC控制器和多个存储器设备。例如,SMC816包括SMC控制器和多个存储器设备,如先前关于图1A-B和6A-B所描述的,其中SMC控制器在一个实现中是可编程逻辑器件(例如,FPGA)、或者具有预定的功能的逻辑器件(例如,ASIC)。
如图8所示,在820,在存储器装置中,经由网络接口、诸如NIC811通过通信网络从客户端系统810向主机系统/存储器812递送高层命令。NIC通过外部网络使用通信协议在存储器装置与客户端系统810之间实现通信。
在825,主机系统/处理器812将存储器相关命令翻译成多个原语操作/命令。另外,处理器能够通过接口813(例如,PCIe)将原语命令路由到存储器装置内的适当的SMC。例如,在一个实现中,适当的SMC控制要操纵的数据存储在其中的物理存储器。以这一方式,可以将原语命令分组成与具体SMC有关的命令链。在825,将链放置到对应于适当的SMC 816的主机系统812的输出队列899中。在830,SMC 816从输出队列899取回链,通过接口813将原语操作存储到其自己的输入队列814中。在另一实施例中,将原语操作递送给输入队列814而没有遍历接口813。
在831,由对应SMC 816从输入队列814取回原语操作用于执行。特别地,在835,SMC816中的SMC控制器从输入队列814读取原语操作,并且如在SMC 816中的对应存储器设备上执行地来执行原语命令,其中对于主机系统/处理器812透明地执行上述执行。可以由SMC控制器依次执行链中的命令。比如,对存储器设备中存储的数据执行原语操作,并且原语操作包括被格式化用于对存储器设备中的存储器块中存储的数据来执行的数据操纵指令。以这一方式,主机系统/处理器812能够将高层命令的执行的管理和控制切换至SMC 816中的SMC控制器,从而减小主机系统/处理器812处理的I/O变换的数目。也就是,可以经由SMC控制器的执行来加速高层命令和/或原语操作。
在835,原语操作的执行产生结果,并且向主机系统/控制器通知这一结果。特别地,结果存储在结果队列815中。在一个实施例中,结果包括存储在存储器设备中的位置处的数据,其中数据满足或者响应于高层命令和/或原语命令。在另一实施例中,结果与产生满足或响应于高层命令和/或原语操作的数据的信息相关联。比如,信息包括识别存储满足或响应于高层命令和/或原语操作的数据的存储器位置。
在840,通过接口813将指针递送给主机系统/处理器812的对应输入队列898。在一个实施例中,指针存储在主机系统/处理器812可访问的缓冲器中。在841,在通知时,主机系统/处理器812能够访问缓冲器中存储的指针。
在845,建立使用通信协议通过外部网络向客户端系统传送结果的直接存储器传送。特别地,主机系统/处理器可以开始直接存储器传送,但是在开始之后,不再在通过网络的结果传送中被涉及到。也就是,直接存储器传送对于主机系统/处理器透明地执行。例如,直接存储器传送可以是包括DMA控制器的DMA过程,DMA控制器建立和管理结果的传送而没有主机系统/处理器812的参与。
如图8所示,在直接存储器传送开始时,将指针递送给网络接口811或NIC。在850,NIC 811从由指针指示的SMC 816的存储器中的位置取回数据,其中数据满足或响应于高层命令和/或原语操作。在855,将数据返回NIC 811,并且然后通过外部网络将数据递送给客户端系统810。
在存储器装置架构内可执行的原语操作的命令链
在一个实施例中,可以将原语操作组合成使用输入参数可执行的命令链。命令链包括一组原语操作/命令以及实现高层应用命令的其变元(例如高性能缓存Get、Set和Delete操作)。链中的所有命令由SMC的单个处理器引擎或主机控制器依次执行。
在一个实现中,图8的主机系统/处理器812(例如包括命令复制守护进程)将命令链放置到用作本地存储器中的圆形PCQ的输入队列814中。CCD更新SMC控制器的PCQ队列尾部寄存器(例如可编程FPGA),并且SMC控制器从PCQ取回命令链直到到达尾部。另外,SMC控制器在每个传送之后更新首部寄存器。
为了执行命令链,主机系统/处理器812中的取回引擎连续地读取命令块直到其填充其本地FIFO,或者到达尾部地址。命令链派遣引擎解析魔术首部/校验和(其中魔术数字识别协议或文件格式,例如,并且校验和用于调试)和链大小字段以符合命令块对准并且确定命令链大小(可以包括校验和、魔术数字和命令加上参数)。派遣引擎然后将完整的命令链派遣给下一可用SMC控制器。还去除魔术首部。
所选择的SMC控制器运行命令解释器,命令解释器将链中的每个命令映射成对应过程调用并且执行过程调用。SMC控制器依次执行每个链的命令。在其他实施例中,可以不按照顺序执行命令,只要确保结果。
SMC控制器生成命令响应块,SMC控制器在命令链完成时向CCD返回命令响应块。由于由不同SMC控制器独立地执行序列命令链,所以这些链可以并且通常将不按照顺序完成。因此,主机CCD驱动器不能假定响应块匹配输入命令队列中的命令链顺序。
图9是根据本公开的一个实施例的用于存储命令链的主机系统/处理器812本地缓冲器900的图示。在一个实现中,主机系统/处理器812针对每个命令链分配固定大小的内部缓冲器(例如1kB)。在一个实施例中,命令链是64字节块的倍数,并且64字节对准。如果命令链没有填充整个块,则可能需要填补最后的块。
每个命令链包括各种部分或帧。在一个实现中,每个帧8比特对准,其中如果帧没有满,则可能需要用0来填补。帧910包括魔术数字/校验和。帧920包括元数据(例如不透明值、时间戳等)。帧930包括命令列表,其中每个固定大小列表条目包括与命令相关联的操作代码(opcode)以及指向在部分940中提供的参数帧的相关联的参数偏移的集合。例如,opcode可以规定团块元数据上的原语操作(例如增加、减小字段)、原语列表操作(例如选择、未链接、附加、前缀等)、和流控制操作,诸如明确的(例如“在参数为0的情况下的跳跃偏移”)、隐含的(例如基于状态位的条件执行:如果命令失败,则执行链中的所有随后命令作为NOP)、链或返回的结尾、过程调用(例如位于SMC存储器中的另一命令链的地址)。参数/变元帧940包括存储所有命令的参数的命令块中的连续区域,其中参数可以是输入和输出二者。另外,命令根据由命令字段规定的偏移来引用其参数。输入经由命令块作为联机值或作为存储器参考被通过。命令输出存储在参数帧中对应于结果参数的偏移处。这使得随后的命令能够在执行期间对其进行引用。
在一个实现中,参数8字节对准。一些参数类型包括全局地址空间中的存储器引用(MAS或MS);中间值;和中间可变大小值,其中值的第一类型定义其大小(例如有效值包括1-255)。参数偏移涉及参数帧基础并且将位置规定为8字节的倍数。偏移可以最高寻址至256个参数,每个参数8字节,即它们在理论上覆盖特定帧中的2K字节范围。另外,最后的可变大小值的集成(第一字)可以在这一范围内,但是值本身可以上溢超过2KB边界。可以支持多个可变长度参数,只要它们全部符合针对处理器分配的缓冲器(1kB)并且满足8字节对准要求,否则需要零填补。
在加载命令链之后留下的缓冲器空间被保留用于暂时变量帧950。例如,要在运行时间生成的以及要在命令之间传递的值或者要经由响应块返回的值存储在帧950中。以这一方式,帧950扩展命令“寄存器集合”的大小而没有通过伪补位数字使命令链膨胀。
在一个实现中,命令链解释器维持通过每个命令来更新的32位全局命令状态变量。除了标记提取错误,全局状态可以提供当前命令的快速路径以向链中的下一命令传达特定结果。例如,如果在命令的执行期间检测到任何错误,则可以返回错误代码。在典型的使用情况下,非零错误字段将中止命令链并且经由响应块向主机返回这一错误代码及其相关联的命令索引。使用返回值字段的示例可以是经由参数帧经由全局状态和到匹配条目列表的指针返回匹配条目的数目的Select命令。在Select之后的条件Jump可以测试匹配的数目以决定是否继续执行链的首部的下一命令或跳跃。
在一个实现中,每个命令链向CCD返回单个响应块。响应块可以具有固定大小64字节。响应块可以包括3个帧,包括元数据帧(例如状态、队列首部指针、不透明值等)、完成状态帧和返回参数帧。各个部分在一个实现中8字节对准。返回参数可以是数据值或存储器引用。期望多个或可变大小值存储在MS存储器中并且通过引用来返回这些值。链中的最后的命令的变元(RET)规定要向主机系统/处理器返回的参数。RET命令是命令链中的最后的命令,并且等待由属于相同链的命令开始的所有的异步DMS在其执行之前完成。RET可以规定要放置在命令响应块中的可变数目的返回值(例如0到54)。要返回的值的数目也可以在RET中规定。这一机制可以用于如下经由命令链来传递多个透明数据值:在链中插入透明值作为虚拟参数并且将其规定为RET变元中的一个(或多个)。
流控制操作包括主条件和非条件跳跃等命令。例如,相对于当前命令的目标跳跃偏移由第一命令变元直接规定为立刻的8比特2比特的补充值,而非到存储到参数帧中的值的指针。
某些错误将引起命令链中断,并且经由响应块状态返回错误代码。例如,错误代码“0”不返回错误;错误代码“1”表示不合法的链大小(例如大于1KB的大小);错误代码“2”表示不支持的不合法的操作码或操作码执行;错误代码“3”表示不合法的偏移参数(例如超过1KB的链缓冲器大小);以及附加错误,诸如表示执行超过当前时间帧的命令链超时,、DMA错误(表示不合法的变元、超时等)、不合法的存储器或寄存器访问(其中处理器尝试访问没有被映射到物理寄存器或存储器的地址,或者访问受保护的地址)。
在一个实施例中,主机系统/处理器能够提供附加信息以帮助经由响应块来进行错误恢复和调试。例如,可以返回成功执行的命令列表(例如经由比特图),或者提供磁芯信息转储(例如向DRAM缓冲器存储相关内部处理器状态的副本)。
某些命令从主机系统/处理器向FPGA存储器(例如SET)复制数据,反之亦然。作为命令执行的部分,主机系统/处理器对SMC控制器DMA引擎之一编程以执行数据传送。允许DMA操作异步地继续进行,同时链中的其余命令继续执行,除非遇到栅栏命令或RET。这将迫使链等待DMA传送以在进一步处理之前完成。
在一个实施例中,多个原语操作存储在单独的位置作为命令链。这样,命令链包括可操作用于响应于来自客户端系统的另一高层存储器命令重新执行的程序。每次呈现命令用于执行时,还提供对应参数集合用于由命令链来进行其执行。
在各种实施例中,命令链通过组合要在返回来自链中的最后命令的结果之前作为组来执行的多个命令来提供应用开发者最小化队列和命令往返行程的机会。例如,到FPGA的单个往返行程可以将多个命令原语组合成FPGA上的合成操作。图10图示包括多个命令1020和1030的命令链1010,其中命令链1010中的命令由SMC中的对应FPGA来执行。命令链1010可以分别由图1A-B、6A、17和18的计算机系统1700(例如处理器1714)、存储系统1800(例如服务器1845)和存储器装置系统100A-B(例如处理器112、SMC控制器141等)和600A(例如处理器625、SMC控制器641A等)的一个或多个部件来执行。
如图10所示,命令链1010中的命令1020包括一个或多个参数索引,诸如索引1022和1024。例如,参数索引1022用于访问参数1062,索引1024用于访问参数1064。另外,命令链1010中的命令1030包括一个或多个参数索引,诸如索引1032、1034和1036。例如,参数索引1032用于访问参数1068。另外,参数索引1034用于访问从链1010中的前一命令(例如命令1020)得到的返回值1074。另外,参数索引1036用于访问返回值1078。
更特别地,图10是根据本公开的实施例的命令链1010及其变量阵列的图示。命令链的显著方面是如何在链中的命令之间定义和传递参数。命令链执行在可以包括由链的作者传递的参数的“参数空间”的上下文中开始。命令链可以通过包括支持参数到来自链中的在前命令的返回值的绑定的参数类型的链中的每个命令的参数来实现。参数可以作为类型阵列variant_t来传递。变量类型包括被称为包含对执行上下文中的任何变量的编码引用的“REFERENCE”的变量类型。链中的每个命令具有确定数目的返回值,因此可以先于链的实际执行来计算到执行上下文中的参考偏移。以这一方式,可以按如下方式构造命令链:该方式使得由调用者提供的直接参数和由命令执行产生的值能够用于对随后的命令进行参数化。
在实施例中,多个命令通过表示链在哪里开始和结束的嵌入式字段被入队。在另一实施例中,包含到命令链+参数的指针的单个命令应当先于返回被执行,这类似于过程调用。
在实施例中,当产生命令链时,通过表示命令链执行上下文的阵列变量来完成命令。例如,这类似于全局堆栈。命令链输入参数可以在执行上下文中被预先分级。每个命令包含到对应于命令的每个所需参数的执行上下文中的索引阵列。命令执行产生确定性数目的返回值,这些值在每个命令执行时被附接到执行上下文。这可以使得能够向命令输入参数以包括预先分级的参数(例如1062、1064、1066和1068)或者随后的返回值(例如1072、1074、1076和1078)。在一些实现中,仅链中的第一命令限于在其执行中使用预先分级的参数。
在实施例中,命令链是命令参数索引的可变长度阵列。索引表示到执行上下文中的偏移。将命令链从其执行上下文中去耦合可以使得然后能够在设备存储器中预先分级命令链并且可以“通过引用”来将整个链入队——表示并非将链入队,可以将设备存储器中的预先构造的链的引用入队。另外,将执行上下文去耦合可以使得能够并行地多次执行单个命令链,只要每个线程的执行上下文唯一。这一能力使得能够在SMC内执行多对象操作,因为执行上下文的整个阵列可以通过应用来构造并且并行操纵。在实施例中,命令链包含执行上下文的长度(参数的sizeof(variant)*#),并且还包括关于在执行期间获得的总空间的信息(例如sizeof(variant)*(参数计数+返回值计数))。
图示了哈希表的SET操作中的命令链的示例,其涉及选择哈希储存器(即具体的LIST),并且然后使用以下操作的命令链:ALLOC->INCR_REFCOUNT->BLOB_WRITE_DATA->LIST_APPEND->LIST_APPEND(第一LIST_APPEND将其添加至所选择的哈希储存器,而第二LIST_APPEND将其添加至LRU列表)。
存储器数据包、数据结构和存储器装置架构内的层级
本公开的实施例提供在包括用于访问存储器的可编程存储器接口的存储器装置架构内实现的可重配置的存储器结构。存储器结构的实现通过包括逻辑数据结构而非存储器原始比特的内容已知存储器控制器来实现。本公开的实施例中的可重配置的存储器结构在图1至图10中描述的系统和流程图内可实现。例如,图1A至图1B、图2和图6的存储器装置和系统100A-B、200、310、600A被配置成从客户端系统接收高层指令并且将这些指令翻译成被格式化用于由可重配置的存储器结构上的多个SMC控制器来执行的低层原语操作,其中每个SMC控制器被配置成管理对应存储器设备。
本公开的实施例提供包括处理器和多个SMC的存储器装置,其中每个SMC包括多个存储器设备以及SMC控制器,SMC控制器用于独立地控制对应SMC的多个存储器设备内的一个或多个存储器分组的管理。存储器装置被配置成从客户端系统接收高层指令,并且将指令翻译成由可重配置的存储器结构上的多个SMC控制器可执行以产生结果的低层组件代码格式原语操作。特别地,一个或多个SMC中的每个包括基于硬件的存储器控制器和存储器。存储器控制器可以可编程(例如FPGA)或包括静态功能(例如ASIC)以控制存储器中包含的多个存储器设备的管理。原语命令包括被格式化用于在由SMC控制器通过设备存储器中存储的一个或多个数据结构来访问的数据向上的操作的数据操纵指令。特别地,数据结构的集合可配置以由SMC控制器来理解,基于此可以执行各种原语操作。也就是,控制器被配置成响应于被配置成访问多个存储器设备中的一个或多个中存储的内容并且对从多个存储器设备访问的内容执行数据操作的原语命令。例如,数据结构将存储器的块组织成由SMC控制器理解并且可操作的非连续的“集合”。
存储器控制器知道数据结构,使得控制器被配置成遍历存储器结构并且基于元数据和关系信息对存储器结构执行操作。具体地,内容已知存储器控制器理解逻辑数据结构而非原始比特而没有将逻辑数据结构考虑在内。特别地,原语操作的命令集被配置成强加高层功能集合而非简单地加载和存储,基于此构建更复杂的功能。例如,存储器结构包括布置成相关配置的可变大小的容器。在一个实施例中,关系由列表来定义,列表提供很多其他数据结构和功能的构建块(例如对管理器、队列、树、图形等)。这样,支持基本的列表操作可以提供更丰富的应用构建到其上的基本能力。比如,由控制器执行的原语命令被配置成对在存储器结构内定义的多个容器执行管理操作。例如,管理操作可以包括添加列表、修改列表、删除列表等。在另一实例中,原语命令被配置成在存储器结构内的原始存储器上执行。在又一实例中,原语命令被配置成对关系信息执行管理操作。
图11A是根据本公开的一个实施例的在包括用于访问存储器的可编程存储器接口的存储器装置架构内实现的可重配置的存储器结构内使用的数据包或容器1100A的图示。容器1100A包括数据。如所示,根据本公开的一个实施例,容器1100A可配置成由对应SMC控制器来理解,基于此可以执行各种原语操作。容器1100A存储在存储器装置的设备存储器中,如先前所描述的(例如图1A-B、2和6中的存储器装置和系统100A-B、200、310、600A),其中可重配置的存储器结构包括多个可变大小容器。也就是,在可重配置的存储器结构内,容器1100A可变大小,使得一个容器可以与另一容器具有不同大小。如所示,数据包1100A包括数据的净荷1130(可变大小)、元数据1110和关系信息1120(可变大小)。
元数据1110包括特定于容器1100A的信息,其中元数据1110是容器1100A的固定部分。例如,元数据1110包括诸如以下等信息:容器的total_length或长度;说明容器是其成员的大量列表的list_count;说明数据部分的长度的data_length;说明何时最后访问容器的access_time;说明何时创建容器的creat_time;reference_count;标志等。
关系信息1120提供使得对应容器1100A与存储在存储器结构中的一个或多个其他容器相关联的信息。以这一方式,多个容器中的关系信息定义存储器结构。存储器结构可重配置,因为任何容器中的关系信息的任何变化将影响和改变整个存储器结构。关系信息使得容器能够遍历存储器结构。
净荷1130包含容器1100A特定的数据。由于数据的长度可以定义,所以存储器结构包括多个可变大小的容器。这样,第一容器可以包括第一长度的数据,而第二容器可以包括第二长度的数据。
在一个实施例中,存储器管理涉及作为容器的“团点(blob)”的概念以及提供关系信息的“列表”的概念。“团点”是携带有某些元数据(例如最后访问时间、创建时间等)的设备存储器的第一大小贮存器以及促进其在一个或多个“列表”中的隶属关系的“列表条目”的可变阵列。列表是传统的单或双链接团点列表。特别地,SMC控制器被配置成响应于各种列表原语的处理器的调用按照线程安全方式来行进和修改列表。
每个团点包含表示各种列表中给定团点的隶属关系的“列表条目”的阵列。这些列表可以包括附加团点。另外,团点可以同时存在于多个列表中。理解列表和团点结构的SMC控制器可以链接、未链接、前缀或后缀以及基于非常基本的选择准则来搜索和寻找列表内的条目。
SMC控制器暴露能够通过将命令块(命令+参数)入队成队列来被调用的列表、团点和原始存储器原语的集合。命令链是其每个命令的输出被传递给最后命令作为参数的命令块的可变长度阵列。命令链通过使得能够通过到SMC控制器的单个命令/响应往返行程构造和执行合成操作来促进最小化往返时间和排队潜伏期这一设计目的。
在一个实施例中,各种原语操作增加和减小与每个团点相关联的参考计数。一些原语操作仅对于未参考(例如空闲)的团点有效,广告可以在逻辑上“成功”但是仅在参考计数变为“0”时被提交。这一行为的具体情况是在团点用于I/O但是已经通过用户模式应用变为空闲时。当I/O完成并且参考计数变为零时,可以仅向空闲列表添加回团点。
图11B是根据本公开的一个实施例的在包括用于访问存储器的可编程存储器接口的存储器装置架构内实现的可重配置的高性能缓存存储器结构中使用的数据包和/或容器1100B的图示。容器1100B是图11A所示的普通容器1100A的具体实现,其中容器1100B在高性能缓存存储器结构中实现。如所示,根据本公开的一个实施例,容器1100B可配置成由对应SMC控制器来理解,基于此能够执行各种原语操作。容器1100B存储在存储器装置的设备存储器中,如先前所描述的(例如图1A-B、2和6的存储器装置和系统100A-B、200、310、600A),其中可重配置的存储器结构包括多个可变大小的容器。特别地,容器1100B包括元数据1140、关系信息1150以及包含数据的净荷1160。
在团点容器的示例中(例如在高性能缓存存储器结构中实现),团点是连续的存储器区域(例如从堆分配)。存储器板是相等大小的团点的集合。
这样,可重配置的存储器结构包括作为一个或多个列表的部分的容器(例如团点),其在关系信息中定义。也就是,关系信息1150可以包括一个或多个列表条目,其提供净荷中的数据到一个或多个列表中的隶属关系和/或到数据的链接或指针。例如,列表条目暴露对应列表中的数据项。空闲LRU和哈希贮存器是列表的示例。容器1100B可以是容器分类的部分,其可以由空闲列表来定义。空闲列表指针1151指向相同分类中的前一容器。空闲列表指针1152指向相同分类中的下一容器。LRU指针1153指向LRU列表中的前一容器,LRU指针1154指向LRU列表中的下一容器。贮存器列表指针1155指向贮存器列表中的前一条目,诸如定义相关容器的列表中的第一容器的条目。贮存器列表指针1156指向贮存器列表中的下一条目。
图12是根据本公开的一个实施例的可重配置的高性能缓存存储器结构1200的图示。分布式密钥/值存储装置作为开发网络附接存储器的大的池的广泛使用使得高性能缓存适合用于在可重配置的存储器结构中实现。在一个实现中,高性能缓存存储器结构提供基于网络的服务用于存储和检索与基于文本的密钥相关联的值,其中密钥的长度可以最高达250字节,并且其相关联的值可以最高达1兆字节。例如,高性能缓存存储器结构1200可以包括图11A-B中描述的多个容器,其中每个容器包括使得对应容器与其他容器相关的关系信息。另外,高性能缓存存储器结构1200中包括的容器和/或数据可以由图1A至图1B、图2和图6的存储器装置和系统100A-B、200、310、600A来操纵。
特别地,图12图示根据本公开的一个实施例的如何使用先前描述的数据结构(例如主由图1A至图1B、图2和图6的存储装置和系统100A-B、200、310、600A管理的数据结构)基于命令原语的种类来组织高性能缓存实现的数据,其中高性能缓存提供基于网络的服务用于存储和检索与基于文本的密钥相关联的值。在开始,高性能缓存的实现计算表示将存储器的划分反映成变化大小的对象的更小的池连同针对必要的高性能缓存功能所需要的列表阵列保留的空间的设备存储器中的地址的一组指针。
高性能缓存中的对象存在于一个列表中并且有时存在于两个列表中。这些对象从池1250得到,诸如可变大小团点或容器的池。初始,所有对象存在于空闲列表1210的阵列中,每个空闲列表保持具有给定大小的所有对象(例如特定类)。空闲列表1210用于响应于缓存中的SET操作满足分配请求。在SET的处理期间,从空闲列表得到对象用于适当大小的对象,并且将其插入两个其他列表中。首先,计算密钥的哈希值并且将其用于从列表1230的阵列中选择列表,其中阵列中的每个条目统称为“贮存器”。将对象插入到针对给定哈希值选择的列表中,并且然后将其插入到被称为LRU列表1220的双链接列表中。LRU列表1220非常类似于队列来使用(例如最旧的条目被返回分配池,即FIFO)。列表可以从尾部向后行进以从最旧的到最新的或者从首部向前行进以从最新的到最旧的。在满足新的对象分配请求时,高性能缓存从最旧到最近行进列表中的几个节点以检查缓冲中是否由任何对象在放弃LRU列表之前到期以利于满足来自适当空闲列表的分配请求。
在高性能缓存初始化期间,MWRITE原语命令提供通过从主机到设备的非常少量的来回行程初始化大量空团点的方式。FILL命令促进阵列初始化用于建立必要的列表阵列。
主机应用维持到表示实现必要的功能所需要的各种列表的设备存储器的指针。通过使用到设备存储器中的列表和团块的指针(例如存储在图11A-B的元字段中),在启动时将所计算的团块指针添加至各种空闲列表,同时将团块和LRU列表的首尾初始化为NULL。
在处理SET命令时,主机将传递包含适当大小的团块的预先构造的指针的LIST指针的ALLOC命令入队。通过使用ALLOC返回的团块指针,主机将BLOB_WRITE_DATA命令入队以初始化所分配的团块以及相关LRU和储存器列表的LINK命令。为了最小化通过队列的往返行程,将命令链入队的能力使得主机能够通过由作为输入团块被传递给链中的随后命令的每个命令返回的BLOB来构造链ALLOC->BLOB WRITE DATA->LINK->LINK。命令链使得能够减小排队潜伏期并且简化包括多个原语的操作的实现。
在处理GET命令时,主机计算哈希值并且将SELECT命令入队,以构造比较所请求的密钥是否相等的CRITERIA。替选地,SMC控制器实现哈希函数并且完全自动化储存器列表的选择和随后的密钥比较。
图13是根据本公开的一个实施例的空闲列表内的可变大小的容器的类的图示。例如,存储器结构可以包括两个容器类(例如团块)。第一类(i)在包括容器1312和1314的空闲列表1310中定义。第二类(p)在空闲列表1320中定义,并且包括容器1322、1324和1326。如所示,类(i)中的容器具有第一大小,类(p)中的容器具有第二大小,其中这些大小不同以适应变化大小的数据。为了管理容器在存储器结构内的分配,可以对容器排序并且将其列在分类中的空闲列表(例如1310和1320)中,使得每个可用于包括在存储器结构的其他链接列表中。例如,可以将空闲列表1310内的可用容器分配给相关容器的链接列表,在这一点处,将容器从空闲列表去除。可变大小的容器可以在图12的高性能缓存存储器结构1200中实现。另外,空闲列表1310和1320中包括的容器可以由图1A-B、2和6的存储器装置和系统100A-B、200、310、600A来实现。
类(i)的空闲列表1310可以从尾部1318向后行进到首部1318。容器可以从最旧到最新或者从最新到最旧来列表。比如,在从尾部1317沿着路径1350向首部1318行进时,容器1314是下一个。从容器1314,前一指针1360沿着路径1351指向容器1312。从容器1312,前一指针1361沿着路径1352指向首部1318。类似地,类(i)可以通过按照到容器1312的路径1353从首部1318到尾部行进。下一指针1362指向容器1314。在容器1314中,下一指针1363指向尾部1317。
类似地,可以从尾部1327向首部1328向后行进类(p)的空闲列表1320。比如,当从尾部1327沿着路径1370朝着首部1328行进时,容器1326是下一个。从容器1326,前一指针沿着路径1371指向容器1324。从容器1324,前一指针沿着路径1372指向容器1322。在容器1322中,前一指针指向首部1328。
图14是根据本公开的一个实施例的空闲列表(例如图13的空闲列表)内的可变大小容器的分类内的LRU容器列表的图示。例如,存储器结构可以包括两个容器类(例如团点)。第一类(i)包括容器1412和1414。第二类(p)包括容器1422。如所示,类(i)中的容器具有第一大小,类(p)中的容器具有第二大小,其中这些大小不同。为了管理存储器结构内的容器,可以对分类的空闲列表中的容器排序使得最近使用的容器已知。以这一方式,可以通过周期上的使用来对空闲列表中的容器排序,使得最旧的容器可以在空闲列表中的更新容器之前被分配。类的可变大小容器可以在图12的高性能缓存存储器结构1200内实现。另外,列表1410和1420内包括的容器可以通过图1A-B、2和6的存储器装置和系统100A-B、200、310、600A来实现。
在类(i)中的容器从尾部1415向首部1416行进时,容器1412沿着路径1450是下一个,然后从前一指针沿着路径1451是容器1414,并且然后沿着路径1452从前一指针到首部1416。类似地,当类(p)中的容器从尾部1425向首部1426行进时,容器1422是下一个。由于类(p)中仅有一个容器,所以容器1422中的前一指针指向首部1426。
另外,在存储器结构的高性能缓存实现中,密钥被哈希并且匹配哈希列表1440中的值之一。例如,被哈希的(容器的数据部分中存储的密钥值对)密钥可以用哈希值1441来表示。该哈希值1441指向贮存器列表(k)。哈希值1441包括到贮存器列表(k)中的第一条目的指针,其是容器1412。根据容器1412中的关系信息,洗衣贮存器列表指针产生类(p)中沿着路径1456的容器1422。以这一方式,容器1412和1422的数据部分中的密钥可以匹配原始密钥(或其哈希值可以匹配)以确定哪个容器(如果存在)属于原始呈现的密钥。可以遵循类似的过程以确定是否有任何容器属于哈希到列表1440中的哈希值1442的密钥。
图15是根据本公开的一个实施例的可变大小的容器的分类内的空闲列表和LRU列表的组合。另外,容器在高性能缓存存储器结构中被组织。例如,存储器结构可以包括两个容器类(例如团点)。第一类(i)在包括四个容器1521-1524的空闲列表中定义。第二类(p)在包括四个容器1531-1534的空闲列表中定义。如所示,类(i)中的容器具有第一大小,类(p)中的容器具有第二大小,其中这些大小不同。为了管理存储器结构内的容器,可以使得分类列表中的容器相关,使得最近使用的容器已知,并且空闲容器已知。例如,类的可变大小的容器可以在图12的高性能缓存存储器结构1200内实现。另外,列表1410和1420内包括的容器可以通过图1A-B、2和6的存储器装置和系统100A-B、200、310、600A来实现。
另外,哈希表1510使得能够将密钥链接至适当的容器以及其相关联的容器中的一个或多个。这通过遍历贮存器列表以使贮存器列表(例如列表k)的容器中的密钥与原始呈现的密钥匹配来实现。例如,来自哈希值1515的贮存器列表k包括容器1521和1532。
图16是根据本公开的一个实施例的包括用于访问存储器的可编程存储器接口的存储器装置架构内基于容器1600的相同集合的两个存储器结构的图示。也就是,在一个存储器装置中,取决于存储器装置中存储的容器之间的关系如何定义,可以有多个数据结构,诸如图16所示的数据结构1和数据结构2。例如,容器集合包括容器N-1至N-3。取决于这些容器如何布置(例如通过其关系定义),可以定义多个存储器结构。也就是,通过对集合1600中的任何容器的关系信息执行操作,重新配置存储器结构。虽然示出了具有3个容器的数据结构,然而应当理解,数据结构1和2可以包含任何数目的可变大小容器,并且容器总数可以在数据结构1和2中的每个中不同。以这一方式,例如,存储器装置取决于容器N-1到N-3之间的定义的关系可重配置。存储器结构(例如数据结构1和2)可以通过图1A至图1B、图2和图6的存储器装置和系统100A-B、200、310、600A来实现。
例如,数据结构1包括所有3个容器N-1、N-2和N-3,但是被定义为具有包括在容器N-2之前的容器N-1的结构,并且其中容器N-2在容器N-3之前。例如,关系信息可以定义列表以及列表内的容器的顺序。
另外,数据结构2包括所有3个容器N-1、N-2和N-3,如同数据结构1。然而,数据结构2与数据结构1不同地配置,并且定义为具有包括在容器N-3之前的容器N-1的结构,并且其中容器N-3在容器N-2之前。
数据结构、类型和命令
如先前所描述的,支持绝对设备存储器地址上的读写操作的低层存储器原语由SMC控制器支持以使得能够实现促进密钥全局数据结构的创建和操纵所需要的整个存储器管理。SMC控制器支持可变长度团点的分配以及其与列表形式的各种基于设备的组的关联关系。列表是一般化的板管理和空闲列表、哈希表、队列、命令链等的启用车辆。创建团点的应用可以被配置成明确地接受团点是在其生命周期期间同时存在的成员的最大列表数目。每个团点包含可变大小的“列表条目”阵列以适应列表隶属关系。所有的团点包含至少一个列表条目用于由板管理器来使用。
以这一方式,原语命令包括被格式化用于设备存储器内的链接列表中存储的数据上的操作的数据操纵指令。例如,指令可以包括被配置用于进行以下各项的操作:访问链接的列表的数据;搜索链接的列表的数据;修改链接的列表的数据;将数据项添加至链接的列表;以及从链接的列表去除数据项。
提供了用于促进SMC资源的开发的命令的列表。例如,响应于SMC ATTRS命令分发包含应用相关SMC信息的属性结构(例如开始可用存储器的设备地址、可用存储器的大小等)。下面列出各种示例性原语命令。
“READ<SRC,DST,LENGTH>”原语命令在规定的长度上从设备存储器向系统存储器中复制条目。“SRC”项定义设备源地址。“DST”项定义系统存储器目的地地址。“LENGTH”项定义被复制的数据长度(例如以字节为单位)。“READ”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“WRITE<SRC,DST,LENGTH>”原语命令在规定的长度上从系统存储器向设备存储器中复制条目。“SRC”项定义设备源地址。“DST”项定义系统存储器目的地地址。“LENGTH”项定义被复制的数据长度(例如以字节为单位)。“WRITE”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“LREAD<LIST,OFFSET,LENGTH,DST>”命令从列表读取数据,其中列表是存储器的连续块。例如,存储器控制器遍历列表以满足请求。术语“LIST”指向设备存储器中的列表。“LREAD”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“LWRITE<SRC,LIST,OFFSET,LENGTH>”原语命令向列表写入数据,其中列表是存储器的连续块。例如,存储器控制器遍历列表以满足写入请求。项“SRC”项定义系统存储器中的源地址。项“LIST”指向设备存储器中的列表。项“OFFSET”提供寻找在团点的列表上的位置。项“LENGTH”定义要复制的数据的长度。“LWRITE”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“READFIELDS<*BLOB,COUNT,FIELDID,DST>”原语命令向系统存储器目的地中读取具体的团点元数据字段。这一命令可以在多个团点对象上执行。例如,这一命令可以在执行与缓存无效、碎片收集等相关的各种操作时使用。项“BLOB”定义到团点指针的阵列的系统存储器指针。各个团点指向设备存储器。项“COUNT”定义由BLOB阵列指向的团点的数目。项“FIELDID”定义表示要读取的具体元数据字段的枚举值。项“DST”定义足以保持FIELDID表示的数据类型的COUNT条目的系统存储器中的大的目的地缓冲器。“READFIELDS”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“LREADFIELD<LIST,COUNT,FIELDID,DST>”命令从列表中的每个团点读取具体的字段,并且将值连续地放置在DST中。项“LIST”定义列表的设备存储器中的列表指针以遍历用于读取字段。项“COUNT”定义可以由DST缓冲器保持的字段的最大数目。项“FIELDID”定义来自要读取的每个BLOB结构的字段。项“DST”定义用于写入数据字段的目的地缓冲器。“LREADFIELD”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“WRITEFIELDS<*BLOB,COUNT,FIELDID,SRC>”命令向设备存储器目的地中读取具体的团点元数据字段。这一命令在多个团点对象上可实现。例如,这一命令可以在执行与缓存无效、碎片收集等有关的各种操作时使用。项“BLOB”定义到团点指针的阵列的系统存储器指针。各个团点指向设备存储器。项“COUNT”定义由BLOB阵列指向的团点的数目。项“FIELDID”定义表示要写入的具体元数据字段的枚举值。项“SRC”定义包含FIELDID表示的数据类型的COUNT条目的系统存储器中的源缓冲器。在一个实现中,这一阵列通过要向由BLOB阵列指向的BLOB写入的值来预先填充。“WRITEFIELDS”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“′MREAD<COUNT,[SRC,DST,LENGTH]>”命令被配置成指向多个读取操作,并且从设备存储器向系统存储器复制数据。项“COUNT”定义所请求的读取操作的数目。项“SRC”定义表示读取操作的源地址的设备存储器地址的阵列。项“DST”定义表示数据被复制到其中的目的地地址的系统存储器地址的阵列。项“LENGTH”定义所规定的每个读取操作的相应长度的阵列。“MREAD”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“′MWRITE<COUNT,[SRC,DST,SIZE]*>”命令执行多个写入操作,包括从系统存储器向设备存储器复制数据。项“COUNT”定义所请求的写入操作的数目。项“SRC”定义表示写入操作的源地址的系统存储器地址的阵列。项“DST”定义表示数据被复制到其中的目的地地址的设备存储器地址的阵列。项“LENGTH”定义所规定的每个写入操作的相应长度的阵列。“MWRITE”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“ALLOC<LIST>”命令未链接并且返回列表中的第一团点,增加团点参考计数,并且接触创建和access_time日期。项“LIST”定义从其分配团点的列表。项“COUNT”定义列表中留下的条目的数目。“ALL0C”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“PREPEND<LIST,BLOB,INDEX>”在列表的开始插入团点。项“LIST”是到BLOB应当前缀到其中的设备存储器中的列表的指针。项“BLOB”是到要前缀到LIST中的设备存储器中的团点的指针。项“INDEX”是用于前缀的BLOB中的列表条目索引。“PREPEND”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“APPEND<LIST,BLOB,INDEX>”命令向列表的结尾附加团点。项“LIST”是到BLOB应当附加到其中的设备存储器中的列表的指针。项“BLOB”是到要附加到LIST中的设备存储器中的团点的指针。项“INDEX”是用于附加的BLOB中的列表条目索引。“APPEND”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“INSERT AFTER<LIST,BLOB1,BLOB2,INDEX>”命令在list-LIST中的BLOB2之后插入BLOB1。项“LIST”定义要向其中插入BLOB1的列表。项“BLOB1”定义要插入的团点。项“BLOB2”定义在其之后插入BLOB1的团点。项“INDEX”定义用于插入的列表条目索引。“INSERT AFTER”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“INSERT BEFORE<LIST,BLOB1,BLOB2,INDEX>”命令在LIST中的BLOB2之前插入BLOB1。项“LIST”定义要向其中插入BLOB1的列表。项“BLOB1”定义要插入的团点。项“BLOB2”定义在其之前插入BLOB1的团点。项“INDEX”定义用于插入的列表条目索引。“INSERTBEFORE”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“FREE<BLOB>”命令减小参考计数并且在ref==0的情况下将团点链接至其第一列表。命令返回参考计数。命令使用被保留用于由板管理器使用的列表条目(索引0)。通过使用参考计数模型,线程能够保持到已经“自由”的团点的参考。在这种情况下,当参考计数在FREE被调用时不为0的情况下,当突出的参考被参考保持器减小时,BLOB将被添加至随后分配的空闲列表。注意,DECR_REFCOUNT可以产生隐含的空闲操作。项“BLOB”将团点定义为空闲。“FREE”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“′SELECT<LIST,CRITERIA,**BLOB,COUNT>′”命令从LIST返回所有满足规定准则的团点,最高达最大值COUNT。基本思想是促进给定列表内的团点的多个选择。使用案例包括超过其期满日期的快速识别缓存对象以及表示具体哈希贮存器的列表中的准确匹配的密钥比较。“SELECT”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“LINK<LIST,BLOB,INDEX>”向设备存储器中的LIST添加BLOB。命令使用INDEX表示的BLOB中的具体列表条目。项“LIST”定义设备存储器中将BLOB插入其中的列表指针。项“BLOB”定义要插入LIST中的设备存储器中的团点指针。项“INDEX”定义用于这一LIST的BLOB中的列表条目索引。“LINK”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“UNLINK<LIST,BLOB,INDEX>”从LIST中去除BLOB,以清除列表条目[INDEX]中的下一和前一指针。项“LIST”定义到包含未链接的团点的列表的设备存储器中的指针。项“BLOB”定义到未链接的BLOB的设备存储器的指针。项“INDEX”定义要清除的列表条目索引。“UNLINK”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“DEFINE_LIST<ID,HEAD,TAIL”命令定义列表的各种参数,包括标识符、首部和尾部。“DFINE”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“CONDITIONAL_UNLINK<LIST,CRITERIA,INDEX>”命令定义特定列表上的未链接操作。“CONDITIONAL”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“INCR_REFCOUNT<BLOB>”命令增加与团点相关联的参考计数。“INCR_REFCOUNT”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“DECR_REFCOUNT<BLOB>′”命令在ref计数变为0的情况下减小BLOB的参考计数并且将BLOB链接回空闲列表。否则,命令返回减小后的参考计数。“DECR_REFCOUNT”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“MOVE_MEMBERSHIP<SRC LIST,DST LIST,BLOB,INDEX>′”命令在列表之间移动团点的关系。“MOVE”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“FILL<BYTE,DST,COUNT>”,命令在长度COUNT的范围内使用BYTE在DST地址处填充设备存储器。项“BYTE”定义用于填充设备存储器的字节。项“DST”定义到其中开始FILL操作的设备存储器的指针。项“COUNT”定义来自在其上写入BYTE的值的DST的字节的数目。“FILL”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“BLOB_FILL<BLOB,BYTE>”命令使用BYTE填充团点数据。项“BLOB”指向这一团点的设备存储器。项“BYTE”定义填充BLOB的可变长度数据的值。“BLOB_FILL”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“BLOB_WRITE_DATA<BLOB,SRC,LENGTH>”命令改写团点数据。项“BLOB”指向这一团点的设备存储器。项“SRC”定义到要写入的数据驻留在该处的系统存储器的指针。项“LENGTH”定义要写入的数据的长度。“BLOB_WRITE′”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“BLOB AND<BLOB1,BLOB2,BLOB DST>′”命令使用BLOB1和BLOB2可变数据执行按比特AND操作以将结果存储在BLOB_DST中。项“BLOB1”定义用于按比特AND操作的第一团点操作。项“BLOB2”定义用于按比特AND操作的第二团点操作。项“BLOB DST”定义由于BLOB1和BLOB2的按比特AND操作而产生的团点。“BLOB AND”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“BLOB OR<BLOB1,BLOB2,BLOB DST>′”命令使用BLOB1和BLOB2可变数据执行按比特OR操作,以将结果存储在BLOB_DST中。项“BLOB1”定义用于按比特OR操作的第一团点操作。项“BLOB2”定义用于按比特OR操作的第二团点操作。项“BLOB DST”定义由于BLOB1和BLOB2的按比特OR操作而产生的团点。“BLOB OR”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“BLOB XOR<BLOB1,BLOB2,BLOB DST>”命令使用BLOB1和BLOB2可变数据执行按比特XOR操作,以将结果存储在BLOB_DST中。项“BLOB1”定义用于按比特XOR操作的第一团点操作。项“BLOB2”定义用于按比特XOR操作的第二团点操作。项“BLOB DST”定义由于BLOB1和BLOB2的按比特XOR操作而产生的团点。“BLOB XOR”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
“BLOB COMPLEMENT<BLOB SRC,BLOB DST>”命令使用BLOB1和BLOB2可变数据执行按比特2-s操作,以将结果存储在BLOB_DST中。项“BLOB1”定义包含用于NOT操作的比特的团点。项“BLOB2”定义所得到的团点。“BLOB XOR”原语命令在图11A-B和12的容器1100A-B上以及存储器结构1200内可实现,并且在图13-15的列表内包括的容器上可实现。
详细描述的部分在过程、逻辑块、处理以及计算机存储器内的数据比特上的操作的其他符号表示方面呈现。这些描述和表示是由技术人员在数据处理领域使用以向本领域其他技术人员高效地传达他们的工作的本质的手段。在本申请中,认为过程、逻辑块、处理等是产生期望结果的步骤或指令的自相合序列。这些步骤是使用物理量的物理操纵的步骤。通常,虽然不一定,但是这些量采用能够在计算机中存储、传送、组合、比较和操纵的电信号或磁信号的形式。已经证明有时很方便的是,原则上出于一般使用的原因,将这些信号称为转换、比特、值、元素、符号、字符、样本、像素等。
然而,应当铭记的是,所有这些和类似的术语应当与适当的物理量相关联并且仅是适用于这些量的方便标记。除非具体指出,否则如根据以下讨论很清楚的是,应当理解,遍及本公开,使用诸如“访问”、“接收”、“选择”、“存储”、“加载”、“重新编程”、“确定”、“搜索”、“移动”、“复制”、“删除”、“识别”、“执行”、“编译”、“提供”等术语的讨论指代计算机系统或类似电子计算设备或处理器(图17的系统1710)的动作和处理(例如本文中所描述的流程图)。计算机系统或类似的电子计算设备操纵和变换被表示为计算机系统存储器、寄存器或其他这样的信息存储、传输或显示设备中的物理(电子)量的数据。
本文中描述的实施例可以在驻留在由一个或多个计算机或其他设备执行的某种形式的计算机可读存储介质(诸如程序模块)上的计算机可执行指令的一般上下文中来讨论。作为示例而非限制,计算机可读存储介质可以包括非暂态计算机存储介质和通信介质。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组成、数据结构等。程序模块的功能可以根据各种实施例中的期望来组合或分布。
计算机存储介质包括在任何方法或技术中实现的用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的易失性和非易失性、可移除和非可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、FLASH存储器、非易失性存储器或其他存储器技术、CD-ROM、DVD或其他光学存储装置、磁盒、磁带、磁带存储装置或其他磁性存储设备、或者可以用于存储期望信息并且可以被访问以检索该信息的任何其他介质。
通信介质可以实施计算机可执行指令、数据结构和程序模块,并且包括任何信息递送介质。作为示例而非限制,通信介质包括有线介质(诸如有线网络或直接有线连接)和无线介质(诸如声学、RF、红外和其他无线介质)。任何以上方案的组合也可以被包括在计算机可读介质的范围内。
图17是能够实现本公开的实施例的计算系统1710的示例的框图。计算系统1710广义上表示能够执行计算机可读指令的任何单处理器或多处理器计算设备或系统。计算系统1710的示例包括而不限于工作站、膝上型电脑、客户端侧终端、服务器、分布式计算系统、手持式设备、或者任何其他计算系统或设备。在其最基本的配置中,计算系统1710可以包括至少一个Ic湖里区714和系统存储器1716。
处理器1714通常表示能够处理数据或解释和执行指令的任何类型或形式的处理单元。在某些实施例中,处理器1714可以从软件应用或模块接收指令。这些指令可以引起处理器1714执行本文中描述的和/或说明的一个或多个示例实施例的功能。例如,处理器1714可以执行和/或是用于单独或结合其他元件执行本文中描述的以下中的一项或多项的装置:识别、确定、使用、实现、翻译、跟踪、接收、移动和提供。处理器1714还可以执行和/或是用于执行本文中描述的和/或说明的任何其他步骤、方法或处理的装置。
系统存储器1716通常表示能够存储数据和/或其他计算机可读指令的任何类型或形式的易失性或非易失性存储设备或介质。存储器系统1716的示例包括但不限于RAM、ROM、FLASH存储器或者任何其他合适的存储器设备。虽然不需要,但是在某些实施例中,计算系统1719可以包括易失性存储器单元(诸如例如系统存储器1716)和非易失性存储设备(诸如例如主存储设备1732)二者。
除了处理器1714和系统存储器1716,计算系统1710还可以包括一个或多个部件或元件。例如,在图17的实施例中,计算系统1710包括存储器控制器1718、I/O控制器1720和通信接口1722,其每个可以经由通信架构1712互连。通信架构1712通常表示能够促进计算设备的一个或多个部件之间的通信的任何类型或形式的架构。通信架构1712的示例包括但不限于通信总线(诸如IISA、PCI、PCIe或类似总线)和网络。在一个实施例中,系统存储器1716经由专用存储器总线通信。
存储器控制器1718通常表示能够处理存储器或数据或者控制计算系统1710的一个或多个部件之间的通信的任何类型或形式的设备。例如,存储器控制器1718可以经由通信架构1712来控制处理器1714、系统存储器1716和I/O控制器1720之间的通信。存储器控制器可以执行和/或是用于单独或结合其他元件执行本文中描述的操作或特征中的一个或多个的装置。
I/O控制器1720通常表示能够协调和/或控制计算设备的输入和输出功能的任何类型或形式的模块。例如,I/O控制器1720可以控制或促进数据在计算系统1710的一个或多个元件(诸如处理器1714、系统存储器1716、通信接口1722、显示器适配器1726、输入接口1730和存储接口1734)之间的传送。I/O控制器1720可以用于例如执行和/或是用于单独或结合其他元件执行本文中描述的一个或多个操作的装置。I/O控制器1720还可以用于执行和/或是用于执行本公开中给出的其他操作和特征的装置。
通信接口1722广义上表示能够促进示例计算系统1710与一个或多个附加设备之间的通信的任何类型或形式的通信设备或适配器。例如,通信接口1722可以促进计算系统1710与包括附加计算系统的专用或公共网络之间的通信。通信接口1722的示例包括但不限于有线网络接口(诸如网络接口卡)、无线网络接口(诸如无线网络接口卡)、调制解调器、和任何其他合适的接口。在一个实施例中,通信接口1722经由到诸如因特网等网络的直接链接来提供到远程服务器的直接连接。通信接口1722还可以通过例如局域网(诸如以太网网络)、个域网、电话或线缆网络、蜂窝电话连接、卫星数据连接或者任何其他合适的连接来间接提供这样的连接。
通信接口1722还可以表示被配置成经由外部总线或通信信道来促进计算系统1710与一个或多个附加网络或存储设备之间的通信的主机适配器。主机适配器的示例包括但不限于SCSI主机适配器、USB主机适配器、IEEE(电气与电子工程师协会)1394主机适配器、串行高级技术附件(SATA)和外部SATA(eSATA)主机适配器、高级技术附件(ATA)和并行ATA(PATA)主机适配器、光纤信道接口适配器、以太网适配器等。通信接口1722还使得计算系统1710能够适合分布式或远程计算。例如,通信接口1722可以从远程设备接收指令并且向远程设备发送指令用于执行。通信接口1722可以执行和/或是用于单独或结合其他元件执行本文中公开的一个或多个操作的装置。通信接口1722还可以用于执行和/或是用于执行本公开中给出的其他操作和特征的装置。
如图17中所图示的,计算系统1710还可以包括经由显示器适配器1726耦合至通信架构1712的至少一个显示器设备1724。显示器设备1724通常表示能够在视觉上显示由显示器适配器1726转发的信息的任何类型或形式的设备。类似地,显示器适配器1725通常表示被配置成从通信架构1712(或者从现有技术中已知的帧缓冲器)转发图形、文本和其他数据用于在显示器设备1724上显示的任何类型或形式的设备。
如图17中所图示的,计算系统1710还可以包括经由输入接口1730耦合至通信架构1712的至少一个输入设备1728。输入设备1728通常表示能够向计算系统1710提供计算机生成的或者人生成的输入的任何类型或形式的输入设备。输入设备1728的示例包括但不限于键盘、指示设备、语音识别设备或者任何其他输入设备。在一个实施例中,输入设备1729可以执行和/或是用于单独或结合其他元件执行本文中公开的一个或多个操作的装置。输入设备1728还可以用于执行和/或是用于执行本公开中给出的其他操作和特征的装置。
如图17中所图示的,计算系统1710还可以包括经由存储接口1734耦合至通信架构1712的主存储设备1732和备用存储设备1733。存储设备1732和1733通常表示能够存储数据和/或其他计算机可读指令的任何类型或形式的存储设备或介质。例如,存储设备1732和1733可以是磁盘驱动器(例如所谓的硬盘驱动器)、软盘驱动器、磁带驱动器、光盘驱动器、FLASH驱动器等。存储接口1734通常表示用于在存储设备1732和1733与计算系统1710的其他部件之间传送数据的任何类型或形式的接口或设备。
在一个示例中,数据库1740可以存储在主存储设备1732中。数据库1740可以表示单个数据库或计算设备的部分或者多个数据库或计算设备。例如,数据库1740可以表示计算系统1710的部分和/或(以下)图18中的示例网络架构1800的部分(存储在其上)。替选地,数据库1740可以表示能够由诸如计算系统1710和/或网络架构1800的部分访问的一个或多个物理上单独的设备(存储在其上)。
继续参考图17,存储设备1732和1733可以配置成从可移除存储单元读取和/或向其写入,可移除存储单元被配置成存储计算机软件、数据或其他计算机可读信息。合适的可移除存储单元的示例包括但不限于软盘、磁带、光盘、FLASH存储器设备等。存储设备1732和1733还可以包括用于使得能够将计算机软件、数据或其他计算机可读指令加载到计算系统1710中的其他类似结构或设备。例如,存储设备1732和1733可以被配置成读取和写入软件、数据或其他计算机可读信息。存储设备1732和1733也可以是计算系统1710的部分或者可以是通过其他接口系统访问的单独的设备。
存储设备1732和1733可以用于执行和/或是用于单独或结合其他元件执行本文中公开的一个或多个操作的装置。存储设备1732和1733还可以用于执行和/或是用于执行在本公开中给出的其他操作和特征的装置。
很多其他设备或子系统可以连接至计算系统1710。相反,图17中图示的部件和设备不需要全部存在以实现本文中描述的实施例。以上提及的设备和子系统也可以按照不同于图17中的方式互连。计算系统1710还可以采用任何数目的软件、固件和/或硬件配置。例如,本文中公开的示例实施例可以编码为计算机可读介质上的计算机程序(也称为计算机软件、软件应用、计算机可读指令、或计算机控制逻辑)。
包含计算机程序的计算机可读介质可以加载到计算系统1710中。计算机可读介质上存储的计算机程序的全部或部分然后可以存储在系统存储器1716和/或存储设备1732和1733的各个部分中。在由处理器1714执行时,被加载到计算系统1710中的计算机程序可以引起处理器1714执行和/或是用于执行本文中描述和/或说明的示例实施例的功能的装置。另外地或者替选地,本文中描述和/或说明的示例实施例可以在固件和/或硬件中实现。例如,计算系统1710可以配置为ASIC,ASIC被适配成实现本文中公开的一个或多个实施例。
图18是网络架构1800的示例的框图,其中客户端系统1810、1820和1830以及服务器1840和1845可以耦合至网络1850。客户端系统1810、1820和1830通常表示任何类型或形式的计算设备或系统,诸如图17的计算系统1710。
类似地,服务器1840和1845通常表示被配置成提供各种数据库服务和/或运行某些软件应用的计算设备或系统,诸如应用服务器或数据库服务器。网络1850通常表示任何电信或计算机网络,包括例如内联网、WAN、LAN、PAN或因特网。
如图18中所图示的,一个或多个存储设备1860(1)-(L)可以直接附接至服务器1840。类似地,一个或多个存储设备1870(1)-(L)可以直接附接至服务器1845。存储设备1860(1)-(L)和存储设备1870(1)-(L)通常表示能够存储数据和/或其他计算机可读指令的任何类型或形式的存储设备或介质。存储设备1860(1)-(L)和存储设备1870(1)-(L)可以表示被配置成使用诸如NFS、SMB或CIFS等各种协议与服务器1840和1845通信的NAS设备。
服务器1840和1845还连接至SAN交换结构1880。SAN交换结构1880通常表示能够促进存储设备之间的通信的任何类型或形式的计算机网络或架构。SAN交换结构1880可以促进服务器1840和1845与存储设备1890(1)-(M)和/或智能存储阵列1895之间的通信。SAN交换结构1880还以如下方式经由网络1850以及服务器1840和1845促进客户端系统1810、1820和1830与存储设备1890(1)-(M)和/或智能存储阵列1895之间的通信:该方式使得设备1890(1)-(M)和阵列1895呈现为到客户端系统1810、1820和1830的本地附接设备。如同存储设备1860(1)-(L)和存储设备1870(1)-(N),存储设备1890(1)-(M)和/或智能存储阵列1895通常表示能够存储数据和/或其他计算机可读指令的任何类型或形式的存储设备或介质。
参考图17的计算系统1710,可以使用诸如通信接口1722等通信接口来提供每个客户端系统1810、1820和1830与网络1850之间的连接。客户端系统1810、1820和1830可以能够使用例如网络浏览器或其他客户端软件来访问服务器1840或1845上的信息。这样的软件可以使得客户端系统1810、1820和1830能够访问由服务器1840、服务器1845、存储设备1860(1)-(L)、存储设备1870(1)-(N)、存储设备1890(1)-(M)或智能存储阵列1895托管的数据。虽然图18描绘网络(诸如因特网)用以交换数据的用途,然而本文中描述的实施例不限于因特网或基于任何特定网络的环境。
返回图18,在一个实施例中,本文中公开的一个或多个示例实施例中的全部或部分被编码为计算机程序并且加载到由服务器1840、服务器1845、存储设备1860(1)-(L)、存储设备1870(1)-(N)、存储设备1890(1)-(M)、智能存储阵列1895、或其任意组合上并且由其来执行。本文中公开的一个或多个示例实施例中的全部或部分还可以编码为存储在服务器1840中、由服务器1845运行并且通过网络1850分发给客户端系统1810、1820和1830的计算机程序。因此,网络架构1800可以执行和/或是用于单独或结合其他元件执行本文中公开的一个或多个操作的装置。网络架构1800还可以用于执行和/或是用于执行本公开中给出的其他操作和特征的装置。
以上描述的实施例可以整体或部分用在处理大量数据和/或具有紧密潜伏期约束的系统中,并且特别地与使用以下协议和格式中的一个或多个的系统一起使用:密钥值(KV)存储库、高性能缓存、Redis、Meo4J(图形)、快速块存储、交换设备、和网络RAMDisk。另外,以上描述的实施例可以整体或部分用在采用虚拟化、虚拟台式架构(VDI)、分布式存储装置和分布式处理(例如Apache、Hadoop)、数据分析集群计算(例如Apache Spark)的系统中。架构即服务(IaaS)、平台即服务(PaaS)、和其他云计算平台(例如Vmware vCloud、开放式堆栈和Microsoft Azure)。另外,以上描述的实施例可以整体或部分用在使用各种类型的存储(诸如非易失性存储器总线、闪存、多租期、因特网小型计算机接口(iSCSI)、对象存储、横向扩展存储)以及使用各种类型的联网(诸如10/40/100GbE、软件定义的联网、硅光电、框架TOR网络和低潜伏期联网)进行各种类型的计算(包括横向扩展、分解、多线程/分布式处理、RackScale、数据中心比例计算、弹性存储器提供、存储器即服务、页面迁移和缓存以及应用卸载/加速和集成)的系统中。
虽然以上公开内容使用具体的框图、流程图和示例给出了各种实施例,然而本文中描述和/或说明的每个框图组成、流程图步骤、操作和/或部件可以使用各种硬件、软件或固件(或者其任意组合)配置单独或联合实现。另外,其他部件中包含的部件的任何公开应当被认为是示例,因为可以实现很多其他架构以实现相同功能。
本文中描述和/或说明的过程参数和步骤序列被给出仅作为示例,并且可以根据期望进行变化。例如,虽然本文中说明和描述的步骤可以按照特定顺序示出或讨论,然而这些步骤不一定需要按照所说明或公开的顺序来执行。本文中描述和/或说明的各种示例方法还可以省略本文中描述或说明的一个或多个步骤或者除了这些公开的还包括附加步骤。
虽然本文中在全功能计算系统的上下文中描述和/或说明各种实施例,然而这些示例实施例中的一个或多个可以分布作为各种形式的程序产品,而不管用于实际执行分布的特定类型的计算机可读介质。本文中公开的实施例还可以使用执行某些任务的软件模块来实现。这些软件模块可以包括可以存储在计算机可读存储介质上或者计算系统中的脚本、批处理或其他可执行文件。这些软件模块可以配置计算系统执行本文中公开的示例实施例中的一个或多个。本文中公开的一个或多个软件模块可以在云计算环境中实现。云计算环境可以经由因特网提供各种服务和应用。这些基于云的服务(例如软件即服务、平台即服务、架构即服务等)可以通过网络浏览器或其他远程接口可访问。本文中描述的各种功能可以通过远程台式环境或任何其他基于云的计算环境来提供。
出于解释目的的以上描述参考具体实施例来描述。然而,以上说明性讨论并非意图排他或者将本公开限制为所公开的精确形式。很多修改和变型鉴于以上教示是可能的。实施例被选择和描述以便最佳地解释本公开的原理及其实际应用,从而使得本领域其他技术人员能够在可以适合想到的特定使用的各种修改的情况下最佳地使用本公开以及各种实施例。
从而描述了根据本公开的实施例。虽然在特定实施例中描述本公开,然而应当理解,本公开不应当被理解为受到这样的实施例的限制,而是根据以下权利要求来解释。
Claims (19)
1.一种用于存储器访问的方法,包括:
在存储器装置系统的主机控制器处接收命令,其中所述主机控制器跨通过网络通信耦合在一起的多个智能存储器立方体SMC中的一个或多个而管理数据;
确定与所述命令相对应的功能类型;
访问与所述功能类型相对应的第一配置文件;以及
与所述命令相关联地重新配置所述多个SMC中的至少一个SMC的可编程SMC控制器;
其中所述重新配置包括:由所述主机控制器从所述命令编译所述配置文件;以及将所述配置文件传递到所述可编程SMC控制器。
2.根据权利要求1所述的方法,其中所述多个SMC中的每个SMC包括存储器和用于管理所述存储器内的数据的可编程SMC存储器控制器。
3.根据权利要求2所述的方法,其中所述存储器包括被封装到一个或多个双列直插式存储器模块中的一个或多个存储器设备。
4.根据权利要求1所述的方法,进一步包括:
在所述主机控制器处即时确定所述功能类型。
5.根据权利要求1所述的方法,进一步包括:
从客户端应用与所述命令一起接收所述功能类型的指示。
6.根据权利要求1所述的方法,其中所述配置文件是位文件。
7.一种存储器装置系统,包括:
主机系统,包括:
网络接口,被配置为通过外部网络将所述主机系统耦合到客户端系统,并且从所述客户端系统接收高层存储器命令;和
处理器,耦合到所述网络接口,并且被配置为将所述高层存储器命令转换为一个或多个原语操作;
智能存储器立方体SMC互连,耦合到所述主机系统,所述SMC互连包括命令接口,所述命令接口被配置为将所述一个或多个原语操作从所述处理器传递到多个SMC;以及
所述多个SMC,其中所述多个SMC中的每个SMC包括:
可编程控制器;和
存储器,其中所述可编程控制器被配置为对存储在所述存储器中的数据异步地执行所述一个或多个原语操作。
8.根据权利要求7所述的存储器装置系统,其中所述处理器被配置为向所述存储器装置系统提供负载平衡、服务质量、连接管理和业务路由中的至少一项。
9.根据权利要求7所述的存储器装置系统,其中所述高层存储器命令被构造为使用密钥值对或密钥值函数访问所述存储器来访问分布式存储器缓存数据库。
10.根据权利要求7所述的存储器装置系统,其中所述一个或多个原语操作是功能特定的,并且被配置用于访问遍及所述多个SMC分布的所述存储器。
11.根据权利要求7所述的存储器装置系统,其中所述一个或多个原语操作被定制以用于访问和操纵存储在所述存储器中的所述数据。
12.根据权利要求7所述的存储器装置系统,其中所述命令接口包括被配置作为使用网络协议的网络接口的多个通信信道。
13.根据权利要求7所述的存储器装置系统,其中所述多个SMC中的每个SMC进一步包括:
相关队列组合,包括将所述一个或多个原语操作传递到所述可编程控制器的输入队列和在执行所述一个或多个原语操作之后返回结果的响应队列。
14.一种用于存储器访问的方法,包括:
由主机系统从存储器装置中的多个智能存储器立方体SMC的至少一个SMC接收结果,其中所述结果与所述多个SMC中的所述至少一个SMC的存储器中的位置处存储的数据相关联,所述数据满足由所述多个SMC中的所述至少一个SMC执行的一个或多个原语操作;
由所述主机系统从所述结果标识指针,所述指针指示所述数据存储在存储器中的所述位置;以及
由所述主机系统向网络接口卡提供所述指针,作为直接存储器传输操作的一部分,其中所述网络接口卡用以从所述多个SMC中的所述至少一个SMC的存储器中的所述位置获取所述数据并且通过外部网络将所述数据返回到客户端系统。
15.根据权利要求14所述的方法,进一步包括:
从所述客户端系统接收高层存储器命令;以及
将所述高层存储器命令转换为所述一个或多个原语操作。
16.根据权利要求15所述的方法,进一步包括:
将所述一个或多个原语操作分组为命令链,所述命令链针对所述多个SMC中的至少一个SMC;以及
将所述命令链提供给所述多个SMC中的所述至少一个SMC。
17.根据权利要求16所述的方法,其中所述多个SMC中的所述至少一个SMC对所述主机系统顺序地并且透明地执行来自所述命令链的所述一个或多个原语操作。
18.根据权利要求14所述的方法,进一步包括:
将所述指针存储在由所述主机系统的处理器可访问的缓冲器中。
19.根据权利要求14所述的方法,其中对所述主机系统透明地执行所述直接存储器传输操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010100570.3A CN111324308B (zh) | 2013-12-20 | 2014-12-19 | 用于访问存储器的存储器装置 |
Applications Claiming Priority (29)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201361919318P | 2013-12-20 | 2013-12-20 | |
US61/919,318 | 2013-12-20 | ||
US201461952798P | 2014-03-13 | 2014-03-13 | |
US201461952796P | 2014-03-13 | 2014-03-13 | |
US201461952800P | 2014-03-13 | 2014-03-13 | |
US201461952778P | 2014-03-13 | 2014-03-13 | |
US201461952784P | 2014-03-13 | 2014-03-13 | |
US61/952,800 | 2014-03-13 | ||
US61/952,778 | 2014-03-13 | ||
US61/952,796 | 2014-03-13 | ||
US61/952,784 | 2014-03-13 | ||
US61/952,798 | 2014-03-13 | ||
US201461990033P | 2014-05-07 | 2014-05-07 | |
US201461990009P | 2014-05-07 | 2014-05-07 | |
US201461990014P | 2014-05-07 | 2014-05-07 | |
US61/990,014 | 2014-05-07 | ||
US61/990,009 | 2014-05-07 | ||
US61/990,033 | 2014-05-07 | ||
US14/539,628 | 2014-11-12 | ||
US14/539,641 US9880971B2 (en) | 2013-12-20 | 2014-11-12 | Memory appliance for accessing memory |
US14/539,641 | 2014-11-12 | ||
US14/539,662 US9665533B2 (en) | 2013-12-20 | 2014-11-12 | Blob pools, selectors, and command set implemented within a memory appliance for accessing memory |
US14/539,740 | 2014-11-12 | ||
US14/539,740 US11132328B2 (en) | 2013-12-20 | 2014-11-12 | High level instructions with lower-level assembly code style primitives within a memory appliance for accessing memory |
US14/539,662 | 2014-11-12 | ||
US14/539,628 US9934194B2 (en) | 2013-12-20 | 2014-11-12 | Memory packet, data structure and hierarchy within a memory appliance for accessing memory |
CN202010100570.3A CN111324308B (zh) | 2013-12-20 | 2014-12-19 | 用于访问存储器的存储器装置 |
PCT/US2014/071732 WO2015095832A1 (en) | 2013-12-20 | 2014-12-19 | A memory appliance for accessing memory |
CN201480069497.0A CN105830040B (zh) | 2013-12-20 | 2014-12-19 | 用于访问存储器的存储器装置 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480069497.0A Division CN105830040B (zh) | 2013-12-20 | 2014-12-19 | 用于访问存储器的存储器装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111324308A CN111324308A (zh) | 2020-06-23 |
CN111324308B true CN111324308B (zh) | 2023-09-01 |
Family
ID=53400053
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010100570.3A Active CN111324308B (zh) | 2013-12-20 | 2014-12-19 | 用于访问存储器的存储器装置 |
CN201480069497.0A Active CN105830040B (zh) | 2013-12-20 | 2014-12-19 | 用于访问存储器的存储器装置 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480069497.0A Active CN105830040B (zh) | 2013-12-20 | 2014-12-19 | 用于访问存储器的存储器装置 |
Country Status (4)
Country | Link |
---|---|
US (6) | US9880971B2 (zh) |
EP (1) | EP3084612B1 (zh) |
CN (2) | CN111324308B (zh) |
WO (1) | WO2015095832A1 (zh) |
Families Citing this family (56)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9880971B2 (en) * | 2013-12-20 | 2018-01-30 | Rambus Inc. | Memory appliance for accessing memory |
EP3161669B1 (en) * | 2014-06-26 | 2021-02-17 | Intel Corporation | Memcached systems having local caches |
US9697114B2 (en) * | 2014-08-17 | 2017-07-04 | Mikhael Lerman | Netmory |
US9565269B2 (en) * | 2014-11-04 | 2017-02-07 | Pavilion Data Systems, Inc. | Non-volatile memory express over ethernet |
US9712619B2 (en) | 2014-11-04 | 2017-07-18 | Pavilion Data Systems, Inc. | Virtual non-volatile memory express drive |
WO2016141522A1 (en) * | 2015-03-09 | 2016-09-15 | Intel Corporation | Memcached systems having local caches |
WO2017011223A1 (en) | 2015-07-10 | 2017-01-19 | Rambus, Inc. | Thread associated memory allocation and memory architecture aware allocation |
EP3296836B1 (en) | 2015-07-22 | 2019-09-11 | Huawei Technologies Co., Ltd. | Computer device and data read-write method for computer device |
US10048977B2 (en) * | 2015-12-22 | 2018-08-14 | Intel Corporation | Methods and apparatus for multi-stage VM virtual network function and virtual service function chain acceleration for NFV and needs-based hardware acceleration |
CN108496408B (zh) * | 2016-01-26 | 2023-10-20 | 株式会社Ntt都科摩 | 基站及发送方法 |
US10452279B1 (en) * | 2016-07-26 | 2019-10-22 | Pavilion Data Systems, Inc. | Architecture for flash storage server |
US9607030B1 (en) | 2016-09-23 | 2017-03-28 | International Business Machines Corporation | Managing acronyms and abbreviations used in the naming of physical database objects |
US10915498B2 (en) * | 2017-03-30 | 2021-02-09 | International Business Machines Corporation | Dynamically managing a high speed storage tier of a data storage system |
US10324644B2 (en) | 2017-03-31 | 2019-06-18 | Hewlett Packard Enterprise Development Lp | Memory side accelerator thread assignments |
US10635554B2 (en) * | 2017-07-19 | 2020-04-28 | Dell Products, L.P. | System and method for BIOS to ensure UCNA errors are available for correlation |
CN109284245A (zh) * | 2017-07-21 | 2019-01-29 | 中兴通讯股份有限公司 | 一种基于srio的热插拔方法、装置、设备及存储介质 |
US10552271B2 (en) * | 2017-07-31 | 2020-02-04 | International Business Machines Corporation | Switching servers without interrupting a client command-response queue |
US10474600B2 (en) * | 2017-09-14 | 2019-11-12 | Samsung Electronics Co., Ltd. | Heterogeneous accelerator for highly efficient learning systems |
CN109597774B (zh) * | 2017-09-30 | 2020-12-15 | 华为技术有限公司 | 一种存储设备功能的控制方法、装置及设备 |
CN109639446B (zh) | 2017-10-09 | 2022-01-11 | 阿里巴巴集团控股有限公司 | Fpga设备、基于fpga设备的云系统 |
CN108874445A (zh) | 2017-10-30 | 2018-11-23 | 上海寒武纪信息科技有限公司 | 神经网络处理器及使用处理器执行向量点积指令的方法 |
US10530463B2 (en) * | 2017-11-16 | 2020-01-07 | Grand Mate Co., Ltd. | Method of extending RF signals in a wireless control system |
CN107894919A (zh) * | 2017-11-30 | 2018-04-10 | 中国平安财产保险股份有限公司 | 定时任务触发方法、装置、设备及可读存储介质 |
US20190171601A1 (en) * | 2017-12-03 | 2019-06-06 | Intel Corporation | Mechanisms for fpga chaining and unified fpga views to composed system hosts |
CN108090002A (zh) * | 2018-01-02 | 2018-05-29 | 联想(北京)有限公司 | 数据处理方法、可编程阵列和可编程处理系统 |
US10956086B2 (en) * | 2018-01-29 | 2021-03-23 | Micron Technology, Inc. | Memory controller |
CN108418874B (zh) * | 2018-02-12 | 2021-01-26 | 平安科技(深圳)有限公司 | 跨广域网数据回导方法、装置、计算机设备及存储介质 |
TWI664828B (zh) * | 2018-02-14 | 2019-07-01 | 和碩聯合科技股份有限公司 | 測試方法和測試系統 |
US10943032B2 (en) * | 2018-07-31 | 2021-03-09 | EMC IP Holding Company LLC | Data encryption and decryption techniques |
CN109344296B (zh) * | 2018-08-30 | 2021-11-26 | 武汉斗鱼网络科技有限公司 | 实现Redis的HASH键的域生命周期控制方法、系统、服务器及存储介质 |
US11537475B1 (en) * | 2018-09-11 | 2022-12-27 | Druva Inc. | Data guardianship in a cloud-based data storage system |
US12094456B2 (en) | 2018-09-13 | 2024-09-17 | Shanghai Cambricon Information Technology Co., Ltd. | Information processing method and system |
CN109344097A (zh) * | 2018-09-13 | 2019-02-15 | 北京腾凌科技有限公司 | 数据传输方法及装置 |
CN109324828B (zh) * | 2018-09-21 | 2023-06-02 | 山东华芯半导体有限公司 | 一种在验证平台中实现闪存多命令并行执行的方法 |
US10831503B2 (en) | 2018-11-06 | 2020-11-10 | International Business Machines Corporation | Saving and restoring machine state between multiple executions of an instruction |
US10831502B2 (en) | 2018-11-06 | 2020-11-10 | International Business Machines Corporation | Migration of partially completed instructions |
US10831478B2 (en) | 2018-11-06 | 2020-11-10 | International Business Machines Corporation | Sort and merge instruction for a general-purpose processor |
KR20200069889A (ko) * | 2018-12-07 | 2020-06-17 | 에스케이하이닉스 주식회사 | 컨트롤러, 이를 포함하는 메모리 시스템 및 이의 동작 방법 |
US10996890B2 (en) | 2018-12-19 | 2021-05-04 | Micron Technology, Inc. | Memory module interfaces |
EP3694166B1 (en) * | 2019-02-06 | 2022-09-21 | Hitachi Energy Switzerland AG | Cyclic time-slotted operation in a wireless industrial network |
CN110245099B (zh) * | 2019-05-24 | 2024-03-29 | 上海威固信息技术股份有限公司 | 一种基于fpga的数据存储与转储系统 |
CN112395040B (zh) * | 2019-08-19 | 2024-10-01 | 阿里巴巴集团控股有限公司 | 内存数据传输方法、系统及服务器 |
CN110362019B (zh) * | 2019-08-23 | 2021-04-06 | 嘉兴中科声学科技有限公司 | 自容式潜标的控制系统和自容式潜标 |
US11656952B2 (en) | 2019-09-20 | 2023-05-23 | Samsung Electronics Co., Ltd. | Reliable key-value store with write-ahead-log-less mechanism |
CN110737547B (zh) * | 2019-10-22 | 2022-08-19 | 第四范式(北京)技术有限公司 | 使用非易失性存储器nvm恢复内存数据库的方法和设备 |
CN111079187B (zh) * | 2019-12-23 | 2022-04-01 | 恒宝股份有限公司 | 一种智能卡及其文件管理方法 |
US11137941B2 (en) * | 2019-12-30 | 2021-10-05 | Advanced Micro Devices, Inc. | Command replay for non-volatile dual inline memory modules |
US11531601B2 (en) | 2019-12-30 | 2022-12-20 | Advanced Micro Devices, Inc. | Error recovery for non-volatile memory modules |
CN111858038A (zh) * | 2020-06-30 | 2020-10-30 | 浪潮电子信息产业股份有限公司 | Fpga板卡内存数据的读取方法、装置及介质 |
CN111915475B (zh) * | 2020-07-10 | 2024-04-05 | 长沙景嘉微电子股份有限公司 | 绘制命令的处理方法、gpu、主机、终端和介质 |
CN111984554B (zh) * | 2020-07-31 | 2023-03-28 | 新华三技术有限公司成都分公司 | 一种数据处理方法及装置 |
US11323285B1 (en) * | 2020-08-28 | 2022-05-03 | Earthsystems Technologies, Inc. | Architecture for a multichannel geophysical data acquisition system and method of use |
CN112463655B (zh) * | 2020-11-14 | 2022-06-14 | 武汉汇迪森信息技术有限公司 | 一种高速数据采集存储系统的数据存储及读取方法 |
US20230025601A1 (en) * | 2021-07-23 | 2023-01-26 | Micron Technology, Inc. | Initializing memory systems |
CN114500406B (zh) * | 2022-02-11 | 2024-05-14 | 浪潮云信息技术股份公司 | 一种云文件存储细粒度QoS控制方法及系统 |
CN117690475B (zh) * | 2024-02-04 | 2024-04-19 | 合肥康芯威存储技术有限公司 | 一种存储芯片的检测系统及检测方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1195814A (zh) * | 1997-03-31 | 1998-10-14 | 国际商业机器公司 | 使存储器容错的可变大小冗余替换布局 |
US5948062A (en) * | 1995-10-27 | 1999-09-07 | Emc Corporation | Network file server using a cached disk array storing a network file directory including file locking information and data mover computers each having file system software for shared read-write file access |
US7653895B1 (en) * | 2006-01-20 | 2010-01-26 | Xilinx, Inc. | Memory arrangement for message processing by a plurality of threads |
Family Cites Families (56)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5055999A (en) | 1987-12-22 | 1991-10-08 | Kendall Square Research Corporation | Multiprocessor digital data processing system |
US5561622A (en) | 1993-09-13 | 1996-10-01 | International Business Machines Corporation | Integrated memory cube structure |
US6295571B1 (en) | 1999-03-19 | 2001-09-25 | Times N Systems, Inc. | Shared memory apparatus and method for multiprocessor systems |
US6892298B2 (en) | 2000-07-26 | 2005-05-10 | Times N Systems, Inc. | Load/store micropacket handling system |
US6970891B1 (en) | 2000-11-27 | 2005-11-29 | Microsoft Corporation | Smart card with volatile memory file subsystem |
US7171494B2 (en) | 2001-01-31 | 2007-01-30 | Hewlett-Packard Development Company, L.P. | Extending a standard-based remote file access protocol and maintaining compatibility with a standard protocol stack |
JP2005537557A (ja) | 2002-08-30 | 2005-12-08 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | 動的メモリ管理 |
US7216253B2 (en) | 2003-03-26 | 2007-05-08 | Pillar Data Systems, Inc. | Methods and systems for management of systems metadata |
US7194593B2 (en) | 2003-09-18 | 2007-03-20 | Micron Technology, Inc. | Memory hub with integrated non-volatile memory |
US7519788B2 (en) * | 2004-06-04 | 2009-04-14 | Micron Technology, Inc. | System and method for an asynchronous data buffer having buffer write and read pointers |
JP4568055B2 (ja) | 2004-08-23 | 2010-10-27 | 株式会社アドバンテスト | 試験装置及び試験方法 |
US7406634B2 (en) | 2004-12-02 | 2008-07-29 | Cisco Technology, Inc. | Method and apparatus for utilizing an exception handler to avoid hanging up a CPU when a peripheral device does not respond |
WO2006072844A2 (en) * | 2004-12-03 | 2006-07-13 | Koninklijke Philips Electronics N.V. | Streaming memory controller |
US7302558B2 (en) | 2005-01-25 | 2007-11-27 | Goldman Sachs & Co. | Systems and methods to facilitate the creation and configuration management of computing systems |
US8316074B2 (en) | 2005-03-11 | 2012-11-20 | Network Appliance, Inc. | Network-accessible memory |
US8060774B2 (en) | 2005-06-24 | 2011-11-15 | Google Inc. | Memory systems and memory modules |
DE112006002300B4 (de) | 2005-09-02 | 2013-12-19 | Google, Inc. | Vorrichtung zum Stapeln von DRAMs |
US7496770B2 (en) * | 2005-09-30 | 2009-02-24 | Broadcom Corporation | Power-efficient technique for invoking a co-processor |
US7428610B2 (en) * | 2006-02-14 | 2008-09-23 | Atmel Corporation | Writing to flash memory |
US7761624B2 (en) | 2006-09-28 | 2010-07-20 | Virident Systems, Inc. | Systems and apparatus for main memory with non-volatile type memory modules, and related technologies |
US7546307B2 (en) | 2006-09-28 | 2009-06-09 | Nvidia Corporation | Virtual block storage to filesystem translator |
US20080162866A1 (en) | 2006-12-28 | 2008-07-03 | Siddiqi Faraz A | Apparatus and method for fast and secure memory context switching |
WO2008131058A2 (en) * | 2007-04-17 | 2008-10-30 | Rambus Inc. | Hybrid volatile and non-volatile memory device |
US8452927B2 (en) * | 2008-01-02 | 2013-05-28 | Sandisk Technologies Inc. | Distributed storage service systems and architecture |
US8296398B2 (en) | 2008-04-29 | 2012-10-23 | Overland Storage, Inc. | Peer-to-peer redundant file server system and methods |
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 |
US8656082B2 (en) | 2008-08-05 | 2014-02-18 | Micron Technology, Inc. | Flexible and expandable memory architectures |
KR101467623B1 (ko) * | 2008-08-08 | 2014-12-01 | 휴렛-팩커드 디벨롭먼트 컴퍼니, 엘.피. | 메모리 모듈 및 메모리 모듈 제어 방법 |
US8924661B1 (en) | 2009-01-18 | 2014-12-30 | Apple Inc. | Memory system including a controller and processors associated with memory devices |
US8078822B2 (en) | 2009-03-12 | 2011-12-13 | Netapp, Inc. | Application independent storage array performance optimizer |
EP2441007A1 (en) | 2009-06-09 | 2012-04-18 | Google, Inc. | Programming of dimm termination resistance values |
US8627015B2 (en) * | 2009-07-31 | 2014-01-07 | Emc Corporation | Data processing system using cache-aware multipath distribution of storage commands among caching storage controllers |
US9325534B2 (en) * | 2009-09-29 | 2016-04-26 | International Business Machines Corporation | Configurable differential to single ended IO |
US8555022B1 (en) | 2010-01-06 | 2013-10-08 | Netapp, Inc. | Assimilation of foreign LUNS into a network storage system |
US8386425B1 (en) | 2010-02-19 | 2013-02-26 | Netapp, Inc. | Out of order delivery for data and metadata mirroring in a cluster storage system |
US9436710B2 (en) | 2010-09-28 | 2016-09-06 | Redis Labs Ltd. | Systems, methods, and media for managing an in-memory NoSQL database |
US9251058B2 (en) | 2010-09-28 | 2016-02-02 | SanDisk Technologies, Inc. | Servicing non-block storage requests |
US9465728B2 (en) | 2010-11-03 | 2016-10-11 | Nvidia Corporation | Memory controller adaptable to multiple memory devices |
WO2012061633A2 (en) | 2010-11-03 | 2012-05-10 | Netlist, Inc. | Method and apparatus for optimizing driver load in a memory package |
RU2595493C2 (ru) | 2011-01-10 | 2016-08-27 | Стороун Лтд. | Крупномасштабная система хранения данных |
US8671263B2 (en) * | 2011-02-03 | 2014-03-11 | Lsi Corporation | Implementing optimal storage tier configurations for a workload in a dynamic storage tiering system |
US8713379B2 (en) | 2011-02-08 | 2014-04-29 | Diablo Technologies Inc. | System and method of interfacing co-processors and input/output devices via a main memory system |
US8880790B2 (en) * | 2011-04-11 | 2014-11-04 | Inphi Corporation | Methods and apparatus for transferring data between memory modules |
US9076528B2 (en) | 2011-05-31 | 2015-07-07 | Micron Technology, Inc. | Apparatus including memory management control circuitry and related methods for allocation of a write block cluster |
US9575903B2 (en) | 2011-08-04 | 2017-02-21 | Elwha Llc | Security perimeter |
KR101824295B1 (ko) | 2011-08-12 | 2018-01-31 | 샌디스크 테크놀로지스 엘엘씨 | 솔리드 스테이트 장치 가상화를 포함하는 캐시 관리 |
US9417998B2 (en) * | 2012-01-26 | 2016-08-16 | Memory Technologies Llc | Apparatus and method to provide cache move with non-volatile mass memory system |
EP2915098A4 (en) | 2012-10-30 | 2016-07-06 | Certirx Corp | PRODUCT, IMAGE, OR DOCUMENT AUTHENTICATION AND VERIFICATION AND OBJECT IDENTIFICATION |
US9164888B2 (en) | 2012-12-10 | 2015-10-20 | Google Inc. | Using a logical to physical map for direct user space communication with a data storage device |
US10079044B2 (en) * | 2012-12-20 | 2018-09-18 | Advanced Micro Devices, Inc. | Processor with host and slave operating modes stacked with memory |
US20140223100A1 (en) | 2013-02-07 | 2014-08-07 | Alex J. Chen | Range based collection cache |
US9501431B1 (en) * | 2013-09-05 | 2016-11-22 | Google Inc. | Remote control monitoring of data center equipment |
US9323457B2 (en) | 2013-12-09 | 2016-04-26 | Xilinx, Inc. | Memory arrangement for implementation of high-throughput key-value stores |
US9880971B2 (en) | 2013-12-20 | 2018-01-30 | Rambus Inc. | Memory appliance for accessing memory |
US9507623B2 (en) * | 2014-12-15 | 2016-11-29 | Vmware, Inc. | Handling disk state inheritance for forked virtual machines |
US10169258B2 (en) * | 2015-06-09 | 2019-01-01 | Rambus Inc. | Memory system design using buffer(s) on a mother board |
-
2014
- 2014-11-12 US US14/539,641 patent/US9880971B2/en active Active
- 2014-11-12 US US14/539,662 patent/US9665533B2/en active Active
- 2014-11-12 US US14/539,628 patent/US9934194B2/en active Active
- 2014-11-12 US US14/539,740 patent/US11132328B2/en active Active
- 2014-12-19 CN CN202010100570.3A patent/CN111324308B/zh active Active
- 2014-12-19 CN CN201480069497.0A patent/CN105830040B/zh active Active
- 2014-12-19 EP EP14872200.2A patent/EP3084612B1/en active Active
- 2014-12-19 WO PCT/US2014/071732 patent/WO2015095832A1/en active Application Filing
-
2021
- 2021-09-23 US US17/483,641 patent/US11860813B2/en active Active
-
2023
- 2023-11-17 US US18/513,053 patent/US20240220442A1/en active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5948062A (en) * | 1995-10-27 | 1999-09-07 | Emc Corporation | Network file server using a cached disk array storing a network file directory including file locking information and data mover computers each having file system software for shared read-write file access |
CN1195814A (zh) * | 1997-03-31 | 1998-10-14 | 国际商业机器公司 | 使存储器容错的可变大小冗余替换布局 |
US7653895B1 (en) * | 2006-01-20 | 2010-01-26 | Xilinx, Inc. | Memory arrangement for message processing by a plurality of threads |
Also Published As
Publication number | Publication date |
---|---|
EP3084612A4 (en) | 2017-08-23 |
US9880971B2 (en) | 2018-01-30 |
US20150178002A1 (en) | 2015-06-25 |
US20220100697A1 (en) | 2022-03-31 |
US20240220442A1 (en) | 2024-07-04 |
WO2015095832A1 (en) | 2015-06-25 |
US20150177989A1 (en) | 2015-06-25 |
US11860813B2 (en) | 2024-01-02 |
CN105830040B (zh) | 2020-03-17 |
US20150177990A1 (en) | 2015-06-25 |
US20150178243A1 (en) | 2015-06-25 |
US9665533B2 (en) | 2017-05-30 |
US11132328B2 (en) | 2021-09-28 |
CN105830040A (zh) | 2016-08-03 |
US9934194B2 (en) | 2018-04-03 |
EP3084612B1 (en) | 2019-02-27 |
CN111324308A (zh) | 2020-06-23 |
EP3084612A1 (en) | 2016-10-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111324308B (zh) | 用于访问存储器的存储器装置 | |
US10963393B1 (en) | Storage system and a method for application aware processing | |
US20210182190A1 (en) | Intelligent die aware storage device scheduler | |
US10540279B2 (en) | Server-based persistence management in user space | |
Peter et al. | Arrakis: The operating system is the control plane | |
US20160132541A1 (en) | Efficient implementations for mapreduce systems | |
CN113302584A (zh) | 基于云的存储系统的存储管理 | |
CN113424144A (zh) | 计算数据存储系统 | |
CN111868676A (zh) | 在基于云的存储系统中服务i/o操作 | |
CN116601596A (zh) | 使用数据相似度来选择分段进行垃圾收集 | |
US20210326270A1 (en) | Address translation at a target network interface device | |
US10244069B1 (en) | Accelerated data storage synchronization for node fault protection in distributed storage system | |
US20150286414A1 (en) | Scanning memory for de-duplication using rdma | |
WO2022256071A1 (en) | High-availability memory replication in one or more network devices | |
US20220405254A1 (en) | Data deduplication in a disaggregated storage system | |
US11966370B1 (en) | Pseudo-local multi-service enabled file systems using a locally-addressable secure compute layer | |
CN118556229A (zh) | 动态数据段大小设定 | |
US11714741B2 (en) | Dynamic selective filtering of persistent tracing |
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 |