一种利用三态桶目录的新型哈希算法用于闪存存储设备
摘要
近年来,由于便携性和可靠性,闪存存储设备在支持多种功能的移动消费电子产品中变得越来越重要。随着三层单元(TLC)闪存的大规模生产,闪存存储设备的容量不断增大,价格持续下降。由于TLC闪存芯片成本低廉,尽管其耐久性较差,仍被广泛应用于移动闪存存储设备中。此外,在移动闪存存储设备中,使用有限的内存资源来管理大规模闪存芯片存在困难。因此,基于TLC的闪存存储设备需要在较小内存资源条件下对内部的写入和擦除操作进行优化。本文提出了一种新的基于哈希的映射算法,该算法可减少冗余的写入和擦除操作,并仅使用少量内存资源,适用于移动闪存存储设备。提出的哈希算法还能保证在不同工作负载模式下具有一致的性能。通过与相关工作的各种实验对比,本文展示了提出的哈希算法1的优越性。
索引术语 — 闪存,闪存转换层,哈希算法,块映射。
一、引言
如今,闪存存储设备对于移动消费电子产品而言变得极为重要和关键,因为最新的移动消费电子产品除了基本的通信功能外,还支持娱乐、办公业务、医疗保健等多种功能[1],[2]。换句话说,移动消费电子产品使用闪存存储设备来存储和处理操作系统、用户应用程序、多媒体数据等。特别是多媒体卡(MMC)和SD卡等闪存卡,由于具备快速数据访问速度、小巧尺寸、轻重量、低功耗和高可靠性等优点,被广泛应用于消费电子产品中。
闪存存储设备采用NAND闪存来存储数据。闪存具有以下独特特性:首先,闪存除了读写操作外,还需要进行擦除操作,因为它不支持就地覆盖数据。其次,其擦除操作比读写操作慢得多。最后,闪存具有有限的擦除次数。因此,闪存存储设备需要在主机接口和闪存之间设置一个称为闪存转换层(FTL)的中间软件层,以应对上述特性[3]。
闪存存储设备的性能取决于FTL如何管理所配备的闪存芯片。为了克服就地更新的限制,主机系统的每个写请求都会被重定向到一个预先擦除的空页。因此,FTL需要建立从主机请求到物理闪存的逻辑到物理映射。这种映射使得闪存存储设备能在主机系统中被识别为块设备。针对闪存存储设备已提出多种FTL映射算法[4]。
近年来,由于三层单元(TLC)闪存的大规模生产,闪存存储设备的容量不断增大,价格持续下降。TLC闪存比单层单元(SLC)和多层单元(MLC)闪存更便宜,且其单位成本容量远高于其他类型的闪存。尽管TLC闪存的性能较低、耐久性较差,但由于这些优势,TLC闪存在移动闪存存储设备中得到了广泛应用[5]。因此,基于TLC的闪存存储设备需要一种高效的映射算法来优化写入和擦除操作。
此外,由于成本限制,移动闪存存储设备中用于管理大容量TLC闪存芯片的内存资源较少。尽管扇区映射性能较快,但其映射信息需要大量内存资源,因此不适合用于移动闪存存储设备。相反,传统的块映射和混合映射虽然占用较少的内存资源,但会频繁引发额外的写入和擦除操作。因此,本文提出了一种新的基于哈希的映射算法,该算法所需内存资源少,并且可避免移动闪存存储设备中的冗余写入和擦除操作。
哈希算法是一种著名的数据结构,用于在常见的文件系统和数据库系统中快速访问存储的数据。特别是可扩展哈希算法[6]由于能够一次性找到所需数据,已被广泛应用于实际的基于磁盘的系统中。然而,它不能直接应用于闪存,因为会产生大量擦除操作。
当数据被密集地原地覆盖时,会发生擦除操作。此外,当大量数据被顺序存储时,会频繁执行桶分裂。这些桶分裂会引发大量的读取、写入和擦除操作。
本文中,提出的哈希算法根据工作负载模式动态确定溢出桶数量和桶分裂类型。在热点模式情况下,分配更多溢出桶以提高写入和搜索性能。在冷模式情况下,分配较少溢出桶以延迟桶分裂并防止搜索性能下降。通过性能评估,本文通过与相关工作的比较展示了所提出的哈希算法的优越性。
本文的其余部分组织如下。第2节回顾了背景与相关工作,第3节详细描述了提出的哈希算法。实验结果见第4节。最后,本文在第5节进行总结。
II. 背景与相关工作
A. 闪存存储设备
闪存存储设备由控制器和NAND闪存组成,如图1所示。控制器包含带有闪存转换层(FTL)的只读存储器(ROM)、用于管理闪存芯片的随机存取存储器(RAM),以及用于处理闪存存储设备所有组件的处理单元。闪存芯片由多个块组成,每个块包含固定数量的页。每页由用于存储数据的主区域和用于存储其元数据(如逻辑地址和纠错码(ECC))的备用区域组成。
当主机系统请求读取或写入操作时,编程在只读存储器中的闪存转换层通过存储在随机存取存储器中的地址表将来自主机系统的逻辑地址转换为闪存上的物理地址。闪存存储设备的性能受到显著影响。
受其映射算法的影响。根据管理单元的不同,映射算法主要分为三类:扇区映射、块映射和混合映射。
B. FTL映射算法
扇区映射将主机的每个逻辑扇区映射到闪存上的相应物理页。为了避免就地更新,来自主机系统的每个写请求总是分配闪存上的一个空页。由于每个写请求都在单个写操作中执行,因此与其它映射算法相比,扇区映射能够快速完成。然而,随着存储容量的增加,映射信息的大小显著增加,因为每个逻辑扇区都有其对应的物理页地址。为了减小映射表的大小,提出了DFTL [7]和CPM [8]。它们通过按需方式为具有有限内存资源的移动闪存存储设备仅加载少量地址信息。但是,在主存和闪存之间交换地址信息时会发生大量的读写操作。
相比之下,块映射仅将来自主机系统的逻辑块映射到闪存上的相应物理块。其映射信息的大小非常小,因为所有逻辑扇区都可以通过计算物理块和页的数量来访问。由于在覆盖数据时块映射会引发许多缓慢的擦除操作,实际闪存存储设备不会单独采用块映射,而是应用结合了扇区映射和块映射的混合映射。
一种基于日志的FTL [9],作为混合映射算法的一种,因其较小的映射信息和高性能而被广泛应用于闪存存储设备。此外,为了提高写入性能并减小映射表的大小,已针对闪存实现了多种基于日志的FTL变种 [10]‐[13]。在基于日志的FTL中,插入的数据首先被写入由块映射管理的数据块,而需要更新的数据则临时存储在由扇区映射维护的日志块中,以避免就地覆盖数据。当日志块变满时,将触发垃圾回收。换句话说,日志块的有效数据及其相关数据块会被合并,然后旧的块被擦除。如果像热点数据那样频繁地向同一页写入数据,将会频繁发生垃圾回收,从而降低整体性能。因此,需要一种新的FTL算法,在设计时综合考虑内存资源和工作负载模式。
C. 闪存上的可扩展哈希算法
可扩展哈希算法是基于磁盘的存储系统中一种流行的数据结构。它能够快速访问并轻松存储带有哈希键的数据。此外,可扩展哈希算法可根据插入的数据量动态扩展其桶目录。
图2展示了可扩展哈希算法的示例,其中包含一个桶目录和三个数据桶。桶目录由哈希键(HK)、桶编号(BN)和全局深度(GD)组成。一个桶包含多个条目,用于通过局部深度(LD)存储具有相同哈希键的数据。哈希函数 h(x) 从给定输入键 x 和全局深度 n 获取哈希键,该哈希键是最后 n 位的二进制码。
如果插入或搜索具有特定键的数据,该键将首先通过哈希函数计算为哈希键。根据哈希键,从桶目录中找到对应的桶编号,然后在相应桶编号的桶中插入或检索数据。当插入键24的数据时,由于24的哈希键是00,数据将被写入0号桶的空条目中。如果没有空闲空间来插入数据,则该桶将被分裂成两个桶,并且桶目录的大小将翻倍。在这种情况下,在桶分裂后执行插入。
可扩展哈希算法可通过将每个桶映射到闪存中的一个块,并将每个条目映射到该块中的一页,从而作为闪存存储设备的块映射。如果在闪存存储设备中直接实现可扩展哈希算法而不进行任何修改,写入性能将下降。当频繁更新元数据等热点数据时,闪存中会因就地更新而执行擦除操作;当顺序写入多媒体文件等冷数据时,由于不存在重复数据,桶会迅速分割。此外,大量用于识别覆盖数据的读操作被浪费。因此,为了将哈希算法用作FTL映射,必须考虑闪存特性和工作负载模式。
III. 提出的哈希算法
A. 工作负载模式分析
工作负载模式可以分为三种模式,即热、温、冷模式。热点模式是指类似于元数据文件的数据频繁写入同一位置,而冷模式是指所有类似于多媒体文件的数据没有相同键[14]。温模式不属于这两种模式中的任何一种。如果所有数据都以日志方式(即非原位更新)存储,则在热点模式下,最近的有效数据将位于存储设备的尾部。相反,在冷模式下,各处的所有数据都是有效的。
基于上述分析,本文提出了一种利用三态桶目录(T‐hash)的新型哈希算法,用于闪存存储设备,以提高写入和搜索性能。该提出的哈希算法根据三种工作负载模式动态确定溢出桶数量和桶分裂类型。在热桶中,分配更多溢出桶以提高写入和搜索性能;在冷桶中,分配较少溢出桶以延迟桶分裂并防止搜索性能下降。
B. 概述
提出的哈希算法(T‐hash)旨在通过根据工作负载模式动态分配溢出桶数量,以提高闪存存储设备的写入和搜索性能。T‐hash以日志方式写入所有插入的数据,从而避免可能引发擦除操作的就地更新。当数据桶溢出时,分配溢出桶以延迟桶分裂,其数量根据重复键比率动态确定。此外,由于最近数据保存在最后一个溢出桶中,T‐hash从最后一个溢出桶逆序读取到数据桶,以实现快速搜索。
图3展示了T‐hash的概述。T‐hash的桶目录由三态标志(F)、哈希键(HK)、桶编号(BN)和全局深度(GD)组成。三态标志有三种类型:热(H)、温(W)和冷标志(C)。如果某个桶包含大量重复键,则其标志为 H;如果该桶没有重复键,则其标志为C;否则,桶标志为 W。哈希键是通过数据的键和全局深度n计算得到的最后n位二进制码。用于存储多个条目的数据桶具有桶编号和局部深度。它还具有溢出桶,溢出桶的数量由重复键比率决定。
如果插入键为x的数据,T‐hash 首先会使用键x和全局深度n计算哈希键。例如,当全局深度为2且目标键为3时,哈希键为11。如图3所示,在此情况下桶编号为2,因此键为3的数据将被插入到桶2中。当数据桶或溢出桶发生溢出时,T‐hash 会简单地为与该哈希键关联的数据桶追加一个新的溢出桶,直到溢出桶数量达到特定阈值。
如果数据桶是热桶,则最多分配n个溢出桶。在这种情况下,当最后一个溢出桶发生溢出时,数据桶和所有溢出桶将被合并。如果数据桶是冷桶,则最多分配n/2个溢出桶。否则,该数据桶没有溢出桶。在后两种情况下,当最后一个溢出桶发生溢出时,所有桶都将进行分割。在合并或分割桶之后,会根据重复键比率重新计算热、温、冷标志。
如果重复率较高,即存在热点模式,则会分配更多的溢出桶,并且在不进行桶分裂的情况下将它们合并。当插入具有相同键的数据时,先前桶中存储的重复数据全部变为无效。也就是说,只有最近的有效数据可能保留在最后一个溢出桶中,而旧的重复数据全部无效,无论溢出桶数量增加多少。由于这些桶中的有效数据较少,因此无需对所有桶进行分割。有效数据被合并到少数几个桶中,从而避免了大量的桶分裂。此外,与从数据桶开始的正向搜索相比,从最后一个溢出桶进行反向搜索可以更快地在热桶中找到所需数据,因为数据桶中的有效数据较少。
如果重复率为零,即冷模式,则分配较少的溢出桶以防止搜索性能下降并延迟桶分裂。在这种情况下,如果冷桶中没有溢出桶,由于没有重复数据,空条目会迅速被填满,从而导致频繁的桶分裂。桶分裂可能会触发擦除操作。然而,如果冷桶有大量溢出桶,则访问这些溢出桶将执行大量的读操作。因此,冷桶的最大溢出桶数为热桶阈值的一半。
否则,不会为温桶分配溢出桶。在温模式下,与冷模式相比,桶分裂进行得较慢,因为在分裂桶之后,重复数据被移除,分裂后的桶中占用的数据量较少。为了防止降低搜索性能,不会为温桶分配溢出桶。
C. T-hash的详细实现
图4展示了T‐hash插入操作的算法。桶目录中的所有桶首先被设置为冷标志。也就是说,所有桶在初始状态下最多可以有n/2个溢出桶。在第2‐3行中,桶编号BN首先通过插入的键Key和全局深度global_depth计算出的哈希键得到桶号BN。T‐hash随后在桶目录中识别BN的标志。在初始时刻,所有桶的标志均设置为冷标志C。因此,BN的最大溢出桶数MAX_OB为n/2。在第4‐6行中,T‐hash查找BN中的一个空条目。如果存在空闲空间,则在第10行将插入的数据写入BN桶的空条目中。否则,T‐hash判断溢出桶数量是否超过MAX_OB。若超过MAX_OB,则T‐hash根据第8行中的重复键比率对BN的所有桶执行合并或分裂操作。若未超过,则T‐hash只需在第6和第10行分配溢出桶并将插入的数据写入其中。
算法1 Insert(键,数据)
1. BN ← 获取偏移量 (哈希键 (Key, global_depth))
2. flag ← BN的标志
3. MAX_桶 ← 标志的最大溢出桶数
4. IF 数据桶BN中不存在空条目
5. 如果 当前桶 < 最大桶__
6. BN := 分配新桶 (BN)
7. ELSE
8. 合并分割桶 (哈希键 (键, global_depth))
9. ENDIF
10. 写数据到桶 (Data, BN)
11. 结束如果
图5展示了T‐hash的合并/分裂操作。当溢出桶中没有空闲空间时,T‐hash执行合并/分裂操作。在执行合并/分裂操作之前,T‐hash计算重复键比率,该比率通过dup_size除以total_size,得到,并在第1‐3行预先获取所有具有相同哈希键的条目数量。如果重复率小于阈值,则 HashedKey的标志变为H,并在第5行以及第11‐12行将所有具有 HashedKey的桶进行合并,而不是进行桶分裂。否则,所有具有 HashedKey的桶将被分裂,并根据第8‐10行和第13‐14行中的重复比率将其标志设置为W或C。
算法 2 合并分割桶(哈希键)
1. BN ← 获取偏移量 (哈希键)
2. total_size ← 所有具有哈希键的条目数量
3. dup_size ← 无重复键的条目数量
4. IF dup_大小 / 总大小 < 阈值_
5. 标志 := H
6. 否则如果 dup_size/total_size = 1
7. 标志 := C
8. ELSE
9. 标志 := W
10. 结束 如果
11. 如果 标志 = H
12. 合并桶 (HashedKey)
13. 否则
14. 分割桶(哈希键)
15. 结束如果
IV. 实验
A. 系统设置
为了评估性能,我们在基于NAND闪存的参考开发板上实现了多种FTL映射算法,包括所提出的T‐hash、作为扇区映射闪存转换层的CPM [8],以及作为混合映射闪存转换层的FFTL [13]。该开发板的控制器运行频率为87.5兆赫兹,并配备了64兆字节内存和64GB NAND闪存模块。闪存模块中的一个块由32页组成,块大小为128千字节。
为了评估包括垃圾回收在内的写入性能,最大块数限制为5,000。T‐hash和CPM的映射表设置为与所有块数量相同。FFAST的日志块数量设置为100。为了根据相同逻辑地址的重复数据比例估算性能,创建了多种合成工作负载,其中包含100,000条数据,热、温、冷模式的地址范围分别为1‐500、501‐3,500和3,501‐10,000。实验中使用了三种偏斜工作负载(即热模式、温模式和冷模式)以及一种均衡工作负载。每种工作负载的比例如表II所示。
表II 每种模式的键速率
| 模式 | 热LSN | 温LSN | 冷LSN |
|---|---|---|---|
| A. 热 | 80% | 10% | 10% |
| B. 温 | 10% | 80% | 10% |
| C. 冷 | 10% | 10% | 80% |
| D. 平衡 | 33.3% | 33.3% | 33.3% |
B. 实验结果
图6显示了将表II所示的各种模式的数据写入三种已实现的闪存转换层算法时的总耗时。从图6的结果可以看出,T‐hash在各种情况下的性能均优于其他映射算法。FFAST是所实现算法中最慢的映射算法,因为其复杂的合并操作会引发大量的读取、写入和擦除操作,如图7所示。T‐hash的性能表现均匀,不受工作负载模式的影响,因为它能够根据工作负载模式的比率动态分配溢出桶数量,并选择进行合并或分裂操作。然而,其余两种映射算法在热点模式情况下执行得更快。如果像热点模式那样集中写入相同数据,CPM的映射信息将很少被从主存驱逐到闪存中,同时FFAST的合并操作也不会被触发。在均衡模式情况下,由于存在多样的映射信息,CPM中会发生频繁的地址转换切换,日志块也会发生大量更新,这些操作导致整体性能下降。
为了更详细的分析,图7显示了三种映射算法在I/O请求后的操作次数。在每种情况下,T‐hash的所有操作次数保持一致,因为T‐hash在设计时考虑了工作负载模式。如图7(a)、(b)和(c)所示,由于相同数据被频繁写入,CPM中的写操作执行次数较少,因为无需更新新的映射信息。也就是说,在热点模式的情况下,映射信息很少发生变化。尽管CPM的读操作(仅用于查找地址)比T‐hash少,但由于CPM调用了比T‐hash更多的慢速写操作,其整体性能较差。
由于商用闪存存储设备的内部规格通常是保密的,因此仅通过测量结果很难预测所实现映射算法的实际性能。因此,还计算了表示闪存存储设备性能的写入放大因子(WAF)。由于闪存存储设备中存在写入前需擦除的限制,主机写入请求的逻辑量与写入闪存的数据物理量之间会出现差异。为了表示该值,使用写入放大因子(WAF),即闪存中实际写入次数与主机写请求次数的比值。
图8显示了在每种映射算法完成写请求后计算出的WAF。通过图8的结果可知,T‐hash的WAF在各种情况下均低于另外两种映射算法,并且保持均匀。此外,随着工作负载模式从模式A变为模式D,除T‐hash外,其他算法的WAF均有所升高。这是因为引发了大量的地址切换和复杂的合并操作。然而,T‐hash不受工作负载模式的影响,因为它会根据工作负载模式调整溢出桶数量。从图6、图7和图8的结果可以看出,T‐hash能够快速且均匀地处理来自主机系统的写请求。
C. 内存资源的使用
表III显示了各种映射算法对内存资源的使用情况。计算条件为:总存储容量为64 GB,页面大小为4 KB,每块页数为32,映射信息大小为4 字节。基本扇区映射的大小为64 MB,该值通过将所有页的数量与映射信息大小相乘得到。基本块映射的大小为2 MB,该值根据所有块的数量计算得出。T‐hash和FFAST除了额外的映射信息外,还分别需要热/温/冷标志和日志区域的映射信息。由于T‐hash的每个标志仅需两位,因此多使用了0.125 MB的内存资源。如果FFAST中日志区域占整个空间的10%,则大约将使用0.2 MB的内存资源用于映射信息。
CPM需要一个聚类块映射表和一个扇区映射表以实现按需映射。如果扇区映射信息的数量设置为与所有块的数量相同,CPM将使用两倍于块映射的内存资源,因为逻辑地址和物理地址都是必需的。相比之下,块映射仅需要逻辑地址或物理地址之一。此外,所有块均由0.01 MB的聚类映射地址表进行维护。由此分析可知,与其他映射算法相比,T‐hash仅使用少量内存资源。
表III 内存资源的使用情况
| 映射 | Size |
|---|---|
| 基本扇区 | 64 MB |
| 基本块 | 2 MB |
| T‐hash | 2 MB + 0.125 MB |
| CPM | 4 MB + 0.01 MB |
| FFAST | 2 MB + 0.2 MB |
五. 结论
本文提出了一种用于闪存存储设备的新型哈希算法,称为T‐hash。T‐hash通过根据工作负载模式动态分配溢出桶来提升整体性能。特别是,其合并操作减少了在热点模式下导致写入性能下降的桶分裂次数。此外,T‐hash所需的内存资源与块映射类似,仅需少量内存资源。通过多种性能评估,本文表明所提出的T‐hash在闪存存储设备上优于其他FTL映射算法。

6447

被折叠的 条评论
为什么被折叠?



