CN110275840B - 在存储器接口上的分布式过程执行和文件*** - Google Patents
在存储器接口上的分布式过程执行和文件*** Download PDFInfo
- Publication number
- CN110275840B CN110275840B CN201910475716.XA CN201910475716A CN110275840B CN 110275840 B CN110275840 B CN 110275840B CN 201910475716 A CN201910475716 A CN 201910475716A CN 110275840 B CN110275840 B CN 110275840B
- Authority
- CN
- China
- Prior art keywords
- memory
- module
- interface
- data
- storage
- 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
- 230000015654 memory Effects 0.000 title claims abstract description 683
- 238000000034 method Methods 0.000 title claims abstract description 113
- 230000008569 process Effects 0.000 title description 13
- 239000007787 solid Substances 0.000 claims abstract description 13
- 238000004891 communication Methods 0.000 claims description 29
- 230000006854 communication Effects 0.000 claims description 29
- 239000000758 substrate Substances 0.000 claims 10
- 238000004366 reverse phase liquid chromatography Methods 0.000 abstract description 2
- 230000002093 peripheral effect Effects 0.000 description 84
- 238000012545 processing Methods 0.000 description 46
- 230000006870 function Effects 0.000 description 42
- 230000004044 response Effects 0.000 description 32
- 238000013507 mapping Methods 0.000 description 31
- 238000010586 diagram Methods 0.000 description 29
- 238000012546 transfer Methods 0.000 description 13
- 230000004913 activation Effects 0.000 description 4
- 230000003139 buffering effect Effects 0.000 description 4
- 238000009877 rendering Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000005192 partition Methods 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 239000000872 buffer Substances 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- APTZNLHMIGJTEW-UHFFFAOYSA-N pyraflufen-ethyl Chemical compound C1=C(Cl)C(OCC(=O)OCC)=CC(C=2C(=C(OC(F)F)N(C)N=2)Cl)=C1F APTZNLHMIGJTEW-UHFFFAOYSA-N 0.000 description 2
- 230000011664 signaling Effects 0.000 description 2
- 229910052710 silicon Inorganic materials 0.000 description 2
- 239000010703 silicon Substances 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 101100498818 Arabidopsis thaliana DDR4 gene Proteins 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000003542 behavioural effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 238000011960 computer-aided design Methods 0.000 description 1
- 239000004020 conductor Substances 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000006386 memory function Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000003909 pattern recognition Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- 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
- G06F13/1668—Details of memory controller
- G06F13/1694—Configuration of memory controller to different memory types
-
- 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/0638—Combination of memories, e.g. ROM and RAM such as to permit replacement or supplementing of words in one module by words in another module
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Dram (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System (AREA)
Abstract
在DRAM存储器通道上的存储器模块上包括非易失性存储器(例如,闪存、固态盘)。驻留在DRAM存储器通道上的非易失性存储器可以被集成到操作***的现有文件***结构中。驻留在DRAM存储器通道上的非易失性存储器可以被呈现为分布式文件***的一部分或全部。请求和/或远程过程调用(RPC)请求,或者与请求和/RPC相关联的信息,可以通过DRAM存储器通道被路由至存储器模块,以便于服务计算和/或分布式文件***命令。
Description
分案申请说明
本申请是申请日为2015年02月21日、申请号为201580000052.1、发明名称为“在存储器接口上的分布式过程执行和文件***”的中国发明专利申请的分案申请。
相关申请的交叉参考
本申请要求2014年2月23日提交的名称为“DISTRIBUTED PROCEDURE EXECUTIONAND FILE SYSTEMS ON A MEMORY INTERFACE”的美国专利申请第14/187,290号的权利,其内容为了所有目的通过引用并入于此。本申请还与2013年3月15日提交的名称为“METHODSAND SYSTEMS THAT COMMUNICATE VIA A MEMORY MODULE INTERFACE”的美国专利临时申请第61/788,196号有关,与2012年12月3日提交的名称为“METHODS AND SYSTEMS FORSUPPORTING FUNCTIONS ON A LEGACY MEMORY INTERFACE”的美国专利临时申请第61/732,898号有关,与2013年10月27日提交的名称为“COMMUNICATION VIA A MEMORY INTERFACE”的美国专利申请第14/064,167号有关,与2011年8月24日提交的名称为“METHODS ANDSYSTEMS FOR MAPPING A PERIPHERAL FUNCTION ONTO A LEGACY MEMORY INTERFACE”的美国专利临时申请第61/526,953号有关,与2012年5月16日提交的名称为“METHODS ANDSYSTEMS FOR MAPPING A PERIPHERAL FUNCTION ONTO A LEGACY MEMORY INTERFACE”的美国专利临时申请第61/647,986号有关,与2012年7月12日提交的名称为“METHODS ANDSYSTEMS FOR MAPPING A PERIPHERAL FUNCTION ONTO A LEGACY MEMORY INTERFACE”的美国专利临时申请第61/670,874号有关,与2012年8月20日提交的名称为“METHODS ANDSYSTEMS FOR MAPPING A PERIPHERAL FUNCTION ONTO A LEGACY MEMORY INTERFACE”的美国专利临时申请第61/691,134号有关,与2012年8月23日提交的名称为“METHODS ANDSYSTEMS FOR MAPPING A PERIPHERAL FUNCTION ONTO A LEGACY MEMORY INTERFACE”的国际申请PCT/US12/52000有关,与2012年8月23日提交的名称为“METHODS AND SYSTEMS FORMAPPING A PERIPHERAL FUNCTION ONTO A LEGACY MEMORY INTERFACE”的国际申请PCT/US12/52043有关,与2012年8月23日提交的名称为“METHODS AND SYSTEMS FOR MAPPING APERIPHERAL FUNCTION ONTO A LEGACY MEMORY INTERFACE”的国际申请PCT/US12/52052有关,以及与2012年8月23日提交的名称为“METHODS AND SYSTEMS FOR MAPPING APERIPHERAL FUNCTION ONTO A LEGACY MEMORY INTERFACE”的国际申请PCT/US12/52059有关,其全部的十一个的内容为了所有目的通过引用并入于此。
附图说明
在附图中通过示例示例的方式而非限制的方式示出本发明,并且其中类似的参考标号指代类似的元件。
图1描绘了根据一个实施例的存储器***100。***100包括经由主存储器接口115与存储器模块110交流数据DQ、命令和地址CA的CPU 105。
图2示出了根据一个实施例的数据结构200,***驱动器146在高速缓存器142中汇集并存储该数据结构200以将命令和数据传送至OPBA命令端口。
图3是示出根据一个实施例的图1中的存储器模块110如何管理来自CPU 105的对于访问主存储器120和来自***处理器135的支持的OS请求的流程图。
图4描绘了根据另一实施例的存储器***400。
图5描绘了根据实施例的支持***命令广播和可配置的数据宽度的存储器模块500。
图6示出了***驱动器(例如,图1的驱动器146)在高速缓存器中汇集和存储以将指令和数据传送至32个模块500的OPBA命令端口的数据结构600,在四个存储器通道中的每个存储器通道上有8个模块。
图7是混合闪存/DRAM存储器模块的示图。
图8是示出混合闪存/DRAM计算子***的框图。
图9是混合闪存/DRAM存储器模块的示图。
图10是示出混合闪存/DRAM计算子***的框图。
图11是混合盘类型非易失性存储和DRAM存储器模块的示图。
图12是示出混合盘类型非易失性存储和DRAM存储器模块计算子***的框图。
图13是用于访问存储在DRAM存储器通道上的非易失性存储器中的文件数据的***的示图。
图14是用于远程地访问存储在DRAM存储器通道上的非易失性存储器中的文件数据的***的示图。
图15是用于使用块I/O存储类型设备命令远程地访问存储在DRAM存储器通道上的非易失性存储器中的文件数据的***的示图。
图16是用于服务对于存储在DRAM存储器通道上的非易失性存储器中的数据的远程请求的***的示图。
图17是用于服务向DRAM存储器通道上的固态盘的远程请求的***的示图。
图18是用于分布式文件处理的***的示图。
图19是示出操作存储器模块的方法的流程图。
图20是示出操作存储器模块的方法的流程图。
图21是示出操作存储器模块的方法的流程图。
图22是示出操作存储器模块的方法的流程图。
图23是示出服务远程过程调用请求的方法的流程图。
图24是示出传送和服务远程过程调用请求的方法的流程图。
图25是示出执行分布式处理功能的方法的流程图。
图26是示出操作存储器模块的方法的流程图。
图27是计算机的框图。
具体实施方式
在一个实施例中,非易失性存储器(例如,闪存、固态盘)被包括在DRAM存储器通道上的存储器模块上。这帮助由非易失性存储器提供的大容量存储驻留于更接近***的计算机资源(即,CPU)。此外,CPU和非易失性存储器可以使用DRAM存储器通道的相对高的带宽来传送命令和/或数据(可能经由控制器)。
驻留在DRAM存储器通道上的非易失性存储器可以被集成到流行的操作***的现有文件***结构中,以利于采纳到流行的编程范例中。一种这样的集成方法是使驻留在DRAM存储器通道上的非易失性存储器呈现为分布式文件***的一部分或全部。例如,可以修改流行的操作***以将驻留在DRAM存储器通道上的非易失性存储器呈现为网络文件***(NFS)、Hadoop文件***和/或其他分布式文件***(DFS)的一部分。远程过程调用(RPC)请求和/或源自本地CPU的请求(使用RPC机制/软件层或者另一种方式),或者与本地请求和/或RPC相关联的信息可以通过DRAM存储器通道被路由至存储器模块,以便于服务计算和/或DFS命令。
图1描绘了根据一个实施例的存储器***100。***100包括经由主存储器接口115与存储器模块110交流数据DQ以及命令和地址CA的CPU 105。在该示例中,存储器模块110包括主存储器120,主存储器120由IC主存储器设备125的组来组成。模块110附加地包括专用集成电路(ASIC)130,该专用集成电路(ASIC)130充当缓冲设备以在CPU 105和主存储器120之间中继命令和数据。ASIC 130附加地包括嵌入式处理器135,该嵌入式处理器135共享对于支持***功能、诸如图形或计算处理的主存储器的访问,用于改善的总体的***性能。***接口140以将修改CPU 105的需求最小化或者消除的方式来促进CPU 105和***处理器135之间的***命令和数据的通信,从而减少对于采用具有集成处理支持的主存储器模块的实践阻碍。
可能是片上***(SoC)的CPU105包括高速缓存器142和存储器控制器144,并且执行软件***驱动器146。如本文详细描述的,驱动器146具有对密钥存储148的访问,并且例如,可以是被提供来支持与模块110的通信的软件和/或固件驱动器。驱动器146可以是由制造商或消费者加载的软件,并且可以考虑到遗留存储器***与少量硬件修改或无硬件修改的兼容性。
I2C控制器150和相关的串行总线提供可靠的标准化通道,该标准化通道允许CPU105访问来自模块110的特定于模块的配置信息,该配置信息通常存储在EEPROM(未示出)中。该信息用于使用本领域技术人员公知的技术来初始化相对高性能的接口115。在描绘的实施例中使用这些相同的资源以在***接口140和密钥存储148之间共享密钥。控制器150可以与CPU 105的其他部件集成。
ASIC 130包括两个物理接口(PHY),这两者可以是传统的物理接口。第一物理接口是模块接口152,该模块接口152从控制器144接收外部生成的事务,如模块命令、主存储器地址和模块数据。第二个物理接口是存储器接口154,该存储器接口154支持ASIC 130和主存储器120之间的通信。尽管存储器接口可以是与模块接口相同的类型,但在一些实施例中,存储器接口可以在所使用的信令类型、数据宽度、命令格式或者要求由ASIC 130转换的其他方面上有所不同。桥接电路156包括选择逻辑158和160,它们基于使用模块命令所指定的桥接标准,允许***接口140桥接主存储器120与CPU 105或者与***处理器135之间的命令、地址和数据的通信。桥接电路156还允许***接口140捕获模块数据,该模块数据包括操作代码(“操作码”或“***命令”)、地址、数据和其他用于***处理器135的控制信号。模块接口152可以支持与主存储器接口154不同数量的并行数据通道,其中桥接电路156可以针对在接口之间传送的存储数据执行串行化/反串行化操作。
***接口140功能性地驻留在桥接电路156和***处理器135之间,并且包括地址-捕获/命令解码器162、操作码端口基地址(OPBA)寄存器164、写数据队列166和读数据队列168、密钥寄存器170、比较器172以及操作码解码器174。这些元件共同允许***接口140建立操作码开口,该操作码开口与一个或多个主存储器地址的指定的捕获范围相关联,CPU105可以通过该操作码开口向***处理器135传输操作码和数据。响应于这种操作码,***处理器135可以通过执行存储在主存储器120中或其他地方的指令来支持各种开口功能。在一些实施例中,***处理器135具有响应于操作码生成***存储命令、地址和数据的能力。***接口用来捕获模块数据的主存储器地址的指定的捕获范围表示在模块接口处可接收的存储器地址的子范围,并且可以位于在用于对主存储器定址的主存储器地址的全范围之外。
主存储器120可包括多个独立的可访问区块或区块组,并且设备125中的一些设备可以被用于存储纠错码。在这种上下文中,“区块(rank)”指代用于单个存储器访问的单独可寻址存储设备的集合。在这种实施例中,不同的区块或区块组可以支持单独的物理存储器接口,诸如用于CPU 105和***处理器135中的每一个的物理存储器接口。在这种实施例中,向解码器162指定的桥接标准将模块命令、主存储器地址和模块数据从模块接口152传递至存储设备的多个区块中的至少一个区块,并且将***存储器命令、地址和数据从***处理器传递至存储设备的多个区块中的至少另一个区块。这样的桥接标准可以是动态地可选的,以支持从两个处理器对主存储器的顺序的或者同时的访问而不会丢失多个区块中的所选的一个区块中的数据,或者在将模块命令、主存储器地址和模块数据从模块接口传递至存储器设备的多个区块中的所选的一个区块与将***存储命令、地址和数据从***处理器传递至多个区块中的所选的一个区块之间进行改变。
图2示出了根据一个实施例的数据结构200,***驱动器146在高速缓存142中汇集并存储该数据结构200以将指令和数据传送至OPBA命令端口。数据结构200将向OPBA行指定通过一个或多个写操作被存储在写数据队列166中的信息。信息以与写数据队列166相同的方式被划分为256个逻辑列,并且每个逻辑列被进一步划分为8个64位字段:指令字段、地址字段、写数据字段、写掩码字段以及预留的四个字段。这些字段都唯一地由图2中的“四字索引”来指定。术语“四字”代表“四倍长字”,其中一个字是16位。
指令字段的八位OP[7:0]用于表示将由操作码解码器174解码的操作码(或者被传递至***处理器135用于解码)。另外八位BL[7:0]存储突发长度变量,该突发长度变量可以用于指定突然进入队列166的后续写访问的数量。因此,实施例考虑到高效率的开放页面的高达256列的写和读数据突发。可以要求处理器135在执行在位OP[7:0]中编码的任何指令之前完成指定的突发以避免竞态条件。下一指令位M[0]表示是否应用在写掩码字段中指定的数据掩码。位PSB[2:0]是可选的***选择位,这样说是因为它们指定作为广播命令目标的一个或多个***处理器。结合图5详细描述了使用PSB位来允许在多个模块处接收的命令将由它们对应的***处理器中的任何一个***处理器或组合执行的实施例。指令字段的剩余位63:20是预留的。
地址字段允许CPU 105向***处理器135指定存储器地址,诸如以标识主存储器中的位置、模块110上的寄存器或者一些其他存储器或功能。这些地址可以映射到ASIC 130的存储器层次结构中的任何地方并且以驱动器146与ASIC 130之间期望的任何方式,而对CPU105或操作***的影响很小或没有影响。
OPBA列中的写数据字段允许操作码向OPBA传输多达64位的写数据。OPBA的剩余255个列中的每一列都可以包含多达512个附加位的写数据。所有这些写数据都可以作为***写数据WDp被传递至***处理器135用于存储和操作。例如,这样的数据可能包括将被存储在主存储器120中或其他地方用于由处理器135执行的处理器指令。
如之前所指出的,数据结构200在高速缓存器142中被创建并且被写入写数据队列166。处理器135可以操作或者存储这一信息并经由读数据队列168将这种操作的结果或者从存储器读取的数据返回至CPU 105。下面指出可能的操作和它们相关联的操作码的非穷尽的列表。
图3是示出根据一个实施例的图1中的存储器模块110如何管理来自CPU 105的对于访问主存储器和来自***处理器135的支持的OS请求的流程图300。可以使用指向主存储器地址的访问命令来初始化和引导主存储器请求和***处理器请求两者。
在305处,***接口140中的解码器162经由命令/地址总线CA捕获来自存储器控制器144的激活命令ACT。解码器162参考寄存器164以确定命令指向的主存储器地址是否与存储的OPBA行相匹配(判定310)。如果不匹配,则该命令是传统的主存储器命令。解码器162将该命令经由选择逻辑160导向主存储器120,以激活(打开)设备125中的被寻址的行(315)。模块110随后接收指向打开的行内的列的一个或多个访问命令。在该实施例中,这种访问命令指定OPBA的库和区块,但是缺少行地址。如For循环320A/B所示,主存储器设备125解码并执行这些命令(325和330)。最后,模块110将接收预充电命令(355),并且设备125将关闭打开的行(340)来为下一次主存储器访问做准备。
返回到判定310,并且假设接收到的命令指向OPBA行,解码器162激活用于对与OPBA行相对应的区块(rank)和库(bank)地址的后续列访问的陷阱(trap)(345)。列命令通常不明确地标识命令所指向的打开行,但是大多数DRAM设备和控制器仅允许在每个区块和库中打开一行。因此,一旦OPBA行被“激活”,指向OPBA区块和库地址的任何列访问命令都可以被陷阱捕获为使用WD队列166或者RD队列168的数据传输。对指向激活的OPBA行的OPBA行和列命令的激活还可以与由解码器162执行的比较并行地被传递至存储器接口154,以避免用于比较操作的潜在增加的延迟。向存储器接口154并行转发OPBA行活动可以导致在主存储器设备125上的活动(这种活动是不重要的),然而,如果OPBA行被选择,则桥接电路156将不向主存储器120或者从主存储器120传递被寻址的数据。解码器162还控制选择逻辑158以将数据总线DQ连接至一对队列166和168,它们分别充当写缓冲器和读缓冲器。
队列166和168中的每个队列存储被划分为256个由列地址唯一标识的64B分段的一个页面(16KB),例如,对主存储器120的页面的分段进行镜像的寻址结构。写队列166有效地代替主存储器中的OPBA行地址来用于写操作,同时读队列168对于读操作进行相同的处理。在该示例中队列166和168为静态随机存取存储器(SRAM),因此从DRAM行要求激活的意义上来说它们不要求“激活”。
一旦解码器162将行激活识别为指向OPBA行并且因此指向“打开的”队列,解码器162就等待指定操作和该操作指向的列的访问命令。然后,解码器162将每个后续的访问命令解码为OPBA行地址解码(For循环350A/B中的355)。如果在该示例中写访问针对第0列、指派的OPBA,则解码器162向操作码解码器174发出控制信号“解码”,使得解码器174从写数据队列166中的第0列地址中解码操作码(365),并将经解码的操作码OpCode和任何相关联的***写数据WDp传递至***处理器135。***处理器135执行操作码OpCode以执行一些***功能(370),并且这样做可以经由桥接电路156改变主存储器的内容。
针对OPBA行的访问命令可以是针对256列中的任意列。解码器162在每一种情况下对命令信息进行解码并且对队列166和168执行所命令的功能(375)。例如,针对OPBA的行地址的任意列的读命令从读队列168中的指定的位置子集中读取,以及针对同一行的任意列的写命令写入写队列166中的对应的位置子集。最终,模块110将接收针对指派给OPBA的区块和库的预充电命令(380),并且解码器162将释放列地址陷阱(385)。此后,模块110等待下一命令。还应该注意,尽管流程图300示出了用于主存储器访问和OPBA行访问的单独的路径,但典型的存储器控制器将交错多个库和/或区块的存储器命令,因此在许多实例中,CPU105可以在指向不同区块和/或库的连续列访问命令中访问主存储器120并与***接口140进行通信。
图4描绘了根据另一实施例的存储器***400。***400包括与图1的***100共同的特征,类似标识的元件是相同或相似的。为了简化而大幅省略了共同特征的讨论。具体地,在图4所示实施例中,主存储器120被划分为两个部分120a/120b,它们分别经由存储器接口154a/154b被耦合至ASIC 405。
***400包括通过主存储器接口互连的CPU 105和存储器模块410,该主存储器接口包括命令/地址总线415和数据总线420,它们中的每一个都包括多个并行通道。命令/地址总线415传送片选、库、行和列(CS/B/R/C)地址信号,以及数据总线420传送数据信号DQ。总线415和420均被示出为包括将途中的位置切换至模块410的信号导线。交叉处示出了在一些***中做出的信号路由选择,以简化在支持CPU 105的印刷电路板(例如,母板)上的部件布局和线路布线,或者通过减小线路长度或分支长度来提高信号完整性。对于存储器操作,假如将切换应用于读和写两者,通常可以切换数据或地址的一些位的位置而不影响电路性能。一些信号线路因此可以以更加便利或有效的方式来进行布线,而不引入逻辑错误,只要存储器模块仅存储和读取。这种习惯做法有时被称为“搅和(swizzling)”。
不影响主存储器访问的搅和的数据或地址线可以仍然干扰去向***接口425的命令。例如,交换数据位可以改变嵌入到***处理器135的写数据中的操作码。因此,***接口425包括可编程去搅和电路430和相关联的搅和寄存器435,其中后者可以被连接至一些串行存在检查(SPD)逻辑440或其部分。在模块410被置于***400中之前,EEPROM445或其他存储器利用用于母板的搅和信息、用于寄存器170的密钥和其他初始化信息来编程(EEPROM还可以在模块第一次被连接时由***编程,或者搅和寄存器435可以在每次重置之后明确地由***加载)。然后,微控制器450加载寄存器435和170,作为例如校准模块和存储器接口的初始化程序的一部分。因此,去搅和电路430响应于来自寄存器435的去搅和信号DeS通过对在模块接口处并行地接收到的模块数据重新排列来抵消板上搅和。
传统的串行接口455向控制器450提供测试和控制访问。***接口425如上面结合图1所描述地来操作,因此这里省略了详细的处理。EEPROM 445中的信息包括引导代码,该引导代码可以由控制器450执行,使得当***400完成上电重置时,模块接口152和存储器接口154,以及480被校准。这些校准过程可以对于CPU 105是透明的。
去搅和电路430没有被示为影响模块接口152与桥接电路156之间的存储器流量。在备选的实施例中,所有存储器流量都被“去搅和”,使得存储在主存储器中的数据可以被***处理器以一致的存储格式直接访问。
关于接口425的右侧,***处理器135与***存储器控制器470相连,该***存储器控制器470以与存储器控制器144管理针对CPU 105的访问相同的方式管理针对处理器135的对于主存储器120的访问。
在该实施例中,***处理器135具有对于附加的***本地存储器设备475的访问,并且经由本地物理接口480和控制器485来获得和管理访问。本地控制器485可以包括对在由主存储器采用的寻址方案和专用于本地存储器的寻址方案之间的地址转换的支持。***存储器控制器470可以类似地包括对根据处理器135的需求的地址转换的支持。
例如,***存储设备475可能是高性能的但是相对于主存储器具有较小的可寻址空间以支持改善的***性能。例如,***处理器135可以执行存储在(多个)***存储器设备475中的***图形指令。不是图形处理或者除图形处理之外,***功能可以包括网络支持、数据压缩/解压缩、加密/解密、科学计算等。不同的存储器模块能够支持相同或者不同类型的***处理,或者仅模块的子集可以包括这种支持。用于***功能的操作对象可以被提供为***写数据WDp或者从***写数据WDp中检索到。
图5描绘了根据实施例的支持***命令广播和可配置的数据宽度的存储器模块500。存储器模块500与图1的模块110类似,类似标识的元件是相同或相似的。模块500与模块110的不同之处在于,模块500的***接口505的实施例包括***选择位(PSB)解码器510,该***选择位(PSB)解码器510允许***接口505确定广播***命令是否被指向常驻处理器135。模块500的这一方面在本文参照的相关应用已经被详细说明。模块500与模块110的不同之处还在于,模块500的桥515是基于来自串行存在检查(SPD)存储器520的控制输入可配置为经由数据线DQ[63:0]的全部或者子集来传输宽度为8、16、32或64的数据。支持多种数据宽度的模块,例如可以用于实现动态点对点(DPP)存储器架构。简而言之,DPP架构将点对点信令的性能优势与多点拓扑的灵活性组合到一起。模块500以前面详细说明的方式将对DPP的支持与完成***处理的能力组合到一起。使用公知的技术,在启动时初始化SPD存储器520以选择期望的宽度。
在这样的上下文中,命令广播指代相同命令到多个***处理器的同时传送,该多个***处理器被实例化在相同或不同模块上。有时期望将工作分割成多个类似的任务并且在单独的***处理器上执行每一个。例如,在视频处理中,已知为分割帧渲染的技术在多个图形处理器中分配将对单个视频帧执行的渲染处理。处理器在帧的不同子集上并行地工作以加快渲染过程。这种并行处理可以在图形之外的许多领域中具有优势。具有模块500的多个实例的存储器***可以向支持并行处理的多个模块广播相同的命令。在一些实施例中,命令可以指定一个或多个目标处理器,并由此可以被传送至多个***处理器中的一个***处理器或任意组合。
图6示出了数据结构600,***驱动器(例如,图1的驱动器146)在高速缓存器中汇集和存储该数据结构600以将指令和数据传送至32个模块500的OPBA命令端口,其中在四个存储器通道的每个存储器通道上有8个模块。在该示例中,模块是双列直插式模块(DIMM),但是还可以使用其他模块类型。一些实施例附加地支持PSB位字段来以结合图5所详细描述的方式支持广播命令。
图7是混合闪存/DRAM存储器模块的示图。在图7中,计算机***700包括CPU/存储器控制器子***710、I/O控制器730和存储器模块720。CPU/存储器控制器子***710包括耦合至存储器控制器714的CPU 712。一个或多个存储器模块720耦合至子***710中的存储器控制器714。每个存储器模块720都包括集成电路(IC)设备721、CPU存储器723(又称主存储器)和非易失性存储器728。IC 721包括非易失性存储器控制器725和处理器722。处理器722可以是缓冲设备的一部分。处理器722可以是微处理器、有限状态机或作为缓冲设备的一部分的其他逻辑电路,或者包括微处理器、有限状态机或作为缓冲设备的一部分的其他逻辑电路。存储器723通常包含CPU 712和/或IC 721使用的指令和/或数据。应该理解,CPU 712可以包括多个处理器核。CPU 712可以包括堆叠的裸片设备,其具有例如使用硅穿孔堆叠的一个或多个处理器和/或存储器。CPU 712可以包括和/或作为专用处理器,诸如举例而言,数字信号处理器、图形处理单元(GPU)、阵列处理器、存储管理处理器、数据分析处理器(例如,Hadoop分布式文件***处理器或MapReduce处理器)、模式识别处理器和/或图像处理处理器(即,图像处理器)。CPU 712可以在模块720之间划分和协调计算过程和任务。
IC 721还可以被称为“运算引擎”、“计算引擎”、“图形处理器”、“渲染引擎”、“处理单元”、“加速器”、“卸载引擎”和/或GPU。IC 721可以包括和/或作为异构处理单元,该异构处理单元包括CPU、GPU、视频处理器等中的一个或多个的功能。IC 721可以包括或者作为串行-ATA(SATA)、串行连接的SCSI(SAS)、eSATA、PATA、IEEE 1394、USB(所有修订版本)、SCSI超级(SCSI Ultra)、光纤通道(FiberChannel)、无限带宽(Infiniband)、雷电(Thunderbolt)或其他工业标准I/O接口(诸如PCI快速——PCIe)。IC 721可以包括或者作为网络处理器单元(NPU),诸如TCP卸载引擎(TOE)、协议转换器(例如,通过SATA的TCP、通过PCIe的TCP、加速SCSI互连等)和/或协议包转换器。IC 721可以包括或者作为固定功能图形处理单元、加密/解密加速器/卸载引擎(例如,用于实现/加速SSL、AEC、DEC等)、压缩器/解压器、正则表达式加速器引擎、数字信号处理器(DSP)、信号路径处理器、傅里叶变换处理器、反傅里叶变换处理器和/或媒体格式编码器/解码器(例如,JPEG、DVX、AVI、MP2、MP3、MP4、蓝光、HD-DVD、DVD等)。还应该理解,模块720可以被耦合至本地SSD/HDD和/或企业存储类型***,诸如外部盘、外部盘阵列、JBOD、RAID阵列、磁带驱动、光学驱动等。
存储器723通常包括耦合到一起以形成存储空间块的多个存储设备。存储器723可以是或者包括但不限于,SRAM、DDR3、DDR4、DDR5、XDR、XDR2、GDDR3、GDDR4、GDDR5、LPDDR和/或LPDDR2以及后继存储器标准和技术。存储器723可以是或者包括设备的堆叠,诸如硅穿孔(TSV)堆叠和/或混合存储立方体(HMC)。可从Hybrid Memory Cube Consortium(http://hybridmemorycube.org/)得到关于HMC的进一步的信息。
每个IC 721都能够执行各种存储器访问和/或数据处理功能。对于图7所示实施例来说,存储器控制器714还被耦合至I/O控制器730,该I/O控制器730控制数据进出***的流动。可选的视频输入端口(图7中未示出)可以向存储器控制器714提供数据。显示接口(图7中未示出)可以向一个或多个设备(诸如显示设备或存储设备)提供数据输出。对于支持视频输入或捕获能力的***来说,存储器控制器714上的视频输入端口是处理视频源数据的传送的一种方式。另一种向***传送视频输入数据的方式将包括通过I/O控制器730将向存储器控制器714传送来自***模块的数据。
在图7的示例中,CPU/存储器控制器子***710被耦合至多个不同的存储器模块720。每个存储器模块720都包括IC 721和非易失性存储器728。IC 721可以是或者包括微处理器、有限状态机或作为缓冲设备的一部分的其他逻辑电路。每个IC 721都能够执行各种数据处理功能。因此,不同(或相同)存储器模块上的IC 721能够同时执行不同的处理功能(即,并行处理)。不同(或相同)存储器模块上的IC 721能够执行各种矢量并行处理,其中在(多个)IC 721之间将功能矢量化并且划分功能。不同(或相同)存储器模块上的IC 721能够执行簇并行处理,其中(多个)IC 721协作以同时(或并行)作用于相同问题。此外,每个IC721能够与其他存储器模块720上的其他IC 721通信。
每个IC 721能够在CPU 712和/或存储器控制器714的帮助下与其他存储器模块720上的其他IC 721通信。模块720和/或IC 721可以是异构的。换句话说,模块720和/或IC721可以不是全部完全相同的。IC 721可以包括不是全部完全相同的多个处理器核。例如,IC 721可以包括CPU类型处理核和GPU类型处理核的混合。模块720和/或IC 721可以在相同时刻执行不同的功能。模块720和/或IC 721可以由不同的供应商来生产。可以添加、减少以及以即插即用方式互换地使用由不同供应商生产的模块720和/或IC 721。模块720和/或IC721可以类似于虚拟机的操作与运行软件、过程、应用和操作***的独立(和非独立)附件并行地作用。
CPU 712可以控制存储器控制器714以将特定的处理任务(诸如图形处理任务、Hadoop和/或MapReduce任务)分配给IC 721,并且自身可以执行某些处理任务。这些任务可以包括将要处理的数据和/或将要执行的指令。这些任务可以包括执行应用、驱动、软件层、运行时功能和/或操作***代码中的全部或者部分。尽管在图7中示出三个存储器模块720,但备选的***可以包含耦合至一个或多个存储器控制器714的任何数量的存储器模块。添加和移除存储器模块720的能力可以提供可升级和可扩展的存储器和计算架构。此外,应该理解,***700中的模块可以是异构的的。换句话说,***700中的存储器模块720的集合的一部分可以是混合闪存/DRAM类型模块,而其他部分可以是其他类型的模块(例如,完全地DRAM、完全地存储器和/或完全地非易失性存储器)。***700可以支持混合类型的模块。还应该理解,混合闪存/DRAM类型模块720是示出可以存在经由存储器通道访问的非易失性、大容量(即,比DRAM模块大)存储的示例。特定的模块720例如可以是全快闪模块,或者甚至可以在模块上包括或不包括DRAM的较新的存储类存储器。
CPU 712可以通过从与模块720相关联的地址开口读取和写入与模块720相关联的地址开口来与IC 721通信。CPU 712可以被配置为使用由任何处理器CPU 712支持的任何高速缓存策略以从该地址开口(或其部分)读取和写入该地址开口(或其部分)。然而,应该理解,在一个实施例中,最有用的高速缓存策略可以被限制于将被CPU 712处理的地址开口(或其部分)配置为不可缓存的存储器(UC)、合并写存储器或写回(WB)。在一个实施例中,这些高速缓存策略可以与某些指令(例如,屏障指令、流负载指令和/或流写入指令)的使用组合以实现CPU 721和IC 721之间最优的(例如,最高的)通信带宽。此外,当地址开口(或其部分)被配置为作为WC或WB进行处理,则至少最小突发尺寸可用于实现CPU 721和IC 721之间最优的(例如,最高的)通信带宽。换句话说,小突发尺寸(例如,小于某个、依赖实现的、每突发的列地址的数量)可以导致比CPU 721和IC 721之间的最优通信带宽小。较大的尺寸(例如,大于某个、依赖实现的、每突发的列地址的数量)可以接近(或近似)CPU 721和IC 721之间的最优(即,最高)通信带宽。应该理解,计算机***700可以利用统一的存储器架构或不统一的存储器架构。计算机***700不限于异构存储器。此外,还应该理解,计算机***700(尤其和CPU 712)可以利用相干或不相干的高速缓存或缓存策略。
还有用的是将地址开口(或其部分)配置为UC,用于测试、易于实现和/或当CPU712和IC 721之间的带宽不是相对高的优先级时。为了测试目的将地址开口(或其部分)配置为WB可能是最有用的。在一些实施例中,将地址开口(或其部分)配置为WC可以导致CPU712和IC 721之间的最大带宽。
在一个实施例中,CPU 712通过从与模块720相关联的地址开口读取和写入与模块720相关联的地址开口来与IC 721通信。该地址开口可以被进一步划分为地址范围(也称端口),该地址范围被配置用于命令、状态和数据的通信。可以配置地址开口的端口并且将其尺寸定为地址(例如,列地址)的块。
在一个实施例中,计算机700上运行的操作***可以产生指向块I/O和/或存储类型设备的I/O命令。这些块I/O和/或存储类型设备中的一个或多个可以对应于或具有驻留在存储器模块720上的存储数据。响应于用于存储在存储器模块720上的数据的块I/O和/或存储命令,CPU 712可通过从与模块720相关联的地址开口读取和/或写入与模块720相关联的地址开口来将存储器接口命令导向存储器模块720。
为了产生指向块I/O或存储类型设备的I/O命令,计算机700上运行的操作***内核可以将块设备命令导向通用块层。响应于这些块设备命令,操作***可以将被导向通用块层的块设备命令转换成向存储器模块720发送的存储器接口命令。
处理器722可以执行块存储I/O驱动器的全部或部分,该块存储I/O驱动器服务用于在非易失性存储器728中存储的数据的块I/O存储类型设备命令。非易失性存储器控制器725可以是或者包括固态盘控制器,该固态盘控制器向处理器722提供块I/O存储接口。该块I/O存储接口可用于去向和来自非易失性存储器728的数据的通信。例如,该块I/O存储接口可以使用SCSI或ATA命令。
在一个实施例中,模块720可以被配置为使用非易失性存储器728服务于对于块I/O存储类型设备命令的RPC请求。这些RPC请求可经由DRAM存储器通道被模块720接收,该DRAM存储器通道操作性地将存储器控制器714耦合至模块720。由模块720服务的RPC请求可以源自不直接与模块720连接的处理器(图7中未示出)(例如,网络上的远程处理器)。
可以在模块720上执行经由DRAM存储器通道被模块720接收的过程调用和过程数据(例如,通过处理器722和/或非易失性存储器控制器725)。这些过程调用和过程数据可以经由定址到模块720的存储器空间(例如,开口)的存储器写事务被传输至模块720。这些过程调用可以包括RPC请求。由模块720执行的过程调用和过程数据可以实现一个或多个虚拟文件***过程调用。可以使用NFS请求来访问非易失性存储器728,该NFS请求可以经由定址到模块720的存储器空间的存储器写事务被传输至模块720。可以使用HDFS请求来访问非易失性存储器728,该HDFS请求可以经由定址到模块720的存储器空间的存储器写事务被传输至模块720。
可以在模块720上执行经由DRAM存储器通道被模块720接收的过程调用。这些过程调用可包括使用非易失性存储器728服务的块I/O存储类型设备命令。这些过程调用可以包括映射调用,该映射调用指定将由模块对对应的输入数据块执行的专用映射操作。映射操作还可以产生将使用非易失性存储器728来存储的中间数据值。
图8是示出混合闪存/DRAM计算子***的框图。在图8中,子***801包括子***800、本地存储器824和非易失性存储器828。子***800包括处理器812、逻辑816、存储器控制器817、CA输入接口896、多路复用器(MUX)逻辑819、CA0接口886、CA1接口887、HS串行DQ接口878和非易失性存储器控制器827。子***800还包括存储器/高速缓存器控制器818。存储器/高速缓存器控制器818***作性地耦合至本地存储器824。本地存储器824可以包括高速缓存存储器分区和处理器存储器分区。本地存储器824可以通过一个或多个存储器通道***作性地耦合至子***800。应该理解,子***801可以被包括在存储器模块720上。因此,能够看出,子***800可在存储器模块720中用作IC 721,并且子***801可以被配置在存储器模块720上。
在一个实施例中,具有子***801的存储器模块(例如,存储器模块120)可以具有被配置为与存储器控制器连接的存储器接口。子***800可以是耦合至存储器接口的集成电路设备。子***800包括处理器812、CA1接口887、非易失性存储器控制器827和到非易失性存储器828的接口。CA1接口887被配置为连接至第一类型的动态存储器集成电路设备。非易失性存储器控制器827被耦合至处理器812。到非易失性存储器828的接口被配置为将非易失性存储器控制器827耦合至至少一个非易失性存储器集成电路设备。多个第一类型的动态存储器集成电路设备被耦合至CA1接口887。至少一个非易失性存储器集成电路设备经由到非易失性存储器828的接口被耦合至子***800。
子***801还可以包括本地存储器824。该本地存储器824可以包括至少一个第二类型的动态存储器集成电路设备。本地存储器824可以经由接口连接至子***800。该接口可以经由存储器/高速缓存器控制器818将本地存储器824耦合至处理器812。本地存储器824可用于缓存在被耦合至CA1接口887的动态存储器集成电路设备中存储的数据。子***801可以包括被耦合至处理器812和非易失性存储器827的SSD控制器。子***801可以包括被耦合至处理器812和非易失性存储器控制器827的SATA控制器。非易失性存储器828可以存储处理器812可以引导和执行的操作***。该操作***可以是与例如CPU 812引导和运行的操作***不同的操作***。存储器模块可以经由存储器接口接收指令,该指令使得处理器812对数据执行操作。子***800可以经由存储器接口返回这些操作的结果。
在一个实施例中,具有子***801的存储器模块(例如,存储器模块120)可以具有存储器接口以连接至存储器通道。该存储器模块可以包括多个动态存储器集成电路。该存储器模块可以具有非易失性存储器828,该非易失性存储器828包括至少一个非易失性存储器集成电路设备。存储器模块可以包括子***800。子***800包括处理器812、CA1接口887、NV控制器827、CA输入接口896和高速(HS)串行DQ接口878。CA1接口887被耦合至多个动态存储器集成电路。NV控制器827经由接口被耦合至非易失性存储器828。
在一个实施例中,子***800从被耦合至CA输入接口896的存储器控制器接收存储器命令。响应于该存储器命令,子***800在耦合至CA1接口887的多个动态存储器集成电路和/或耦合至CA0接口886的多个动态存储器集成电路中存储数据。响应于来自于处理器812的命令,子***800在非易失性存储器828中存储数据。
图9是混合闪存/DRAM存储器模块的示图。在图9中,计算机***900包括CPU/存储器控制器子***910、I/O控制器930和存储器模块920。CPU/存储器控制器子***910包括耦合至存储器控制器914的CPU 912。一个或多个存储器模块920被耦合至子***910中的存储器控制器914。每个存储器模块920包括集成电路设备921和CPU存储器923。集成电路设备921包括非易失性存储器928和处理器922。CPU存储器923通常包含由CPU 912使用的指令和/或数据。CPU存储器923可以是动态存储器集成电路。集成电路设备921可以包括其他功能。因此,应该理解,集成电路设备921可以对应于存储器模块720上的IC 721和/或非易失性存储器728或子***800,并且模块920可以是存储器模块720的实施例。
由于非易失性存储器928被包括在集成电路设备921中,所以可以由处理器922直接访问非易失性存储器928。集成电路设备921可以包括SATA接口。处理器922和/或集成电路设备921与集成电路设备921上的SSD可以经由SATA接口通信。模块920可以包括用于与模块920外部的SSD/HDD通信的SATA连接器。
图10是示出混合闪存/DRAM计算子***的框图。图10是示出混合闪存/DRAM存储器模块计算子***的框图。在图10中,子***1001包括子***1000和本地存储器1024。子***1000包括处理器1012、逻辑1016、存储器控制器1017、CA输入接口1096、多路复用器(MUX)逻辑1019、CA0接口1086、CA1接口1087、高速(HS)串行DQ接口1087和非易失性存储器1028。子***1000还包括存储器/高速缓存器控制器1018。存储器/高速缓存器控制器1018***作性地耦合至本地存储器1024。本地存储器1024可以通过一个或多个存储器通道***作性地耦合至子***1000。应该理解,子***1001可以被包括在存储器模块920上。因此,能够看出,子***1000可以用作存储器模块720中的IC 721或者用作存储器模块920中的IC 921,并且子***1001可以被配置在存储器模块720和/或920上。
在一个实施例中,具有子***1001的存储器模块(例如,存储器模块120和/或320)可以具有被配置为与存储器控制器连接的存储器接口。子***1000可以是耦合至存储器接口的集成电路设备。子***1000包括处理器1012、CA1接口1087和非易失性存储器1028。CA1接口1087被配置为连接至第一类型的动态存储器集成电路设备。非易失性存储器1028被耦合至处理器1012。多个第一类型的动态存储器集成电路设备被耦合至CA1接口1087。
子***1001还可以包括本地存储器1024。该本地存储器1024可以包括至少一个第二类型的动态存储器集成电路设备。本地存储器1024可以经由接口连接至子***1000。该接口可以经由存储器/高速缓存器控制器1018将本地存储器1024耦合至处理器1012。本地存储器1024可以用于缓存存储在耦合至CA1接口1087的动态存储器集成电路设备中的数据。非易失性存储器1028可以存储处理器1012可以引导和执行的操作***。存储器模块可以经由存储器接口接收指令,该指令使得处理器1012对数据执行操作。子***1000可以经由存储器接口返回这些操作的结果。
在一个实施例中,具有子***1001的存储器模块(例如,存储器模块120和/或320)可以具有连接至存储器通道的存储器接口。该存储器模块可以包括多个动态存储器集成电路。该存储器模块可以包括子***1000。子***1000包括处理器1012、CA1接口1087、CA输入接口1096、高速(HS)串行DQ接口1078和非易失性存储器1028。CA1接口1087被耦合至多个动态存储器集成电路。
在一个实施例中,子***1000从耦合至CA输入接口1096的存储器控制器接收存储器命令。响应于该存储器命令,子***1000在耦合至CA1接口1087的多个动态存储器集成电路和/或耦合至CA0接口1086的多个动态存储器集成电路中存储数据。响应于来自处理器1012的命令,子***1000在非易失性存储器1028中存储数据。
图11是混合盘类型非易失性存储和DRAM存储器模块的示图。图11是混合盘类型非易失性存储和DRAM存储器模块的示图。在图11中,计算机***1100包括CPU/存储器控制器子***1110、I/O控制器1130和存储器模块1120。CPU/存储器控制器子***1110包括耦合至存储器控制器1114的CPU 1112。一个或多个存储器模块1120被耦合至子***1110中的存储器控制器1114。每个存储器模块1120都包括集成电路设备1121、CPU存储器1123和盘型存储1128。集成电路设备1121包括盘接口1125和处理器1122。CPU存储器1123通常包含由CPU1112使用的指令和/或数据。盘型存储1128通常包含由CPU 1112和/或处理器1122使用的指令和/或数据。CPU存储器1123可以是动态存储器集成电路。集成电路设备1121可以包括其他功能。因此,应该理解,集成电路设备1121可以对应于存储器模块720中的IC 721、存储器模块920中的IC 921或子***800和/或900,并且模块1120可以是存储器模块720和/或920的实施例。
在图11中示出的模块1120包括盘型存储1128。盘型存储例如可以是或者包括但不限于,固态盘驱动、被控制并组织为盘型大容量存储设备(例如,USB存储棒)的闪存或者小形状因子的磁盘驱动(例如,1.8”或着更小的硬盘驱动)。
盘接口1125管理/控制盘型存储1128。因此,模块1120可以具有DRAM和盘型存储器1128的组合。盘接口1125可以包括(或者可以是)SSD控制器(具有或不具有附加的处理器)。模块1120上的盘接口1125可以经由存储器通道被CPU 1112访问,该存储器通道通常具有比I/O总线更高的带宽。
盘型存储1128可以被处理器1122直接访问。换句话说,盘型存储1128可以被处理器1122访问而不通过存储器控制器1114或依赖于CPU 1112来传递数据/地址。盘接口1125可以是或者包括SATA接口。处理器1122和/或集成电路设备1121和盘型存储1128可以经由SATA接口通信。模块1120可以包括用于与模块1120外部的SSD/HDD通信的SATA连接器。
图12是示出混合盘类型非易失性存储器和DRAM存储器模块计算子***的框图。在图12中,子***1201可以包括子***1200、可选的本地存储器1224和盘型存储1228。子***1200包括逻辑1216、存储器控制器1217、CA输入接口1296、多路复用器(MUX)逻辑1219、CA0接口1286、CA1接口1287、HS串行DQ接口1278和盘接口1227。子***1200可以可选地包括处理器1212和存储器/高速缓存器控制器1218。如果被包括,则存储器/高速缓存器控制器1218***作性地耦合至本地存储器1224(如果被包括)。本地存储器1224可以通过一个或多个存储器通道***作性地耦合至子***1200。可以通过一个或多个存储器通道访问本地存储器1224。应该理解,子***1201可以被包括在存储器模块1120上。因此,能够看出,子***1200可以被用作存储器模块720中的IC 721、存储器模块921中的IC 921和/或存储器模块1120中的IC 1121,并且子***1201可以被配置在存储器模块720、920和/或1120上。
在一个实施例中,具有子***1201的存储器模块(例如,存储器模块720、920和/或1120)可以具有被配置为与存储器控制器连接的存储器接口。子***1200可以是耦合至存储器接口的集成电路设备。子***1200包括CA1接口1287和盘接口1227。CA1接口1287被配置为连接至第一类型的动态存储器集成电路设备。盘接口1227可以被耦合至处理器1212(如果存在)。多个第一类型的动态存储器集成电路设备被耦合至CA1接口1287。至少一个盘型存储设备1228经由盘接口1227被耦合至子***1201。
子***1201还可以包括本地存储器1224。该本地存储器1224可以包括至少一个第二类型的动态存储器集成电路设备。本地存储器1224可以经由接口连接至子***1200。该接口可以经由存储器/高速缓存器控制器1218(如果存在)将本地存储器1224(如果存在)耦合至处理器1212(如果存在)。本地存储器1224可以用于缓存存储在被耦合至CA1接口1287的动态存储器集成电路设备中的数据。盘型存储1228可以存储处理器1212(如果存在)可以引导和执行的操作***。存储器模块可以经由存储器接口接收指令,该指令使得处理器1212(如果存在)对数据执行操作。子***1200可以经由存储器接口返回这些操作的结果。
在一个实施例中,具有子***1201的存储器模块(例如,存储器模块720、920和/或1120)可以具有存储器接口以连接至存储器通道。该存储器模块可以包括多个动态存储器集成电路。存储器模块可以具有盘型存储1228。存储器模块可以包括子***1200。子***1200包括CA1接口1287、盘接口1227、CA输入接口1296和高速(HS)串行DQ接口1278。CA1接口1287被耦合至多个动态存储器集成电路。盘接口1227经由接口被耦合至盘型存储1228。
在一个实施例中,子***1200从耦合至CA输入接口1296的存储器控制器接收存储器命令。响应于该存储器命令,子***1200在耦合至CA1接口1287的多个动态存储器集成电路和/或耦合至CA0接口1286的多个动态存储器集成电路中存储数据。响应于处理器1212的命令,子***1200可以在盘型存储1228中存储数据。
图13是用于访问存储在DRAM存储器通道上的非易失性存储器中的文件数据的***的示图。在图13中,***1300被示为包括软件层和硬件层。具体地,***1300包括虚拟文件***(VFS)1302、高速缓存器1304、映射层1310、通用块层1330、I/O调度层1340、块设备驱动器1351、块设备驱动器1352、模块块设备驱动器1360、块存储设备1370和模块1320。映射层1310包括文件***1311、文件***1312和块设备文件1313。模块1320包括非易失性存储器1328。适合用作模块1320的模块包括模块720、模块920和/或模块1120。
虚拟文件***1302***作性地耦合至高速缓存器1304和映射层1310。高速缓存器1304***作性地耦合至映射层1310。映射层1310***作性地耦合至通用块层1330。通用块层1330***作性地耦合至I/O调度层1340。I/O调度层***作性地耦合至块设备驱动器1351、块设备驱动器1352和模块块设备驱动器1360。块设备驱动器1351***作性地耦合至块存储设备1370。模块块设备驱动器***作性地耦合至模块1320,并且因此还***作性地耦合至非易失性存储器1328以从非易失性存储器1328中读取数据/向非易失性存储器1328写入数据。
在一个实施例中,应用或操作***可以访问存储在非易失性存储器1328中的数据,如同数据被存储在盘驱动上的文件中。读(或写)服务程序调用激活VFS 1302功能,该VFS 1302功能被传递了文件描述符和到文件内位置的偏移。VFS 1302功能确定所请求的数据是否已经可用——例如在高速缓存器1304中。如果数据已经可用,则VFS 1302可以完成读(或写)操作。如果数据还不可用,则VFS 1302功能确定如何执行操作(例如,从块设备中读数据/向块设备写数据)。
映射层1310确定文件***(例如,文件***1311、文件***1312)的块大小,并根据文件块号计算目标数据的范围。映射层1310调用访问文件的盘索引节点的文件***专用函数,并且根据逻辑块号确定所请求数据的位置。该位置可以被传递至通用块层1330。
如果该操作是针对原始块设备文件,则映射层1310不调用文件***专用方法。相反,映射层1310可以将块设备文件中的偏移转换为存储或存储分区中的对应的位置。该位置可以被传递至通用块层1330。
内核使用通用块层1330来在块设备上发出操作。通用块层1330抽取内核的作为块设备(即,块存储设备1370和模块1320)访问的存储的视图。通用块层1330向I/O调度层1340通知未决的I/O数据事务。I/O调度层1340根据内核策略分类并向适当的块设备驱动器1351-1352和/或模块块设备驱动器1360发出未决的I/O数据事务。
块设备驱动器1351-1352向块存储设备(例如,块存储设备1370)发送适当的块I/O存储类型命令。模块块设备驱动器1360可以将从I/O调度层1340接收的块设备命令转换为向存储器模块1320发送的存储器接口命令。
模块1320上的处理器可以执行模块块设备驱动器1360的所有或部分来服务用于在非易失性存储器1328中存储的数据的服务I/O存储类型设备命令。块I/O存储类型设备命令可以包括例如SCSI或ATA命令。
图14是用于访问存储在DRAM存储器通道上的非易失性存储器中的文件数据的分布式***的示图。在图14中,分布式文件***1400包括客户端计算机1410、服务器计算机1430和网络1450。客户端计算机1410包括***调用层1411、虚拟文件***层1412、本地文件***1413、网络文件***客户端1414、块存储设备1416、远程过程调用客户端存根1415。服务器计算机1430包括***调用层1431、虚拟文件***层1432、本地文件***1433、网络文件***服务器1434、远程过程调用服务器存根1435和模块1420。模块1420包括处理器1422和非易失性存储器1428。应该理解,模块1420可以是、包括、对应于一个或多个模块720、920或1120或者作为其实施例,或者包括本文所描述的那些模块(例如,IC 721、IC 921、IC 1121、子***800、子***1000和/或子***1200)中的一个或多个元件。
客户端计算机1410的***调用层1411***作性地耦合至客户端计算机1410的VFS层1412。VFS层1412***作性地耦合至客户端计算机1410的本地文件***1413和NFS客户端1414。本地文件***1413***作性地耦合至客户端计算机1410的块存储设备1416。NFS客户端1414***作性地耦合至RPC客户端存根1415。RPC客户端存根1415经由网络1450***作性地耦合至服务器计算机1430的RPC服务器存根1435。
服务器计算机1430的***调用层1431***作性地耦合至服务器计算机1430的VFS层1412。服务器计算机1430的RPC服务器存根1435***作性地耦合至NFS服务器1434。NFS服务器1434***作性地耦合至VFS层1432。VFS层1432***作性地耦合至服务器计算机1430的本地文件***1433。服务器计算机1430的本地文件***1433***作性地耦合至模块1420。因此,应该理解,模块1420的处理器1422和/或非易失性存储器1428能够经由本地文件***1433、VFS层1432、NFS服务器1434、RPC服务器存根1435和网络1450被耦合至客户端计算机1410的元件。具体地,模块1420的处理器1422和/或非易失性存储器1428可以经由网络1450***作性地耦合至客户端计算机1410的VFS层1412和***调用层1411。因此,对读和/或写由***调用层接收的数据的请求可以由服务器计算机1430的模块1420上的非易失性存储器1428来服务。
图15是用于使用块I/O存储类型设备命令在DRAM存储器通道上远程地访问存储在非易失性存储器中的文件数据的***的示图。在图15中,分布式文件***1500被示为包括服务器计算机1530和网络1550。在图15中没有示出的是客户端计算机,该客户端计算机将经由网络1550操作性地耦合至服务器计算机1530。
服务器计算机1530包括***调用层1531、虚拟文件***层1532、本地文件***1533、网络文件***服务器1534、远程过程调用服务器存根1535、块设备驱动器1560和模块1520。模块1520包括处理器1522和非易失性存储器1528。应该理解,模块1520可以是、包括、对应于一个或多个模块720、920或1120或者作为其实施例,或者包括本文描述的那些模块(例如,IC 721、IC 921、IC 1121、子***800、子***1000和/或子***1200)中的一个或多个元件。
服务器计算机1530的***调用层1531***作性地耦合至VFS层1532。服务器计算机1530的RPC服务器存根1535***作性地耦合至NFS服务器1534。NFS服务器1534***作性地耦合至VFS层1532。VFS层1532***作性地耦合至本地文件***1533。本地文件***1533***作性地耦合至块设备驱动器1560。块设备驱动器1560***作性地耦合至模块1520。因此,应该理解,模块1520的处理器1522和/或非易失性存储器1528能够经由块设备驱动器1560、本地文件***1533、VFS层1532、NFS服务器1534、RPC服务器存根1535和网络1550***作性地耦合至客户端计算机的元件。
在一个实施例中,本地文件***1533通过从与模块1520相关联的地址开口读取和写入与模块1520相关联的地址开口来与处理器1522和/或非易失性存储器1528通信。该地址开口可以进一步被划分为地址范围(也称端口),它们被配置用于命令、状态和数据的通信。可以配置地址开口的端口并且将其尺寸定为地址(例如,列地址)的块。
在一个实施例中,本地文件***1533可以产生指向块设备驱动器1560的I/O命令。响应于用于存储在存储器模块1520的非易失性存储器1528中的数据的I/O命令,块设备驱动器1560可以通过从与模块1520相关联的地址开口读取和/或写入与模块1520相关联的地址开口来将存储器接口命令导向存储器模块1520。块设备驱动器1560可以将块设备驱动器1560接收的I/O命令转换为向存储器模块1520发送的存储器接口命令。
图16是用于服务对于存储在DRAM存储器通道上的非易失性存储器中的数据的远程请求的***的示图。在图16中,分布式文件***1600被示出为包括服务器计算机1630和网络1650。在图16中没有示出的是客户端计算机,该客户端计算机可以经由网络1650操作性地耦合至服务器计算机1630。
服务器计算机1630包括***调用层1631、虚拟文件***层1632、本地文件***1633、网络文件***服务器1634、远程过程调用服务器存根1635和模块1620。模块1620包括块设备驱动器1660、处理器1622和非易失性存储器1628。因此,应该明确,除了块设备驱动器的位置,服务器计算机1630与服务器计算机1530类似。在服务器计算机1630中,块设备驱动器1660的全部或部分驻留在模块1620上或在模块1620上执行。因此,模块1620可以使用较高级的抽象经由DRAM存储器通道与本地文件***1633交互。此外,服务请求所需要的一些处理由模块1602来处理,因此释放服务器计算机1630上的资源。还应该理解,模块1620可以是、包括、对应于一个或多个模块720、920或1120或者作为其实施例,或者包括本文所述这些模块(例如,IC 721、IC 921、IC 1121、子***800、子***1000和/或子***1200)的一个或多个元件。
服务器计算机1630的***调用层1631***作性地耦合至VFS层1632。服务器计算机1630的RPC服务器存根1635***作性地耦合至NFS服务器1634。NFS服务器1634***作性地耦合至VFS层1632。VFS层1632***作性地耦合至本地文件***1633。本地文件***1633***作性地耦合至模块1620,因此也***作性地耦合至块设备驱动器1660。因此,应该理解,模块1620的处理器1622和/或非易失性存储器1628能够经由块设备驱动器1660、本地文件***1633、VFS层1632、NFS服务器1634、RPC服务器根村1635和网络1650***作性地耦合至客户端计算机的元件。
在一个实施例中,具体地,本地文件***1633通过从与模块1620和/或块设备驱动器1660相关联的地址开口读取和写入与模块1620和/或块设备驱动器1660相关联的地址开口来与模块1620的块设备驱动器1660通信。该地址开口可以进一步被划分为被配置用于命令、状态和数据的通信的地址范围(也称端口)。可以配置地址开口的端口并且将其尺寸定为地址(例如,列地址)的块。
在一个实施例中,本地文件***1633产生指向块设备驱动器1660的I/O命令。具体地,响应于用于在存储器模块1620的非易失性存储器1628中存储的数据的I/O命令,存储器接口命令通过从与模块1620和/或块设备驱动器1660相关联的地址开口读取和/或写入与模块1620和/或块设备驱动器1660相关联的地址开口被导向存储器模块1620。块设备驱动器1660可以将块设备驱动器1660接收的I/O命令转换为向处理器1622和/或非易失性存储器1628发送的命令。
图17是用于服务向DRAM存储器通道上的固态盘的远程请求的***的示图。在图17中,所示分布式文件***1700包括服务器计算机1730和网络1750。图17中没有示出的是客户端计算机,该客户端计算机将经由网络1750操作性地耦合至服务器计算机1730。
服务器计算机1730包括***调用层1731、虚拟文件***层1732、本地文件***1733、网络文件***服务器1734、远程过程调用服务器存根1735和模块1720。模块1720包括处理器1722、固态盘(SSD)控制器1725和非易失性存储器1728。因此,应该明确,服务器计算机1730与服务器计算机1430和服务器计算机530类似,除了模块1720明确包括SSD控制器1725。SSD控制器1725向处理器1722提供块I/O存储接口。该块I/O存储接口可以用于去向/来自非易失性存储器1728的数据的通信。该块I/O存储接口可以使用例如SCSI或ATA命令。处理器1722可以接收来自本地文件***1733的命令并使用SSD控制器1725和非易失性存储器1728来完成这些命令。如本文所描述的,还应该理解,模块1720可以是、包括、对应于一个或多个模块720、920或1120或作为其实施例,或者包括本文所述这些模块(例如,IC 721、IC921、IC 1121、子***800、子***1000和/或子***1200)的一个或多个元件。
服务器计算机1730的***调用层1731***作性地耦合至VFS层1732。服务器计算机1730的RPC服务器存根1735***作性地耦合至NFS服务器1734。NFS服务器1734***作性地耦合至VFS层1732。VFS层1732***作性地耦合至本地文件***1733。本地文件***1733***作性地耦合至模块1720,因此也***作性地耦合至处理器1722、SSD控制器1725和/或非易失性存储器1728。因此,应该理解,模块1720的处理器1722、SSD控制器1725和/或非易失性存储器1728能够经由处理器1722、本文文件***1733、VFS层1732、NFS服务器1734、RPC服务器存根1735和网络1750***作性地耦合至客户端计算机的元件。
在一个实施例中,具体地,本地文件***1733通过从与模块1720和/或SSD的控制器1725相关联的地址开口读取和写入与模块1720和/或SSD的控制器1725相关联的地址开口来与模块1720的SSD控制器1725通信。该地址开口可以进一步被划分为配置用于命令、状态和数据的通信的地址范围(也称端口)。可以配置地址开口的端口并且将其尺寸定为地址(例如,列地址)的块。
在一个实施例中,本地文件***1733产生指向SSD控制器1725的I/O命令。具体地,响应于用于在存储器模块1720的非易失性存储器1728中存储的I/O命令,存储器接口命令通过从与模块1720和/或SSD控制器1725相关联的地址开口读取和/或写入与模块1720和/或SSD控制器1725相关联的地址开口被导向存储器模块1720。处理器1722可以将模块1720接收的I/O命令转换为向SSD控制器1725和/或非易失性存储器1728发送的命令。
图18是用于分布式文件处理的***的示图。在图18中,所示分布式文件处理***1800包括服务器计算机1830和网络1850。图18中没有示出的是将经由网络1850操作性地耦合至服务器计算机1830的客户端节点、主节点或其他映射处理器计算机。
服务器计算机1830包括***调用层1831、虚拟文件***层1832、本地文件***1833、分布式文件***服务器1834、远程过程调用服务器存根1835和模块1820。模块1820包括映射功能1829、处理器1822和非易失性存储器1828。在服务器计算机1830中,分布式文件***的被优化用于映射功能的全部或部分(例如,‘MapReduce’——用于利用集群上的并行的、分布式算法来处理大数据集合)驻留在模块1820上并且在模块1820上执行。还应该理解,模块1820可以是、包括、对应于一个或多个模块720、920或1120或者作为其实施例,或者包括本文所述这些模块(例如,IC 721、IC 921、IC 1121、子***800、子***1000和/或子***1200)中的一个或多个元件。
服务器计算机1830的***调用层1831***作性地耦合至VFS层1832。服务器计算机1830的RPC服务器存根1835***作性地耦合至DFS服务器1834。DFS服务器1834***作性地耦合至VFS层1832。VFS层1832***作性地耦合至本地文件***1833。本地文件***1833***作性地耦合至模块1820,因此也***作性地耦合至映射功能1829。映射功能1829可以使用由非易失性存储器1828存储的数据在处理器1822上执行。因此,应该理解,由映射功能1829执行的映射函数和/或由模块1820的非易失性存储器1828存储的分布式文件***数据能够经由本地文件***1833、VFS层1832、DFS服务器1834、RPC服务器存根1835和网络1850***作性地耦合至客户端计算机或主节点的元件。
在一个实施例中,具体地,本地文件***1833通过从与模块1820和/或映射功能1829相关联的地址开口读取和写入与模块1820和/或映射功能1829相关联的地址开口来与模块1820的映射功能1829通信。该地址开口可以被进一步划分为被配置用于命令、状态和数据的通信的地址范围(也称端口)。可以配置地址开口的端口并且将其尺寸定为地址(例如,列地址)的块。
可以在模块1820上执行经由DRAM存储器通道被模块1820接收到的用于映射功能1829的过程调用和过程数据(例如,通过处理器1822使用由非易失性存储器1828存储的数据)。这些过程调用和过程数据可以经由定址到模块1820的存储空间(例如,开口)的存储器写事务被传输至模块1820。这些过程调用可以包括RPC请求。由模块1820执行的过程调用和过程数据还可以实现一个或多个虚拟文件***过程调用。这些过程调用可以包括映射调用,该映射调用指定将由模块1829对使用非易失性存储器1828存储的对应的输入数据块执行。映射操作还可以产生将使用非易失性存储器1828或模块1820上的其他存储器存储的中间数据值。
图19是示出操作存储器模块的方法的流程图。图19所示步骤可以由***100、***400、模块500、***700、子***800、子***801、***900、子***1000、子***1001、***1100、子***1200、子***1201、***1300、***1400、***1500、***1600、***1700、***1800和/或它们的部件中的一个或多个元件来执行。在集成电路设备处,接收了来自与存储器模块的存储器接口连接的存储器控制器的存储器命令;集成电路设备具有处理器、第一接口、第二接口和非易失性存储器。第一接口被连接至多个动态存储器集成电路。第二接口接收了来自存储器控制器的存储器命令(1902)。例如,集成电路设备921可以从存储器控制器914(其被耦合至模块920的存储器接口)接收存储器命令。例如,集成电路设备921可以是***1000。***1000具有可以连接至CPU存储器923的CA0接口1086和CA1接口1087。***1000具有NV存储器1028(其可以对应于NV存储器928)。***1000具有CA输入接口1096,该CA输入接口1096可以接收来自存储器控制器914的存储器命令。
响应于存储器命令,数据被存储在多个动态存储器集成电路中(1904)。例如,响应于经由CA输入接口1096从存储器控制器914接收的命令,***1000可以将数据存储在连接至CA0接口1086或CA1接口1087的动态存储器集成电路(例如,CPU存储器923)中。
响应于来自处理器的命令,数据被存储在至少一个非易失性存储器集成电路设备中(1906)。例如,***1000可以响应于处理器1012(或处理器922)并且在NV存储器1028中存储在CPU存储器923、本地存储器1024和/或连接至CA0接口1086和CA1接口1087的动态存储器中所存储的数据。
图20是示出操作存储器模块的方法的流程图。图20所示步骤可以由***100、***400、模块500、***700、子***800、子***801、***900、子***1000、子***1001、***1100、子***1200、子***1201、***1300、***1400、***1500、***1600、***1700、***1800和/或它们的部件中的一个或多个元件来执行。在集成电路设备处,接收了来自与存储器模块的存储器接口连接的存储器控制器的存储器命令;集成电路设备具有固态盘控制器电路、第一接口、第二接口和第三接口。第一接口被连接至多个动态存储器集成电路。第二接口被连接至至少一个非易失性存储器集成电路设备。第三接口接收了来自存储器控制器的存储器命令(2002)。例如,集成电路设备721可以从存储器控制器714(其被耦合至模块720的存储器接口)接收存储器命令。例如,集成电路设备721可以是***800。***800具有可以连接至CPU存储器723的CA0接口886和CA1接口887。***800具有NV控制器827(其可以为固态盘控制器电路并且可以对应于NV控制器725)以向NV存储器828(其可以对应于NV存储器728)接口。***800具有CA输入接口896,该CA输入接口896可以接收来自存储器控制器714的存储器命令。
响应于存储器命令,数据被存储在多个动态存储器集成电路中(2004)。例如,响应于经由CA输入接口896从存储器控制器714接收的命令,***800可以将数据存储在连接至CA0接口886或CA1接口887的动态存储器集成电路(例如,CPU存储器723)中。
响应于来自固态盘控制器电路的命令,数据被存储在至少一个非易失性存储器集成电路设备中(2006)。例如,***800可以响应于固态盘控制器电路并且在NV存储器828中存储在CPU存储器723、本地存储器824和/或连接至CA0接口886和CA1接口887的动态存储器中所存储的数据,该固态盘控制器电路是NV控制器827或者被包括在NV控制器827中。
图21是示出操作存储器模块的方法的流程图。图21所示步骤可以由***100、***400、模块500、***700、子***800、子***801、***900、子***1000、子***1001、***1100、子***1200、子***1201、***1300、***1400、***1500、***1600、***1700、***1800和/或它们的部件中的一个或多个元件来执行。在集成电路设备处,接收了来自与存储器模块的存储器接口连接的存储器控制器的存储器命令;集成电路设备具有处理器、第一接口、第二接口和第三接口。第一接口被连接至多个动态存储器集成电路。第二接口被连接至至少一个盘型大容量存储设备。第三接口接收了来自存储器控制器的存储器命令(2102)。例如,集成电路设备1121可以从存储器控制器1114(其被耦合至模块1120的存储器接口)接收存储器命令。例如,集成电路设备1121可以是***1200。***1200具有可以连接至CPU存储器1123的CA0接口1286和CA1接口1287。***1200具有盘接口1227(其可以对应于盘接口1125)以向盘型存储1228(其可以对应于盘型存储1228)接口。***1200具有CA输入接口1296,该CA输入接口1296可以接收来自存储器控制器1114的存储器命令。
响应于存储器命令,数据被存储在多个动态存储器集成电路中(2104)。例如,响应于经由CA输入接口1296从存储器控制器1114接收的命令,***1200可以将数据存储在连接至CA0接口1286或CA1接口1287的动态存储器集成电路(例如,CPU存储器1123)中。
响应于来自处理器的命令,数据被存储在至少一个盘型大容量存储设备中(2106)。例如,***1200可以响应于处理器1212(或处理器1122)并且在盘型存储器1228中存储在CPU存储器1123、本地存储器1224和/或连接至CA0接口1286和CA1接口1287的动态存储器中所存储的数据。
图22是示出操作存储器模块的方法的流程图。图22所示步骤可以由***100、***400、模块500、***700、子***800、子***801、***900、子***1000、子***1001、***1100、子***1200、子***1201、***1300、***1400、***1500、***1600、***1700、***1800和/或它们的部件中的一个或多个元件来执行。在集成电路设备处,接收了来自与存储器模块的存储器接口连接的存储器控制器的存储器命令;集成电路设备具有处理器、第一接口、第二接口和第三接口。第一接口被连接至多个动态存储器集成电路。第二接口被连接至至少一个非易失性存储器集成电路设备。第三接口接收了来自存储器控制器的存储器命令(2202)。例如,集成电路设备721可以从存储器控制器714(其被耦合至模块720的存储器接口)接收存储器命令。例如,集成电路设备721可以是***800。***800具有可以连接至CPU存储器723的CA0接口886和CA1接口887。***800具有NV控制器827(其可以对应于NV控制器725)以向NV存储器828(可以对应于NV存储器728)接口。***800具有CA输入接口896,该CA输入接口896可以接收来自存储器控制器714的存储器命令。
响应于存储器命令,数据被存储在多个动态存储器集成电路中(2204)。例如,响应于经由CA输入接口896从存储器控制器714接收的命令,***800可以将数据存储在连接至CA0接口886或CA1接口887的动态存储器集成电路(例如,CPU存储器723)中。
响应于来自处理器的命令,数据被存储在至少一个非易失性存储器集成电路设备中(2206)。例如,***800可以响应于处理器812(或处理器722)并且在NV存储器828中存储在CPU存储器723、本地存储器824和/或连接至CA0接口886和CA1接口887的动态存储器中所存储的数据。
图23是示出操作存储器模块的方法的流程图。图23所示步骤可以由***100、***400、模块500、***700、子***800、子***801、***900、子***1000、子***1001、***1100、子***1200、子***1201、***1300、***1400、***1500、***1600、***1700、***1800和/或它们的部件中的一个或多个元件来执行。在模块处,经由DRAM存储器通道接收到用于块I/O存储类型设备命令的远程过程调用请求(2302)。例如,模块720可以经由耦合了模块720和存储器控制器714的DRAM存储器通道接收用于块I/O存储类型设备的远程过程调用请求(例如,SSD的块读取)。
使用模块上的非易失性存储来服务块I/O存储类型设备命令(2304)。例如,可以使用存储在非易失性存储器728上的数据来提供远程过程调用响应。可以经由耦合了模块720和存储器控制器714的DRAM通道来传输远程过程调用响应。
图24是示出操作存储器模块的方法的流程图。图24所示步骤可以由***100、***400、模块500、***700、子***800、子***801、***900、子***1000、子***1001、***1100、子***1200、子***1201、***1300、***1400、***1500、***1600、***1700、***1800和/或它们的部件中的一个或多个元件来执行。在模块处,接收到通过DRAM存储器通道接口经由存储器写事务被传输至模块的过程调用和过程数据(2402)。例如,通过DRAM存储器通道接口经由存储器写事务被传输至模块的过程调用和过程数据可以被模块720接收,该DRAM存储器通道接口链接模块720和存储器控制器714
执行了过程调用并且通过DRAM存储器通道接口返回了返回的过程结果(2404)。例如,处理器722可以执行过程调用并且生成存储在非易失性存储器728中的过程结果。可以响应于经由DRAM存储器通道接口传输结果数据的读命令返回存储在非易失性存储器728中的过程结果,该DRAM存储器通道接口链接模块720和存储器控制器714。
图25是示出操作存储器模块的方法的流程图。图25所示步骤可以由***100、***400、模块500、***700、子***800、子***801、***900、子***1000、子***1001、***1100、子***1200、子***1201、***1300、***1400、***1500、***1600、***1700、***1800和/或它们的部件中的的一个或多个元件来执行。在模块处并且经由DRAM存储器通道接口,将由模块执行的过程调用经由DRAM存储器通道上的存储器写事务被接收,该存储器写事务被定址到模块的存储器空间(2502)。例如,模块720可以从存储器控制器714接收定址到模块720的存储器空间的存储器写事务。这些存储器写事务可以传输将由模块执行的过程调用(例如,远程过程调用或者函数调用)。
执行过程调用,该过程调用包括块I/O存储类型设备命令并且包括映射调用,使用非易失性存储来服务该块I/O存储类型设备命令,该映射调用指定将由模块对使用非易失性存储来存储的对应的输入数据块执行的专用映射操作,并且该映射操作还产生使用非易失性存储来存储的中间数据值(2504)。例如,模块720可以被控制为使用利用非易失性存储器728存储的数据来执行“MapReduce”映射类型函数。
图26是示出操作存储器模块的方法的流程图。图26所示步骤可以由***100、***400、模块500、***700、子***800、子***801、***900、子***1000、子***1001、***1100、子***1200、子***1201、***1300、***1400、***1500、***1600、***1700、***1800和/或它们的部件中的一个或多个元件来执行。在集成电路设备处,接收了来自与存储器模块的存储器接口连接的存储器控制器接收存储器命令;集成电路设备具有处理器、第一接口、第二接口和非易失性存储器。第一接口被连接至多个动态存储器集成电路。第二接口接收了来自存储器控制器的存储器命令(2602)。例如,集成电路设备921可以从存储器控制器914(其被耦合至模块920的存储器接口)接收存储器命令。例如,集成电路设备921可以是***1000。***1000具有可以连接至CPU存储器923的CA0接口1086和CA1接口1087。***1000具有NV存储器1028(可对应于NV存储器928)。***1000具有CA输入接口1096,该CA输入接口1096可以接收来自存储器控制器914的存储器命令。
响应于存储器命令,数据被存储在多个动态存储器集成电路中(2604)。例如,响应于经由CA输入接口1096从存储器控制器914接收的命令,***1000可以将数据存储在连接至CA0接口1086或CA1接口1087的动态存储器集成电路(例如,CPU存储器923)中。
响应于来自处理器的命令,数据被存储在至少一个非易失性存储器集成电路设备中(2606)。例如,***1000可以响应于处理器1012(或处理器922)并且在NV存储器1028中存储在CPU存储器923、本地存储器1024和/或连接至CA0接口1086或CA1接口1087的动态存储器中所存储的数据。
以上描述的***和设备可以在计算机***、集成电路中实现或者由计算机***存储。以上描述的***还可以存储在非瞬态计算机可读介质上。本文所描述的设备、电路和***可以使用本领域可用的计算机辅助设计工具来实现,并且通过包含这种电路的软件描述的计算机可读文件来具体化。图19所示的步骤可以由***100、***400、模块500、***700、子***800、子***801、***900、子***1000、子***1001、***1100、子***1200、子***1201、***1300、***1400、***1500、***1600、***1700、***1800和/或它们的部件中的一个或多个元件来执行。这些软件描述可以是:行为、寄存器传送、逻辑部件、晶体管和布局几何级描述。此外,软件描述可以存储在非暂态存储介质上或者通过载波来传输。
可以实现这种描述的数据格式包括但不限于:支持行为语言、如C的格式,支持寄存器传送级(RTL)语言、如Verilog和VHDL的格式,支持几何描述语言、诸如GDSII、GDSIII、GDSIV、CIF和MEBES的格式,以及其他适当的格式和语言。此外,可以在互联网上或例如经由电子邮件通过各种不同的介质电子地完成这种文件在机器可读介质上的数据传送。注意,可以在机器可读介质,诸如4mm磁带、8mm磁带、3-1/2英寸软盘介质、CD、DVD、蓝光盘等上实现物理文件。
图27示出了计算机***的框图。计算机***2700包括通信接口2720、处理***2730、存储***2740和用户接口2760。处理***2730***作性地耦合至存储***2740。存储***2740存储软件2750和数据2770。计算机***2700可以包括***100、***400、模块500、***700、子***800、子***801、***900、子***1000、子***1001、***1100、子***1200、子***1201、***1300、***1400、***1500、***1600、***1700、***1800和/或它们的部件中的一个或多个,或者实现本文所述方法、功能、处理、通信、电路和/或***的部件。处理***2730***作性地耦合至通信接口2720和用户接口2760。计算机***2700可以包括被编程的通用计算机。计算机***2700可以包括微处理器。计算机***2700可以包括可编程电路或专用电路。计算机***2700可以被分布在多个设备、处理器、存储器和/或接口之中,它们一同包括元件2720-2770。
通信接口2720可以包括网络接口、调制解调器、端口、总线、链接、收发器或其他通信设备。通信接口2720可以被分布在多个通信设备之中。处理***2730可以包括微处理器、微控制器、逻辑电路或其他处理设备。处理***2730可以被分布在多个处理设备之中。用户接口2760可以包括键盘、鼠标、声音识别接口、麦克风和扬声器、图形显示器、触摸屏或其他类型的用户接口设备。用户接口2760可以被分布在多个接口设备之中。存储***2740可以包括磁盘、磁带、集成电路、RAM、ROM、EEPROM、闪存、网络存储器、服务器或其他存储器功能。存储***2740可以包括计算机可读介质。存储***2740可以被分布在多个存储器设备之中。
处理***2730检索和执行来自存储***2740的软件2750。处理***2730可以检索和存储数据2770。处理***2730还可以经由通信接口2720检索和存储数据。处理***2730可以创建或修改软件2750或数据2770以实现有形的结果。处理***2730可以控制通信接口2720或用户接口2760以实现有形的结果。处理***2730可以经由通信接口2720检索和执行远程存储的软件。
软件2750和远程存储的软件可以包括操作***、实体、驱动器、网络软件以及通常由计算机***执行的其他软件。软件2750可以包括应用程序、小应用程序、固件或通常由计算机***执行的机器可读处理指令的其他形式。软件2750或远程存储的软件当被处理***2730执行时,可以引导计算机***2700进行操作。
为了说明和描述的目的呈现了前面本发明的描述。其不是排他性地并不将本发明限于公开的具体形式,在上述教导的基础上可以进行其他修改和变化。选择和描述实施例以更好地解释本发明的原理及其实践应用,从而能够使本领域技术人员能够在适合于预期特定应用的各个实施例和各个修改例中使用本发明。除了被现有技术限制的范围,所附权利要求包括本发明的其他可选实施例。
Claims (19)
1.一种存储器模块,包括:
基板,具有存储器模块的形状因子,所述基板具有接口,所述接口被配置为与DRAM存储器通道通信,所述DRAM存储器通道包括双向数据链接;
设置在所述基板上的非易失性存储装置,所述模块被配置为使用所述模块上的所述非易失性存储装置来服务于针对存储命令的远程过程调用RPC请求,所述请求将由所述模块经由所述DRAM存储器通道的双向数据链接而接收,存储命令数据由所述模块经由所述DRAM存储器通道的所述双向数据链接而接收;以及
处理器,被设置在基板上,用以执行所述远程过程调用请求,所述远程过程调用请求的结果将被输出到所述DRAM存储器通道的所述双向数据链接。
2.根据权利要求1所述的模块,其中所述存储命令是源自不直接连接到所述模块的处理器的RPC请求。
3.根据权利要求1所述的模块,其中所述存储命令是块I/O存储类型设备命令。
4.根据权利要求3所述的模块,其中所述处理器将执行块存储I/O驱动器,所述块存储I/O驱动器服务于针对在所述非易失性存储装置中存储的数据的所述块I/O存储类型设备命令。
5.根据权利要求4所述的模块,还包括:
固态盘控制器,被耦合以向所述处理器提供块I/O存储接口,用于在所述非易失性存储装置中存储的数据的通信。
6.根据权利要求5所述的模块,其中所述块I/O存储接口使用SCSI命令和ATA命令中的至少一项。
7.根据权利要求2所述的模块,其中将由所述模块经由所述DRAM存储器通道接收的所述RPC请求经由寻址到所述模块的存储器空间的所述DRAM存储器通道的存储器写事务而被传送到所述模块。
8.一种存储器模块,包括:
基板,具有存储器模块的形状因子;以及
设置在所述基板上的DRAM存储器通道接口,用以接收供被设置在所述基板上的处理器在所述模块上执行的远程过程调用和过程数据,所述处理器被配置为执行所述远程过程调用,所述远程过程调用和所述过程数据将经由寻址到所述模块的存储器空间的存储器写事务被传送到所述模块;
将由所述模块经由所述DRAM存储器通道接口的双向数据链接而接收的远程过程调用和过程数据,所述远程过程调用和所述过程数据将由所述模块经由所述DRAM存储器通道接口的双向数据链接而接收。
9.根据权利要求8所述的模块,其中所述远程过程调用包括块I/O存储类型设备命令。
10.根据权利要求8所述的模块,其中所述远程过程调用和所述过程数据实现虚拟文件***过程调用。
11.根据权利要求8所述的模块,还包括:
使用块I/O存储类型设备命令来访问的非易失性存储装置。
12.根据权利要求11所述的模块,其中所述非易失性存储装置使用NFS请求来被访问,所述NFS请求经由寻址到所述模块的所述存储器空间的所述存储器写事务被传送到所述模块。
13.根据权利要求11所述的模块,其中所述非易失性存储装置使用HDFS请求来被访问,所述HDFS请求经由寻址到所述模块的所述存储器空间的所述存储器写事务被传送到所述模块。
14.一种存储器模块,包括:
基板,具有存储器模块的形状因子;以及
设置在所述基板上的非易失性存储装置;
DRAM存储器通道接口,用以接收用于在所述模块上执行的远程过程调用;以及
执行所述远程过程调用的设置在所述基板上的至少一个处理器,所述远程过程调用包括使用所述非易失性存储装置来服务的块I/O存储类型设备命令,所述远程过程调用包括映射调用,所述映射调用指定将由所述模块对相应输入数据块执行的专用映射操作,所述相应输入数据块由所述模块接收,以使用所述非易失性存储装置而被存储,所述映射操作还将产生将使用所述非易失性存储装置来存储的中间数据值,所述过程调用将经由所述DRAM存储器通道上寻址到所述模块的存储器空间的存储器写事务而被传送到所述模块。
15.根据权利要求14所述的模块,其中所述远程过程调用还包括指定与应用无关的映射操作的映射调用。
16.根据权利要求14所述的模块,其中所述非易失性存储装置是固态盘驱动器(SSD)。
17.根据权利要求14所述的模块,其中所述块I/O存储类型设备命令被导向盘驱动类型块I/O存储设备。
18.根据权利要求14所述的模块,其中使用在所述非易失性存储装置中存储的数据来实现分布式文件***。
19.根据权利要求14所述的模块,其中所述远程过程调用的结果将经由所述DRAM存储器通道接口被输出。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910475716.XA CN110275840B (zh) | 2014-02-23 | 2015-02-21 | 在存储器接口上的分布式过程执行和文件*** |
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/187,290 | 2014-02-23 | ||
US14/187,290 US11048410B2 (en) | 2011-08-24 | 2014-02-23 | Distributed procedure execution and file systems on a memory interface |
CN201910475716.XA CN110275840B (zh) | 2014-02-23 | 2015-02-21 | 在存储器接口上的分布式过程执行和文件*** |
PCT/US2015/016985 WO2015127327A1 (en) | 2014-02-23 | 2015-02-21 | Distributed procedure execution and file systems on a memory interface |
CN201580000052.1A CN105408875B (zh) | 2014-02-23 | 2015-02-21 | 在存储器接口上的分布式过程执行和文件*** |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580000052.1A Division CN105408875B (zh) | 2014-02-23 | 2015-02-21 | 在存储器接口上的分布式过程执行和文件*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110275840A CN110275840A (zh) | 2019-09-24 |
CN110275840B true CN110275840B (zh) | 2024-03-15 |
Family
ID=52648811
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580000052.1A Active CN105408875B (zh) | 2014-02-23 | 2015-02-21 | 在存储器接口上的分布式过程执行和文件*** |
CN201910475716.XA Active CN110275840B (zh) | 2014-02-23 | 2015-02-21 | 在存储器接口上的分布式过程执行和文件*** |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580000052.1A Active CN105408875B (zh) | 2014-02-23 | 2015-02-21 | 在存储器接口上的分布式过程执行和文件*** |
Country Status (3)
Country | Link |
---|---|
EP (1) | EP2911065B1 (zh) |
CN (2) | CN105408875B (zh) |
WO (1) | WO2015127327A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107577614B (zh) * | 2013-06-29 | 2020-10-16 | 华为技术有限公司 | 数据写入方法及内存*** |
US10719474B2 (en) * | 2017-10-11 | 2020-07-21 | Samsung Electronics Co., Ltd. | System and method for providing in-storage acceleration (ISA) in data storage devices |
CN110348211B (zh) * | 2018-07-17 | 2020-10-16 | 清华大学 | 记录处理器输入输出操作的方法、装置、***及介质 |
US10846155B2 (en) * | 2018-10-16 | 2020-11-24 | Samsung Electronics Co., Ltd. | Method for NVMe SSD based storage service using RPC and gRPC tunneling over PCIe + |
CN112214437B (zh) * | 2020-09-29 | 2023-01-10 | 苏州浪潮智能科技有限公司 | 一种存储设备及通信方法、装置、计算机可读存储介质 |
CN114036085B (zh) * | 2021-09-24 | 2024-04-12 | 北京无线电测量研究所 | 基于ddr4的多任务读写调度方法、计算机设备及存储介质 |
CN114968497B (zh) * | 2022-06-06 | 2023-11-14 | 中国电信股份有限公司 | 硬件层的调用方法、装置、设备及存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5742792A (en) * | 1993-04-23 | 1998-04-21 | Emc Corporation | Remote data mirroring |
US6526484B1 (en) * | 1998-11-16 | 2003-02-25 | Infineon Technologies Ag | Methods and apparatus for reordering of the memory requests to achieve higher average utilization of the command and data bus |
CN1771495A (zh) * | 2003-05-07 | 2006-05-10 | 国际商业机器公司 | 分布式文件服务体系结构*** |
US7046467B1 (en) * | 2003-04-30 | 2006-05-16 | Western Digital Technologies, Inc. | Method for generating a format specific data structure in a disk drive having differing surface formats |
JP2006228090A (ja) * | 2005-02-21 | 2006-08-31 | Ricoh Co Ltd | デジタル回路のコントローラ基板 |
CN101128795A (zh) * | 2004-05-11 | 2008-02-20 | 米斯特科技有限公司 | 语义处理器存储服务器架构 |
CN101689145A (zh) * | 2007-03-30 | 2010-03-31 | 拉姆伯斯公司 | 包括具有不同类型集成电路存储器设备的分层存储器模块的*** |
CN103309836A (zh) * | 2013-07-11 | 2013-09-18 | 无锡云动科技发展有限公司 | 一种存储装置 |
CN103488578A (zh) * | 2012-12-28 | 2014-01-01 | 晶天电子(深圳)有限公司 | 虚拟存储设备(vmd)应用/驱动器 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0421696A3 (en) * | 1989-10-02 | 1992-01-29 | Motorola Inc. | Staggered access memory |
CN1717662B (zh) * | 2002-11-28 | 2010-04-28 | 株式会社瑞萨科技 | 存储器模块、存储器***和信息仪器 |
US8074022B2 (en) * | 2006-09-28 | 2011-12-06 | Virident Systems, Inc. | Programmable heterogeneous memory controllers for main memory with different memory modules |
US7761625B2 (en) * | 2006-09-28 | 2010-07-20 | Virident Systems, Inc. | Methods for main memory with non-volatile type memory modules, and related technologies |
US7774556B2 (en) * | 2006-11-04 | 2010-08-10 | Virident Systems Inc. | Asymmetric memory migration in hybrid main memory |
KR101453581B1 (ko) * | 2007-02-02 | 2014-10-22 | 사이마스트, 인크. | 통합된 고속 패킷 스위칭 방식 직렬 인터페이스를 갖는 프로세서 칩 아키텍처 |
US8874831B2 (en) * | 2007-06-01 | 2014-10-28 | Netlist, Inc. | Flash-DRAM hybrid memory module |
US7865674B2 (en) * | 2007-08-31 | 2011-01-04 | International Business Machines Corporation | System for enhancing the memory bandwidth available through a memory module |
US8296496B2 (en) * | 2009-09-17 | 2012-10-23 | Hewlett-Packard Development Company, L.P. | Main memory with non-volatile memory and DRAM |
CN102110057B (zh) * | 2009-12-25 | 2013-05-08 | 澜起科技(上海)有限公司 | 存储器模组及存储器模组内的数据交换方法 |
WO2013028859A1 (en) * | 2011-08-24 | 2013-02-28 | Rambus Inc. | Methods and systems for mapping a peripheral function onto a legacy memory interface |
WO2013140435A1 (en) * | 2012-03-19 | 2013-09-26 | Hitachi, Ltd. | Data storage system comprising non-volatile semiconductor storage device, and storage control method |
-
2015
- 2015-02-21 WO PCT/US2015/016985 patent/WO2015127327A1/en active Application Filing
- 2015-02-21 CN CN201580000052.1A patent/CN105408875B/zh active Active
- 2015-02-21 CN CN201910475716.XA patent/CN110275840B/zh active Active
- 2015-02-23 EP EP15156155.2A patent/EP2911065B1/en active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5742792A (en) * | 1993-04-23 | 1998-04-21 | Emc Corporation | Remote data mirroring |
US6526484B1 (en) * | 1998-11-16 | 2003-02-25 | Infineon Technologies Ag | Methods and apparatus for reordering of the memory requests to achieve higher average utilization of the command and data bus |
US7046467B1 (en) * | 2003-04-30 | 2006-05-16 | Western Digital Technologies, Inc. | Method for generating a format specific data structure in a disk drive having differing surface formats |
CN1771495A (zh) * | 2003-05-07 | 2006-05-10 | 国际商业机器公司 | 分布式文件服务体系结构*** |
CN101128795A (zh) * | 2004-05-11 | 2008-02-20 | 米斯特科技有限公司 | 语义处理器存储服务器架构 |
JP2006228090A (ja) * | 2005-02-21 | 2006-08-31 | Ricoh Co Ltd | デジタル回路のコントローラ基板 |
CN101689145A (zh) * | 2007-03-30 | 2010-03-31 | 拉姆伯斯公司 | 包括具有不同类型集成电路存储器设备的分层存储器模块的*** |
CN103488578A (zh) * | 2012-12-28 | 2014-01-01 | 晶天电子(深圳)有限公司 | 虚拟存储设备(vmd)应用/驱动器 |
CN103309836A (zh) * | 2013-07-11 | 2013-09-18 | 无锡云动科技发展有限公司 | 一种存储装置 |
Also Published As
Publication number | Publication date |
---|---|
EP2911065B1 (en) | 2017-12-27 |
EP2911065A1 (en) | 2015-08-26 |
CN105408875B (zh) | 2019-06-21 |
CN110275840A (zh) | 2019-09-24 |
WO2015127327A1 (en) | 2015-08-27 |
CN105408875A (zh) | 2016-03-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110275840B (zh) | 在存储器接口上的分布式过程执行和文件*** | |
US9921751B2 (en) | Methods and systems for mapping a peripheral function onto a legacy memory interface | |
US10089134B2 (en) | Controlling access to namespaces of a storage device | |
US20170147233A1 (en) | Interface architecture for storage devices | |
US8996781B2 (en) | Integrated storage/processing devices, systems and methods for performing big data analytics | |
US8549231B2 (en) | Performing high granularity prefetch from remote memory into a cache on a device without change in address | |
US11635902B2 (en) | Storage device processing stream data, system including the same, and operation method | |
CN110825670A (zh) | 基于NVMe协议的主机与固态驱动器(SSD)之间的受管理交换 | |
US11048410B2 (en) | Distributed procedure execution and file systems on a memory interface | |
KR20140063660A (ko) | 플래시-디램 하이브리드 메모리 모듈 | |
US11681553B2 (en) | Storage devices including heterogeneous processors which share memory and methods of operating the same | |
CN115495389B (zh) | 存储控制器、计算存储装置以及计算存储装置的操作方法 | |
US11741034B2 (en) | Memory device including direct memory access engine, system including the memory device, and method of operating the memory device | |
US10102884B2 (en) | Distributed serialized data buffer and a memory module for a cascadable and extended memory subsystem | |
US20220156146A1 (en) | Memory controller performing selective and parallel error correction, system including the same and operating method of memory device | |
US20170031633A1 (en) | Method of operating object-oriented data storage device and method of operating system including the same | |
US11809341B2 (en) | System, device and method for indirect addressing | |
US20230222067A1 (en) | Apparatus and method for cache-coherence | |
CN118069037A (zh) | 存储器控制器、电子***和控制存储器访问的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |