用于固态驱动器的直接存储器寻址的方法与系统的制作方法

文档序号:6377919阅读:189来源:国知局
专利名称:用于固态驱动器的直接存储器寻址的方法与系统的制作方法
技术领域
本申请总体上涉及改进的数据处理装置与方法,尤其涉及用于直接存储器寻址固态存储设备的机制。
背景技术
固态驱动器(SSD)是使用固态存储器来存储永久性数据的数据存储设备,其目的是以与传统块I/o硬盘驱动器相同的方式提供访问。SSD与传统的硬盘驱动器(HDD)是有区别的,HDD是包含自旋盘和可运动读/写头的机电设备。相反,SSD使用在非易失性存储器芯片中保留数据的微芯片而且不包含运动的部分。与机电HDD相比,SSD—般更不易受到物理撞击影响、更安静而且具有更短的访问时间和等待时间。但是,许多SSD使用与硬盘驱动器相同的接口,例如串行连接SCSI (SAS)、串行高级技术附件(SATA)和光纤通道,由此允许HDD和SSD可以在同一个外壳中使用并且允许应用程序无缝地利用任何一方。由于几个原因,使用为HDD设计的接口导致等待时间增加。首先,如果SSD不在SAN中,则存在SAN结构延迟和由用于目录查找等的外部存储控制器造成的延迟。对于存在于PCI Express链路上的SSD,等待时间最显著的形式实际上是通过软件驱动器然后等待DMA完成并处理完成状态的软件等待时间。有些SSD可以附连到快速外围部件互连(PCIe)接口。这是减小等待时间的一种有效途径。因为在SSD中所使用的非易失性存储器,即,闪速存储器,是面向块的而且在它们可以被写之前需要擦除,因此,软件驱动器使用HDD访问方法来写和读数据。这涉及建立分散/收集列表并把控制块发送至PCIe卡,以便告诉SSD在哪里取数据,而且随后完成状态必须发送到操作完成的驱动器。这种接口方法导致显著增加的等待时间来建立分散收集列表、向存储设备发送命令、等待DMA完成及最后的结束状态。

发明内容
在一种例示性实施方式中,提供了一种用于在存储设备中进行直接存储器访问的方法。这种方法包括执行存储器地址的窗口到存储设备的逻辑块寻址(LBA)范围的映射;以及,响应于从主机接收到指定在所述存储器地址的窗口内的写地址的写请求,初始化该存储设备中的第一存储器缓冲区。这种方法还包括把所述第一存储器缓冲区与所述存储器地址的窗口内的第一地址范围相关联,使得所述请求的写地址在所述第一地址范围内。这种方法还包括基于所述写地址写到所述第一存储器缓冲区;以及,响应于该缓冲区写满,基于所述映射利用逻辑块寻址把所述第一存储器缓冲区的内容永久保存(persist)到所述存储设备。在另一种例示性实施方式中,提供了一种计算机程序产品,该计算机程序产品包括具有计算机可读程序的计算机可用或可读介质。所述计算机可读程序当在计算设备上执行时使所述计算设备执行以上关于方法例示性实施方式所概述的各个操作及其组合。在又一种例示性实施方式中,提供了固态驱动器。这种固态驱动器包括多个存储器缓冲区、固态存储器和控制器。所述控制器配置成响应于从软件应用程序接收到访问在所述固态驱动器中的一个存储器地址处的数据的请求,而把所述存储器地址转换成逻辑块寻址(LBA)地址,并且执行访问操作来利用所述LBA地址访问所述固态驱动器中的固态存储器。所述固态驱动器可以包括一个或多个控制器和耦合到一个或多个处理器的存储器。该存储器可以包括指令,所述指令当被一个或多个处理器执行时使得所述一个或多个处理器执行以上关于方法例示性实施方式所概述的各个操作及其组合。本发明的这些和其它特征及优点将在以下对本发明的实例实施方式的具体描述中予以描述,而且将由于所述描述而对本领域的普通技术人员变得显而易见。


通过参考以下对例示性实施方式的具体描述并联系附图,将最好地理解本发明及其优选使用模式和更多的目的与优点,附图中图1是可以实现例示性实施方式的各方面的示例数据处理系统的框图;图2是例示了根据例示性实施方式的用于固态驱动器的直接存储器寻址的框图;图3是例示了根据例示性实施方式的固态驱动器控制器在固态驱动器中直接存储器访问的操作的流程图;图4是例示了根据例示性实施方式的固态驱动器控制器用于初始化缓冲区的操作的流程图;图5是例示了根据例示性实施方式的控制器用于回收缓冲区的操作的流程图;图6是例示了根据例示性实施方式的固态控制器用于把数据从缓冲区永久保存到固态驱动器存储器的操作的流程图;图7是例示了根据例示性实施方式的控制器用于把数据转换成逻辑块寻址并且把块写到配置用于分条(striping)的固态驱动器的操作的流程图;图8是例示了根据例示性实施方式的控制器用于在伴随卡缓冲区(companioncard buffer)中存储的操作的流程图;及图9是例示了根据例示性实施方式的控制器用于处理电源事件的操作的流程图。
具体实施例方式例示性实施方式提供了用于固态驱动器的直接存储器寻址的机制。这种机制提供了从存储器寻址到固态驱动器中扇区寻址的转换。这种机制利用可由主机访问的地址窗口来初始化固态驱动器。该主机把数据块直接写到存储器地址窗口,由此直接写到固态驱动器,而不是对驱动器进行调用。固态驱动器包括多个存储器缓冲区。所述机制把主机所写的数据写到存储器缓冲区、把存储器地址范围映射到固态驱动器中的扇区并且利用逻辑块寻址(LBA)把数据写到固态驱动器。主机同时可以有多个活动的线程。这意味着主机可以写到在X处的地址,随后寻址Y并返回,以及写到X之后下一个连续的地址。尽管缓冲区的个数对本发明没有影响,但是现代具有逻辑分区的对称多处理器系统常常有许多活动的线程,而且本发明的例示性实施方式可以有32个或者甚至64个缓冲区,每个缓冲区都在不同的地址被主机启动。这种固态盘可以具有多个形状因子,包括硬盘驱动器形状因子、PCIExpress卡或任何数量具有PCI Express的定制形状因子、光纤通道、SAS、SATA、DDR3或者任何数量的协议。例示性实施方式可以用在许多不同类型的数据处理环境中,包括分布式数据处理环境、单数据处理设备、存储系统、嵌入式计算机系统等。为了提供描述例示性实施方式的特定元素与功能性的背景,图1在下文中作为一种示例环境提供,其中可以实现例示性实施方式的各方面。应当认识到,图1仅仅是一个例子而不是要断言或者暗示关于其中可以实现本发明各方面或实施方式的环境的任何限制。在不背离本发明主旨与范围的情况下,可以对所述环境进行许多修改。图1是一种可以实现例示性实施方式的各方面的示例数据处理系统的框图。在所述示例中,数据处理系统100采用集线器体系结构,该集线器体系结构包括北桥和存储器控制器集线器(NB/MCH)102以及南桥和输入/输出(I/O)控制器集线器(SB/ICH)104。处理单元106、主存储器108和图形处理器110连接到NB/MCH 102。图形处理器110可以通过加速图形端口(AGP)连接到NB/MCH 102。在所述示例中,局域网(LAN)适配器112连接到SB/ICH 104。音频适配器116、键盘与鼠标适配器120、调制解调器122、只读存储器(ROM) 124、硬盘驱动器(HDD) 126、⑶-ROM驱动器130、通用串行总线(USB)端口与其它通信端口 132及PCI/PCIe设备134通过总线138和总线140连接到SB/ICH 104。PCI/PCIe设备可以包括例如用于笔记本计算机的PC卡、以太网适配器和附加卡。PCI使用卡总线控制器,而PCIe不用。ROM 124可以是例如闪存基本输入/输出系统(BIOS)。HDD 126 和 CD-ROM驱动器 130 通过总线 140 连接到 SB/ICH104。HDD 126 和 CD-ROM驱动器130可以使用例如集成驱动电子设备(IDE)或者串行高级技术附件(SATA)接口。超1/0(SIO)设备136可以连接到SB/1CH 104。操作系统在处理单元106上运行。操作系统协调并提供对图1的数据处理系统100中的各种部件的控制。作为客户端,操作系统可以是商业上可以获得的操作系统,例如Microsoft Windows 7 (Microsoft和Windows是位于美国、其它国家或者两地都有的微软公司的商标)。面向对象的编程系统,例如Java编程系统,可以和操作系统一起运行,并且从在数据处理系统100上执行的Java程序或者应用程序提供对操作系统的调用(Java是Oracle和/或其关联公司的商标)。作为服务器,数据处理系统100可以是例如IBM 的eServer System JJ 计算机系统,运行高级交互执行程序(AIX )操作系统或者LINUX操作系统(IBM、eServer、System p和AIX是位于美国、其它国家或者两地都有的国际商业机器公司的商标,而LINUX是位于美国、其它国家或者两地都有的Linus Torvalds的注册商标)。数据处理系统100可以是在处理单元106中包括多个处理器的对称多处理器(SMP)系统。作为另选,也可以采用单处理器系统。用于操作系统的指令、面向对象的编程系统以及应用或程序位于诸如HDD 126的存储设备上,而且可以加载到主存储器108中用以由处理单元106执行。总线系统,例如图1中所示的总线138或者总线140,可以由一条或多条总线构成。当然,总线系统可以利用任何类型的通信结构或者体系结构实现,这种通信结构或者体系结构在附连到所述结构或体系结构的不同部件或设备之间提供数据传输。通信单元,例如图1的调制解调器122或者网络适配器112,可以包括用于发送和接收数据的一个或多个设备。存储器可以是例如主存储器108、ROM 124或者诸如在图1的NB/MCH 102中找到的高速缓冲存储器。本领域普通技术人员将认识到,图1中的硬件可以依赖实现而变化。其它的内部硬件或者外围设备,例如闪速存储器、等效的非易失性存储器或者光盘驱动器等,可以在除图1中所述的硬件之外或者代替其使用。数据处理系统100可以采取任意多种不同数据处理系统的形式,包括客户端计算设备、服务器计算设备、平板计算机、膝上型计算机、电话或者其它通信设备、个人数字助理(PDA),等等。在有些例示性示例中,数据处理系统100可以是配置成具有闪速存储器的便携式计算设备,其中的闪速存储器提供例如用于存储操作系统文件和/或用户生成的数据的非易失性存储器。从根本上讲,数据处理系统100可以是没有体系结构限制的任何已知的或者以后开发的数据处理系统。以下关于例示性实施方式描述的固态驱动器(SSD)可以是例如盘126、可以连接到PCI/PCIe设备134或者可以直接连接到总线138。图2是例示了根据例示性实施方式的用于固态驱动器的直接存储器寻址的框图。例如,固态驱动器(SSD) 220可以是图1的PCI/PCIe设备134中的PCIe设备,而应用210可以在图1中的处理单元106上执行。能够经PCIe把数据写到SSD 220允许更简单的接口并且减小了等待时间。更特别地,应用210可以经直接存储器寻址写到SSD220,而不使用设备驱动器。相反,应用210直接写到SSD 220上的存储器地址窗口并从其读取。在一种示例实施方式中,存储器地址窗口包括32GB的存储器空间。SSD 220初始化控制器224将地址窗口映射到的起始LBA地址。在一种示例实施方式中,控制器224把32GB的窗口映射到逻辑单元号(LUN),具有从0到32GB/512-1或者64MB-1的LBA范围。SSD 220有多个随机存取存储器(RAM)缓冲区222。这些缓冲区可以是DRAM或者SRAM。它们可以是ASIC或者ASIC或FPGA的外部存储器的一部分。这些缓冲区222允许写以RAM的速度发生,其后应用210完成。在一种示例实施方式中,DRAM缓冲区222可以是4K的页面存储器缓冲区。其它实施方式可以实现512字节的扇区缓冲区。控制器224跟踪空闲列表232中的可用缓冲区。每次当控制器224初始化一个缓冲区来使用时,控制器224都从空闲列表232除去该缓冲区、把该缓冲区映射到SSD 220的存储器地址空间中的一个地址范围并且为该缓冲区设置定时器234。在一种示例实施方式中,缓冲区可以是动态随机存取存储器(DRAM);但是,如果缓冲区是SRAM、新型相变存储器、MRAM或者其它可以市场化的新型技术,示例性实施方式的各方面也将同样很好地工作。为了最好的操作,SSD 220期待应用210写整数个512字节的扇区。因为高速缓存线小于512字节,所以期望把一个写分成多个高速缓存线写。SSD 220连续地接受写,直到缓冲区写满或者耗尽了某个可编程的时间。这些写可以与应用对其它地址的写相交织,而且,以这种方式,可以并行填充多个缓冲区。一旦一个缓冲区被填满,它就写到非易失性介质并且被释放,用于接受不同的地址。情况还可能是,SSD 220中的控制器224可以初始化与每个缓冲区相关联的定时器234。一旦定时器234到期或者缓冲区满了,控制器224就把缓冲区222中的数据转换成一组逻辑块地址(LBA)块。控制器224把要写的地址转换成闪速存储器226范围内的LBA。例如,控制器224将把窗口中的地址512M转换成LBA 1M。当存储器缓冲区222满了或者至少按预定的百分比满了时,控制器224可以回收该缓冲区。控制器224把回收的缓冲区返回到空闲列表232。一旦排列好了 LBA块,控制器224就象使用普通的硬盘驱动器(HDD)访问方法一样精确地处理扇区。例如,如果LUN是针对简单磁盘簇(JBOD)建立的,则控制器将简单地把数据写到闪速存储器226中指定的LBA。如果LUN是针对独立磁盘冗余阵列(RAID) 5或6建立的,其中RAID 5或6使用块级的分条,其中奇偶校验数据跨全部成员盘分布,而且所写的数据小于一个条,则控制器224从闪速存储器226读取旧的数据和旧的奇偶校验、合并新数据与旧数据、并且对结果产生的条执行XOR(异或)运算,来确定新的奇偶校验。让应用210写到扇区(512字节)边界上对于性能而言是优选的。如果地址不在扇区边界上开始或者数据没有在扇区边界上结束,则控制器224从闪速存储器226读取旧的扇区、合并新数据与旧数据、并且把结果产生的扇区数据写到闪速存储器226。SSD 220能够处理多个线程与到不同地址的写。对于读,控制器224简单地把地址转换成LBA,然后根据普通的HDD访问方法访问闪速存储器226。这以与写相似的方式使用缓冲区。主机处理器有可能以相对小的高速缓存粒度(像高速缓存线)进行读。因为读非易失性介质具有长等待时间,因此控制器224读取整个页面(例如,4KB)并把这页存储在缓冲区中。如果应用请求读这页,则第一次读可能花相对长的等待时间来填充缓冲区,但是后续的读就可以从该缓冲区得到服务。一旦应用读取了整个页面,缓冲区的那部分就被释放,以便允许另外的写或者读。定时器可以与写类似地使用,因此某个时间量没有访问会导致数据失效并且缓冲区被释放以作它用。在停电的情况下,依赖于用于使用缓冲区的技术,写到缓冲区的数据会丢失。例如,如果缓冲区是DRAM或者eDRAM或者SRAM,则一旦断电数据就会丢失。因此,一停电,电源就生成早期断电警告(EPOW)。控制器可以有备选的能量源,像电池或者电容器组,其可以保持向控制器供电足够长的时间,以便在停电时使用一种或多种工业可用的方法来保存重要数据。这可以包括在由备选能量源给控制器保持供电的时候把数据转存(dump)到SSD上有电池支持的写高速缓冲存储器或者把数据写到永久性介质。本领域技术人员还将注意到,如果卡故障或者有软件问题,保存在缓冲区中的写数据可能丢失。因此,可以添加由SSD把数据发送到伴随卡缓冲区的机制。当数据写到永久性介质时,伴随卡中的数据就失效了。更简单地说,可以开发一种协议,对于这种协议,在写被完全处理(这意味着整个扇区或者页面)之前,不给主机成功结束状态。主机可以负责在故障时按照如下方式重试该操作,即与在SSD未能利用分散收集方法对驱动器作出响应的情况下主机将重试的方式类似。如本领域技术人员将认识到的,本发明可以体现为系统、方法或者计算机程序产品。相应地,本发明的各方面可以采取完全硬件实施方式、完全软件实施方式(包括固件、驻留软件、微代码等)或者结合软件和硬件方面的实施方式的形式,所有这些在这里总体上都可以称为“电路”、“模块”或者“系统”。此外,本发明的各方面还可以采取体现在任何一种或多种计算机可读介质中的计算机程序产品的形式,其中所述计算机可读介质具有体现在其中的计算机可用程序代码。可以使用一种或多种计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质可以是例如,但不限于,电、磁、光、电磁、红外或者半导体系统、装置、设备或者以上所述的任意合适组合。计算机可读存储介质的更具体例子(非穷尽列表)将包括以下具有一条或多条电线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦可编程只读存储器(EPR0M或者闪速存储器)、光纤、便携式光盘只读存储器(CDROM)、光学存储设备、磁存储设备或者以上所述的任意合适组合。在本文的背景下,计算机可读存储介质可以是可包含或者存储由指令执行系统、装置或设备使用或者与其结合使用的程序的任何有形介质。计算机可读信号介质可以包括例如在基带中或者作为载波的一部分体现计算机可读程序代码的传播数据信号。这种传播信号可以采取多种形式中的任何一种,包括但不限于电磁、光或者其任意合适组合。计算机可读信号介质可以是非计算机可读存储介质而且可以传送、传播或者传输由指令执行系统、装置或设备使用或者与其结合使用的程序的任何计算机可读介质。体现在计算机可读介质上的计算机代码可以利用任何适当的介质发送,包括但不限于无线电、有线线路、光纤线缆、射频(RF)等,或者其任意合适组合。用于执行本发明各方面的操作的计算机程序代码可以以一种或多种编程语言的任意组合来写,包括面向对象的编程语言,例如Java 、Smalltalk 、C++等,及传统的过程编程语言,例如“C”编程语言或者类似的编程语言。程序代码可以完全在用户的计算机上、部分地在用户的计算机上、作为独立的软件包、部分在用户的计算机上而且部分在远端计算机上或者完全在远端计算机或服务器上执行。在后一种场景下,远端计算机可以通过任何类型的网络(包括局域网(LAN)或广域网(WAN))连接到用户的计算机,或者可以连接到外部计算机(例如,通过利用互联网服务提供商的互联网)。以下参考根据本发明例示性实施方式的方法、装置(系统)和计算机程序产品的流程图例示和/或框图来描述本发明的各方面。将理解,流程图例示和/或框图的每一块及流程图例示和/或框图中块的组合可以由计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或者其它可编程数据处理装置的处理器,来产生一种机器,使得经计算机或者其它可编程数据处理装置的处理器执行的指令产生用于实现在流程图和/或框图的一个或多个块中所指定的功能/动作的装置。这些计算机程序指令还可以存储在计算机可读介质中,所述指令可以指示计算机、其它可编程数据处理装置或者其它设备以特定的方式起作用,使得存储在计算机可读介质中的指令产生一种制造品,该制造品包括实现在流程图和/或框图的一个或多个块中所指定的功能/动作的指令。计算机程序指令还可以加载到计算机、其它可编程数据处理装置或者其它设备上,使得一系列操作步骤在计算机、其它可编程装置或者其它设备上执行,以产生一种计算机实现的处理,使得在计算机或者其它可编程装置上执行的指令提供用于实现在流程图和/或框图的一个或多个块中所指定的功能/动作的处理。图3是例示了根据例示性实施方式的固态驱动器控制器用于在固态驱动器中直接存储器访问的操作的流程图。操作在块300开始,而且控制器初始化缓冲区并且把存储器地址的窗口映射到一定范围的逻辑块寻址(LBA)块(块301)。主机访问存储器地址的窗口,就好象它在读和写存储器一样。然后,控制器把存储器地址转换成LBA块,并把缓冲区中的数据永久保存到后台中、对主机透明的固态驱动器(SSD)存储器。控制器在空闲列表中列出所有可用的缓冲区。控制器确定其是否从主机接收到访问存储器地址窗口中一个存储器地址的写请求(块302)。如果控制器接收到写请求,则控制器确定该写请求是否访问与缓冲区中的地址邻接的存储器地址(块303)。如果该写请求不访问与缓冲区中的地址邻接的存储器地址,则控制器初始化一个缓冲区(块400)。以下参考图4更具体地描述初始化缓冲区的操作。其后,或者如果在块303中该写请求访问与缓冲区中的地址邻接的存储器地址,则控制器基于该写请求的存储器地址把数据写到该缓冲区(块304)。如以下更具体描述的,当初始化一个缓冲区时,控制器把该缓冲区与存储器地址范围和定时器相关联。控制器通过根据存储器地址范围把写数据写到缓冲区来服务于写请求。然后,控制器确定写是否完成(块305)。如果写还没有完成,则控制器确定缓冲区是否满了或者至少按预定的百分比满了(块306)。如果缓冲区不满,则操作返回到块304,继续往该缓冲区写。如果在块306中缓冲区满了,则控制器回收当前的缓冲区(块500),而且操作返回到块400,以初始化一个新的缓冲区。以下参考图5更具体地描述回收缓冲区的操作。如果在块305中写完成了,则控制器启动与该缓冲区关联的定时器(块307)。在这个示例中,定时器记录从对该缓冲区上一次访问开始的时间量。其后,操作前进到块315,以确定与缓冲区关联的定时器是否到期。如果在块302中控制器没有接收到写请求,则控制器确定它是否接收到访问存储器地址窗口中的一个存储器地址的读请求(块308)。如果控制器接收到读请求,则控制器确定该存储器地址是否在与一个缓冲区相关联的地址范围内(块309)。如果该存储器地址没有与一个缓冲区相关联,则控制器初始化一个缓冲区(块400)。然后,控制器根据映射利用逻辑块寻址从SSD存储器读取一个页面(块310),并把该页面存储在缓冲区中(块311)。其后,或者如果存储器地址在与一个缓冲区相关联的地址范围内,则控制器从缓冲区返回数据(块312)并启动与该缓冲区相关联的定时器(块313)。然后,控制器确定读访问是否完成了从该缓冲区读取整页(块314)。如果该读访问完成了读取该页,则控制器回收该缓冲区(块500)。其后,或者如果该读访问在块314中完成了从缓冲区读取整页,则操作前进到块315,以确定与缓冲区相关联的定时器是否到期。响应于在块308中控制器没有接收到读请求,在块315中控制器确定与缓冲区相关联的定时器是否到期。如果与一个缓冲区相关联的定时器到期,则控制器回收该缓冲区(块500)。其后,或者如果在块315中控制器确定没有与缓冲区相关联的定时器到期,则操作返回块302,以确定控制器是否接收到读请求。图4是例示了根据例示性实施方式的固态驱动器控制器用于初始化缓冲区的操作的流程图。操作在块400开始,而且控制器确定是否有缓冲区可用(块401)。控制器通过检查空闲列表来确定是否有缓冲区可用。如果空闲列表非空,则有缓冲区可用,而且控制器从空闲列表除去一个缓冲区(块402)。然后,控制器把该缓冲区与一个存储器地址范围相关联(块403),并且设置与该缓冲区相关联的定时器(块404)。定时器的值可以初始化成在最小化必须执行多少次读修改写或多次读来服务于主机请求与在释放缓冲区时停止主机操作之间进行优化。其后,操作在块405结束。
如果在块401中控制器确定没有缓冲区可用,即,空闲列表为空,则控制器识别最近最少使用(LRU)的缓冲区(块406)并回收该缓冲区(块500)。在所述示例中,LRU缓冲区是其定时器最接近到期的缓冲区。然后,控制器从空闲列表除去该缓冲区(块402)、把该缓冲区与一个存储器地址范围相关联(块403)、并且设置与该缓冲区相关联的定时器(块404)。其后,操作在块405结束。图5是例示了根据例示性实施方式的控制器用于回收缓冲区的操作的流程图。操作在块500开始,而且控制器根据映射把缓冲区中的数据永久保存到固态驱动器存储器中的逻辑块寻址(LBA)范围(块501)。然后,控制器使缓冲区中的数据失效(块502)、把该缓冲区返回到空闲列表(块503),并重置用于该缓冲区的定时器(块504)。其后,操作在块505结束。图6是例示了根据例示性实施方式的固态控制器用于把数据从缓冲区永久保存到固态驱动器存储器的操作的流程图。在块600中,当控制器接收到写时,操作开始,控制器基于映射确定所述写是否在扇区边界上开始(块601)。如果基于映射控制器确定写没有在扇区或页面边界上开始,则控制器从永久性介质读取扇区或者页面(块602),并且把数据合并到缓冲区(块603)。然后,控制器继续往该缓冲区写(块604)。操作在块605中结束,并且,如以上参考图3所描述的,控制器响应于缓冲区满了或者与该缓冲区相关联的定时器到期而回收该缓冲区。如果写在扇区边界上开始,则控制器把数据写到缓冲区(块605)。其后,操作在块605中结束,并且,如以上参考图3所描述的,控制器响应于缓冲区满了或者与该缓冲区相关联的定时器到期而回收该缓冲区。图7是例示了根据例示性实施方式的控制器用于把数据转换成逻辑块寻址并且把块写到配置用于分条的固态驱动器的操作的流程图。通过定时器到期和读修改写或者完全填充,缓冲区准备好被写,然后传递到某一类的写高速缓冲区存储器或结合(coalescing)存储器,或者控制器可以直接使用缓冲区。在块700中,操作对到配置成用于RAID 5的LUN的给定写开始,而且控制器把写地址转换成LBA地址(块701)。控制器确定数据是否小于一条(块702)。如果在块702中数据小于一条,则控制器从SSD存储器读取旧数据和旧奇偶校验(块703)。控制器把所述数据与旧的条合并(块704)。然后,控制器针对该条确定新的奇偶校验(块705),并且把新的数据和新的奇偶校验写到SSD存储器中的LBA块(块706),而且操作在块707中结束。如果在块702中数据不小于一条,则控制器针对所述数据确定奇偶校验(块705),并且把数据和奇偶校验写到SSD存储器中的LBA块(块706),而且操作在块707中结束。可以看到,本发明可以扩展到其它类型的RAID,像具有Reed Solomon码的RAID 6或者RAID 10或者任何RAID码。事实上,一旦缓冲区满了,数据就发送到写高速缓冲存储器或者其它的中间集结区域(staging area),而且就像数据是经普通的分散收集访问方法访问的那样来处理。图8是例示了根据例示性实施方式的控制器用于在伴随卡缓冲区中存储的操作的流程图。操作在块800开始,而且控制器确定它是否从软件应用接收到写请求(块801)。如果控制器接收到写请求,则控制器把写数据存储到一个或多个存储器缓冲区中(块802)。如上所述,因为控制器把写数据存储在易失性存储器缓冲区中,所以存在当由于电力故障或软件问题导致控制器故障时数据丢失的风险。因而,控制器在伴随卡或控制器的缓冲区中存储数据的副本(块803)。其后,或者响应于在块801中确定控制器没有接收到写请求,控制器确定写数据是否永久保存到了非易失性储存器(块804)。如果控制器确定写数据没有永久保存,则操作返回到块801,以确定控制器是否接收到另一个写请求。如果在块804中控制器确定写数据被永久保存了,则控制器使伴随卡中的副本失效(块805),而且操作在块806中结束。图9是例示了根据例示性实施方式的控制器用于处理电力事件的操作的流程图。操作在块900中开始,而且控制器确定是否接收到早期断电警告(EPOW)(块901)。例如,早期断电警告可以由电源响应于检测到可能的电力故障而发出。如果控制器没有接收到EP0W,则操作返回到块901,直到接收到EP0W。如果在块901中控制器接收到EP0W,则控制器把写数据从缓冲区存储器转存到有电池支持的写高速缓冲存储器或者永久性储存器(块902)。其后,操作在块903结束。图中的流程图和框图例示了根据本发明各种实施方式的系统、方法和计算机程序产品的可能实现的体系结构、功能性与操作。就此而言,流程图或框图中的每一块都可以代表代码的一个模块、片段或者部分,所述模块、片段或者部分包括用于实现指定逻辑功能的一条或多条可执行指令。还应当指出,在有些备选实现中,块中所指出的功能可以不按图中指示的次序发生。例如,依赖于所涉及的功能性,顺次示出的两个块事实上可以基本上同时执行,或者有时候这些块可以颠倒的次序执行。还应当指出,框图和/或流程图例示中的每一个块及框图和/或流程图例示中块的组合可以由执行指定功能或动作的基于硬件的专用系统或者专用硬件与计算机指令的组合来实现。因而,例示性实施方式提供了用于固态驱动器的直接存储器寻址的机制。这种机制提供了从存储器寻址到固态驱动器中扇区寻址的转换。这种机制利用可由软件访问的地址窗口来初始化固态驱动器。所述软件把数据块直接写到存储器地址窗口,从而直接写到固态驱动器,而不使用设备驱动器。所述固态驱动器包括多个存储器缓冲区。该机制把由软件写的块写到存储器缓冲区、把所述块转换成固态驱动器中的扇区并且把所述扇区写到固态驱动器。如以上所指出的,应当认识到,例示性实施方式可以采取完全硬件实施方式、完全软件实施方式或者包含硬件与软件元素的实施方式的形式。在一种示例实施方式中,例示性实施方式的机制是在软件或程序代码中实现的,其中软件或程序代码包括但不限于固件、驻留软件、微代码,等等。适于存储和/或执行程序代码的数据处理系统将包括至少一个直接或通过系统总线间接耦合到存储器元件的处理器。存储器元件可以包括在程序代码真正执行过程中所采用的本地存储器、大容量储存器和高速缓冲存储器,高速缓冲存储器提供了对至少一些程序代码的临时存储,以减少在执行过程中必须从大容量储存器检索代码的次数。输入/输出即I/O设备(包括但不限于键盘、显示器、指示设备,等等)可以直接地或者通过中间I/O控制器耦合到系统。网络适配器也可以耦合到系统,使得数据处理系统能够通过中间的私有或公共网络变得耦合到其它数据处理系统或者远端打印机或存储设备。调制解调器、线缆调制解调器和以太网卡仅仅是当前可获的一些类型的网络适配器。给出对本发明的描述是为了例示和描述的目的,而不是旨在穷尽或者把本发明限于所公开的形式。许多修改和变化对于本领域的普通技术人员都是显然的。实施方式的选择和描述是为了最好地解释本发明的原理、实践应用,并且使本领域其它普通技术人员能够理解本发明具有适于预期的特定用途的各种修改的各种实施方式。
权利要求
1.一种用于在存储设备中进行直接存储器访问的方法,该方法包括 执行存储器地址窗口到所述存储设备的逻辑块寻址(LBA)范围的映射; 响应于从主机接收到指定在所述存储器地址窗口内的写地址的写请求,初始化所述存储设备中的第一存储器缓冲区; 将所述第一存储器缓冲区与所述存储器地址窗口内的第一地址范围相关联,使得所述写请求的写地址在所述第一地址范围内; 基于所述写地址写到所述第一存储器缓冲区;及 响应于缓冲区写满,基于所述映射利用逻辑块寻址将所述第一存储器缓冲区的内容永久保存到所述存储设备。
2.如权利要求1所述的方法,还包括 将所述第一存储器缓冲区与第一定时器相关联; 响应于写到所述第一存储器缓冲区,重新开始所述第一定时器;及响应于检测到所述第一定时器到期,将所述第一存储器缓冲区的内容永久保存到所述存储设备。
3.如权利要求1所述的方法,还包括 响应于从主机接收到指定在所述存储器地址窗口内的读地址的读请求,确定所述读地址是否在所述存储设备中给定存储器缓冲区的地址范围内;及 响应于确定所述读地址在给定存储器缓冲区的地址范围内,从所述给定存储器缓冲区读取。
4.如权利要求3所述的方法,还包括 响应于确定所述读地址不在给定存储器缓冲区的地址范围内,初始化所述存储设备中的第二存储器缓冲区; 将所述第二存储器缓冲区与所述存储器地址窗口内的第二地址范围相关联,使得所述读请求的读地址在所述第二地址范围内; 利用逻辑块寻址将一部分数据从所述存储设备读到所述第二存储器缓冲区;及 基于所述读地址从所述第二存储器缓冲区执行读操作。
5.如权利要求3所述的方法,还包括 维持所述存储设备中可用存储器缓冲区的空闲列表; 将所述第二存储器缓冲区与第二定时器相关联; 响应于从所述第二存储器缓冲区读取,重新开始所述第二定时器 '及 响应于检测到所述第二定时器到期,将所述第二存储器缓冲区返回到所述空闲列表。
6.如权利要求1所述的方法,还包括 维持所述存储设备中可用存储器缓冲区的空闲列表; 响应于永久保存所述第一存储器缓冲区的内容,使所述第一存储器缓冲区的内容失效; 将所述第一存储器缓冲区返回到所述空闲列表;及 重置第一定时器。
7.如权利要求1所述的方法,其中,永久保存所述第一存储器缓冲区的内容包括基于所述映射利用逻辑块寻址执行读-修改-写操作。
8.如权利要求1所述的方法,其中,永久保存所述第一存储器缓冲区的内容包括 响应于确定所述第一地址范围映射到的逻辑块地址不在扇区边界上开始或者要写的数据不在扇区或页面边界上结束,在所述第一地址范围映射到的逻辑块地址从所述存储设备读取扇区或页面,将来自所述第一存储器缓冲区的数据与该扇区或页面合并以形成新的扇区或页面,并且将该新的扇区或页面写到所述存储设备。
9.如权利要求1所述的方法,其中,永久保存所述第一存储器缓冲区的内容包括 响应于确定所述第一地址范围映射到的逻辑块地址配置用于分条而且用于所述写请求的数据小于一个条,在所述第一地址范围映射到的逻辑块地址从所述存储设备读取一条,将来自所述第一存储器缓冲区的数据与所述条合并以形成新的条,针对该新的条确定新的奇偶校验,并且将该新的条与新的奇偶校验一起写到所述存储设备。
10.如权利要求1所述的方法,其中,写到所述第一存储器缓冲区包括 将所述写请求的数据的副本写到伴随存储设备中的存储器缓冲区。
11.如权利要求1所述的方法,还包括 响应于接收到早期断电警告,将所述第一存储器缓冲区的内容转存到有电池支持的高速缓冲存储器。
12.如权利要求1所述的方法,其中,所述存储设备包括固态驱动器。
13.如权利要求1所述的方法,其中,所述存储设备包括快速外围部件互连(PCI)卡,该卡包括闪速存储器控制器。
14.如权利要求1所述的方法,其中,所述存储设备包括独立磁盘冗余阵列(RAID)控制器,所述RAID控制器具有连接到该RAID控制器的多个固态驱动器或者多个PCI Express卡。
15.—种固态驱动器,包括 多个存储器缓冲区; 固态存储器;及 控制器,其中所述控制器配置成 执行存储器地址窗口到所述固态存储器的逻辑块寻址(LBA)范围的映射; 响应于从主机接收到指定在所述存储器地址窗口内的写地址的写请求,初始化所述多个存储器缓冲区中的第一存储器缓冲区; 将所述第一存储器缓冲区与所述存储器地址窗口内的第一地址范围相关联,使得所述写请求的写地址在所述第一地址范围内; 基于所述写地址写到所述第一存储器缓冲区;及 响应于缓冲区写满,基于所述映射利用逻辑块寻址将所述第一存储器缓冲区的内容永久保存到所述固态存储器。
16.如权利要求15所述的固态驱动器,其中,所述控制器还配置成 将所述第一存储器缓冲区与第一定时器相关联; 响应于写到所述第一存储器缓冲区,重新开始所述第一定时器;及响应于检测到所述第一定时器到期,将所述第一存储器缓冲区的内容永久保存到所述固态存储器。
17.如权利要求15所述的固态驱动器,其中,所述控制器还配置成响应于从所述主机接收到指定在所述存储器地址窗口内的读地址的读请求,确定所述读地址是否在存储设备中的给定存储器缓冲区的地址范围内;及 响应于确定所述读地址在给定存储器缓冲区的地址范围内,从所述给定存储器缓冲区读取。
18.如权利要求17所述的固态驱动器,其中,所述控制器还配置成 响应于确定所述读地址不在给定存储器缓冲区的地址范围内,初始化所述多个存储器缓冲区中的第二存储器缓冲区; 将所述第二存储器缓冲区与所述存储器地址窗口中的第二地址范围相关联,使得所述读请求的读地址在所述第二地址范围内; 利用逻辑块寻址将一部分数据从所述固态存储器读到所述第二存储器缓冲区;及 基于所述读地址从所述第二存储器缓冲区执行读操作。
19.如权利要求15所述的固态驱动器,其中,所述控制器还配置成 维持所述固态驱动器中可用存储器缓冲区的空闲列表; 响应于永久保存所述第一存储器缓冲区的内容,使所述第一存储器缓冲区的内容失效; 将所述第一存储器缓冲区返回到所述空闲列表;及 重置第一定时器。
20.如权利要求15所述的固态驱动器,其中,永久保存所述第一存储器缓冲区的内容包括 响应于确定所述第一地址范围映射到的逻辑块地址不在扇区边界上开始或者要写的数据不在扇区或页面边界上结束,在所述第一地址范围映射到的逻辑块地址从所述固态存储器读取扇区或页面,将来自所述第一存储器缓冲区的数据与该扇区或页面合并以形成新的扇区或页面,并且将该新的扇区或页面写到所述固态存储器。
21.如权利要求15所述的固态驱动器,其中,永久保存所述第一存储器缓冲区的内容包括 响应于确定所述第一地址范围映射到的逻辑块地址配置用于分条而且用于所述写请求的数据小于一个条,在所述第一地址范围映射到的逻辑块地址从所述固态存储器读取一条,将来自所述第一存储器缓冲区的数据与所述条合并以形成新的条,针对该新的条确定新的奇偶校验,并且将该新的条与新的奇偶校验一起写到所述固态存储器。
22.如权利要求15所述的固态驱动器,其中,所述固态驱动器包括快速外围部件互连(PCI)卡,该卡包括闪速存储器控制器。
23.如权利要求15所述的固态驱动器,其中,所述固态驱动器包括独立磁盘冗余阵列(RAID)控制器,所述RAID控制器具有连接到该RAID控制器的多个固态驱动器或者多个PCIExpress 卡。
全文摘要
提供了用于固态驱动器的直接存储器寻址的方法与系统。用于直接存储器访问的存储设备的控制器执行存储器地址窗口到该存储设备的逻辑块寻址范围的映射。响应于从主机接收到指定在存储器地址窗口内的写地址的写请求,控制器初始化存储设备中的第一存储器缓冲区,并把该第一存储器缓冲区与存储器地址窗口中的第一地址范围关联,使得请求的写地址在第一地址范围内。控制器基于写地址写到第一存储器缓冲区。响应于缓冲区满了,控制器基于映射利用逻辑块寻址把第一存储器缓冲区的内容永久保存到存储设备。
文档编号G06F12/08GK103034590SQ201210366668
公开日2013年4月10日 申请日期2012年9月28日 优先权日2011年9月30日
发明者L·D·克里夫兰, A·D·沃尔斯 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1