用于控制混合存储系统的运行的电路和方法与流程

文档序号:11288541阅读:295来源:国知局
用于控制混合存储系统的运行的电路和方法与流程

本发明主要涉及集成电路器件,尤其是涉及用于控制包含不同类型存储器的存储系统的运行的电路和方法。



背景技术:

数据中心在世界任何地方的多种计算设备之间协调地提供存储、社交网络、游戏、网络搜索和许多其他服务,并且它们的规模和提供的服务的绝对多样性与日俱增。几项关键因素促使了这种增长,其中包括现在被抓取和交换的不定的数据量的爆发。在实施数据中心的过程中,一项需要面对的基本挑战是处理和存储不断增长的数据量。

用来存储用于不同目的的大量数据的数据中心正在许多工业领域中变得非常重要,当存储和处理不断增长的数据量时,数据中心聚焦的是优化的运行方式。固态硬盘(ssd)正快速地得到普及,因为它们在存储架构(storagehierarchy)中提供了额外的一层,它相比较硬盘驱动器而言同时拥有更高的性能(例如,每秒内的数据输入输出次数(iops))和更少的访问延迟,相比较标准动态随机存取存储器(dram)而言拥有更高的存储密度、更低的成本和更低的功耗。然而,它们较高的访问延迟使得ssd不能与标准dram合并使用,因为多核处理器无法在不牺牲性能的前提下应对高访问延迟。

因此,用于控制存储系统运行的优化电路会非常有好处。



技术实现要素:

描述了一种用于控制包含不同类型存储器的存储系统的运行的电路。该电路包含具有第一类型存储元件和第一访问时间的第一存储器;具有第二类型存储元件和第二访问时间的第二存储器,其中第二类型存储元件与第一类型存储元件的类型不同;使得能够访问第一存储器和第二存储器的存储器控制电路;与第二存储器耦接的用于补偿第一存储时间和第二存储时间的时间差的延迟缓冲器;以及用于合并第一存储器的输出数据和经过延迟的第二存储器的输出数据来产生依序的输出数据的电路。

可选择地,该存储器控制电路包括与第一存储器相关联的第一存储器控制器和与第二存储器相关联的第二存储器控制器。

可选择地,该存储器控制电路包括与第一存储器控制器和第二存储器控制器相耦接的存储器选择电路,该存储器选择电路使得能够访问第一存储器和第二存储器中被选中的存储器。

可选择地,第一存储器包括ssd存储器。

可选择地,第二存储器包括dram。

可选择地,延迟缓冲器包括pld上的ram块。

可选择地,pld上的ram块通过在预定的延迟时间内缓冲数据来补偿第一存储时间和第二存储时间之间的时间差。

可选择地,数据在经过预定的延迟时间后被从ram块中被读出。

可选择地,pld被耦接以接收配置比特。

可选择地,ram块通过使用可编程互连单元而与第二存储器相耦接,该可编程互连单元通过使用配置比特来编程。

可选择地,第一存储器包括非易失性存储器,第二存储器包括易失性存储器。

可选择地,该电路进一步包括控制对第一存储器和第二存储器进行访问的存储器转译器(memorytranslator),其中,该存储器转译器决定是访问第一存储器还是访问第二存储器。

可选择地,该存储器转译器进一步包括用于存储与关联于第一存储器和第二存储器的访问时间相关的信息的分析器(profiler)。

可选择地,该存储器转译器基于分析器内存储的信息来决定是访问第一存储器还是访问第二存储器。

同样还描述了一种控制包含不同类型存储器的存储系统的运行的方法。该方法包括实施具有第一类型存储元件和第一访问时间的第一存储器;实施具有第二类型存储元件和第二访问时间的第二存储器,其中第二类型存储元件与第一类型存储元件的类型不同;使得能够访问第一存储器和第二存储器;将延迟缓冲器与第二存储器相耦接,以用于补偿第一访问时间和第二访问时间之间的时间差;以及合并第一存储器的输出数据和经过延迟的第二存储器的输出数据,产生依序的输出数据。

可选择地,访问第一存储器包括通过与第一存储器相关联的第一存储器控制器来访问第一存储器,访问第二存储器包括通过与第二存储器相关联的第二存储器控制器来访问第二存储器。

可选择地,该方法进一步包括实施与第一存储器控制器和第二存储器控制器相耦接的存储器选择电路,该存储器选择电路使得能够对第一存储器和第二存储器中的被选定的存储器进行访问。

可选择地,访问第一存储器包括实施ssd存储器。

可选择地,访问第二存储器包括实施dram。

可选择地,将第二存储器的输出数据耦接到延迟缓冲器包括将数据耦接到pld上的ram块。

附图说明

图1是一个使得能够对多个存储器进行访问的电路的框图;

图2是一个用于控制包含不同存储器类型的存储系统的运行以及实现顺序处理的电路的框图;

图3是一个用于控制包含不同存储器类型的存储系统的运行以及实现乱序处理的电路的框图;

图4是一个控制存储系统运行的电路的框图,该存储系统包含一个用于访问不同类型存储器的电路;

图5是另一个控制存储系统运行的电路的框图,该存储系统包含一个用于访问不同类型存储器的电路;

图6是一个流程图,说明了实施一个包含不同类型存储器的存储系统的方法;

图7是一个流程图,说明了控制包含不同类型存储器的存储系统的运行的方法;

图8是一个框图,展示了一个以环形节点的实施方式来分配存储器的电路;

图9是一个框图,展示了一个存储器转译器的架构;

图10是一个流程图,展示了图9中的存储器转译器中的分析器的运行过程;

图11是一个流程图,展示了一种确定数据存储在多个存储器中的哪一个存储器中的方法;

图12是一个动态随机存取存储器(dram)的框图;

图13是一个图12中的dram的一个存储元件的框图;

图14是一个固态硬盘(ssd)存储器的框图;

图15是图14中固态硬盘的一个存储元件的框图;

图16是一个实现键值存储的电路的框图,该键值存储实施了多个存储器类型;

图17是一个用于对包含可编程资源的器件进行编程的系统的框图;

图18是一个包含可编程资源的器件的框图;以及

图19是一个图18中器件的一个可配置逻辑元件的框图。

具体实施方式

随着诸如用于数据中心的大型存储器网络变得越来越被大量使用,并且其被人们依赖以存储更大量的数据,存储器网络的性能正在变得越来越重要。根据列于下文的多种电路和方法的一个数据流架构实现了对包含不同类型存储器的存储器网络的操作。例如,一个用于控制存储系统运行的电路补偿了存储器之间的差别,例如高访问延迟。列于下文的电路和方法发现了诸如现场可编程门阵列的可编程逻辑器件的特别用途,并且使得能够基于pld建立用于处理和存储数万亿字节(tb)数据的存储系统,并且该系统可以比实施了传统处理器的存储系统拥有低得多的成本、更低的功耗以及更高的计算和存储密度。

举例而言,一个电路实现了控制包含不同类型的具有不同特性(例如不同访问时间)的存储器的存储系统的运行,并且包括了实现对不同存储器进行访问的存储器控制电路。正如下文详细描述的,包括易失性和非易失性存储器的不同类型的存储器可以被实施。例如,一个延迟缓冲器会被耦接到一个存储器,用来补偿访问时间之间的差异。一个电路会被实施用于合并一个存储器的输出数据和经过延迟的另一个存储器的输出数据来产生依序(ordered)的输出数据。不同于传统的多核处理器装置,实施了数据流架构的fpga能够成功地补偿这些高访问延迟,也使得ssd存储器能够与dram合并使用,形成一个能有效替换dram的优选的存储架构。因此,基于fpga实现能够处理和存储万亿字节数据的存储设备将成为可能,该设备拥有低得多的成本、更低的功耗、提升的计算和存储密度和降低的延迟。

虽然说明书包括了定义一个或多个被认为是新实施例的特征的权利要求,但应当相信的是该电路和方法可以通过附图的描述来更好地被理解。虽然不同的电路和方法已被公开,但应当了解的是该电路和方法仅仅是本发明安排的一个典型示范,本发明安排可以通过不同形式来表现。因此,在本说明书中公开的具体结构和功能细节不能被认为是一种限制,而仅仅是作为权利要求的基础和作为教导本领域技术人员多方面以几乎各种合适的具体结构实施本发明安排的基础。进一步而言,文中的术语和措辞并不应该被认为是一种限制,而是提供了一种对于该电路和方法的可理解的描述。

首先看图1,展示了一个拥有多个存储器的集成电路器件的框图。特别地,输入/输出端口102被耦接到控制电路104,该控制电路控制了包含配置存储器108的可编程资源106。具体参见下图16-18的描述,配置数据通过配置控制器110向配置存储器108提供。该配置数据使得可配置单元109能够工作。多个存储元件,在此体现为存储器112和存储器113,与控制电路104和可编程资源106相耦接。存储器控制器114可以被耦接到控制电路104、可编程资源106和存储器112、113,并且能够接收该集成电路装置外部的数据或是通过i/o端口116传输信号。存储器控制器114能够控制存储器112和113,对此下文将会进行详细描述。或者如下文描述的,控制电路104或是可编程资源的电路能够控制存储器112和113。其它i/o端口可以与集成电路装置中的电路相耦接,例如图中所示,i/o端口118与控制电路104相耦接。列于下文更详细描述的电路和方法可以被实施在一块单独的集成电路芯片中,或者可以被实施在多芯片模块或是在存储器网络中控制不同类型存储器的其它系统中。

现在看图2,展示了一个用于控制包含不同类型存储器的存储系统的运行以及实现顺序处理的电路的框图。包含数据流架构的应用201可以实现与存储器控制电路203的通信,所述数据流架构具有数据流缓冲器。在图2和图3中,应用元数据展示在虚线内,而存储器请求和响应展示在实线内。当图2电路中的数据被“有序”路由时,响应于向图2中存储器发起的数据请求而产生的数据会以与请求相同的顺序被提供。相反地,当数据被“乱序”路由时,数据会忽略一个存储器相对于第二个存储器的任何延迟,以不同存储器输出数据的顺序被提供。也就是说,第一个数据请求所产生的数据可能会在之后的请求提供数据后才被提供。当图2中电路路由的数据是“顺序”路由的,元数据延迟缓冲器202被提供用以保证与某一特定数据请求相关联的元数据能够与该请求对应的输出数据相匹配。也就是说,由于元数据提供了与关联于数据请求的数据有关的信息,那么该元数据必须匹配与该数据请求相关联的数据。因此,该元数据延迟缓冲器需要保证任何由图2中存储器产生的数据都必须匹配与该数据相关联的元数据。

正如下文所更加详细描述的,应用201可以是任何通过集成电路实施的应用,或是一个较大系统(例如具有集成电路的计算机)中实施的集成电路。举例而言,应用201可以是一个具有通过图1的可编程资源106实施的处理单元的数据处理电路,而存储器控制器114可以通过存储器控制器203来实施。存储器选择电路204使得能够从多个可用的存储器207中选择存储器来进行读写数据操作。该存储器选择电路204可以与多个拥有多个相同类型存储器的存储子系统相连接,也可以包括用于访问第一类型存储器208(其产生第一类型存储器208的输出数据209)的第一存储器控制器206,以及用于访问第二类型存储器212(其产生第二类型存储器212的输出数据213)的第二存储器控制器210,其中第一类型存储器与第二类型存储器的类型不同。与第二类型存储器212的输出耦接的延迟缓冲器214使得数据合并电路216能够基于第一类型存储器208的输出数据209和经过延迟的第二类型存储器212的输出数据215来产生依序的输出数据。也就是说,依序的输出数据包含的数据具有与数据请求顺序相一致的期望的顺序,其中延迟缓冲器延迟了将被包括在依序输出数据中的一部分数据,这样数据合并电路126能够以正确的顺序放置将要被依序的输出数据。

图2中所有元件能够被实施在一个独立的集成电路(ic)中,或者分布在一个系统的多个ic中。存储器控制器206和存储器控制器210能够被放置在同一个ic上并与存储器控制电路203相关联,或者可以分别与拥有第一类型存储器208和第二类型存储器212的分离的存储子系统放置在一起。虽然图2的示例中仅仅展示了两种存储器类型,应当理解的是,包含两种以上存储器类型的电路和方法也能够被实施。

存储器控制电路203实现了对两种具有不同带宽和延迟特性的数据流进行合并。列于下文的电路和方法既能实现顺序处理,也能实现乱序处理。顺序处理能够通过插入人为的延迟平衡所有存储子系统延迟的方法来维持。这样的延迟需求可能需要大量的中间缓冲空间,实际大小取决于第一存储子系统的延迟,例如包含ssd的存储子系统。如果乱序处理是能够被接受的,那么所有有关存储器访问请求的对应信息会以流的形式穿过整个存储系统,其中一旦得到了存储子系统的响应,它们就会被合并回去进入输出数据流。另外,ssd接口上的预留空间可以被使用,典型的ssd接口的吞吐量会低于dram,可以通过将多个ssd接口组合起来以提升对ssd的带宽需求。

一个图2中布局的示例包括将ssd作为第一类型存储器以及将dram作为第二类型存储器。ssd(例如基于nand结构的闪存设备)凭借其提供的相较硬盘驱动器而言更高的性能(通过每秒输入输出运行次数(iops))和更低的访问延迟,正在存储器网络领域中快速地得到普及。ssd同时具有比dram更高的存储密度、更低的成本和更低的功耗。然而,一个通过同时实施这两种类型存储器来实现的存储器网络所面临的挑战是需要容忍这些存储器之间不同的访问延迟,其中ssd的访问时间可能是十微秒(us)量级,而dram的访问延迟可能是十纳秒(ns)量级。举例而言,存储器芯片的访问延迟会被明确规定。同样还可以测量一些dram和ssd的访问延迟。这个数据可以被用来确定延迟缓冲器的大小。例如,一些dram可能具有大约600纳秒的访问延迟,一些ssd可能具有大约100微秒的访问延迟。因此,如果第一个数据请求指向ssd,而之后的请求指向dram,那么dram数据在600ns之后可用(时间早于指向ssd的数据请求),为了保证输出数据的顺序,与dram相耦接的延迟缓冲器需要在100us-600ns(也就是99.4微秒)这段时间内缓冲dram产生的数据。假设dram的输出数据带宽为每240ns内输出512bit(64字节),那么延迟缓冲器的尺寸应该是64*(99400/240)=26507字节。在一个拥有尺寸为1024*4=4096字节的bram的fpga上,只需要使用(26507/4096)=7块bram来缓冲dram产生的数据,从而产生足够的延迟来包容ssd的访问延迟。于是,延迟单元使得ssd和dram可以被一起使用,其中fpga(例如图16中展示的fpga)的bram可以被用来提供足够的延迟,以保证产生依序的正确的数据。正如下文所更加详细描述的,数据直到经过一段合适的时间之后才会从bram中读出,这样bram的数据就被延迟了一段相对于ssd而言的正确的时间。传统多核处理器无法通过多线程读出操作来补偿这些过多的访问延迟,但是包含诸如图17描述的fpga这样的可编程资源使得具有不同访问延迟的存储器能够被一起实施。

如图3所示,具有不同类型存储器且能够实现乱序处理的存储系统不需要包含元数据延迟缓冲器。如虚线内所示,由于数据是乱序处理的,不需要为存储器的输出数据提供延迟,所以元数据是和数据一起在存储器控制器中传递的。也就是说,元数据与响应于数据请求而产生的数据相匹配,并被提供给应用201。

下文更加详细描述的电路和方法补偿了这些较大的访问延迟,并使得ssd能够与dram在同一个存储架构中联合使用。基于pld来创建一个存储设备,以较低的成本和功耗以及提升的计算和存储密度来对万亿字节的数据进行处理和存储,是具有可能性的。而且,相比较传统装置而言,该电路和方法能够以更低的访问延迟向网络提供数据。

使用了存储器控制电路203的存储器网络可以被实施为一个数据流架构,用于有效补偿特定类型存储器的或是各种其它较高的访问延迟,并且不会因为引入延迟而损失性能。举例而言,延迟可能会由于使用了fifo形式的延迟单元而被引入数据流架构中。这样的布局能够被有效地实施在诸如fpga一样的集成电路中,其中fpga中的bram能够被实施为fifo。由于bram可能不会用来实现别的功能,因此不需要使用专门的fifo来提供延迟,而是可以将bram(未用作其他用途的)实施为fifo来提供任意需要的延迟。进一步地,存储器控制电路能够确定一项是否被存储在某种特定的存储器中,进而可以将请求转发给对应的存储器控制器。正如下文所更详细描述的,这种决定可以基于许多不同的标准来完成,例如平衡dram和ssd之间的访问带宽,将特定的使用情况与实际存储容量相匹配,或是平衡当前的负载情况。

现在看图4,图中展示了一个用于控制存储系统运行的电路的框图,该存储系统包含访问不同类型存储子系统的电路。如图4所示,存储器控制电路203与多个与应用201相关联的处理单元(pe)406-412相耦接。举例而言,正如将在下文对图18和19所详细描述的,这些pe可以被实施在fpga的cle中。该存储器控制电路203包括具有存储器转译器418的存储器网络电路416。该存储器转译器418包括第一缓冲电路420,用于耦接以接收来自处理单元408的数据请求。该数据请求在输入422处被接收,并且来自处理单元对应的输出423。如图所示,存储在第二缓冲电路424并通过输出426产生的数据与处理单元408的对应的输入427相耦接。存储器转译器418中的缓冲电路420和424,以及下文描述的存储器控制器的缓冲器,可以被实施在fpga的bram中。延迟的时间长度可以变化,并且可以基于被实施为fifo的bram的数量来选择,从而提供一个被选择的延迟。也就是说,存储器控制器203通过从存储器的输出中选择一条路径以包括被实施为具有特定延迟的fifo的bram,从而实现了对提供了一个确定的、已知的延迟的bram的选择。在不需要延迟的情况下(也就是指乱序处理),举例而言,通过使用能够绕开延迟单元而路由的互连单元来旁路延迟单元。之后不同存储器的输出数据被存储器转译器418合并,从而实现顺序处理,其中依序的输出数据可以被存储在缓冲器424中。

存储器转译器418被耦接到存储器网络419,以实现对信号的控制,所述信号包括被路由到和路由自由存储器转译器控制的存储器的信号。特别地,在图中被举例为多路复用器的第一选择电路428被耦接到存储器转译器418,并受存储器转译器418控制,更具体地,该选择电路会被耦接以在第一输入429处接收存储器访问请求。该存储器访问请求之后会在选择电路428的多个相应输出430-434处被路由到多个存储器控制器(mc)中的一个。输出430在输入438处被耦接到存储器控制器436。缓冲电路441的输出437被耦接到所述多个存储器440(在图中显示为动态随机存取存储器(dram)),其中存储器控制器控制所述多个存储器440。需要指出的是dram是易失性存储器。缓冲电路442被耦接以在输入439处接收所述多个存储器440的输出,并在输出443处为存储器转译器418产生数据。缓冲电路441和442被实施为存储路由给存储器的请求,或者在数据被路由回存储器转译器前存储从存储元件接收的数据。由于dram具有比ssd更高的访问速率,缓冲器442能够提供延迟,使得存储器转译器能够按照正确的顺序为顺序处理提供正确的数据。

第二存储器控制器444被耦接到存储器网络419,并在输入446处被耦接到第二多个存储器445,其中所述多个存储器在图中举例为ssd,ssd是非易失性存储器,能够在掉电后保持数据。与上文关于存储器控制器436的描述类似地,缓冲器447和448能够存储从存储器转译器418接收的数据请求或从存储器445接收而来的数据。特别地,来自存储器转译器的数据请求会被提供给缓冲器447的输入446,并在输出449处产生,而产生于所述多个存储器445的输出处的数据被耦接到缓冲器448的输入450,并在输出451处产生数据。最后,第三存储器控制器452在输入454处被耦接到存储器网络419,同时第三存储器控制器452也被耦接到主存储器456。从存储器控制器452接收的数据请求会被储存在缓冲电路457中,其中提供到缓冲器457的输入459的数据请求会在输出460处产生,并被耦接到主存储器456。类似地,在输入461处从主存储器接收的数据会在缓冲电路458的输出462处产生,并被发送到存储器转译器418。

图中显示为多路复用器的第二选择电路470被耦接到该存储器转译器,更具体地,该选择电路被耦接以在输入472-476处接收存储器440、445和456的输出,其中被选中的输出在输出478处产生。被选中的存储器的输出被提供到存储器转译器418的输入处。存储器分配器控制选择电路470以保证从特定的存储器中获取到正确的数据,从而能够按照正确的顺序为顺序处理提供数据。尽管图中展示的只是作为示例的特定的存储元件,需要被理解的是,其它类型的存储元件也可以由存储器控制电路203控制。

现在看图5,图5是另一个框图,展示了控制具有访问不同类型存储器的电路的系统运行的电路。第二存储器转译器502与另一个处理单元(图中示为处理单元406)相关联。该存储器转译器包括第一缓冲器504和第二缓冲器506。第一缓冲器504被耦接以在第一输入508处接收来自处理单元406的输出509的数据请求。第二缓冲器506被耦接以在与第二处理单元406的输入512相耦接的第一输出510处产生数据。存储器转译器502同样被耦接到存储器网络419以实现对信号的控制,所述信号包括被路由到和路由自被存储器转译器502控制的存储器的信号。也就是说,第二选择电路470的输出514被耦接到存储器转译器502,同时存储器转译器502的输出被耦接到选择电路428的输入516。需要理解的是,可以实施两个以上的存储器转译器,并且存储器转译器的输出可以被耦接到不同的处理单元。

现在看图6,图6是一个流程图,描述了控制一个存储系统的运行的方法。框602中具有第一类型存储元件和第一访问时间的第一存储器被使得能够被访问。在框604中,访问具有第二类型存储元件和第二访问时间的第二存储器,其中第二类型存储元件和第一类型存储元件的类型不同。举例而言,对第一和第二存储器的访问能够通过输入/输出电路来提供,例如图18中集成电路的iob。框606中提供了与第一存储器控制器和第二存储器控制器相耦接的存储器选择电路,举例而言,该选择电路可以是多路复用器。在框608中,通过使用存储器选择电路和第一、第二存储器控制器来实现访问第一存储器和第二存储器中合适的存储器。框610中提供了可被配置为延迟缓冲器的可编程资源,用于补偿第一访问时间和第二访问时间之间的时间差。框612中提供了可编程互连,用于使得能够合并第一存储器的输出和经过延迟的第二存储器的输出以产生依序的输出数据。一个可以被实施为延迟缓冲器的可编程资源的示例包括图18的pld中的bram,而一个可编程互连的示例可以包括图18的pld中的可编程互连。

图7是一个流程图,展示了控制一个具有不同类型存储器的存储系统的运行的方法。框702中实施了与第一存储器控制器和第二存储器控制器相耦接的存储器选择电路。框704中实现了通过使用存储器选择电路和第一、第二存储器控制器来访问第一存储器和第二存储器中合适的存储器。举例而言,控制信号被提供给存储器选择电路,以保证数据被路由给正确的存储器,并被从正确的存储器中获取。框706中访问具有第一类型存储元件和第一访问时间的第一存储器。框708中访问具有第二类型存储元件和第二访问时间的第二存储器,其中第二类型存储元件与第一类型存储元件的类型不同。框710中,第二存储器输出的数据被耦接到延迟缓冲器,以补偿第一访问时间与第二访问时间之间的时间差。举例而言,该延迟缓冲器可以被实施为集成电路内的bram(例如图18中集成电路内的bram),所述bram能够通过在正确的时间从bram中读出来有效地提供合适的延迟。也就是说,如果从dram读出的数据被缓冲在bram中,但是来自ssd(必须被先读出)的数据还没有准备好,那么bram的读出使能电路不会被触发,数据将会在预定的延迟时间内被保存在bram中。因此,可以通过将数据缓冲在bram中,对数据进行延迟,并在预定的延迟时间过后,将数据从bram中读出。在框712中,第一存储器的输出和经过延迟的第二存储器的输出被合并,以产生依序的输出数据。

图6和图7中的多种元件可以通过使用如图1-5中所描述的电路或是其它合适的电路来实施。虽然图中描述了方法中的一些具体的元件,但是需要被了解的是,该方法中的其它元件或是与元件相关的附加细节都可以根据图1-5公开的内容来实施。

现在看图8,图8是一个框图,展示了用于在环形节点的实施例中分配存储器的电路。图8中的电路展示了对元件的布局,其中环形节点实施例中的节点802有更详细的描述。特别地,每个节点802包括与输入缓冲器806和输出缓冲器808相耦接的仲裁器804。仲裁器804在缓冲器806和缓冲器808之间提供了一个接口,用于向环上的其节点(例如存储器控制器或存储器转译器)发送数据或接收数据。图8中的电路实施了基本的令牌环,仲裁器一旦接收到了特定的数据(也就是令牌),便会将数据从发送缓冲器传输到环上,而一旦它确定了目的地址是它所在的节点,那么便会将环上的数据传输到输入缓冲器。图8中令牌环布局既可以被用在顺序处理中,也可以被用在乱序处理中。虽然图6中的方法可以通过不同的拓扑结构来实施(例如,环形、网状或是圆环面拓扑),但是图7中的环形互连拓扑总体使用较少的路由资源并具有可预知的延迟。而且,当系统中包含大量的存储节点时,环形拓扑会具有优势。

现在看图9,图9是一个框图,展示了存储器转译器418的架构。特别地,输入缓冲器420被耦接到地址译码器904,并提供了将数据存入存储器的请求。地址译码器904的输出被耦接到分析器906以及地址转译和分配块908。如下将参考图10详细描述的,分析器906可根据情况来确定数据被存入哪一个存储器,以优化存储器网络的运行。响应于地址译码器904和分析器910,地址转译和分配块908会输出地址。也就是说,地址转译和分配块908会决定存储器440、445和456中哪一个将被访问。输出缓冲器424被耦接以接收存储器的输出。

分析器906实现了对存储子系统的分析,以确定访问哪一个存储器,例如快速存取存储器(例如dram)或是较慢速存取存储器(例如ssd)。根据对存储器性能的观察,存储子系统可以被实施为能够支持预定的数据量。例如,当在一个存储器网络中实施dram和ssd时,一种缓存(memcached)实施例说明一些ssd能够支持10吉比特每秒(gbps)的数据接口的数据请求的1%以用于访问数据。也就是说如果10gbps的缓存请求中的1%导致了要从ssd中获取数据,那么该缓存请求仍然能够产生10gbps的响应。举例而言,2千字节(kbyte)可以被用作为用来区分对存储器的访问的阈值。也就是说,如果请求需要获取的数据量超过2kb,那么它们会访问ssd,否则,它们会访问dram。然而,在实际被实施时,如果获取较大数据量(在此例子中指的是大于2kb)的请求次数超过了所有数据请求的1%,那么就有必要将阈值提高一些值。例如,该阈值可以被提高1024字节(也就是1kb)来保证只有1%的访问是与存储在ssd中的数据相关的。图10中的流程图说明了修改阈值来得到优化性能的过程。它假设了一些访问频率(例如,1%访问ssd,99%访问dram),并且建立了一个访问频率到数据规模的映射关系。于是,如果数据访问规模比阈值小,就访问dram。然而,如果数据访问规模大于该阈值,那么就查看该数据规模的访问频率,来确定是否需要调整阈值。如果该频率太高,那么需要减小阈值。如果该频率太低,则需要增大阈值。

特别地,地址译码在框1002中执行,其中确定了要访问的多个字节。一张关于数据规模和访问频率的配对的表在框1004中更新,其中生成了数据规模和访问频率。数据规模(也就是指字节数)被用来将存储器访问分配到不同的存储器类型,例如dram或ssd。进一步地,不同存储器(例如dram或ssd)具有不同的访问粒度,即访问的字节数。例如,ssd具有页(page-wise)(例如4k字节)的访问粒度。因此,如果一个字节从ssd(在一次访问中可以产生一个4k字节数据)中被获取,本质上访问一个字节的数据和访问一页数据所需要的时间是一样的,这样存储器性能会非常差,因为大多数的存储器访问带宽被浪费了。然后确定数据尺寸是否大于框1006中的阈值。如果大于阈值,那么便确定框1008中的频率是否过高。如果频率过高,框1010中将阈值寄存器减去1024比特后的结果记录到寄存器中。如果频率没有过高,那么框1012中确定频率是否过低。如果频率过低,那么框1014中将阈值寄存器加上1024比特后的结果记录到寄存器中。然后地址转译在框1016中执行,基于数据规模和阈值大小来将数据存储到合适类型的存储器中。

当实施一个具有不同类型存储器的系统时,需要确定特定的数据应当被存储在哪个类型的存储器中。图11的流程图展示了一种确定将数据存储在多个存储器中的哪个存储器的方法。框1102中实施了具有第一类型存储元件和第一访问时间的第一存储器,框1104中实施了具有第二类型存储元件和第二访问时间的第二存储器,其中第二类型存储元件和第一类型存储元件的类型不同。框1106中使得能够对第一存储器和第二存储器进行访问。如图4和图5所描述的,第一和第二类型存储器可以是nand或ssd存储器。框1108中确定了与第一存储器和第二存储器相关联的访问时间。举例而言,不同类型存储器的访问时间可以由存储设备的制造商提供或是在存储设备的工作过程中确定。框1110中实现了与第一存储器控制器和第二存储器控制器相耦接的存储器选择电路。框1112中,通过使用存储器选择电路以使得能够访问第一存储器和第二存储器中合适的存储器。对于合适的存储器的访问是基于特定的准则的,例如与第一存储器和第二存储器相关联的确定的存储时间,以及需要存储的数据的规模。因此,如下文所更详细描述的,基于存储器的访问时间和数据规模,可以将数据存储到特定的存储器(例如dram或者ssd存储器)中。例如,具有多个页大小的数据可能会被存储在ssd中,而规模较小的数据会被存储在dram中。进一步而言,如上文图10中的描述,存储器转译器能够决定会被存储在dram中的较小数据规模的阈值。

现在看图12,图12是一个展示了dram的框图。dram块1200包括多个存储单元1202,其中每一个都与地址译码器1204相耦接。如图中所示,地址译码器1204接收地址线1206,并生成与多个存储单元1202相耦接的地址。地址译码器1204接收芯片使能信号,每个存储单元1202接收参考电压vref。写入块1210实现了从存储单元1202中读出数据和向存储单元1202写入数据。特别地,如果提供给写入块1210的写入使能信号通过门1214使能对存储单元1202的写入,那么通过数据线1212提供的数据会被写入提供给地址译码器的地址内。如果写使能信号没有使能对存储单元1202的写入,那么耦接到反相器1216的数据会在数据线1218生成。如下文所更详细描述的,存储在dram块的存储单元内的数据必须被周期性地刷新,才能保持数据。

现在看图13,图13是一个框图,展示了图12中dram的存储元件。特别地,第一晶体管1302有与参考比特线相耦接的漏极1304,以及与电容器1308相耦接的源极1306。参考字线在栅极1310处控制晶体管1302。第二晶体管1314有与位线相耦接的漏极1316,以及与电容器1320相耦接的源极1318。字线在栅极1322处控制晶体管1314。通过将字线拉高,并将期望存储的数值施加到位线上给电容器1320充电,可以实现数据的写入操作。为了从存储器中读取数据,感应放大器1326会检测存储在位线处电容器1312的电压和存储在位线处电容器1324的电压之间的电压差来产生输出值。在确定了位线的值之后,通过在电容器1324上存储适当的电荷来将该值重新写回位线。也就是说,电容器1324会被周期性地重新充电来维持存储在单元内的正确数据。dram存储单元必须被周期性地刷新,来维持电容器内表示存储值的电荷量,不过dram存储单元具有比ssd存储单元更短的访问时间。

现在看图14,图14是一个框图,其中展示了一个ssd存储器。该ssd包括一个具有处理器1404和缓冲电路1406的ssd控制器1402,处理器1404和缓冲电路1406都与多路复用器/多路分配器相连接。多路复用器/多路分配器电路1408从多个ssd1410-1416中的一个接收数据,并向之提供数据。接口电路1418实现了ssd与一个装置的存储接口(例如存储器控制电路203的存储器控制器)之间的数据传输。

现在看图15,图15是图14中的ssd存储元件的框图。图15中的存储元件包括衬底1502,衬底1502具有源极1504和被位线控制的漏极1506。字线控制了一个栅极单元,该单元拥有控制栅极1508,氧化层1510将该控制栅极1508与置于氧化层1514上的浮置栅极1512隔开。尽管文中提供了与dram和ssd存储设备相关的电路的示例,但需要被理解的是,其它电路也可以被实施。

图16是一个实现了实施多种存储器类型的键值存储(key-valuestore)的电路的框图。键值存储实现了通过通信或网络接口来存储和获取具有关联的键的数值(而不是由地址来索引)。集成电路1602可以通过键值存储控制电路1604来实施,该电路与耦接到一个或多个网络接口1608以接收数据的i/o块1606,和被耦接到一个或多个网络接口1612以输出数据的i/o块1610。键值存储控制电路1604可以根据上文所述的控制电路203来实施。根据图16中的实施例,存储器接口1614实现了与第一组多个存储设备1616(图中示为dram)中的一个或多个存储设备通信,第二存储器接口1618实现了与第二组多个存储设备1620(图中示为ssd)中的一个或多个存储设备通信。

ssd提供了许多好处,其中包括更低的成本和更低的功耗。而更重要的是,ssd使得键值存储能够通过更少的引脚(例如4个引脚)提供明显更大的存储密度(例如500gb的存储)。那是因为,ssd使用了高速串行接口,诸如串行高级技术附件(sata)、串行连接scsi(sas)或是外围设备互连高速总线标准(pcie),因此只需要较少的输入/输出(i/o)引脚。与之相反的是,一种dram小型双列直插式内存模块(sodimm)接口需要大约140个i/o引脚来连接8gb的存储。虽然ssd通常比dram具有更慢的访问速度,但是只要将数据存储在合适的存储设备中,例如将大块数据存储在ssd中,那么该电路的运行是能够得到优化的。

举例而言,存储器接口1614和1618能够如上文参考图2所描述的那样被实施。虽然示例中描述的是dram和ssd,但需要被理解的是,其它类型的存储元件也可以被实施,而对特定类型存储设备的选择是基于该存储设备的运行参数来决定的。

通过基于不同存储设备的访问特性来决定使用哪种类型的存储设备用于键值存储的各种数据,可以选择用于访问键值存储的一个或多个存储元件,从而实现对键值存储的高效操作。根据一个实施例,存储器管理电路将一个数据块分割成第一数据部分和第二数据部分,其中第一数据部分和第二数据部分分别被提供给不同的存储器类型。根据另一个实施例,基于访问准则(例如访问的速度或频率),数据(既可以是完整的数据块或是数据块的一部分)被发送给选中的存储器类型。

ssd的一个重要方面与它的按块(block-wise)访问特性和低i/o引脚需求有关。虽然这种访问特性可能对一些用于实施键值存储的应用不利,然而却可以在其它应用中发挥优势。例如,对ssd进行比页尺寸(例如4k字节的页尺寸)小的访问,效率会变得很低。因此,为了最优化访问性能,除ssd以外,还提供了dram,使得数据在ssd和dram之间分配。然而,dram需要更多的i/o引脚来传输数据。因此,在混合实施的存储器类型选择时,需要考虑很多因素。

根据一个实施例,键值存储中的数据访问或存储会被分成2部分。包含了多个页的数据的部分会被存储在ssd中,剩余部分会被存储在dram中。这样,ssd只会以完整的页尺寸被访问,从而最优化了访问性能。虽然需要维护一个链表,并在dram和ssd之间进行数据移转,但这种混合架构已经能够提供显著提升的性能了。

现在看图17,图17是一个框图,展示了根据一种安排对具有可编程资源的器件进行编程的系统。特别地,计算机1702被耦接以接收来自存储器1706的电路设计1704,并生成存储在非易失性存储器1706的配置比特流。如下文所更详细描述的,该电路设计可以是高层次设计,例如通过硬件描述语言(hdl)定义的电路设计。同样,该计算机可以被配置以运行能够生成配置比特流的软件,配置比特流被存储在非易失性存储器1708中并被提供给集成电路1710,该集成电路可以是可编程集成电路,就如同下文图18所描述的集成电路。正如下文所更详细描述的,配置比特流中的比特被用来配置集成电路中的可编程资源。

现在看图18,图18是一个框图,展示了一个具有可编程资源的器件,其中的可编程资源包括图1-5所示的电路。具有可编程资源的器件可以用任何类型的集成电路器件来实施,诸如具有可编程资源的专用集成电路(asic),其它器件包括了专用可编程逻辑器件(pld)。有一种pld是复杂可编程逻辑器件(cpld)。cpld包括两个以上通过互连开关矩阵互相连接,且与输入/输出(i/o)资源相连接的“功能块”。cpld的每个功能块都包括与在可编程逻辑阵列(pla)或可编程阵列逻辑(pal)设备中所使用的相似的二级与/或门结构。另一种pld是现场可编程门阵列(fpga)。在一个典型的fpga中,配置逻辑块(clb)的阵列被耦接到可编程输入/输出块(iob)。clb和iob通过可编程路由资源的架构互连。这些clb、iob和可编程路由资源可以通过加载配置比特流来定制,比特流通常是从片外存储器被加载到fpga的配置存储单元内。对于这两种可编程逻辑器件,器件的功能受到为了实现该功能而提供给器件的配置比特流中的配置数据比特控制。该配置数据比特可以被存储在易失性存储器(例如fpga和一些cpld中的静态存储单元),非易失性存储器(例如一些cpld中的闪存),或是任何其它类型的存储单元中。

图18中的器件包括一个具有许多不同的可编程片的fpga架构1800,可编程片包括多千兆位收发器(mgt)1801、clb1802、随机存取存储器块(bram)1803、输入/输出块(iob)1804、配置和时钟逻辑(config/clocks)1805、数字信号处理块(dsp)1806、专用输入/输出块(i/o)1807(例如配置端口和时钟端口)和其它可编程逻辑1808(诸如数字时钟管理器、模数转换器和系统监视逻辑等)。举例而言,一些fpga还包括可以被用来实施软件应用的专用处理器块(proc)1810。

在一些fpga中,每个可编程片包括可编程互连元件(int)1811,int1811具有去往和来自每个相邻片内的对应的互连元件的标准化连接。因此,可编程互连元件一起实施了所述fpga的可编程互连结构。如图18顶端包括的示例,可编程互连元件1811同样包括去往和来自同一个块内的可编程逻辑元件的连接。

举例而言,clb1802可能包括可配置逻辑元件(cle)1812,该cle1812可以被编程以实施用户逻辑加上单个互连元件1811。除了一个或多个可编程互连元件之外,bram1803还可以包括bram逻辑元件(brl)1813。bram包括与配置逻辑块内的分布式ram所相互分离的专用存储器。通常地,片内包含的互连元件的数量取决于片的高度。在图示的布局中,一个bram片的高度相当于5个clb的高度,不过该高度也同样可以相当于其它个数的clb的高度。除了适当个数的可编程互连元件之外,dsp片1806还可以包括dsp逻辑元件(dspl)1814。举例而言,除了一个可编程互连元件1811的实例之外,iob1804还可以包括两个输入/输出逻辑元件(iol)1815的实例。器件连接的位置由为了实现该功能而被提供给器件的配置比特流中的配置数据比特控制。可编程互连响应于配置比特流中的比特使包括互连线的连接能够将各个信号耦接到在可编程逻辑中实施的电路或是其它电路(例如bram或处理器)。

在图示的布局中,裸片中央附近的柱状区域被用于配置、时钟和其它控制逻辑。从该柱延伸的配置/时钟分布区域1809被用于在fpga的宽度上分配时钟信号和配置信号。一些使用了图18所示的架构的fpga包括打乱构成fpga的大部分的常规柱状结构的附加逻辑块。这些附加逻辑块可以是可编程块和/或专用逻辑。举例而言,图18中所示的处理器块proc1810跨越了若干个clb和bram柱。

需要注意的是,图18仅仅是用来图解一种示例性的fpga架构。一个柱中的逻辑块的个数、柱的相对宽度、柱的数量和顺序、柱中包含的逻辑块的类型、逻辑块的相对尺寸大小、以及图18顶部包括的互连/逻辑实施例都仅仅是示例性的。举例而言,在一个实际的fpga中,任何clb存在的地方,通常都包括不止一个相邻的clb柱,从而有助于用户逻辑的有效实施。虽然图18中的布局是关于一个包含可编程资源的集成电路,需要被理解的是,下文更详细描述电路和方法可能被实施在任何类型的asic中。

现在看图19,图19是一个框图,展示了图18器件中的可配置逻辑元件。特别地,图19以简化的形式说明了图18中可配置逻辑块1802内的可配置逻辑元件。在图19的布局中,片(slice)m1901包括4个查找表(lutm)1901a-1901d,每个查找表都被六个lut输入端a1-a6、b1-b6、c1-c6、d1-d6所驱动,并且都提供2个lut输出信号o5和o6。查找表1901a-1901d各自的o6输出端分别驱动所述片的输出端a-d。lut的数据输入信号由fpga互连结构通过输入多路复用器来提供,所述输入多路复用器可以通过可编程互连元件1911来实施,并且lut的输出信号也被提供给互连结构。片m同样还包括:驱动输出端amux-dmux的输出选择多路复用器1911a-1911d;驱动存储元件1902a-1902d的数据输入端的多路复用器1912a-1912d;组合的多路复用器1916、1918和1919;跳跃多路复用器(bouncemultiplexer)1922-1923;由反相器1905和多路复用器1906组成的电路(共同在输入时钟的路径上提供了可选的反相时钟);以及包含了多路复用器1914a-1914d、1915a-1915d、1920-1921和异或门1913a-1913d的进位逻辑。如图19所示,所有这些元件都被耦接在了一起。图19没有显示多路复用器的选择输入,而实际上这些选择输入受配置存储单元的控制。也就是说,存储在配置存储单元中的配置比特流内的配置比特与多路复用器的选择输入相耦接,以选择正确的输入连接到多路复用器。为了清楚起见,图19和其它在此被选取的附图中都省略了这些已经被熟知的配置存储单元。

在图示的布局中,每个存储元件1902a-1902d都可以被编程以具有同步或异步触发器或锁存器的功能。通过对同步/异步选择电路1903进行编程,可以对片中所有4个存储元件进行同步或异步功能之间的选择。当对一个存储单元进行编程以使s/r(置位/复位)输入信号提供置位功能时,rev输入端将提供复位功能。当对一个存储单元进行编程以使s/r(置位/复位)输入信号提供复位功能时,rev输入端将提供置位功能。存储元件1902a-1902d的时钟受时钟信号ck驱动,举例而言,该时钟信号ck可以通过全局时钟网络或互连结构来提供。这种可编程存储元件在fpga设计工艺中是众所周知的。每个存储元件1902a-1902d都向互连结构提供寄存的输出信号aq-dq。由于每个lut1901a-1901d提供了两个输出信号o5和o6,lut可以被配置成2个具有五个共享输入信号(in1-in5)的5输入lut或是1个具有输入信号in1-in6的6输入lut。

在图19的布局中,每个lutm1901a-1901d能够在几种模式中的任意一种模式下工作。当在查找表模式下工作时,每个lut具有由fpga互连结构通过输入多路复用器而提供的6个输入信号in1-in6。基于信号in1-in6的值,可以从配置存储单元中可编程地选择出64个数值中的一个。当在ram模式下工作时,每个lut可以作为单个64位ram或是两个具有共享地址的32位ram。ram的写入数据通过输入端di1(通过用于lut1901a-1901c的多路复用器1917a-1917c)向64位ram提供,或是通过输入端di1和di2向两个32位ram提供。lutram中的ram写入操作受到来自多路复用器1906的时钟信号ck和来自多路复用器1907的写入使能信号wen控制,多路复用器1907能够选择性地传递时钟使能信号ce或是写入使能信号we。当在移位寄存器模式下工作时,每个lut可以作为两个16位移位寄存器或是由两个16位移位寄存器级连形成的32位移位寄存器。移位输入信号通过输入端di1和di2中的一个或两个提供。16位和32位移位输出信号可以通过lut的输出端来提供,并且32位移位输出信号还可以更加直接地通过lut的输出端mc31来提供。lut1901a的32位移位输出信号mc31还可以通过输出选择多路复用器1911d和cle输出端dmux被提供给一般的互连结构,用以形成移位寄存器链。于是,列于上文的电路和方法可以被实施在诸如图18和图19的设备和任意其它合适的设备中。

因此应该意识到上文中描述了用于控制存储系统运行的电路和方法。对于所属技术领域的专业人员,应该意识到会有许多并入本公开的发明的备选方案和等价方案。因此,本发明不限于上述内容,而仅仅由所附权利要求限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1