本申请是美国专利号为13/540,569,递交日为2012年7月2日的申请“具有耐用转换层ETL和用于减少闪存磨损的临时文件转移的超级耐力固态硬盘”的部分连续案(continuation-in-part,CIP)。
本申请是美国专利号为12/475,457,递交日为2009年5月29日的申请“多层次条带化和闪存系统的截断信道均衡”的部分连续案(continuation-in-part,CIP)。
本申请是专利号为12/347,306,递交日为2008年12月31日,现在美国申请号为8,112,574的申请“在具有组合闪存写的命令序列的闪存系统中局部映射表的可交换集”的部分连续案(continuation-in-part,CIP)。
本申请是美国专利号为12/141,879,递交日为2008年6月18日的申请“基于存储系统的高性能和耐力的非易失存储器”的部分连续案(continuation-in-part,CIP)
发明内容
本发明第一方面提供了虚拟存储设备(VMD)驱动器,所述驱动器在主机上执行,包括:
文件类型识别器,用于为VMD驱动器接收的主机写产生一个数据类型;
数据拆分管理器,用于根据所述数据类型识别器识别的数据类型,对主机写入数据进行分类;
数据写入缓存,用于存储用户数据类型的主机写数据;
元数据缓存,用于存储元数据类型的主机写数据;
分页缓存,用于存储分页文件数据类型的主机写数据;
临时缓存,用于存储临时数据类型的主机写数据;
用户分组引擎,用于将存储在所述数据写缓存中的用户数据分类成用户元页;
元数据分组引擎,用于将存储在所述数据写缓存中的元数据分类成元数据的元页;
输出缓冲区,用于将分组的元页和数据类型信息发送到闪存驱动系统进行存储。
本发明第二方面提供了一种用于在主机上执行的虚拟存储设备(VMD)驱动器,包括:
数据类型分配器,用于为通过VMD驱动器接收的主机写生成数据类型;
任务优先级分配器,用于为任务分配优先级,包括根据数据类型写主机写数据,所述优先级是来自于所述数据类型分配器的数据类型的函数;
目标分配器,用于根据数据类型分配器产生的数据类型,对主机写数据进行分类;
数据写缓存,用于存储具有用户数据类型的主机写数据;
虚拟磁盘驱动器,用于将具有临时数据类型的主机写数据存储到主机DRAM中;
数据读缓存,用于存储主机读数据;
分组引擎,用于将存储在数据写缓存中的数据分组为元页;
取消分组引擎,用于将存储在元页中的数据取消分组为存储在数据读缓存中存储的取消分组数据;
所述元数据被从分组引擎发送到卷管理器,以传输到闪存,并通过取消分组引擎接收所述存储在闪存中的元页;
电源监测器,用于检测电源故障;
刷新管理器,用于当电源丢失时,将主机DRAM存储的数据刷新到SSDDRAM中,然后刷新到闪存驱动系统的闪存中;
恢复管理器,用于当电源恢复时,加载从闪存驱动系统的闪存获取的刷新数据,然后刷新到主机DRAM。
本发明第三方面提供了一种刷新闪存的方法,包括:
获得当前日期;
在闪存的块列表中的现行块:
(a)读块状态表,所述块状态表用于现行块的擦除计数和对现行块的写日期,所述日期表示现行块上次被写入的日期;
计算第一时间延迟作为写日期与当前日期的差;
将所述第一时间延迟作为保留时间;
当所述第一时间延迟超过所述保留时间时,将现行块中的所有有效页移动至在动态随机访问闪存DRAM的备用块中的空白页中;
当DRAM中的备用块是满的时,将来自DRAM的备用块中的数据移动至闪存中的备用块;
擦除现行块;
在闪存的块列表中选择另一个块作为现行块,并从(a)重复,直至处理完块列表中的所有块,至此,闪存块被刷新。
本发明第四方面提供了一种闪存刷新的方法,包括:
获得当前的日期;
对于在闪存的块列表中的现行块中的当前页:
(a)读块状态表,所述块状态表用于现行块的擦除计数;
(b)读页状态表,所述页状态表用于当前页的写日期,所述日期表示当所述前页上次写的日期;
计算第一时间延迟作为所述写日期与当前日期的差;
将所述第一时间延迟作为保留时间;
当所述第一时间延迟超过所述保留时间时,将所述现行块中的所述当前页移动至在动态随机访问闪存DRAM的备用块中的空白页中;
当DRAM中的备用块是满的时,将来自DRAM的备用块中的数据移动至闪存中的备用块;
在现行块中选择另一个页,并从(b)重复,直至处理完现行块中的所有页;
在闪存的块列表中选择另一个块作为现行块,并从(a)重复,直至处理完块列表中的所有块,至此,闪存页被刷新。
本发明第五方面提供了一种超级增强耐力设备(SEED)固态硬盘(SSD)耐用转换层(ETL)方法,所述方法用来增强具有低指定擦除循环寿命的闪存的耐力,包括:
在由控制器控制的动态随机存取存储器(DRAM)缓冲区中创建ETL和使用所述ETL层,以提供临时的存储空间,以减少对所述闪存的磨损;
在DRAM缓冲区中创建备用/交换区域;
使用所述DRAM缓冲区中的备用/交换区域操作控制器,以合并具有新数据的闪存中的有效数据,以产生组合数据;
当覆盖写闪存中现有块中的全部页或者局部页时,将新数据写到与闪存中现有块相关的DRAM缓冲区的备用块中,对闪存中的不同块,当额外的新数据需要备用块时,将具有新数据和来自闪存的现有块的数据的备用块的组合写入所述闪存中的备用块中,将闪存中现有块中的所有页,标记页状态作为垃圾页;
当电源丢失时,使用备用电源为DRAM缓冲区和闪存和控制器提供电能,所述备用电源具有足够的容量,以使所述控制器将所述ETL层所需的数据备份到闪存,由此,由控制器使用DRAM缓冲区,而不是闪存,执行备用/交换功能。
本发明第六方面提供了一种超级增强耐力设备(SEED),包括:
主机接口,用于接收来自于主机的主机读和主机写;
SEED动态随机存取存储器(DRAM)缓冲区,用于存储数据;
控制器,用于控制对闪存和DRAM缓冲区的访问,以响应主机接口接收的主机读和主机写,所述控制器将主机数据写入到DRAM缓冲区中;
SEED固态硬盘(SSD)耐用转换层(ETL),在所述DRAM缓冲区中执行,且由使用ETL的控制器控制,以提供临时存储以减少对闪存的磨损;
数据写缓存,所述数据写缓存存储在DRAM缓冲区中,且通过所述控制器进行管理;
闪存接口,用于擦除块和对闪存页进行写,其中,块是页大小的倍数;
闪存,用于存储来自于SSD DRAM缓冲区的分组的元数据;
当电源丢失时,使用备用电源为所述DRAM缓冲区、所述闪存和所述控制器提供电源,所述备用电源具有足够的容量,使所述控制器将在ETL中所需要的数据备份到闪存中。
本发明第七方面提供了一种用于在主机上执行的虚拟存储设备(VMD)驱动器,包括:
主机耐用转换层(ETL),用于在主机上执行,增加闪存耐力,所述闪存具有低擦除周期寿命;
主机动态随机存取存储器(DRAM)缓冲区,位于主机上,通过主机控制器控制,使用所述主机ETL层在主机上提供临时存储以减少对闪存的磨损;
在固态硬盘(SSD)上的超级增强耐力设备(SEED),所述SEED用于增加具有低擦除循环寿命的闪存的耐力;
在SEED DRAM缓冲区中的SEED耐用转换层(ETL),通过SEED控制器控制,所述SEED ETL提供临时存储以减少闪存磨损。
本发明第八方面提供了一种在主机上执行的虚拟存储设备(VMD)驱动器,包括:
加密引擎,用于耦合接收截获的高级别主机写,并生成加密数据;
压缩引擎,用于耦合接收截获的高级别次主机写数据,并生成压缩数据;
数据写缓存,用于存储主机写数据;
数据读缓存,用于存储主机读数据;
分组引擎,用于将存储在所述数据写缓存中的数据分成元页;
取消分组引擎,用于将存储在所述元页中的数据取消分组为可以存储在所述数据读缓存中的存储的数据;
将所述元页从分组引擎发送到卷管理器以转移到闪存,同时,通过取消分组引擎接收存储在闪存中的元页;
电源监测器,用于检测电源故障;
主机动态随机存取存储器(DRAM)缓冲区,用于存储主机耐用转换层(ETL);
刷新管理器,用于当电源丢失时,将存储在主机DRAM缓冲区中的主机ETL层中的数据刷新到固态硬盘(SSD)ETL DRAM中,然后存储到固态硬盘(SSD)系统的闪存中;
恢复管理器,用于当电源恢复时,加载从SSD系统的闪存获取的刷新数据,然后刷新到主机DRAM缓冲区的主机ETL层中。
本发明第九方面提供了一种耐力闪存文件系统,包括:
高级别文件过滤驱动器,用于在主机上执行,并拦截向闪存驱动器的高级别主机写;
加密/解密引擎,用于耦合接收由高级别文件过滤驱动器截获的高级别主机写数据,并生成加密数据和解密数据;
压缩/解压引擎,用于耦合接收由高级别文件过滤驱动器截获的高级别次主机写数据,并生成压缩数据和解压缩数据;
其中,
压缩的数据和加密的数据被发送到一个在主机上执行的文件系统驱动器(FSD)上;
低级别文件过滤驱动器,用于在主机上执行,并拦截向闪存驱动器的低级别文件系统主机写;
数据写缓存,用于存储主机写数据;
数据读缓存,用于存储主机读数据;
分组引擎,用于将存储在数据写缓存中的数据分成元页;
取消分组引擎,用于将存储在元页中的数据取消分组为可以存储在数据读缓存中的存储的数据;
将所述元页从分组引擎发送到卷管理器以转移到闪存,同时,通过取消分组引擎接收存储在闪存中的元页;
文件优先级标签分类器,用于为主机写生成数据类型;
任务策略分配器,用于为任务分配优先级,包括根据数据类型向主机写入数据,所述优先级是来自于文件优先级标签分类器的数据类型的函数;
性能调节器,用于调整任务的优先级;
目标分类器,用于根据所述文件优先级标签分类器产生的数据类型,对主机写数据进行分类;
业务系统,用于记录向闪存数据写开始和完成的事件;
刷新管理器,用于当电源丢失时,将存储在主机DRAM中的数据刷新到SSDDRAM,然后到所述闪存驱动系统中的闪存;
恢复管理器,用于从闪存驱动系统中的闪存获取刷新的数据,然后当电源恢复时,刷新到所述主机DRAM中;
磁盘微型端口驱动器,用于管理所述闪存驱动系统的特定协议功能。
本发明第十方面提供了一种超级增强耐力设备(SEED),包括:
主机接口,用于接收来自主机的主机读和主机写;
动态随机存取存储器(DRAM)缓冲区,用于存储数据;
控制器,用于控制对闪存和DRAM缓冲区的访问,以响应主机接口接收的主机读和主机写,所述控制器将主机数据写入到DRAM缓冲区中;
存储在DRAM缓冲区中的数据写缓存,用于管理所述控制器,所述控制器管理非临时数据;
闪存的增强闪存部分,用于配置为强健页使用,其中,所述闪存的保留部分被配置为弱页;
编程/擦除管理器,用于控制闪存的页写/块擦除时间,以增强耐力和减少保留时间;
刷新管理器,用于控制保留在增强闪存部分的刷新时间。
具体实施方式
本发明涉及对高耐力闪存驱动器的改进。提出下面的描述以使本领域普通技术人员根据上下文提供的应用和要求,能够制造和使用本发明。对优选实施例的各种修改对本领域技术人员是显而易见的,本文中定义的一般原则可以被应用于其它的实施例中。因此,本发明并不限制所述示出和描述的实施例,而是与此处公开的最宽范围的基本原则和新颖性一致。
通过禁止闪存不必要的写,可能减少对底层闪存设备磨损。在主机上执行的虚拟内存设备(Virtual-Memory Device,VMD)的应用程序和驱动器在达到闪存前,可以禁止写或者结合写,这样就可以减少对闪存的写频率。所述VMD把向主机的写转移到对主机的DRAM和/或SSD DRAM中的缓存和虚拟磁盘的写。
主机或者闪存驱动SSD设备上的DRAM缓冲器可以存储数据,这些数据并不需要永久的保存,因此没必要写到闪存中。DRAM不仅速度快,而且具有很强的耐用性,因为它可以写100万次以上。DRAM是由IBM公司的RobertDennard博士在1966年发明的可靠的动态存储技术。
一个典型的主机会创建许多临时文件,比如,在上网浏览网页,或者运行某些不重要的冗余的应用程序时。本发明实现使得这些文件无需写入闪存,从而减少闪存的磨损。
典型系统还频繁对某类数据覆盖写,这些频繁覆盖写的数据最好存储在主机或者闪存驱动的DRAM缓冲区中,且通过一种策略(如基于时间消耗,容量分配等)或者当电源断电或者电源故障时,将这些频繁覆盖写的数据拷贝到闪存中。仅在电源断电时,将这些频繁覆覆盖写的数据存储到闪存中会显著降低对闪存设备的磨损。大多数的元数据长度较小,可以被集中存储,例如可以集中存储在FAT表中。每次更新只涉及对非常小部分的闪存页进行写。在DRAM中存储元数据能够减少对闪存的不必要写。
如此频繁覆盖写的数据包含日志文件,这些日志文件随着新事件的发生频繁的更新。通常在系统崩溃后,会检测最新文件副本。文件分配表(File AllocationTable,FAT)是另一个频繁覆盖写的位置,当创建或扩展文件时,文件分配表就会进行更新。所述FAT表是内存中相对较小的部分,但如果每次对所述FAT表的更新都被复制到闪存中,这种频繁的访问将显著的增加闪存的磨损。文件描述块(File Descriptor Block,FDB)具有类似的频繁的覆盖写的结构,当仅在Windows浏览器中访问和显示文件列表时,就会频繁的覆盖写文件访问日期。所述FDB、FAT拥有来自主机文件系统的元数据。与DRAM缓冲器一起使用的各类表拥有元数据,这些元数据创建的目的是将文件系统存储到DRAM和闪存中。
根据某种策略或者电源断电或者电源故障时,闪存驱动创建的坏块表,擦除计数器,垃圾收集,备件和交换块映射表以及其他文件需要存储到闪存中。同样,为了减少闪存损耗,根据某种策略或者电源断电或者电源故障,闪存系统的元文件也可以存储到DRAM缓冲区并且拷贝到闪存中。上述表和元文件在上电时可以存储在闪存中。并且在设备初始化时被安装到一个DRAM缓冲区中。接着,主机数据读写操作改变数据内容。当电源断电或电源故障出现时,脏表和元文件需要写入或备份到闪存。当电源故障时,考虑到系统恢复,如果为了特定的应用程序,需要一个准确的恢复点,主机缓存,FIFO缓冲,缓冲区数据,永久备用和交换块以及闪存驱动中的其它缓冲区中的数据可以拷贝到闪存上。
当主机主DRAM内存的图像移动到了硬盘或者闪存驱动时,系统使用分页文件进行内存管理。因为系统需要重启,内存管理和分页系统重新初始化,以清除所有存储的分页文件,所以当电源故障发生时,分页交换文件丢失并不重要。这些分页文件可以存储在DRAM缓冲区中,当电源断电或者电源故障时,没有必要拷贝到闪存上,从而有效减少闪存的磨损。
闪存驱动的主机请求往往遵循数据类型的规则序列。例如,一台主机可先访问所述FAT表,然后访问FDB块,进而对数据文件进行读写。这种重复序列可能有助于超耐力闪存驱动对数据类型进行分类。根据操作系统的类型不同(Windows,Linux,AppleOS,Android等),所述FAT总是位于预先确定的内存位置。因此,对该内存位置的地址范围内的访问是FAT类型的访问。所述FAT访问之后的访问必然是FDB访问。然后,下一次访问是用户数据访问。因此,用户数据可以被确定为之后的FAT访问和FDB访问。为了找到扩展文件,可以通过超耐力闪存驱动检查所述FDB,从而,可以采用不同于用户数据文件的方式,检测和处理.tmp文件。
在典型的不区分数据类型的闪存驱动中,每种类型的文件都会使闪存磨损。这种不可知的系统平等处理所有数据。所有数据都写入到闪存中,至少当数据条目在所述DRAM缓冲区时,如果有的话,数据将通过另一个来自具有相同的缓存索引的主机的数据投到DRAM缓冲区。通过识别数据类型和数据的目的主机,且在正常操作过程中,只向闪存写实际的用户数据,只向闪存写重要的数据,以及当电源故障时,根据策略,可以显著减少闪存写。
通过包装数据,可以实现进一步减少闪存磨损。例如,闪存中小于一个整页的数据(局部页数据)可以与其它的局部页数据一起存储在闪存的一个页中,而不是存储在许多单独的页中。多通道的系统可能有较大的单元,例如元页,每一个通道有一个页,或通道数量是页大小的几倍。通过将数据包装成元页,而不是较小的页,可进一步减少闪存磨损。
在一个不利的环境中,所述DRAM的缓冲区可能有软件错误。额外的对DRAM的过量配置可用于ECC奇偶校验,以提高闪存可靠性。
从每个技术角度,闪存的磨损节约可以提供各种改进,当这些技术一起使用时,可能会显著增加闪存的耐力。VMD应用程序和驱动器可以为使用这些技术的闪存驱动提供更高的耐力。
图1是一个主机上VMD应用程序和驱动的方框图,所述应用程序和驱动创建和管理多个缓存和虚拟磁盘,所述应用程序和驱动在主机和具有低耐力闪存的超耐力闪存驱动上。主机300有一个处理器,所述处理器执行程序的指令,例如,用户应用程序182和操作系统(OS)内核178的指令,例如,Windows,Linux和苹果OS或Android等.当主电源发生故障时,备用电源176为主机300提供电源,使当电源故障时,主机300从虚拟磁盘188向超级强耐力装置(SEED)200发送重要数据,所述超强耐力装置00位于NAND闪存196中。备用电源176可以使用电池,或不间断电源(UPS)等。这使得主机处理器有时间来关闭应用程序并且正确的关闭相关的装置。SEED200有自己的电源备份195,当主电源出现故障时,以允许SEED200将所述重要的数据写到NAND闪存196。电源备份195可以使用电容器,超级电容器或电池。可选的,如果有备用电源176有足够的电能来正常关闭系统,SEED200中的电源备份195就不需要了,例如,主机300是笔记本电脑或智能手机。
VMD应用程序180是在主机300上执行的应用程序。VMD应用程序180和VMD驱动器100可用于减轻SEED200的负担。VMD应用程序180和VMD驱动器100可以拆分和/或存储数据,例如,临时文件,分页文件等,但并不意味着永久地存储到闪存。VMD驱动器100可以使虚拟磁盘188存储这类临时数据。虚拟磁盘188可以是主机的DRAM一部分。
VMD驱动器100可以使用主机CPU执行任务,例如,压缩/解压缩引擎242,加密/解密引擎240。由操作系统内核178写入的用户应用程序182的数据,被高级别文件过滤驱动器190截获,并在发送到文件系统驱动器266前,传递到VMD驱动器100进行压缩和/或加密。然后低级别文件过滤驱动器268再次拦截这些数据,以通过VMD驱动器100进行进一步的处理,例如,用于存储在虚拟磁盘188中。
将最终准备写到SEED200中的数据从VMD驱动器100发送到卷管理270,所述卷管理270管理存储卷,例如,SEED200。在SEDD200中的SEED控制器192可以在SSD DRAM缓冲区194中存储数据,且当电源断电或者当SSD DRAM缓冲区194存储满了的时候,将数据存储到NAND闪存196中。
位于VMD应用程序180中的SSD内部清理181执行各种高级别功能,如垃圾收集,去除旧的未使用的文件。SSD内部清理181可以定期地进行,如每天,每周,或当VMD驱动器100管理虚拟磁盘188时。配置设置186和注册表及操作系统设置184可以由OS内核178设置,或者由其它程序定义虚拟磁盘188的大小或者其它系统变量,并管理VMD应用程序180和VMD驱动器100的优选功能。
配置设置186和注册表及OS设置184可能有各种不同提高闪存耐用性和性能的设置,例如,设置可以使能或禁用写缓存,驱动器索引,搜索索引,磁盘碎片整理,主机休眠,预取数据,超级取数据和窗口写缓存缓冲刷新。预取数据,索引,休眠,和碎片整理可能会引起闪存的额外写,因此减少闪存的耐力。既然VMD驱动器有自己的写缓存和刷新功能,则写缓存和写缓存缓冲刷新可以被禁用。因此,通过禁用这些特性,可以改善闪存的耐力。
图1中示出了一些对于电源异常断电的情况有用的可选部分。当电源接通时,电源管理305和电源备份307(在某些系统环境中,如果不存在备用电源176)储存能量,当电源故障时,电源管理305和电源备份307向主机300提供电源。当电源故障时,CPU寄存器和缓存控制器301将写CPU寄存器和缓存到主机DRAM,然后到SEED200。在另一个实施例中,SEED SSD303是连接到主机300另一个SSD,例如,可以通过PCIe端口,USB端口,NVMe端口等进行连接。在另一个实施例中,SEED SSD303可以内置于DRAM模块中,并通过内存控制器309进行控制。可选的,当电源故障时,CPU寄存器和缓存控制器301将写CPU寄存器和缓存到写主机DRAM,然后到SEED200或者SEED303。预设开关311隔离主机300上的不必要的部分,以使这些部分无法接收备用电源,因此,延长传输重要文件使用的备用电源的使用时间。在异常断电和电源恢复期间,内存控制器309将阻止主机DRAM和SEED SSD303之间的数据传输。
图2是更详细的突出主机上的VMD的流程图,在主机数发送到文件系统驱动器266之前,主机数据传输到VMD驱动器100,以通过压缩引擎242进行压缩和/或通过加密引擎240进行加密,所述主机数据通过OS内核写入,并通过高级别文件过滤驱动器190截获。然后低级别文件过滤器驱动器268再次拦截所述数据,以通过VMD驱动器100进行进一步处理。
文件优先级分类264根据数据类型对数据进行分类,所述数据类型由低级别文件过滤驱动器268分配,或者由LBA指示,例如,数据类型可以是元数据(FAT,FDB)临时文件,分页文件,或用户数据。临时文件包括:Windows的临时文件,因特网浏览器的临时文件等等,另外,对于特定的使用时,此功能可以选择性地禁用,例如,服务器。所有操作都具有任务优先级分配器260分配的优先权,以使高优先级的任务可以优先于低优先级任务执行。性能调节器256可以定期调整这些数据的优先权,以改善系统性能。根据数据类型,目标分配器254发送数据到虚拟磁盘188中的虚拟磁盘驱动器250进行存储,或者数据写缓存20。
在发送到
卷管理270和SEED200之前,写入到SSD的数据可能通过分组器134进行分组。分区管理器172和磁盘分类驱动器174可以将多所述数据发送到已选定分区或磁盘。磁盘微型端口驱动器138管理连接到SSD的具体协议功能。分组取消器136在数据传送到数据读缓存132之前取消从SEED200获取的数据的分组。
业务系统262确保数据完全写入SEED200。恢复管理器216判断哪个写业务由于异常断电而未完成,并且帮助应用程序做必要的重做或撤消以保证数据持久性。调度管理器218管理业务系统262以管理和记录对SSD业务的写,例如,启动,中止和提交。
当电源监测器248检测到电源断电或出现故障时,触发虚拟磁盘刷新/恢复管理器126,以将数据从数据写缓存20和虚拟磁盘188转移到闪存中的SEED200进行存储。当刷新完成时,磁盘刷新/恢复管理器126将会向SEED200和备用电源176或者电源管理器305发布协议命令。如果存在备用电源的话,将切断向系统供电,而仅向SEED200供电。在使用电源管理305的情况下,电源管理305将继续向DRAM,SEED SSD303,开关311,和内存控制器309电能。在电源关丢失前,刷新/恢复管理器126定期将数据写缓存20和虚拟磁盘188的内容刷新到SEED200。在允许通过VMD驱动器100访问SEED200或数据缓存之前,安全管理器244可执行密码验证过程。智能数据监控器246从SEED200向VMD驱动器180发送S.M.A.R.T.监控信息。耐力闪存文件系统具有在主机上执行的,并拦截向闪存驱动器高级别主机写的高级别文件过滤驱动器。加密/解密引擎接收由高级别的文件过滤驱动截获的高级别主机写,并加密数据和解密数据。压缩/解压缩引擎也接收来自于高级别文件过滤驱动器的高级别主机写,并产生压缩数据以及解压缩数据。压缩数据和加密数据被发送到在主机上执行的文件系统驱动器(File System Driver,FSD)。
低级别文件过滤驱动器也可以在主机上执行以及拦截向闪存驱动系统的低级别文件系统主机写。数据写缓存存储主机写数据,而数据读缓存存储由主机读取的数据。分组引擎将存储在数据写缓存中的数据分成元数据。取消分组引擎将存储在元页中的数据取消分组为可以存储在数据读缓存中的存储的数据。将元页从分组引擎发送到恢复管理器以将其转移到闪存,同时,通过取消分组引擎接收存储在闪存中的元页。
文件优先级标签分类器为主机写和接收的数据生成数据类型。任务策略分配器为任务分配优先级,包括根据数据类型向主机写入数据。优先级是来自于文件优先级标签分类器的数据类型的函数。性能调节器调整任务的优先级。目标分类器根据文件优先级标签分类器产生的数据类型,对主机写数据进行分类。
业务系统记录事件,所述事件指示闪存数据写的开始和完成。当电源丢失时,刷新管理器将存储在主机DRAM中的数据刷新到SSD DRAM,然后刷新至闪存驱动系统的闪存中。恢复管理器从闪存驱动器系统的闪存重新获取刷新数据,然后当电源恢复时,发送到主机DRAM。磁盘微型端口驱动器管理闪存驱动系统的具体协议函数。智能数据监控器246,电源/CPU检测器248,安全管理器244,和虚拟磁盘驱动器250是可选的。
图3是一个SEED的方框图。SEED200有主机接口16,所述SEED200通过总线与主机300(如图1)通信,例如,PCIe,SATA,或通用串行总线(Universal-Serial-Bus,USB),NVMe,雷电接口,eMMC,iSSD等。从主机接口16获取的主机数据被发送到SEED控制器192,SEED192执行各种功能,以减少NAND闪存196的磨损,例如,将来自于主机300上的VMD驱动器100的文件刷新到SSD DRAM缓冲区194,而不是在NAND闪存196。
SSD DRAM缓冲区194可以存储主机虚拟磁盘188的备件文件,以及从VMD100刷新获取其它的数据和表格。可以存储其它数据,包括元数据,备用和交换块,坏页管理表,以及其它的缓冲区和数据表。
NAND闪存196可以存储安全信息,表格,SSD文件系统,和各种其它的表和缓冲区,还包括用户数据和刷新的虚拟磁盘188中的数据。NAND闪存196的一些区域可以保留作为坏块或者过度配置。
DRAM接口12读写SSD DRAM缓冲区194,而多通道闪存接口14读取页,程序数据页和擦除NAND闪存196中的块,可以组织成多个通道。本地
命令队列(Native Command Queue,NCQ)管理器52可以重新排列从主机300获取的主机命令,以及管理从主机接口16接收的主机命令序列。管理器加载主机命令为命令队列,写数据会被重新排序,以减少闪存写。
RAID控制器50通过NAND闪存196的多个通道写新数据,并可能会复制数据,以提供冗余和数据恢复。ECC管理器44产生附加在写数据中的纠错码(error-correction code,ECC),并比较存储的ECC以重新产生ECC,从而检测和纠正在读书的错误。ECC管理器44还管理需要额外的ECC保护闪存页,为这些页产生ECC,并当需要的时候,管理ECC数据的存储和回收。代替执行EC,ECC管理器44可用于LDPC码。坏页管理器206跟踪所有NAND闪存196中的页状态的位置。这可以延长每个块的寿命,既然只有一个页可能是坏块,因此其他的页可以继续使用。更复杂的坏块管理可能会降低闪存驱动的整体磨损。
磨损均衡器40可提供两种磨损均衡的方法。一种方法是从可用空块中动态选择最低磨损均衡计数块写数据。另一种方法是基于耗损均衡计数阈值。一旦达到这个阈值,闪存数据块将从NAND闪存196中的一个物理块(具有低损耗均衡计数)移动到另一个空物理块(具有高损耗均衡计数)。表管理器48所管理的逻辑物理映射表将被更新。表管理器48也跟踪存储在每个逻辑块或者页中的数据类型,以使当数据拆分管理器204识别和分类数据时,跟踪所述临时文件,分页文件,FAT,FDB,和用户数据文件。可选的,主机可以通过协议命令传递数据类型信息到SEED SSD,因此,数据拆分管理器204不用重复VMD驱动器100所做的工作。可选的,在某些特定的情况下,该功能可以是选择禁用。
如果所述功能不是由VMD驱动器100完成,加密引擎46执行写入数据加密和读取数据解密。TRIM管理器42处理来自于文件系统或者主机300上的操作系统的TRIM命令。所述TRIM命令表明主机不再需要某部分,且可以擦拭或擦除。修整后的页在页状态表中标记为垃圾页,例如'100b'或'101b'。在做后台垃圾回收时,如果某块被识别作为可擦除块,此页将不会被复制到一个新块。此时,TRIM命令完成。TRIM管理器42执行系统开销,例如,不再需要对一个块中的分区或者页进行跟踪。垃圾收集器也可以用来跟踪准备擦除的块。一旦某完整的块不再需要,TRIM管理器42将触发垃圾收集器或其他擦除机制擦除块,以使所述块可以重新使用。
S.M.A.R.T.函数39处理来自于主机的S.M.A.R.T.命令或者协议命令,例如,监测或者控制误差校正,磨损,坏块,和其它的闪存管理等。S.M.A.R.T.代表自我监测、分析及报告技术。主机可以使用S.M.A.R.T.的命令集监控一些来自于从SSD设备的重要数据,例如,关机时间,磨损均衡计数等。主机可以使用这些数据来诊断和识别SSD的使用寿命。基于使用情况,主机可以使用这些信息来确定保修范围。主机可以在SSD驱动器损坏之前,更换SSD驱动器。在RAID中,主机可以使用S.M.A.R.T.命令以避免更昂贵的RAID5配置。
业务管理器211可以确保数据完全写入或转移到NAND闪存中。过度配置208在NAND闪存196中设置和管理备用块。直到安全管理器215安可以执行密码验证过程,才允许访问NAND闪存196的安全分区。所述分区可以是整个驱动器或驱动器的一部分。刷新管理器202可定期(如每天或每周)刷新NAND闪存196中的数据。安全擦除管理器18可以执行安全性更高的擦除操作,例如,当需要时,可以向一个块写入全1或者全0以删除块中的数据。
电源备份195提供备用电源,因此,当电源故障时,SEED200可以从SSDDRAM缓冲区194向NAND闪存196写数据。NVRAM217为重要的元数据信息提供更多的非易失性存储,例如业务日志,元数据和配置信息。
图4示出了通过VMD驱动器对写数据拆分和分组的流程图。主机发送写命令到数据拆分管理器108,且如果压缩/加密引擎106启用,则在所述压缩/加密引擎106将写数据压缩或加密后,接收主机写数据。用于加密或压缩文件的压缩表项可以在元数据缓存120中被修改。
VMD驱动器100(如图2)内部的数据拆分管理器108根据数据类型对主机写数据分类,例如,通过检查文件的扩展名或解析FAT和FDB。临时文件存储在虚拟磁盘_01的临时文件区124,且具有一个表,所述表在元数据缓存120中被完全修改。当电源关闭和故障时,临时文件不存储到闪存。可选的,临时文件区可以溢出和分组到SSD。可选的,对于特定操作,该功能可以被禁用,例如,服务器。
分页文件存储在缓存中的分页区38,且通过页文件分组处理器116,与其它的包含相同分页文件数据类型的分页文件一起分组成元页。然后,通过输出缓冲区110,将分组后的页被发送到SEED200,并且可以存储在DRAM中,然后存储到闪存中。输出缓冲区110产生ECC代码。分组文件的表项可以在元数据缓存120中被修改。
元数据文件,例如,如FAT和FDB全部存储在元数据缓存120中。通过FDB元页分组处理器114,所述FDB可以被分成的元页。所述分组的页然后通过输出缓冲区110发送到SEED200,可以是存储在DRAM中。ECC码可能由输出缓冲区110生成并携带。分组后的元数据文件表项可以在元数据缓存120中被修改。
用户文件存储在数据写缓存20中,且由元数据用户文件分组处理器113,将所述用户文件与其它的含有相同的用户或非暂时性文件数据类型的用户文件一起分成元页。分组的页通过输出缓冲区110发送到SEED200,并且可以存储在DRAM中,之后是闪存中。ECC码可能由输出缓冲区100生成并携带。分组后文件的分组表表项可以在元数据缓存120中被修改。
当刷新/恢复管理器126检测到电源故障时,虚拟磁盘188由虚拟磁盘电源关闭刷新器125刷新。虚拟磁盘188的数据由SEED200发送到输出缓冲区110存储。另外,缓存中的数据写缓存20,元数据缓存120,分页区38可以在虚拟磁盘中。虚拟磁盘_01的临时文件区124可以在缓存中。
图5A-B示出了数据分类和通过VMD驱动器取消读分组的流程图。主机发送一个读取命令到数据拆分管理器108,所述数据拆分管理器108还用于分发主机读数据,在数据压缩/加密引擎106将主机读数据解压缩或解密后。内置于VMD驱动器100(如图2)的数据拆分管理器108根据数据类型分类主机写数据,且触发选择器104根据数据类型选择数据。
在图5A中,用户数据可能是最近写入,且仍然是可以从数据写缓存20中获得的。数据可被存储在SEED200,且必须首先由缓冲区110接收,元页取消组合引擎36取消分组,然后被选择器104选择。取消分组元页的数据存储在四个读缓存中的一个之中。NRA/RA拆分管理器34将最近访问数据和非最近访问(Non-Recently-Accessed,NRA)数据分开。NFA/FA拆分管理器30和32将经常访问的数据与非经常访问的数据(Non-Frequently-Accessed,NFA)分开。根据数据是否被识别为最近访问或经常访问,选择器104选择四个读缓存22,24,26,28中的一个。
在图5B中,临时文件不存储在闪存中,只能通过响应主机读的数据拆分管理器108从虚拟磁盘_01的临时文件区124读取。分页文件由选择器122从缓存中的分页区38选择或者从分页文件元页取消分组处理器116取消分组后的闪存中选择。元数据,例如,FAT和FDB项是由选择器118从元数据缓存120选择,或者从输出缓冲区110读取且FAT/FDB元页取消分组引擎114取消分组之后的闪存选择。当电源恢复时,虚拟磁盘上电刷新器123被触发,以从SSD或闪存20读取刷新的虚拟磁盘数据121。
图6示出了主机DRAM中耐用转换层(Endurance Transaction Layer,ETL)的内存映射图。内存空间289包含几个虚拟磁盘,所述虚拟磁盘可以被独立定义为用于直接存储器访问或者用于基于文件系统访问。虚拟磁盘_00284存储OS启动映像和备用OS启动映像。虚拟磁盘_01288存储临时文件。虚拟磁盘_02236存储浏览器文件,在电源关闭时,所述浏览器文件可以丢弃。虚拟磁盘_03238存储应用程序使用的临时文件,在电源丢失时,所述临时文件可以被丢弃。可选的,在虚拟磁盘_02236和虚拟磁盘_03238中的数据可以被分组,并写到SEED200。
缓存286存储元数据和表,如FAT,FDB,压缩表,分组表和缓存映射表。缓存232存储分页文件。缓存234存储数据写。当电源出现故障时,这些缓存将进行备份。读缓存290,291,292,293存储FA,NFA,RA,和NRA的数据,且在电源故障时,可能被丢弃。
VMD驱动器278和VMD应用280也与操作系统功能282,刷新管理器277,用户应用276,专有的IO驱动器274,以及设置和环境参数272一同被存储。
图7示出了SEED SSD DRAM中耐用转换层(Endurance Transaction Layer,ETL)存储映射示意图。SSD DRAM缓冲区194的内存空间包含元数据缓存140,临时文件缓存142,分页文件的缓存144,刷新数据145,读缓存和映射表151,缓冲器数据152和数据写缓存154。这些缓存可以存储来自于位于主机DRAM的内存空间289的缓存的数据。分页文件和映射表148和日志文件页分组146也被分配了内存空间。系统使用区域150被保留。备件和交换块156提供备用和交换操作块。表162存储闪存页的状态和坏块信息。块和擦除计数表164根据块的基本内容,存储擦除计数和块信息。S.M.A.R.T.数据采集器170收集和存储较低级别的闪存模块和可能被主机软件读取的控制器的的状态信息。
图8是一个闪存的存储器映射图。NAND闪存196中的闪存存储空间包括分区_01302,所述分区包括具有简化VMD程序和加密/解密函数的启动用法0x80,分区_02304,分区_02304具有其它的映像,例如,操作系统启动映像306,备份启动映像308,以及启动用法0x00。VMD应用程序310存储在闪存中,并作为虚拟磁盘管理器。数据银行312存储频繁使用的映像,而数据银行314存储不频繁使用的映像。
图9示出了根据数据类型将页的全部或者部分映射或者分组成元数据。每种数据类型都有它自己的分组映射表316,例如,分页文件,临时文件,元数据,和普通用户数据。在本实施例中,只有的用户数据被映射到闪存中,虽然在其它的实施例中,访问存储器可能映射额外数据到闪存。
元页是一个较大的存储器单元,而不是闪存页。闪存被组织成多通道和多芯片或者或每个通道包括多个核心和每个核心有多个层。所述元页的大小是通道数乘以层的数量乘以闪存层的数量。例如,四个通道和两个平面的元页大小是8个页。
当一个完整的页(full page,FP)被分组成元页318时,该页的页写的位置X存储主机LBA的分组映射表316中的条目,且具有一个指向分组元页318的指针,YY-DRAM-MP。
当局部页(partial page,PP)被分组为局部分组元页320,局部页的起始位置A(N),以及局部页的长度LEN(N)部分页主机LBA分组映射表316中存储成一条记录,并且具有一个指向该局部页分组页320的指针,YY-DRAM-MP。主机LBA和长度附带在所述数据之后,将所述数据存储到PP分组元页320页中。
图10示出压缩页的映射图。通过在闪存页存储压缩数据,而不是常规的数据,闪存耐用性可能增加,因为压缩减少了数据的大小,而这在闪存存储数据的要求。压缩数据可能会缓存在主机DRAM或SSDDRAM缓冲区194中,并当缓存存储满时,将所述压缩数据备份到NAND闪存196中。
在将数据存储到虚拟磁盘188中或数据写缓存20中之前,VMD驱动器100可能压缩一些数据。主机以正常方式写几页数据,指示逻辑地址(logicaladdress,LBA),页号,用于统计数据长度的扇区计数总。例如,主机可以向LBA2048写入DATA1,SC=128,8页,每页16个扇区。压缩引擎,例如,VMD驱动器100中的加密/解密引擎240,将128个扇区的数据压缩到48个扇区的压缩数据。所述48个扇区的压缩数据包括数据头,一些压缩后的数据存储在第一页压缩页,两页以上的压缩数据存储一共可以存储3个压缩页。相对未压缩的8页,这是一个显着的减少。
VMD驱动器100将所述3个页的压缩数据存储在虚拟磁盘188中,或者数据写缓存20中,当通过存储在压缩LBA表212中的指针MAP_PAGE_PTR指向压缩数据214的一个页时。
VMD驱动器100还创建条目LBA表210,所述条目可以是统一映射表的一部分或者是元数据缓存120的一部分。然而,在LBA表210中的条目是特殊映射编码,以压缩数据。
LBA表210中的映射条目包括前两位压缩状态位。第一压缩状态位1表示压缩访问,0表示对未压缩数据规则的主机访问。例如,第127页映射到使用PTR1的未压缩数据。
当第一压缩状态位为1并且第二压缩状态位为0时,在LBA表210的条目中包含未压缩的数据段的全部大小(页数)。当第一压缩状态位是1并且第二压缩状态位为1时,则在LBA表210的条目中包含偏移量。所述偏移量是该压缩数据段的第一条目,所述条目包含段的大小。
在主机向LBA2048写DATA1,SC=128,8页的例子中,DATA1段中的LBA表210中有8页条目。2048的LBA选择LBA表210中的128页。在LBA表210共8页条目被使用。第一个条目表示总数据大小,接下来的7个条目包含指回的第一个条目的偏移量。
当主机读页133(LBA=2128,SC=16)时,则读取页133的LBA表210中的条目。存储在页133’的条目的偏移量是5,它向后指向页128的条目,其中包含3页全部的压缩数据。从压缩的LBA表212和下面两个压缩LBA表212的条目中读取页128的条目,共3页条目,这是压缩的数据的大小。每个条目指向虚拟磁盘188,SSD DRAM缓冲区194或者NAND闪存196中的压缩数据页。读取这三个压缩页并且解压缩以恢复原始的8页未压缩数据块。然后,从未压缩数据中提取主机正在读取的数据。其中,可以使用硬件电路或者固件控制算法或者软件进行联机压缩。
图11A-B中表述了备用和交换操作。如图11A所示,备用块是在Flash中,例如,在NAND闪存196中。数据已经写入到闪存块X,占用部分322包括几个整页和一个局部页。数据也将被写入部分324的备用闪存块Y中,所述部分324也包括几个整页和局部分页。块X和Y中的数据将被组合为自空闲备用块Y。
将来自部分322的整页写入交换块Z的高位部分326。然后,将来自块X和Y的局部页写入DRAM页缓冲区330中,且被结合起来,然后一起写入交换块Z中的一个中页。将来自部分324的下一个整页写入交换块Z的低位部分328。最终,块X和Y被擦除。
如图11B所示,备用块Y在DRAM中,比如在SSD DRAM缓冲区194中。将数据写入闪存块X中,占用含有几块整页和一个局部页的部分322。将这个数据拷贝到DRAM中的备用块Y中,占用高位部分332。将数据写入低部分324中的备用闪存块Y,所述低部分324为几个整页和一个部分页。块X和Y中的数据组合到空闲备用块Y中。因为备用块在DRAM中,来自块X和Y的局部页可以直接组合。然后将整个备用块Y复制到交换块Z,包括高位部分326和低位部分328。最终,因为块Y在DRAM中并且无需擦除操作,所以擦除唯一块。根据擦除操作所需的时间,在DRAM中具有备用块Y能够提高性能以及降低闪存块的损耗。
图12示出了多层次错误校验。闪存阵列400可使用多层次单元,当内部总线404上的闪存访问控制器402读取时,所述多层次单元更易出现位错误。编码器398能够产生低密度奇偶校验码并,且在写入闪存阵列400前,附加到来自读缓存396的数据作为备用字节。当数据读入到闪存阵列400的读缓冲区392时,奇偶解码器394将存储的奇偶校验与生成的奇偶校验进行核对,以检测和纠正读错误。当不可能使用LDPC_1编码纠错时,为闪存数据的页和块,使能更长,更复杂的编码LDPC_2校验376。
LDPC_2发生器378产生较长的奇偶校验码LDPC_2,并且由LDPC_2写缓冲区380缓冲至总线404。由于所选择的闪存页中的物理单元的退化,因此需要更多的保护,进而产生LDPC_2。LDPC_2生成并附加在即将写入到闪存阵列400块中的使能页或块中的数据中。
当LDPC_2码无法纠正读错误时,使能RAID奇偶校验390。所述RAID校验可能跨越闪存阵列的多个物理设备。所述RAID奇偶校验码是由RAID奇偶校验发生器388生成,并在将所述RAID奇偶校验码和写数据一起被写入总线404前,由RAID缓冲区382缓冲。它的产生是由于物理单元的退化导致的所选择的闪存页需要更多地保护。
当RAID奇偶校验码未能纠正读取错误,触发迭代控制器386以测试调整电压。读取的数据存储在迭代故障数据缓冲区374中。电压调整控制器384被闪存控制器控制,所述闪存控制器将特定值写入闪存中,以为闪存阵列400读取数据调整参考电压。数据回读以测试是否新设置的参考电压能够减少错误。因此,将进行另一轮LDPC_1/LDPC_2/RAID校验。如果仍然无法读取,读取的数据被存储在迭代故障数据缓冲区374中,并选择另一个电压以执行另一轮的回读测试。当所有的电压迭代都进行了测试并且失败,迭代故障数据缓冲区374加载测试结果,以使数据恢复分析器372确定内部总线406上的数据是否可以使用,或者是否出现了致命错误。纠错码和奇偶校验的多层次性,可提高闪存的寿命和耐力。
图13A-B示出坏块/擦除计数表和页状态表。如图13A所示,一个写日期被存储在块开始处。坏块/擦除计数表471存储闪存块的条目。每个条目包含一个块的状态字段,使用3位表明是否块是空的(擦除),使用的,有一些垃圾页的块,全部是坏块,或者有一坏页和一些好页的局部坏块。
每个块的条目还具有一个13位擦除计数和一个16位写日期。当设备生产出来时,13位擦除计数开始计数0。块每擦除一次,计数增加一次。此擦除计数可用于磨损均衡控制,并且可以用于S.M.A.R.T.检查设备的健康状况。写的日期是最后一次写入块的日期。它是用于刷新功能。对于TLC设备,可以保留一年以内的时间,写日期可以是一个编码数据(MM-DD-YY),或者是一个数值,例如,可以是生产时初始化的设备制造日期。
页状态表473块中有所有页的条目。每一页都有一个3位的页状态字段。由于每个页条目只有3位长,许多页条目可能被打包在一起。页状态表示一个空的,使用的,垃圾页,坏页,又或者是一个较高层次纠错保护的页。比如,一个更长的ECC码。
如图13B所示,写日期被存储在一个基础页上,而不是存储在一个基础块上。坏块/擦除计数表471记录闪存块的条目。每个条目包含一个13位擦除计数器和块状态字段,用3位表示是否块是空的(擦除),使用的,有一些垃圾页的块,全部是坏块,或者有一些坏页和一些好页的局部坏块。
在坏块/擦除计数表471不存储写日期。相反,页状态表473存储写日期。对图13B来说,写日期是页的写日期。而对图13A来说,是块的写日期。因为每个块都有很多页,存储页的写数据而不是块的数据需要更多的存储表,然而,却可增加耐力。刷新是针对页而不是针对整块。
图14是一个具有耐力控制器的超级增强耐力设备(Super EnhancedEndurance Device,SEED)的方框图。如图1和3所示,可选的,SEED200'与SSD350对接,然后连接到闪存342,而不是直连接到NAND闪存196。SSD350可以与SEED200'集成。SEED200'能够不使用主机VMD驱动器而独立工作。一些驻留在主机VMD驱动器的一些功能可能被实施。
SEED200’具有主机接口16,所述SEED200’使用总线,如PCIe,SATA,或者通用串行总线(Universal-Serial-Bus,USB),NVMe,雷电接口,eMMC,iSSD等与主机300(图1)通讯。从主机接口16来的数据被发送到耐力控制器360。耐力控制器360取代图3中的SEED控制器192,并且许多部分具有与图3中已经描述的相同的标号。
耐力控制器DRAM358可存储一个或多个虚拟磁盘,缓存,S.M.A.R.T.信息,固件和其它缓冲区和表。低级别SSD DRAM340可以存储安全信息,坏页管理表,映射表,擦除计数表,备件和交换块,其它缓冲区和表。低级别DRAM接口336从耐力DRAM控制器358读取和写入。刷新管理器202可以周期性的刷新低级别SSD闪存342中的数据。刷新恢复管理器43使用刷新数据管理恢复操作。临时管理器348控制临时数据,而压缩映射管理器352管理压缩表。安全管理器346管理安全功能。
多通道闪存接口14编程数据页并且擦除闪存342中的块,且可能会被组织成几个通道。ECC管理器338产生低层次纠错码(ECC)以加人写数据,并比较存储的ECC与重新产生ECC,以检测和纠正读取错误。它也管理需要额外保护的闪存页,为这些页产生ECC,并且在需要的时候ECC的存储和回收。坏页管理器206跟踪闪存342中的坏页位置。这样能够延长单个块的寿命,因为在块中仅有一页可能是坏的,而其它的页还能连续使用。更复杂的坏块管理可能会降低整体的闪存驱动器的磨损。
磨损均衡器40可提供两种磨损均衡方法。一种方法是从可用空块中动态选择最低磨损均衡计数块写数据。另一种方法是基于耗损均衡计数阈值。一旦达到这个阈值,闪存数据块将从闪存342中的一个物理块(具有低损耗均衡计数)移动到另一个空物理块(具有高损耗均衡计数)。耐力控制器360和SSD350控制器可以功能性的集成在一起或者分开。
图15A-E示出了主机上VMD驱动器处理主机写指令。步骤1002,主机请求中包含逻辑地址,如用于统一映射表的索引的LBA。读取统一映射表匹配条目,或解析文件FAT和FDB的条目,以确定文件扩展名和数据类型。在匹配条目的前几位是数据类型位,以指示什么类型的数据被存储在该逻辑地址。取决于数据类型位,调度不同的进程。
步骤1004,当匹配条目的数据类型位是10,所述数据是FAT或FDB条目。元数据写过程被调用,这在图15B详细描述。
步骤1006,当数据类型位是11,用户数据文件进程文件被调用。用户数据写过程在图15C中详细描述。用户数据文件是应先存储在DRAM中,然后再刷新到闪存中的用户和应用程序数据。
步骤1008,当匹配条目的数据类型位是001,分页文件的数据用于交换主存储器的外围存储。这些交换通过主机上的存储管理器执行。这些文件不需要被存储在闪存中,以减少损耗。分页数据写入过程被调用,图15D中详细描述。
当匹配条目的数据类型位是01(非现有类型)时,在步骤1008中,临时文件数据无需存储在闪存中。临时数据写过程被调用,已在图15E中进行详细描述。
图15B显示了元数据写入过程,步骤1102,主机数据被写入主机的DRAM中的元数据文件区域缓存(图6中的286),步骤1104,当缓存满了,步骤1106,缓存的元数据被移动到DRAM中元数据分组缓冲区。步骤1108,当达到标准大小或者收到数据之后,对分组缓冲区的元数据,执行分组过程。
分组处理过程将所述元数据分成元页。步骤1110,当在元页满了时,步骤1112,满了的数据的页被写入到SEED,SSD或者闪存中。
图15C显示了用户数据的写过程。步骤1122,主机数据被写入主机的DRAM中(在图6中的234)的用户数据文件区缓存。步骤1124,当缓存满了,步骤1126,缓存中的用户数据被转移到DRAM中用户数据分组缓冲区。步骤1128,当满足标准大小时,根据分组缓冲区用户数据,执行分组进程。
分组进程将用户数据分为元页。步骤1130,当元页满了,步骤1132,满了的用户数据元页将被写入SEED,SSD,或者闪存中.
图15D显示分页数据写过程。步骤1142,主机数据被写入主机的DRAM(图6中的232)中的分页数据文件区缓存中。步骤1144,当缓存满了,步骤1146,缓存中的分页数据被移动至DRAM中的分页数据分组缓冲区中。步骤1148,当满足标准大小时,根据分组缓冲区分页数据,执行分组进程。
分组进程将分页数据分成元页。步骤1150,当元页满了,步骤1152,满了的分页数据的元页被写入SEED,SSD,或者闪存中。
图15E显示临时文件写过程。步骤1162,主机数据被写入主机的DRAM虚拟磁盘_01(图6中的288)的临时文件区中。步骤1164,当虚拟磁盘满了,步骤1166,虚拟磁盘中的临时文件被移动到DRAM中临时数据分组缓冲区中。步骤1168,当满足标准大小,根据分组缓冲区中的临时数据,执行分组进程。
分组进程将临时数据组成元页。步骤1170,当元页满了,步骤1172,满了的临时数据的元页被写入SEED或者SSD中,而不是闪存中。
图16A-E显示了主机VMD驱动器处理主机读指令。主机请求中包含逻辑地址,如用于统一映射表的索引的LBA,步骤1012。读取统一映射表匹配条目,或解析文件FAT和FDB的条目,以确定文件扩展名和数据类型。在匹配条目的前几位是数据类型位,以指示什么类型的数据被存储在该逻辑地址。取决于数据类型位,调度不同的进程。
步骤1014,当匹配条目的数据类型位是10,所述数据是FAT或FDB条目。元数据读过程中被调用,这在图16B详细描述。
步骤1016,当数据类型位是11,用户数据文件读进程被调用。用户数据读进程在图16C中详述。
步骤1018,当匹配条目的数据类型位是001,数据是分页文件。些文件不需要被存储在闪存中,以减少损耗。分页数据读进程被调用,所述调用过程在图16D中详述。
步骤1018,当匹配项的数据类型位是01(非现有类型),临时文件的数据不是存储在闪存中。临时数据读进程被调用,所述调用过程在图16E中详述。
图16B显示了元数据读过程。步骤1120,当请求的元数据在主机的DRAM(在图6的286)的元数据文件区缓存中被发现时,步骤1022,从这个缓存中读取请求的元数据,且被传送至主机。
步骤1120,当所请求的元数据不在缓存中时,步骤1024,从SSD中提取元数据,并写入到主机DRAM中的元数据取消分组缓冲区中。步骤1026,如果元数据被分组,对所述分组元数据执行取消分组进程。步骤1028,从元数据取消分组缓冲区读取所述取消分组元数据,并传送到主机。
图16C示出了用户数据读过程。步骤1130,当请求的用户数据在主机DRAM(图6中286)的用户数据文件区写缓存中发现时,步骤1032,然后,从写缓存中读取请求用户数据,并被传送到主机。写缓存保留最近主机写的数据。请求的用户数据也可能是为四种数据结合的四个读缓存中的一个,即RA/FA,RA/NFA,NRA/FA,和NRA/NFA,根据读访问,加载用户数据,不一定是在主机写数据时。
步骤1160,当在主机DRAM的四个读缓存之一图6中290,291,292,293)中发现请求的用户数据,步骤1062,从所述读缓存中读取请求用户数据,并且传送到主机。
步骤1130,1160,当请求的用户数据不在五个缓存的任何一个中时,步骤1034,从SSD中获取用户数据,然后写入主机DRAM中的用户数据取消分组缓冲区中。步骤1036,如果用户数据被分组,执行取消分组进程以使所述用户数据取消分组。步骤1038,从用户数据取消分组缓冲区中读取未分组用户数据,并且传送至主机。取消分组数据被存到所述四个读缓存中的一个。
图16D显示分页数据读过程。步骤1140,当在主机的DRAM(图6中232)分页数据文件区缓存中发现请求的分页数据时,步骤1042,从所述缓存中读取所述请求的分页数据,并传送到主机。
步骤1140,当请求的分页数据不在缓存中,步骤1044,从SSD中获取分页数据,并写入主机DRAM中分页数据取消分组缓冲区中。步骤1046,如果分页数据被分组,执行取消分组进程以使所述分页数据取消分组。步骤1048,从分页数据取消分组缓冲区读取取消分组分页数据,并传送到主机。
图16E显示临时数据读过程。步骤1150,当在主机的DRAM(图6中288)中虚拟磁盘_01中的临时数据文件区缓存中发现临时数据时,步骤1052,从所述缓存中读取所述请求的临时数据,并传送到主机。
步骤1150,当请求的临时数据不在缓存中,步骤1054,从SSD中取出所述临时数据,并写入主机DRAM中的临时文件取消分组缓冲区中。步骤1056,如果临时数据被分组,执行取消分组进程以使所述临时数据取消分组。步骤1058,从临时数据取消分组缓冲区读取取消分组临时数据,并传送到主机。
图17A-B示出了元页组成过程。元页是一个页大小的倍数。两个单独的元页用于组成每个数据类型组,一个元页组成整个页和第二个元页组成局部页。
步骤1202,确定添加到分组数据的新的未分组数据的大小。步骤1204,当新的数据的大小在完整页大小的512字节之内时,所述新的数据被认为是一个完整页。如果所述新的数据超过一个页的大小,每一页都可以单独处理。
步骤1204,当所述新数据是一个完整的页,步骤1206,在当前元页Z中,可以找到下一个可用的页位置X,所述当前元页Z组成完整页。步骤1210,新的完整页被移动到元页Z内的位置X。步骤1212,相应的组成映射表条目被更新为新添加的数据。所述主机的数据的LBA,HOST-LBA,数据类型YY00,元页数目Z,以及元页Z内的页位置X被记录在该条目中。
步骤1208,当元页Z是满页时,步骤1216,元页Z被写入到SEED或SSD。步骤1218,所述主机LBA的组映射表条目,通过指针SSD-LBA-MF被修改指向SSD中的完整元页,但是仍表示页的位置X。最后数据类型位被修改为1以表明是SSD存储,而不是DRAM存储,YY01。
图17B示出了将一个新的局部页分成用于分组局部页的元页M。步骤1226,下一个可用的元页M内用于局部页数据的位置A(N)是固定的。步骤1220,新的局部页数据被移动到元页M开始,即位置A(N)。开销也随着新的数据被移动,例如,数据头。
步骤1222,组成映射表中的对应条目被更新为最新增加数据。主机中用于新数据的LBA时,HOST-LBA,数据类型YY10,元页数目M,元页M内的起始位置A(N),数据长度和开销被记录在条目中。第三个数据类型位设置为1以表明是局部页,而不是一个完整页。
步骤1228,当元页M是满的,步骤1236,元页M写入到SEED或SSD。步骤1238页所述主机LBA的组映射表条目,通过指针SSD-LBA-MP,修改为指向SSD中的局部元页,且仍然表示起始位置A(N)和长度。最后一个数据类型位改为1,以表明是SSD存储,YY11。
图18示出了由VMD驱动器加密和压缩处理过程。图1和图2中的压缩/解压缩引擎242,以及加密/解密引擎240中可以执行这些功能。当主机写数据被VMD驱动器100截获时,检查文件的扩展名。音频,视频,图形,数据库和其他文件扩展名可能表示数据已经被压缩,例如,通过一个用户程序。步骤510,禁止对文件扩展名进行压缩。
步骤512,启用加密时,步骤514,使用加密密钥对文件进行加密。步骤516,在文件系统中,为这个文件设置一个加密标志位。可选的,临时和分页数据类型可以不进行加密/解密。
步骤518,如果启用了压缩,步骤520,文件被压缩。步骤522,增加头文件,所述头文件具有使用压缩算法的标识符和新数据大小。步骤524,在文件系统中,为所述文件设置压缩标志。可选的,临时和分页数据类型可以不进行压缩或解压缩。
图19A-B示出了在SEED中进行备份/交换处理过程。步骤530,当闪存块中的已有页有新数据到达时,步骤532,当闪存页可写时,步骤534,将新的数据写入到闪存页。
步骤532,当闪存页不能被写时,例如,在所述块中,所述页在其它的页之前已经被写,而闪存只页以正向序列方式写,步骤536,但备用块可用于所述块,步骤538,然后新的数据写入到SSD DRAM缓冲区194备用块中的相同页中。
步骤528,当闪存页不能写,或者没有可用的备用块时,所述新的数据被写入SSD DRAM缓冲区194中的空备用块中。处理过程在图19B中继续。步骤540,当其它的空备用块可用时,处理过程结束。
步骤540,当没有更多备用块可以用时,步骤542,选择写的最多,或不经常访问的备用块。步骤543,所选择的备用块中的脏页结合旧块中的有效页被写入所选择的备用块中。步骤546,所述选择备用块中的结合页被写入闪存的空块中,交换块。步骤548,所选择的旧块被擦除。
图20A-D示出了坏页和坏块的检测和处理过程。在图20A中,步骤554,一旦闪存中的块被擦除,该物理块的擦除计数器递增,根据之前的块状态和当前页状态,块的状态被改变为空块(000)或带有坏页的空块(100)。坏块擦除计数表存储在SSD DRAM缓冲区194,且当DRAM中没有足够的空间时,将该表备份到NAND闪存储器196中。坏块擦除计数表包括每个物理块的擦除次数,以及所述块的状态。块状态可以是一个3位的值,000表示好的空块,011和111表示坏块,而100表示有一些坏页和一些好页的局部坏块。
坏块擦除计数表还包括跟踪一个块内的坏块的页状态表。页状态值为000表示好页,001表示受保护的页,所述页使用100位的二级ECC,而不是一个25位的一级ECC,010表示页被使用,110表示页内有垃圾/修剪数据,11X表示坏页。
在所述块被擦除后,检查块中每个页的状态。步骤556,读取所述物理块的页状态表,且当前页被初始化为0页。步骤562,当当前页的状态是11X时,当前页已经标记为一个坏页。此页不需要进一步处理。步骤560,当当前也没有超出所述块中的最后一页时,步骤558,当前页会被递增到所述块中下一页,且对所述下一个页的处理重复步骤562。
在图20B中,所述块中的所有物理块已经处理。步骤564,确定所述块中坏页的数量。步骤566,当所述块中坏页的数量超过阈值T3时,所述块被认为是坏块。步骤568,在块坏擦除计数表中,所述物理块的块状态被修改为011。所述物理块将不再使用。步骤570,局部坏块计数器(BAD_BP_CNT)计数减少,而坏块计数器计数增加。
在图20C中,步骤562(图20A),当前页之前没有被标记为坏页。所述擦除操作将擦除页中所有位的值擦除为擦除值,例如1。读取当前页中的所述位以确定是否所有位都被擦除。步骤574,获得一个计数值,所述计数值为所述处于未擦除状态的页中的所述位的数目,如0位。这些都是错误的位。然而,ECC可以纠正这些错误,所以如果错误位的数目比较小,页可能仍然是可用的。
步骤572,当未擦除的位计数小于第一阈值T1(表示太多错误位,增加了使用这些页的风险,即使有额外的ECC软件保护),步骤576,而当前页状态需要保护(XX1),然后,页已经标记为需要ECC二级保护。步骤582,所述页状态修改为需要保护的空白页(001)。返回图20A,处理下一个当前页。
步骤572,当未擦除的位计数小于第一阈值T1,步骤576,而当前页状态不是一个需要保护的页(XX1),且页尚未由二级ECC进行保护。步骤578,当未擦除位计数大于第二阈值T2时(表示错误位的级别为可能会导致致命错误,并需要额外的ECC软件帮助纠正的错误),步骤584,二级ECC计数器计数值增加,步骤582,页状态被改为001,当主机数据被存储在所述物理页中时,二级ECC将被用使用。返回图20A,处理下一个当前页。
步骤576,当页被尚未由二级ECC保护,步骤578,未擦除保护位计数不大于第二阈值T2,该页的状态为好页。第一级ECC是足以校正当前页中可能产生的错误的。步骤580,如果它尚未被标记为一个好页,页的状态被改变为000。返回图20A,处理下一个当前页。
在图20D中,步骤572(图20C),当前页有超过第一阈值T1的未擦除位。超过T1阈值表示该页中为未擦除位超过第二级别的ECC可以纠正的数目。所述页是坏的,不能够安全地使用。
步骤586,当块(1XX)中的物理块的状态是坏页,在所述坏块擦除计数表中,所述块已被标记为坏页块。在所述块中还有其它的坏页,并没有块状态需要改变。然而,步骤592,通过在所述页状态表中改变页状态为11X,当前页被标记为一个坏页。步骤594,坏页计数器增加,返回图20A,处理下一个当前页。
步骤586,当物理的状态块不是1XX时,在所述坏块擦除计数表中,所述块还没有被标记为局部坏块。在这个块中已经没有其它的坏块。步骤588,在块擦除计数表164,所述块的状态被改为具有坏块(100)的空块。步骤590,局部坏块计数器(BAD_BP_CNT)增加。此外,步骤592,通过在页状态表中更改页状态为11X,将前页标记为坏页。步骤594,坏页计数器增加,返回图20A,处理下一个当前页。
所述SSD可能包含许多闪存芯片(例如,16闪存芯片)。可能会遇到某些特殊情况,例如,当闪存芯片的一个层是坏的或整个芯片都是坏的。如果是过度配置,SSD的闪存容量可以吸收一个完整层的容量损失或整个闪存芯片的容量损失。设备控制器的特别算法可以被用来忽略损失,例如,以恢复数据,然后调整闪存设备的元页单元的大小以避免层错误或芯片错误。过度配置也可以通过使用空闲芯片代替故障芯片实现。
图21A-B示出了闪存块使用所述图13A中的表进行刷新操作。当刷新启动,例如,定期(每周一次等),步骤602,获得当前日期。步骤604,所述现行块被设置成第一个块,步骤608,如果块不是坏块,然后,步骤610,从所述坏块擦除计数表读取所述块擦除计数和所述块写入日期。步骤612,计算从上次写到当前日期的天数,例如,从当前日期减去上次写日期。步骤614,当上次写到当前日期的天数超过保留时间时,然后,在步骤618中,所块中的所有有效页被移动到备用块中的空白页,并与其它之前刷新的块中的页一起打包。
在图21B中,步骤620,当所述DRAM中的备用块填满时,DRAM中的备用块的数据被移动到闪存中具有最低的擦除计数的备用块中。步骤624,旧的闪存块被擦除。步骤628,当有更多的块需要处理时,步骤630,现行块推进到下一个块。
图22示出了在主机上执行的内部清理操作。所述内部清理操作可以在主机的一些文件或者全部文件上执行。选择一个文件,步骤650,获得所述文件的最后访问日期。步骤652,使用当前日期计算该文件上次访问以来的天数。步骤654,当所述天数少于清洁阈值,步骤656,该文件将被跳过,而选择下一个文件。步骤654,当文件的上次访问以来的天数超过清洁阈值时,步骤658,如果文件类型是临时文件,日志或分页,该文件将被删除,且配置了自动清理。步骤670,可以提示以及询问用户是否删除所述文件,如果用户响应是,则删除该文件。步骤672,如果用户没有选择删除文件,重复文件搜索和文件删除,直到选择下一个内部清除文件。
图23示出了SEED SSD从主机接收的日志文件。步骤674,当SEED从主机接收到一个日志文件,所述SEED将所述日志文件移动到日志分组表中。步骤676,任何元数据相关的日志文件被转移到元数据缓存。步骤678,完成标志从SEED发送回主机以表明日志文件已经成功写入。
步骤680,当日志表已满,步骤682,将日志分组表写入闪存。
图24是主机向SEED SSD DRAM缓存写数据的流程图。当主机数据写入到SSD DRAM缓冲区194时,步骤684,启动1键或标志位连同它的LBA地址,序列号,和数据校验和被写入到日志分组表中。步骤681,生成写数据校验和。在写数据实际移动之前,所述日志先写入。步骤686,主机写数据是元页形式,且所述元页数据被转移到相关的缓存。步骤688,各种元数据表,如FAT,FDB,分组表,压缩表,和其他元数据表被转移到SSD DRAM缓冲区194中相关的ETL表区域。步骤685,如果发现同一LBA具有旧的序列号,但所述LBA没有发现具有commit2标志的日志,记录所述abort1标识。新的数据将覆盖同一个LBA地址的旧数据。旧数据不写入闪存。步骤690,当日志表满了,步骤692,将日志分组表写到闪存。
图25示出了从SEED中DRAM缓存向闪存写的流程图。当SEED从SSDDRAM缓冲194向NAND闪存196传输数据时,步骤694,START2键或标志被写入到日志分组表。步骤696,写入闪存的数据以元页形式表示。步骤698,各种元数据表,例如,如分组表,压缩表和其它元数据表,将从SSD DRAM缓冲194相关的ETL表区域转移到闪存。步骤695,所述commit2标志被记录到日志分组表。步骤699,当日志表已满时,步骤697,日志分组表被写入到闪存中。所述“START1”标志记录开始向DRAM数据移动,而所述“START2记录开始将数据写入到闪存,所述“commit2”记录完成向DRAM数据移动,所述“abort1”记录同一LBA位置的数据被新的数据覆盖。
图26示出了主机上电源断电顺序的流程图。步骤1302,当主机电源掉电后,而且主机没有备用电源的主机时,步骤1306,协议命令用来通知SEED或SSD检测到电源故障。步骤1308,主机刷新寄存器和CPU缓存,缓存,SEEDSSD虚拟磁盘。系统提供电源以帮助完成向SEED SSD的数据刷新。
步骤1302,当可以获取备用电源时,步骤1304,协议命令用来通知SEED或SSD检测到电源断电。步骤1308,主机将元数据缓存和数据写缓存刷新到SSD。由于发生可控制的电源断电,所述CPU寄存器,其它的缓存和虚拟磁盘将不被刷新,主机将保留重要数据。步骤1310,主机向SSD发送协议命令以表示数据被刷新。
图27示出了SEED电源断电处理的流程图。步骤1312,当主机向SEED发送协议命令,所述SEED退出垃圾收集,步骤1314,继续接收来自主机的数据,并且同时开始将所述数据备用/交换DRAM块中的数据、元数据缓存中的数据以及向数据写缓存的数据刷新到闪存。步骤1316,一旦主机数据刷新完成,步骤1318,SEED不再刷新DRAM中的任何临时文件或分页文件数据,标记任何FDB条目为废弃的,清除任何FAT条目,以及标记将坏页表中的页标记为垃圾。步骤1320步,将ETL表和数据被刷新到闪存。步骤1322,记录S.M.A.R.T.监控信息以及正常断电状态。
图28是SEED电源故障处理的流程图。当主机向SEED发送电源故障协议命令时,步骤1332,SEED退出垃圾收集,并接收各种主机写入预设闪存区域的刷新数据。
步骤1334,所述SSD DRAM缓冲区194的刷新数据区接收从主机刷新的CPU的寄存器和缓存的数据,然后写入到预定的闪存区域。步骤1336,刷新数据区域接收从主机的缓存刷新数据,然后将所述数据写入到预定的闪存区域。步骤1338,刷新数据区域接收从主机接收的虚拟磁盘刷新数据,然后将所述数据写入预定的闪存区域。
步骤1339,来自SSD DRAM缓冲区194用于备用/交换DRAM块,用户数据,坏页状态表,ETL数据和ETL表的数据被写入闪存中的预设区域。步骤1324,记录S.M.A.R.T.监控信息以及非正常断电状态。
图29A-B示出了使用图13B中的表进行闪存页刷新操作的流程图。当刷新启动,例如定期(每周一次等),步骤603,获得当前日期。所述现行块和页被设置为第一块,第一页。步骤605,所述现行块的保留时间被计算为现行块的擦除次数的函数。例如,具有低擦除计数的块可能有一个更长的保留时间。
步骤609,当所述当前页是一个有效的使用页时,步骤611,读页状态表以获取页写日期。在步骤613中,计算上次写以来的天数,例如,当前的日期减去所述页的写日期。步骤615,当所述天数超过了保留时间,步骤619,所述当前页的内容被移动到备用块中的空页中,并与其它的需要刷新的页一起打包。
在图29B中,步骤621,当所述DRAM中的备用块是满的时,DRAM备用块中的数据块被移动到闪存中具有最低的擦除计数的备用块中。步骤625,旧的闪存块被擦除。步骤617,当现行块中有更多的页需要处理时,步骤623,所述当前页被推进到下一个页。在步骤629,当现行块中有更多的块需要处理时,步骤631,所述当前页被推进到下一个块。
图30A-B示出了图30A中页写过程中的坏页管理过程。当一个页被写入到闪存存储器时,步骤1440,读取页状态表,所述页不是一个坏页,而是一个空页。步骤1442,当页状态是受保护的XX1,步骤1452,为所述页生成第二级别的纠错码,ECC2。步骤1454,验证所述写数据,步骤1456,当所述数据小于错误发生阈值T1,步骤1458,在页状态表中将页状态写成011,即一个使用状态的受保护的页。
步骤1442,当页状态不是受保护状态XX1,步骤1444,验证所述写数据,步骤1446,当小于错误发生阈值T1时,步骤1448,且当小于错误发生阈值T2时,步骤1450,在页状态表中将页状态写成010,即一个使用状态的页。在步骤1448中,当检测到超过T2个错误时,步骤1452,产生第二级ECC2,而所述页成为一个受保护的页。
当超过T1个错误发生在步骤1446或1456中时,图30B中的处理过程继续。步骤587,当块状态读为1XX,所述块是具有坏页的块,步骤593,而在页表中,页状态被写为11X,所述页为坏页。步骤595,坏页计数增加,步骤599,且定位一个新的空页用于接收位于主机写入数据。
在步骤587,当所述数据块状态读不是1XX,步骤589,则在坏块擦除计数表中,将该块的状态修改1XX。步骤591,具有坏页的块(BP)的计数器增加,步骤593,所述页状态修改为11X。
图31A-B示出了后台垃圾收集过程。当后台垃圾收集过程周期性地触发时,步骤1460,检查坏块擦除计数表中的每个块条目,以定位垃圾页,所述页包含丢弃的修剪过或过时的数据。步骤1462,当所述块状态是X10,所述块具有垃圾页,步骤1464,为所述块读取页状态表并计算垃圾页的数量。步骤1466,当所述垃圾页的数量超过阈值TP时,步骤1468,所述块中使用过(不是垃圾,010和011)的页被移动到从空块池中选择的空块中,所述空块最有最低擦除计数次数。步骤1470,具有垃圾页的块被擦除,坏块擦除计数表和页状态表被更新以显示所述擦除状态。
在图31B中,步骤1472,为最低擦除计数块创建来自空块池的块列表。步骤1474,读取每个块的擦除计数,步骤1480,当一个非空的块的擦除计数小于阈值TE时,将数据从低擦除计数块移动到最高擦除计数块。步骤1482,所述阈值可以增加。将很长时间没有更新的旧数据移动到更耐磨损的块,所以更耐磨损的块可以接收更少的更新,为以后的写/擦除周期释放一个低擦除计数块。
图32示出了主机VMD初始化的流程图。当主机操作系统启动过程完成后,步骤1500,主机进行检查,看是否启用VMD。步骤1502如果启用,主机加载和执行VMD应用程序180。在步骤1504,VMD应用程序设置缓存的元数据和表,步骤1506,为临时数据设置虚拟磁盘_01。步骤1508,为分页数据设置缓存,步骤1510,为写数据建立缓存。
步骤1518,设立浏览器数据的虚拟磁盘_02,步骤1516,设立用户应用程序的虚拟磁盘_03。步骤1514,将刷新到SEED DRAM的刷新数据区域或者闪存中的数据加载到这些缓存和虚拟磁盘。步骤1512,为FA,RA组合建立四个读数据缓存。
图33A-B是SSD初始化的流程图。步骤1522,从闪存加载SSD固件和并执行所述SSD固件。步骤1524,所述固件为元数据和表格建立缓存,步骤1526,为临时数据建立缓存,步骤1528,为分页数据建立缓存,步骤1530,为写入数据建立缓存。步骤1532,当发生异常断电前,执行额外的步骤,如图33B。
步骤1534,读闪存预设区域,将数据写入SSDDRAM缓冲194的备用/交换,用户数据,坏页和状态表,ETL数据和ETL表。步骤1535,缓存和虚拟磁盘加载从闪存的刷新数据区域获取的刷新数据。步骤1533,擦除闪存的预设区域,以为另一个异常断电的发生提供空间。
图34是一个清理日志区的流程图。所述流程在插入检查点日志之后执行。步骤1536,选择一个检查序列号,步骤1538,将所述序列号与用于清理目的插入的检查点序列号相比。步骤1538,当所述序列号在检查点之前,步骤1540,对这个序列记录Commit2标志,步骤1544,由于序列的数据被成功提交到闪存,与该序列号相关的所有日志记录被删除。步骤1542,当所述序列具有abort1标志记录时,步骤1544,删除所有与该序列号相关的的日志,因为原来的LBA数据被在DRAM中较大的序列号的数据覆盖,且不再需要移动到闪存。步骤1546,当在检查点之前,没有更多的序列号检查时,步骤1548,检查点的日志被删除。
图35显示了在下次上电时,SSD上执行的一个异常电源关闭检查。步骤1550,扫描选定的序列号的日志。步骤1556,当发现commit2标志时,或者,步骤1558,发现abort1的标志位时,步骤1569,该序列号相关的日志被删除。如果保留了额外的序列号,步骤1552,选择另一个序列号,重复该处理过程。
步骤1556,1558,当既不是commit2,也不是abort1标志被发现,步骤1560,而是start2标志被发现,步骤1564,那么读取LBA数据,生成一个校验和并且与存储的日志校验和比较。步骤1568,当校验和匹配时,与此序列号相关的日志被删除,步骤1569,尽管电源异常关闭,数据却被正确地写入。
步骤1568,没有匹配的校验和出现时,或者,步骤1560,START2标志没有发现,步骤1562,那么在异常断电期间,与这个序列相关的LBA被报告给主机作为一个失败的写数据。步骤1569,此序列号相关的日志将被删除,在步骤1552,如果额外的序列号被保留,那么选择另一个序列号,并重复该处理。
图36显示了在下次上电时,主机上执行的异常电源关闭检查。步骤1580,从SSD中接收并读取失败的数据写列表以及他们的LBA位置(步骤1562),步骤1582,并且选择列表中失败的LBA。步骤1584,将日志表中的业务号码与LBA相比,以确定他们是否是相关的。步骤1586,当所述LBA是无关的,列表中的另一个LBA,步骤1582,可能会被选中。步骤1586,当所述LBA是相关的,步骤1588,并且发现commit标志,那么重做该业务。步骤1592,检查写业务日志中的每个LBA,并与日志中新数据记录一起并更新。步骤1588,没有发现commit标志时,则撤销该业务。步骤1590,写业务日志中,检查每个LBA,并且与日志中记录的旧数据一起被更新,步骤1594,当更多的失败LBA留在列表中时,步骤1582,然后列表中的另一个LBA可能被选中.
可选实施方式
本发明所考虑的其它几个实施例。已经描述了移动一个完整的元页到SEED,SSD,或闪存,在完全被填满前,一个几乎满的元页可以移动。因此,满可以是参考一些阈值的满,例如,可以是所述元页大小减去512个字节。
数据类型位和其它状态字段的多种编码,指针等是可能的。数据类型状态位不需要在条目的第一位。条目可以与其它表中的条目链接,如一个用于标签或者有效位的单独的表。临时文件可以有多种扩展名,并且新的扩展名可以被添加到列表中以进行搜索。由知名的程序创建的临时文件有知名的文件扩展名,例如,字处理软件和互联网浏览器,而且,可以随时添加额外的扩展名。这些额外的文件扩展名,可以通过固件更新添加到SEED和SSD控制器的控制软件,或通过软件更新到VMD应用180和VMD驱动器100。
ETL的每一部分所使用的DRAM缓冲器的大小可以被SSD控制器的固件固定。基于用户的使用或偏好,每一部分的ETL还可以由控制器固件自动或手动的动态调整。由于DRAM缓冲区大小的限制,并非所有的ETL功能在同一时间被所述DRAM缓冲区容纳。各种ETL功能可以适应实际工作环境。所述控制器可以被每个ETL调整大小以优化所述DRAM缓冲区。基于设备的使用模式,可以定期进行自适应调整。
对于TLC闪存设备,DRAM缓冲区可以使用NVRAM取代,例如,相变化内存(phase-change memory,PCM),铁电随机存储器(ferroelectricrandom-access memory,FRAM),磁阻存储器(Magnetoresistive RAM,MRAM),忆阻器,PRAM,电阻存储器(Resistive RAM,RRAM),赛道存储器和纳米存储器(nano RAM,NRAM)等。NVRAM的优势是所有的ETL支持表等可以保留在NVRAM中(没有必要放在闪存中),且其它的闪存目标数据(如数据写缓存等)页可以保留,即使电源关闭,因为即使电源突然关闭时,也不需要备用电源电路。临时映射表,读取缓存映射表可以选择在电源关闭时或在下次上电初始化时丢弃。除MLC以外,NVRAM缺点是成本。对于MLC,缺点是速度慢,且受写入/擦除次数的限制。通过分配部分只具有很强的编程页的TLC,可以从TLC中获取MLC。在SEED200中,ETL的一些功能可以在一个SRAM中被实现。
在TLC闪存设备中,DRAM的缓冲区也可以被组合取代,如DRAM+SRAM,DRAM+MLC,DRAM+PCRAM或DRAM+MRAM。当使用DRAM缓存的组合,如DRAM+MLC,ETL支持的功能在DRAM中被管理,但他们中的一些存储在MLC中。最终DRAM的缓冲区中的一些数据可以被丢弃,如临时数据和映射表,读缓存和映射表,当电源断电时,所述数据不会移动到MLC。当电源突然关闭时,需要保持的表和数据,如块擦除计数表,页状态表,SMART数据采集控制器等不需要存储在MLC中。复制到MLC比复制到TLC闪存快。在服务器应用的情况下,临时数据和映射表,读缓存和映射表不能被丢弃;当电源突然被关闭时,使用备用电源,这些区域将被存储到MLC。另一种方法是为了确保DRAM的ETL中的数据的利益,将这些区域复制到MLC。在电源关闭时,一个有效的ETL中的数据副本可以保持在MLC中。在电源上电时,ETL中的数据可以从MLC加载至DRAM中。复制方法可以通过记录细微的差别进行修改,这将减少复制数据的量,因此减少对MLC的写。
DRAM和MLC,或DRAM和SLC没有必要使用不同类型的闪存196,342,如SLC,MLC,TLC,QLC,PLC,3DNAND等。相反,通过分配部分只具有很强的页编程的TLC,可以从TLC中获取MLC。通过分配只具有较强的页编程的部分MLC,TLC,QLC,PLC等,可以从MLC,TLC,QLC,PLC,etc.等获取SLC。例如,一个增强型TLC闪存可以通过将TLC的一部分配置SLC(健壮页)使用的方式实现,如将四分之一的TLC作为SLC(健壮页)和提示TLC作为TLC(弱页)。或者配置的一部分TLC作为MLC(健壮页)和提示TLC作为TLC(弱页)。此外,编码/擦除管理器41(图14)可能会减慢页写入和块擦除时间,以延长闪存单元氧化层的寿命。降低页写/块擦除时间可以应用到增强型TLC闪存以增加耐力以降低保留时间为代价。通过使用刷新管理器202,保留时间可以增加。由于加强TLC闪存包括闪存SLC(健壮页)和TLC(弱页),并具有不同的保留时间,刷新管理器202能够追踪作为SLC(健壮页)或者TLC(弱页)块的使用,然后调整相应的刷新时间。同样,MLC可以作为SLC(健壮页)/MLC(弱页)的结合使用,并且QLC可作为组合使用,例如,SLC(健壮页)/QLC(弱页),或者SLC/MLC/TLC/QLC的任意组合。以上功能也可以在SEED200中实现。
本文所述的耐力技术试图解决的NAND闪存的耐力问题。有一些非易失性存储器,如MRAM,PCM,RRAM,忆阻器,NRAM等,这些存储器正使用竞争性技术以取代NAND闪存。
超耐力闪存驱动可以结合一个硬盘驱动(HDD),该超强耐力的闪存驱动器可以作为缓存,该HDD用于存储。超耐力闪存驱动具有高耐力,更适合作为缓存。这种混合设备的整体性能可能会提高。另一种方式确保DRAM的ETL中的数据是复制到HHD中。在断电的情况下,ETL中的数据有效副本可以保存在HDD中。在上电的情况下,这些数据可以从HDD中加载到DRAM。复制方法可以通过记录细微的差别进行修改,这将减少复制数据的量,因此减少对HDD的写。
操作系统的引导映像可以预装到DRAM的缓冲区,以加快主机开机。一旦启动过程结束,为了后续的正常操作,释放DRAM的缓冲区。
当主机处于睡眠或待机模式时,脏DRAM缓冲区必须被写入到闪存中。当用户的主机注销时,脏DRAM缓冲区可以写入到闪存中。
写入数据的分组并不限于一个作为一个单元的页。分组数据可以放在更大的单元,如多页(元页)和整个块,等等。
已经描述了主机访问的数据类型的分类,且比较了从主机到一个或多个地址范围的逻辑地址,这种比较可能只能比较代表表示地址范围的一部分逻辑地址的范围。通过解析为特定格式的主机写数据,如一个FAT格式或FDB格式,可以识别数据类型。在一个序列中,更早的主机写能也能够检查其数据格式。FAT文件系统可以作为一个例子。FDB/FAT是FAT文件系统的元数据。其他的文件系统,如LINUX,Apple OS和Android等等,都有自己的不同名字的元数据,但是其作用是等价的。
每个块可以被分成多页区域。例如,一个块可以具有16页,4个区域,每个区域有4页。在可选的实施例中,一些映射可能为区,而不是单独的页或块。可选的,在特殊情况下,每个区域有一个页。比起页模式,区域模式需要较少的映射条目,因为每个区是多页的。
从主机的逻辑扇区地址(logical-sector address,LSA)的高位可以选择一个群集或区。映射表中所有的条目可以是同一区的。当来自LSA的区号码匹配映射表中所有条目的区号码时,来自LSA的LBA选择映射表中的条目。混合或多个电平的映射表也可以使用。由于FAT1/2的LBA范围是已知,表中的内容数据类型位“100”可被删去。映射表能够具有一个块或页的粒度。
对于页映射,为了重新定位进行块复制是较不频繁的,因为比起块模式下,在页模式内,非SLC闪存的写顺序规则较少违反。这增加了闪存系统的耐力,并提高了性能。
映射表可以位于一个扩展的地址空间中,并且可以使用虚拟地址或大于在用户地址空间的最大地址的非法地址。页可以保留在主机页顺序中,或者可能被重新映射到任何页的位置。另一个实施例中,如对于数据中心应用,分页和临时文件可以被视为正常的用户数据以简化控制器的操作,但牺牲了闪存的耐力。通过使用DRAM缓冲区作为耐力备用/交换缓冲区,而不是采用闪存,耐力备用/交换区可以提供扩展过度配置。在主机已经提供的压缩函数的情况下,压缩函数可以选择关断。在其它实施例中,控制器可以把分页文件作为用户数据以简化了控制器的功能。
框图的许多变化是可能的。一个ROM,例如,EEPROM,可以连接到控制器的一部分和专用于虚拟存储处理器存储固件。此固件也可以存储在主闪存模块中。主机接口总线可以是串行硬件驱动器接口(SerialAT-Attachment,SATA)总线,快速外设组件互连(Peripheral Components Interconnect Express,PCIE)总线,紧凑型闪存(compact flash,CF)总线,或者一个通用串行总线(Universal-Serial-Bus,USB),NVME,固件1394总线,光纤通道(FibreChannel,FC)总线,雷电总线等。内部总线可以使用标准,如SATA总线,集成设备电路(integrated device electronics,IDE)总线,快速外设组件互连(Peripheral Components Interconnect Express,PCIE)总线,CF总线,USB总线,安全数字(Secure Digital,SD)总线,多媒体卡(Secure Digital,MMC)总线,固件1394总线,FC总线,各种以太网总线等。SCFD可以包括只SLC或MLC闪存,也可以是SLC/MLC闪存的结合。
闪存可以嵌入在主板上或SSD板或可以在单独的模块上。电容器,缓冲区,电阻器和其它组件也可以增加。控制器可以被集成在主板上,或在单独的电路板或模块上。闪存可以和控制器或者原始NAND闪存芯片一起集成,作为一个单独的芯片设备或者插件模块或者主板。
使用多层次的控制器,如在控制器主控制排列中,相比较控制器的单一层次损耗均衡,坏块管理,重映射,缓存,电压管理等的需求,在SEED中的控制器可能并不复杂。并不昂贵的硬盘可以在控制器中使用。例如,使用8051处理器作为控制器或者一个虚拟存储器或者一个业务管理器,而不是一个更强大的处理内核,例如,先进的RISC机器ARM-9的CPU核。对于某种应用,可以考虑一个更强大的处理器。
不同数量和布局的闪存存储块可以连接到SEED上。而不是使用一个的LBA存储总线接口或差分串行数据包总线以及其它串行总线,例如,同步双数据速率(synchronous Double-Data-Rate,DDR),ONFI,ToggleNAND,差分串行数据包总线,传统的闪存接口等。
模式逻辑只在电源上电时能识别到引脚的状态,而不是识别到专用引脚的状态。引脚状态的某个混合或者排列能够用来初始化模式变化或者设置内部寄存器,如配置寄存器。一个多总线协议芯片可以有一个额外的个性引脚以选择使用哪个串行总线接口,或者可以有可编程寄存器对集线器设置模式或者开关模式。
业务管理器,控制器,进程和功能可以以各种不同的方式实施。功能和进程可以由CPU或其它处理器编程和执行,也以由专用硬件,固件或其某种组合来实现。许多分割的功能,可以被取代。SEED控制器可以是硬件,或者包括硬件或者软件或者软件和硬件的结合。
通过使用多闪存通道奇偶校验/多闪存通道ECC和将数据端分割成多个NVM块,整个系统的可靠性大大提高。例如,第九闪存芯片可用于闪存接口。其他八个闪存芯片的奇偶校验被写入到这第九闪存芯片,以提供额外的保护数据,以防止第八个闪存芯片遇到一个致命的读错误的情况。然而,它可能需要使用有DDR、SDRAM缓存的CPU引擎,以满足复杂的ECC/奇偶校验计算和生成的计算能量的要求。另一个好处是,即使闪存块或闪存模块损坏,数据也可以恢复,或者SEED能初始化“故障恢复”或者“自动重建”过程中插入一个新的闪存模块,以及恢复或者重建“丢失”或者“损坏”数据。整个系统的容错率得以显著提高。
闪存单元的浮栅由注入它的电子编程。闪存在页写时控制电子注入,使之保持于两个基准电压电平。NAND闪存结构的位线被连接为32个单元的字符串,每个单元被连接到32个不同的字线。一个单元格的数据写入后,任何相邻单元写和读将会对该单元造成干扰。干扰将会向所述单元的浮栅注入或者从所述单元的浮栅移走电子。很长一段时间将会影响所述单元的浮栅中的电子数量。由于浮栅中的电子数量的变化,当读数据时,输出电压电平将会漂移。如果输出电压电平在参考电压边界两端漂移,读出的结果将是错误的。
更宽或更窄的数据总线和闪存芯片可被取代,如16位或32位数据信道。嵌套或者分段总线的交替总线架构能可用于内部或者外部的SEED。两个或更多的内部总线能够在SEED中使用,以增加吞吐量。更复杂的交换结构可以取代内部或外部总线。
数据条带化可以在各种方式发生,如奇偶校验和错误校正码(ECC)。根据用来防止重叠的内存位置重新排序的数据布局,数据包重新排序可以调整。SEED可以与其他组件集成,也可以是一个独立的芯片。
可以增加额外的流水线或临时缓冲区和FIFO。可以在每个通道中提供单独的页缓冲区。可以增加时钟源。
单个数据包,单个芯片,或者多芯片数据包可能包含一个或多个闪存和/或SEED或者SSD的信道数。本发明并不限定于SCFD使用。SCFD可以被替换为具有非易失性闪存和控制器的任何一类非易失性设备。
基于MLC闪存设备可以具有四个具有两个平行的数据信道的MLC闪存芯片,但也可以使用不同的组合以形成其它的闪存模块。例如,四个,八个或更多的数据通道,或8个,16个或更多的MLC芯片。闪存设备和通过可以位于链,分支或者阵列中。例如,具有4个闪存设备的分支能够作为链连接到SEED。其他大小的聚集或分区方案可以用于不同的内存访问中。
主机可以是台式PC主板或其它PC平台,例如,服务器,笔记本电脑,上网本,平板电脑,智能电话,移动通信设备,个人数字助理(personal digitalassistant,PDA),数码照相机,生产工具或测试仪,组合装置,或其他设备。主机总线或主机设备接口可以是SATA,PCIE,雷电,SD,USB,NVMe,eMMC,ISSD,或其它主机总线,而连接闪存模块的内部总线可以PATA,使用多SD/MMC的多通道SSD,CF,USB,或其它并行接口。闪存模块可以是一个标准的PCB或是一个多芯片模块,所述模块被封装在TSOP,BGA,LGA,COB,PIP,SIP,CSP,POP,多芯片封装包(MCP),或者可以包括原始NAND闪存芯片,或存在与单独的闪存芯片,其它类型的NVM闪存中,如切换,ONFI,eMMC,iSSD,3DNAND中的原始NAND闪存芯片。SEEDSSD可以使用具有RAID的eMMC,并且eMMC也可以使用SEED结构。内部总线可以是完全或部分共享,或者可以是独立的总线。SSD的系统可以使用具有其它部件的电路板,如LED指示灯,电容,电阻等。电源管理可能被添加在一个或多个层次。SEED SSD可以带或不带VMD驱动器。PCIE RAID DRAM缓存卡可以包括VMD驱动器和多个SSD结构的SEED。
方向性术语,例如,如高,低,上,下,顶部,底部等是相对的和多变的。因为系统或数据是交替的,翻转等,这些术语是用于描述设备,但并非绝对。
NVM闪存可能在闪存模块中,闪存模块可能有一个封装控制器和在单芯片封装的闪存核心,所述闪存核心可以集成到PCBA,或直接封装到主板上,以进一步简化装配,降低了制造成本,并减少整体厚度。闪存芯片也可用于其它实施例中,包括开放框架卡。
使用一个控制器不仅仅是为了闪存存储,而是可能会增加附加功能。例如,一个音乐播放器可以包括一个控制器,用于播放存储在闪存中的MP3数据。音频插孔可能被添加到设备,以允许用户插入耳机听音乐。一个无线发射器,如蓝牙发射器,可被添加到设备以连接到无线耳机而不是使用的音频插孔。红外发射器,如IrDA,也可加入。无线鼠标,PDA,键盘,打印机,数码相机,MP3播放器,或其它无线设备也可以被添加蓝牙收发器。蓝牙收发器能够作为主要连接器取代连接器。蓝牙适配器装置可以有连接器,RF(射频)收发器,基带控制器,天线,闪存(EEPROM),电压调节器,晶体,LED(光发射二极管),电阻,电容和电感。这些组件封装到一个塑料或金属外壳之前,可以被安装在PCB上
数据的大小,如扇区,页,块可能会发生变化。一个扇区可有512个字节,一个页可能有16个扇区,一个块可以具有128页,这样的例子很多。
在ETL中的写数据可以由闪存控制器一个接一个的包装和记录到数据写入缓存作为一个页单元。来自主机的数据包的大小可以是大尺寸的,例如,大于元页单元,或者是小尺寸,例如小于扇区的大小。添加标题显示数据到主机LBA的关系。一个单独封装表将主机LBA映射到数据写缓存的元页单元的数据和数据头的偏移位置。数据写缓存的容量可以大于两个以上元页单元的大小。当数据写缓存满了或时间到了,选定的元页单位将从数据写缓存移动到闪存中。封装表将主机LBA映射到数据写缓存的元页单元的数据和数据头的偏移位置。万一覆盖了主机旧的数据,如果封装数据仍在数据写缓存中,旧数据可以被丢弃,通过将所述封装数据包上移和将新更新数据添加到数据写缓存中,并更新封装表。否则,如果封装数据在闪存中,则比较新数据和旧数据,并产生一个增量数据以示区别。增量数据和数据头会被追加到数据写缓存中。数据头也包括先前的旧数据的位置。封装表将把LBA映射到增量数据位置。
本发明部分的背景可包含有关该问题的背景信息或发明环境,而不是描述别人的现有技术。因此,包括在背景部分的技术不是由本申请人承认的现有技术。
本发明所述的任何方法或过程是机械实现或者是计算机实现的,且旨在由机器,计算机或其他装置要执行,而不是在没有所述机器辅助情况下的单独人来执行。产生的有形结果可以包括报告或其他机器生成的显示结果,所述结果在显示设备上显示,所述设备可以是电脑显示器,投影设备,音频产生设备,以及相关媒体的设备,并可以包括机械生成的硬拷贝打印输出。计算机控制其它机器是另一种有形的结果。
任何的优点和利益可能并不适用于本发明的所有实施例。当“方法”被权利要求引用时,申请人意图是使权利要求落入美国专利法第112条第6段保护范围内。通常一个或多个标签出现在所述“方法”之前。所述位于“方法”前的一个或多个词是一个标签,是为了引用所述权利要求,而不是为了传达结构限制。这种方法加功能的权利要求,其目的是不仅是为了覆盖前面描述的功能以及它的相当的结构,同时也为了覆盖等价结构。例如,虽然钉子和螺丝有不同结构,但它们是等价的结构,因为他们都可以执行固定功能。权利要求不使用“方法”其不是意图落入美国专利法第112条第6段范围之内,信号通常是指电子信号,但也可能可以通过光纤进行传输的光信号。
前面描述的本发明的实施例是为了说明和描述本发明。它的目的不是要详尽或限制本发明公开的具体形式。根据上述实施例的揭示可以作出许多修改和变化。本发明的范围本发明不是通过这个详细描述进行限制的,而是由随附的权利要求的范围确定的。