业界的好消息是,现代闪存控制器中的磨损平衡技术已经有长足的进步,能够克服闪存存储介质固有的弱点,并帮助发挥出闪存的优势。对于现代闪存系统而言,闪存控制器的选择比闪存存储器本身更加重要,通过为具体的应用选择合适的闪存控制器,可以提高系统的耐用性和可靠性。
这对于终端用户和设备制造商来说是一个非常大的优势,因为只要选用适当的高质量控制器,就可以在更关键的应用中采用越来越多的低成本、高容量多级单元MLC闪存。
闪存可靠性的挑战
由于我们当今接触到的几乎所有电子设备都在使用闪存,很容易忘记这种技术本身其实是一种很挑剔的媒介,同样面临着许多可靠性挑战。
虽然闪存存储单元可以接近无限次地读取,但是它们被编程或擦除(P/E)的次数却很有限。闪存被编程或擦除的耐久性取决于闪存的类型,一般来说,对于SSD或eMMC等大多数采用NAND闪存存储设备而言,其中使用的为商用MLC型闪存,通常每个单元只有数千个编程或擦除周期。
更糟糕的是,尽管闪存在读取时没有太多问题,但写入闪存的过程肯定会更多。闪存可以在页面面级写入,大小以千字节为单位。数据在被正确地写入之前,页面面必须要保持清空。不幸的是,闪存一次只能被擦除一个区块,其大小为兆字节。因此,写入闪存之前需要首先擦除页面面所在的大区块闪存。如果更新某个闪存单元就需要更新区块中的所有单元,导致总体使用寿命缩短。这通常被称为写入放大(Write Amplification)。
为了减少闪存单元的磨损,所有闪存存储设备必须使用磨损平衡技术。这些技术旨在驱动器上均匀地分散磨损,以最大限度地提高系统的耐久性。DRAM、SRAM或未使用闪存单元中的临时缓冲区都可用来跟踪驱动器下一步要写入的位置以及需要擦除的旧位置。
闪存驱动器的另一个主要问题是电源故障保护。临时缓冲区包含驱动器下一步应该写入的数据以及必须擦除的旧位置等信息,这些存储在易失性存储器中,这种情况下,突然断电会导致缓冲区被擦除,从而对驱动器数据造成灾难性的丢失。
随着光刻工艺尺寸的降低以及闪存密度和性能的提高,影响闪存可靠性的最后一个问题是不断增加的错误数量。最初的闪存驱动器使用单级单元(SLC)闪存,其中每个单元存储一字节,但现代闪存驱动器通常将一个闪存单元分成多个字节,即MLC / TLC闪存。每个物理单元支持更多字节以增大存储密度,但是会降低每个字节开/关状态之间的阈值。这不仅会增大误码率,而且可降低使用寿命。随着光刻工艺尺寸的减小,闪存密度会进一步提高,错误率也会增大。
高级控制器技术
尽管闪存存储可靠性面临着上述挑战,但我们仍然能够将其用于日常的消费类、商业类甚至任务关键型的应用,这在很大程度上得益于先进的闪存控制器技术。这些控制器结合了在磨损平衡、电源故障管理和纠错等方面的先进技术,使我们能够安全可靠地使用当今的高密度闪存。
磨损平衡
闪存转换层(FTL)是闪存控制器其中一个最重要的方面。通过将主机的逻辑地址转换为闪存上的物理地址,可以使SSD进行磨损平衡。例如,如果主机系统在相同的地址更新数据,FTL会将该逻辑地址转换为新的物理地址,以便在闪存驱动器上均匀地分布磨损,最大限度地提高耐用性。
FTL中逻辑到物理地址的映射粒度对性能和耐久性都有很大的影响。消费类USB和SD卡等较简单的闪存介质使用基于区块的映射,在区块(大小为兆字节)级执行映射。磨损平衡发生在区块级,由于每个逻辑页面面都被简单地映射到固定的物理页面面,因而在页面面级不会产生优化。
由于区块的尺寸就是擦除操作的最小尺寸,所以这种映射实施起来非常简单且负担较低。但是,这种简单的方法会导致大量的写入放大,并缩短了器件的使用寿命。
基于页面的映射通常用于现代SSD,它是将更细粒度的逻辑数据页面(以千字节为单位)映射到数据的物理页面。通过这种映射,逻辑页面可以映射到区块内的任何物理页面,同时实现区块级和页面级的磨损平衡。但是,对于其他形状因数,SSD基于页面的映射尚未被广泛使用。
页面映射等这样更细化的方法需要更强大的计算能力,并且必须存储更大的映射表。但是,不断增大的粒度可以大幅度降低写入放大。特别是对于工业、嵌入式或物联网应用而言,较小的随机I / O操作是常态,粒度、页面映射可以大大降低写入放大,并延长设备的使用寿命。
断电保护
由于SSD磨损平衡算法的映射信息通常存储在易失性DRAM中,因此电源故障会导致灾难性的信息丢失和驱动器损坏。为了防止出现这种可能性,许多工业SSD会采用超级电容器来存储备用电能,以防备电源故障,从而使系统有时间把DRAM内容转存到非易失性的闪存中。
虽然这种方法可行,但并不理想。依靠超级电容的备用电能,这些SSD不但增加了成本,而且还引入了另一个可能的故障点,因而影响系统的可靠性和使用寿命。微型SD(µSD)等更小形状因数的设备根本不允许包括DRAM和电容器。
具备Hyperstone hyMap®技术闪存控制器的存储设备能够直接在非易失性存储器中存储映射信息,这不仅消除了DRAM和电容器的成本,而且在任何时间、任何情况下都能确保数据的安全。
纠错
纠错是闪存存储可靠性难题中的最后一关。以前的闪存可以使用简单的海明码(Hamming-code)纠错码(ECC),但新一代高密度MLC闪存则需要更强的纠错能力。现代MLC ECC必须能够校正每个扇区的多个字节。
消费类SSD可能会选择使用质量和成本较低的LDPC代码来执行这种类型的ECC,但工业级闪存具有更严格的要求,更倾向于采用BCH或其他更高可靠性的方法。使用96字节的BCH ECC,可以提供多字节纠错功能,而且无需给I / O操作增加任何负担。
控制闪存可靠性
构建可靠的闪存充满了挑战。尽管固态存储没有可移动部件,物理上比硬盘更可靠。但闪存单元有限的使用寿命、电源故障以及闪存的纠错等问题给数据的可靠性带来了挑战,特别是对于嵌入式和工业驱动器等需要长寿命周期的应用。 |