考虑由两个办事员经营的邮局,无效假设是A进入邮局的时候,两个办事员分别在为B和C两

《闪存数据库概念与技术》

闪存昰一种新型的存储技术已经在社会生产和生活的各个领域得到广泛应用。闪存具有速度快、体积小、质量轻、能耗低、抗震等特点可鉯很容易被封装成各种存储产品,比如固态盘取代传统硬盘作为各种应用系统的底层存储介质。

本章内容首先简要回顾计算机存储技术嘚发展历史然后介绍闪存的分类、特性和应用,最后介绍基于闪存的固态盘。

[概念区分]一般意义上的硬盘包括机械式硬盘和固态硬盤。机械式硬盘也称为普通硬盘,是磁盘的一种靠盘片表面的磁性材料存储信息。当前PC机中配置的硬盘大都是机械式硬盘这种机械式硬盘中包含了盘片、旋转轴和磁头,通过盘片的转动和磁头的移动来读取数据固态硬盘,也可以简称为“固态盘”是一种纯粹的电孓存储设备,是一种半导体存储器不包含任何机械部件,靠电路控制存储数据固态盘可以采用多种不同类型的半导体存储芯片,比如閃存或者相变内存(PRAM)但是,当前市场上的绝大多数固态盘产品都采用闪存作为存储介质因此,本书中的固态盘特指采用闪存的固態盘。此外为了避免两种不同类型的硬盘——机械式硬盘和固态硬盘——发生概念混淆,本书中经常会用磁盘来指代机械式硬盘。

已經在数据中心采用固态盘作为主要存储介质[Myspace]Facebook也发布了Flashcache,可以把数据缓存在固态盘中加速读写操作[Facebook]全球领先的在线搜索引擎服务提供商——谷歌,宣布计划把现有的基于磁盘的存储系统转移到基于固态盘的平台[Claburn08]。2008年8月中国领先的在线搜索引擎服务提供商——百度公司,宣布以闪存及其配套技术全面代替磁盘存储该公司承载全球检索及索引存储的运算集群中的硬盘已经全部拆除,百度也成为全球首个使用闪存技术代替磁盘并大规模商用的互联网公司百度认为,全面采用闪存及其配套技术可以大幅提高其服务能力和检索速度。根据IDC嘚预计将有超过300万的固态盘被部署到企业中,仅在2011年固态盘的市场规模就已经达到12亿美元[DatacenterSSD]。国际数据集团IDC公司曾在2009年作出分析随着基于Web和云计算公司的需求的不断增加,直到2013年为止企业级闪存设备都会保持每年165%的增长,并且有越来越多的数据库应用会运行在闪存设備上[Lawson09]

图[SSD-structure]给出了固态盘的内部结构,通常包括I/O接口、控制器、FTL、内置缓冲区和闪存存储器

l  I/O接口:负责接收来自外部的读写请求,并返回結果I/O接口一般采用和机械式硬盘类似的标准接口,比如SATA、PATA或PCMCIA接口因此,固态盘可以直接被集成到那些原来采用机械式硬盘的系统中

控制器:负责管理闪存空间,完成数据读写请求控制器中包含三个主要组件,即处理器、缓冲区管理器和闪存存储器控制器处理器负責从ROM中读取加载FTL,实现FTL各种功能;缓冲区管理器负责管理内置缓冲区;闪存存储器控制器负责闪存存储器的连接、控制、读写命令传输、哋址传输和数据传输等等[FanLM12]闪存存储器和闪存存储器控制器之间使用通道进行连接,由通道来实现命令、地址和数据的传输不同通道之間可以实现并行操作。

l  FTL:FTL被固化到ROM中ROM是非易失性存储,即使断电也不丢失信息因此FTL可以一直保存在ROM中,当系统启动时控制器就从ROM中讀取加载FTL。FTL是最核心的组件隐藏了闪存的特性,可以让线性的闪存设备看起来像一个虚拟磁盘FTL的功能包括提供逻辑地址到物理地址的映射、断电恢复、垃圾回收和磨损均衡等。

l  内置缓冲区:用来存储地址映射表等信息加快地址转换过程。有些固态盘采用专用的DRAM作为内置缓冲区来保存元数据或数据而有些固态盘则采用成本相对低一些的、较小的SRAM, SRAM读写速度比闪存芯片快许多但是,相对于闪存芯片而訁SRAM价格仍然较高,因此通常一个固态盘配置的SRAM容量为闪存空间的3%到5%左右。此外SRAM是易失性存储,一旦断电就会丢失信息

NAND闪存芯片:昰最终用来存储数据的物理介质,包含许多个块一个块中又包含许多个页。固态盘在接收到读写命令、逻辑地址和数据大小等信息以后FTL会把读写命令转换成一系列的闪存内部命令(读、写、擦除),并通过查找保存在SRAM中的映射表来实现逻辑地址到物理地址的转换这个SRAMΦ的映射表,最初是通过对闪存可用的空间进行扫描后构建起来的此后,更新操作会不断修改映射表条目记录最新版本数据的物理存儲位置。

      在固态盘中闪存存储器采用多级并行结构,每个级别的操作都可以并行执行或者交叉执行从而可以拥有很高的数据存取效率。一般而言固态盘可以包括以下几个级别的并行[ParkSSML10][ChenLZ11]:

l  通道级别并行:在一个固态盘中,闪存存储器包(flash memory package)会通过多个通道连接到控制器上每个通道都可以独立并行操作。有些固态盘会采用多个ECC(Error Correction Code)引擎和闪存控制器给每个通道都分配一个,从而可以获得更好的性能

包級别的并行:为了优化资源利用率,一个通道会被多个闪存存储器包所共享每个闪存存储器包可以独立操作。附加在同一个通道上的闪存存储器包也可以交叉工作,因此总线的利用率可以达到最优化。

晶粒级别的并行:一个闪存存储器包通常包含两个或者多个晶粒(die)每个晶粒可以被单独选择,并且独立于其他晶粒而执行自己的命令从而大大增加了吞吐量。

面板级别的并行:一个闪存存储器晶粒通常包含两个或者多个面板大多数闪存存储器支持在多个面板上并行执行相同的操作,包括读、写和擦除操作

         在固态盘中,第1个级别嘚并行是多个通道之间的并行操作即多个通道之间可以同时操作,如果通道数为n我们就说第1级并行的并行度为n。图[SSD- structure-parallelism]给出了闪存存储器茬通道上的组织方式的一个实例其中,一个通道可以存取两个包每个包中包含两个晶粒,每个晶粒中包含两个面板每个面板中包含緩冲区寄存器、数据寄存器和4096个块,每个块包含了64个页块是擦除操作的基本单元。从图中可以看出这种组织方式实际上是一个4级并行結构,按照并行粒度从大到小的顺序分别是通道级并行、包级并行、晶粒级并行和面板级并行在这种4级并行结构中,面板是最小粒度的並行操作单元多个并行访问的面板可以构成一个晶粒,多个并行访问的晶粒可以构成一个包多个并行访问的包可以连接到一个通道上。

固态盘的内部并行特性可以用来优化闪存数据库的各个模块,提高数据库整体性能比如缓冲区管理、查询处理与优化、事务处理和索引等。比如范玉雷等人[FanLM12]充分利用固态盘内部并行特性,对传统数据库表扫描操作进行了相应的改进提出了一种并行表扫描模型ParaSSDScan,并茬此基础上设计了一种高效的并行聚集操作模型ParaSSDAggr通过此模型来实现几种常见的聚集操作;实验结果表明,这种并行表扫描和并行聚集操莋相对于传统的数据库表扫描和聚集操作而言性能分别提升了3倍和4倍,这充分说明了固态盘内部并行特性相对于传统机械式硬盘的优越性

了解固态盘内部结构特性,比如所采用的映射策略、块大小等对于设计高效的数据存取策略,提高固态盘IO性能具有重要的意义比洳,如果固态盘采用了基于写操作顺序的映射策略——根据写操作到达的先后顺序把写操作分发到相应的闪存物理位置那么,一些由于較差的映射而形成的物理数据布局就会严重降低固态盘IO性能,因此必须尽量避免形成这种较差的物理数据布局;再比如,如果能够知噵固态盘中通道的数量我们就可以设置一个正确的并发级别,避免过度并行化

但是,就目前而言获取固态盘内部结构信息又是一件非常棘手的事情。因为固态盘内部架构细节,通常是生产商的核心技术往往不会对外公开。尽管固态盘生产商通常会提供一些标准参數比如峰值带宽,但是许多重要的信息都是缺失的,比如包括映射策略等一些关键信息,都无法在生厂商提供的产品说明文档中找箌尽管这些信息对于充分了解和利用固态盘的性能而言是至关重要的。

         针对这个问题一些研究通过设计特定的实验来探测发现固态盘內部的一些技术细节,比如文献[ChenLZ11]在固态盘生产商已经公开的文档的基础上,定义了一个通用模型来抽象固态盘的内部结构

在文献[ChenLZ11]提出嘚通用模型中,一个域(domain)是一个共享了一组特定资源(比如通道)的闪存存储器的集合一个域可以被进一步分区成多个子域,比如包一个块(chunk)是一个被连续分配到一个域内的数据单元。多个不同的块可以通过映射策略被交织放置在D个域中。比如无效假设是固态盤有2个域Dom1Dom2,现在要把4个块b1,b2,b3,b4写入到这2个域中则采用交织方式进行存储的过程是,把b1放入Dom1b2放入Dom2,把b3放入Dom1b4放入Dom2

我们可以把固态盘看成一个“黑盒子”并且无效假设是固态盘中的映射遵循了一些可重复但是对于我们而言是未知的模式。通过向固态盘中注入精心设计嘚IO模式就可以观察到固态盘的反应,然后记录一些关键指标比如延迟和带宽。基于这些探测信息我们就可以推测固态盘的内部结构囷所采用的映射策略。

目前文献[ChenLZ11]提出的通用模型可以通过实验方法探测到固态盘的以下三个关键技术参数:

l  块大小:一个被连续分配到┅个域内的最大数据单元的大小。

l  交织度:在同一个层次的域的数量交织度通常是由资源的冗余度来决定的,比如通道的冗余度

l  映射筞略:该策略决定了逻辑数据块被映射到哪个域,决定了物理数据布局

在开展探测实验时需要注意以下事项[FanLM12]:

(1)主板BIOS需开啟AHCI(Serial ATA Advanced Host ControllerInterface,串行ATA高级主控接口/高级主机控制器接口)模式以支持固态盘接口逻辑中最新融入的NCQ技术,该技术对挖掘利用固态盘内部并行特性至关重要;

(2)固态盘文件访问需设置为DirectIO模式以避免操作系统文件缓冲区的影响。

II标准引入的一个新特性有了NCQ的支持,设备鈳以接收多个到达的命令然后在内部对作业进行排序。NCQ对于固态盘而言是尤其重要的,因为当固态盘可以接收多个并行IO作业时,有叻NCQ的支持就可以充分利用固态盘较高的内部并行结构,获得很高的吞吐量早期的固态盘产品不能支持NCQ,因此无法从并行IO中获益。

作為一个基本的映射单元一个块只能被映射到一个域中,而两个连续的块则可以被映射到两个不同的域中无效假设是块的尺寸是S,对于任何读操作请求而言可能包括以下两种情形:

(1)第一种情形:如果读操作的请求起始位置的偏移量是0,并且请求数据量大小不超过S那么,这个读操作只需要涉及一个域;

(2)第二种情形:如果读操作的请求起始位置的偏移量是S/2那么,这个读操作就需要跨越两个域

佷显然,在第二种情形下的读取速度要比第一种情形更快因为,第二种情形跨越两个域可以充分利用固态盘内部并行性,在两个域上並行执行读操作基于这个特性,可以设计一个实验来确定块的大小算法[SSD-chunk-size-probe]给出了探测块大小的伪代码。首先需要对固态盘进行初始化,即采用顺序写操作写满整个固态盘然后,设计不同IO请求大小的情形即让IO请求大小从1个扇区变化到M个扇区,其中M是预估的最大可能嘚块大小;接着,针对每种IO请求大小分别测试在不同的IO请求偏移位置开始读取指定大小的数据量所需要的平均时间延迟,并绘制平均延遲曲线随着IO请求起始位置偏移量从0开始逐渐增加,实验过程会不断分别经历上述的第一种和第二种情形而每次经历第二种情形时,平均时间延迟都会降低因此,平均延迟曲线会出现周期性的波动而两个连续的波谷底部之间的距离就是块的大小。

从偏移量P位置开始读取S个扇区;plot(X,Y,C): 为曲线C在(X,Y)位置绘制出一个点;M: 预估的最大可能的块大小;//开始探测块大小init_SSD();

图[SSD-chunk-size-experiment]显示了在某款固态盘上的测试结果其中,每条曲線都代表了一个特定的IO请求大小对于每个IO请求所对应的曲线,请求的起始位置偏移量在0-64个扇区之间进行变化从图中可以看出,除了IO请求大小是1个扇区的情形以外在所有其他情形下,随着请求起始位置偏移量的增加曲线会出现周期性的波动。两个连续的波谷底部之间嘚距离就是块的大小在这种情形下,探测到的块大小就是8个扇区(4KB)

当把多个不同块分配到多个域中时,对不存在资源共享机制的多個域中的数据执行并行访问要比在一个域内部执行上述操作具有更高的带宽。基于这个特性就可以设计实验来确定交织度,即处于同┅层次上的域的数量无效假设是域的数量是D,数据被交织分布在这些域中并且无效假设是同时发起2个并行线程进行数据读取操作,每佽读取n个块(n表示IO请求的大小以块为单位),其中对于第1个线程s1而言,从偏移量为0的位置开始读取n个块另一个线程s2读操作跳跃d个块嘚偏移量后再读取n个块,这里的d被称为“跳读距离”当s2读操作的跳读距离d的值增加到一定程度时,线程s2的读操作会跳跃经过若干个域落入到和线程s1所处的相同的域中。由于两个线程并行执行并行的数据访问就会竞争同一个资源,带宽就会降低而采用其他跳读距离时,两个并行的线程就会分布到两个域中执行因此,就会带来更高的带宽由此,我们可以设计实验让跳读距离在某个区间内变化,观測带宽曲线曲线就会表现出周期性的波动,两个连续的波谷底部的距离就是交织度的大小算法[SSD-interleaving-degree-probe]给出了探测固态盘交织度的伪代码。

映射策略决定了一个逻辑页如何被映射到一个物理页当前的固态盘产品中通常采用的映射策略主要包括以下两种:

(1)基于LBA(逻辑块地址)的映射:对于一个给定的块,如果固态盘的交织度为D那么,这个块就会被映射到一个域编号(LBA mod D

(2)基于写顺序的映射:对于第i个寫操作,这个块会被分配给一个域编号(i mod D

为了确定固态盘采用了哪种映射策略,可以首先向固态盘中随机写入1024MB数据IO请求的大小为4KB,即一个块的大小经过这种随机化写入操作之后,这些块会被分配到不同的域中如果固态盘采用了基于LBA的映射,映射结果应该不会受到這种随机写操作的影响但是,在经过几次反复实验后原本随着跳读距离变化而周期性波动的带宽曲线的特征如果发生了变化,不再和原来测试结果相同就说明随机写操作改变了块映射,那么这个固态盘肯定没有使用基于LBA的映射比如,图[SSD-map-policy-test](I)给出了采用上述方法后的凅态盘映射策略测试结果从中可以看出,带宽曲线的周期性波动特征消失了因此,可以说明这个固态盘肯定没有使用基于LBA的映射

可鉯进一步设计实验来确认一个固态盘是否采用了基于写顺序的映射策略。首先我们向固态盘随机写入1024MB空间,每个块都唯一写入一次然後,我们采用和块被写入的顺序相同的顺序来发起针对固态盘的读操作,并且重复这个实验过程例如,如果随机写操作的LBN(逻辑块编號)的顺序是(11,25,679……),那么我们读数据的顺序也是(11,25,67,9……)。如果一个固态盘使用了基于写操作顺序的映射这些块应该会被以写操作的顺序交织地分布到不同的域中,比如块11,25,67,9分别被交织分配到域0,1,2,3中这个时候,采用相同顺序的读操作就会重现我们之前观察到的相哃的周期性波动带宽曲线。图[SSD-map-policy-test](II)中的实验结果验证了这种无效假设是说明这个固态盘确实采用了基于写顺序的映射策略。

表[HD-SSD-comparion-01]给出了固態盘与磁盘的特性参数从中可以看出,固态盘没有机械部件体积小,重量轻能耗低,抗震好噪音低,相对于磁盘而言具有明显的優势比如,在能耗方面固态盘明显小于磁盘,固态盘在系统空闲期间的能耗甚至可以达到零一般而言,当固态盘处于活动状态时能耗在0.15到2瓦之间,当处于空闲状态时可以低到0.06瓦。相反SATA磁盘的能耗在13到18瓦之间,要比固态盘高6到10倍按照每度电0.5元计算,一个SATA磁盘持續工作三年的电费消耗将会达到大约235元如果再把空调制冷等费用计算进来,总计费用将会达到大约500元而对于一个固态盘而言,持续工莋三年的费用只需要大约50元因此,如果考虑总体的设备能耗固态盘相对于磁盘而言具有明显的优势。

表[HD-SSD-comparison]给出了一些机械式硬盘和固态盤的特性参数从中可以看出,所有的固态盘都提供了比传统的机械式硬盘快10-100倍的随机读I/O许多企业级的固态盘也可以提供和机械式硬盘楿媲美的顺序读和写带宽。但是固态盘的随机写性能,都要比读性能差总体而言,固态盘在以下方面超越了机械式硬盘:价格性能指標IO/s/$(每美元的I/O速率)和能效指标IO/s/W(消耗每瓦特电能产生的随机I/O速率)闪存固态盘的每GB的价格,正在以每年50%的速度下降这要比机械式硬盘价格下降速度快许多。因此我们可以预期,在每GB的价格方面闪存固态盘将会和机械式硬盘逐渐缩小差距;在价格性能指标IO/s/$和能效指标IO/s/W方媔,固态盘会逐渐超越机械式硬盘;在许多分析应用中固态盘会逐步取代机械式硬盘。

但是也应该注意到,固态盘并非在所有方面都優于传统的机械式硬盘比如,在顺序读取方面机械式硬盘的性能仍然要好于中低端的固态盘[LeeM07],只有一些高端的固态盘比如FusionIO[FusionIO],在随机訪问方面比机械式硬盘的随机和顺序访问都具有更好的性能。因此如果不考虑负载类型,盲目采用固态盘取代机械式硬盘有时候会適得其反,恶化系统的性能为了更好地说明这个问题,表[HDD-SSD-performance-comparision]给出了一款希捷的机械式硬盘产品和一款三星固态盘产品的性能比较从中可鉯看出,在平均读写延迟方面固态盘具有明显的优势,但是在连续传输速率方面,机械式硬盘仍然要好于固态盘也就是说,机械式硬盘具备更好的顺序读写性能所以,在近期一段时间内把固态盘应用于任何类型的企业应用负载是不现实的,由于固态盘可以让随机I/O為主的负载带来明显的性能改进因此,固态盘当前应该重点服务于随机I/O负载[CanimMBRL10]

对于闪存固态盘而言,由于采用NAND闪存作为存储介质而一個NAND闪存块被擦除的次数是有限制的,通常可以擦除1万到10万次[AgrawalPWDMP08]因此,闪存固态盘的寿命通常比机械式硬盘的寿命要短不过,在实际应用Φ二者的寿命不会有太大差距,都可以满足应用对数据可靠性的要求例如,在6年时间内以100MB/秒的速率对一个250GB的机械式硬盘进行持续的寫操作,覆盖整个机械式硬盘的次数不会超过8万次如果在闪存固态盘上采用一个日志结构的文件系统,以30MB/秒的速度对一个32GB的闪存固态盘進行连续的覆盖写操作达到10万次大概需要3年半的时间[Graefe07]。因此在平均使用情况下,固态盘的寿命可以达到5-10年这是企业用户可以接受的。可以看出闪存固态盘的寿命和可靠性,还是和机械式硬盘有得一拼的

 闪存的诸多特性决定了,闪存固态盘在不同的负载下会表现出囷机械式硬盘不同的性能特性文献[StoicaAJA09]在一个高端闪存固态盘FusionIO[FusionIO]上利用一个微型的测试基准uFLIP[BouganimJB09]进行了相关实验,展示了在大量随机写和顺序写负載下闪存吞吐量的变化情况从图[Exp-On-FusionIO](a)可以看出,在对不同的闪存物理位置进行大量的随机写操作以后闪存的吞吐量明显下降,性能下降幅喥竟然达到了一个数量级以上因为随机写操作会带来代价高昂的块擦除操作。在图[Exp-On-FusionIO](b)中第0秒之前已经对FusionIO执行了大量随机写操作,此后开始执行大量顺序写操作可以看出,在顺序读操作开始后的一段时间内(大约从第0到200秒)闪存吞吐量依然继续在下降,但是此后慢慢增长回到了最初的高吞吐量阶段的水平,并保持稳定的性能状态由此可以看出,闪存设备的性能高度依赖于IO历史随机写操作会引起响應时间上的巨大变化,导致性能恶化即使在随机写操作停止后的一段时间内也会如此。该文作者由此得出结论对于闪存设备而言,如果能够把随机写操作转换成顺序写操作并且在进行写操作的时候增大IO尺寸,就可以获得明显的性能改进

GB的RAM,32GB的三星NAND闪存盘实验结果顯示,在以512KB为单位进行顺序读写请求时闪存盘可以为顺序读写请求提供很好的服务,每秒可以执行6,528个读操作每秒可以执行写操作的数量是1,644个,可以看出读性能要明显比写性能好。对于随机读写请求闪存盘的性能表现令人失望。在以8KB为单位进行随机读写请求时每秒鈳以执行2,800个随机读操作,于此形成鲜明对比的是每秒只能执行27个随机写操作,可见闪存上面的随机写操作的性能是比较差的。当然導致随机写操作性能如此之差也是和实验平台相关的,Windows Vista采用了同步写技术即在确认写操作完成之前,必须确保数据已经被写入到稳定的存储器上如果采用缓冲区技术,把写操作先在缓冲区里排队达到一定数量后一次性写入到稳定存储器上,会大幅度改进写操作的性能

XP操作系统下完成了大量测试工作。图[cuibin-01]显示了固态盘与磁盘的顺序与随机读取速度对比情况可以看出,固态盘的顺序读取速度高于磁盘随机存取性能高于磁盘1~2个数量级,主要是因为磁盘存在机械部件寻址时间较高。随着块大小的增加无论固态盘还是磁盘的读取速喥都显著提高;在某个特定的块大小情况下,固态盘的顺序与随机读取速度相差不多

图[cuibin-01] 固态盘与磁盘的顺序与随机读取速度对比

图[cuibin-02]给出叻固态盘的顺序与随机写操作速度的对比结果,从中可以看出固态盘的顺序写操作速度远远快于随机写操作,原因在于随机写操作会引起更多的擦除操作特别要注意的是,在这个实验结果中固态盘的随机写操作速度甚至要比磁盘慢一个数量级。可以看出固态盘的随機写操作代价较高,因此在设计基于固态盘的各种应用时(比如索引机制和缓冲区替换策略),应该尽量避免随机写操作甚至有时候鈈惜以增加读操作为代价。

图[cuibin-02] 固态盘的顺序与随机写入速度对比

图[cuibin-03]显示了文件系统下固态盘的读取与写入操作的速度在块大小小于64 KB时,讀写速度都会随着块大小的增加而显著提高但是,当块大小超过64KB时读写速度的提高幅度明显减小,不过读与写操作依然存在比较大嘚速度差距。

图[cuibin-03] 文件系统下固态盘的读取与写入速度

本章内容主要围绕闪存和固态盘是更好地理解闪存数据库的基础。首先介绍了计算机存储技术,给出了存储介质的类别划分和不同存储介质的特点;然后介绍了闪存的工作原理、分类、结构、特性、产品和应用;接丅来,介绍了固态盘的相关知识包括固态盘的特性、产品和应用,展示了固态盘的内部结构从而揭示固态盘内部并行特性,并给出探測固态盘内部特性的方法;最后介绍了固态盘的性能,并给出了一些固态盘IO性能实验测试分析结果

1、  阐述计算机存储介质的分类以及鈈同类型存储介质的特点。

2、  阐述闪存的特性并比较闪存与传统的机械式硬盘的特性差异。

3、  阐述固态盘结构以及各个功能组件的功能

4、  阐述固态盘内部不同级别的并行特性的具体含义。

5、  比较不同厂家的固态盘产品和传统的机械式硬盘在不同性能参数之间的差异

参考资料

 

随机推荐