浅析闪存盘(Flash Drive)内部架构与应用考虑

 Flash Drive闪存盘,作为代替使用了几十年的机械硬盘,它与机械硬盘相比有着绝对的性能优势,架构上也与机械硬盘有着很大的区别。本文以摘要的形式梳理了闪存盘的内部结构Page、Block、Channel的作用以及使用闪存盘上的一些性能考虑和使用范围。

闪存盘就像一个小型的存储系统,它包括一下的组件:

•缓存区(Buffer): 缓存里存着所有区域的索引信息,正在写入的数据、并且使用专用的电容器(Power capacitors)在系统掉电的时候为缓存供电,然后把数据写入到持久存储NAND单元。

•页面(Pages):闪存盘内部的芯片通过页面为单位来寻址,73GB和200GB的闪存盘页面大小为4KB,400GB的闪存盘页面大小16KB。页面内容组成连续的寻址空间,就像存储系统中的缓存一样。写入过程中,对于两个2KB的IO在闪存页面中必须写入两个连续的LBA(Logical Block Address),也就是占用两个页面。

•扇区(Blocks):NAND类型的闪存盘的映射关系和文件系统类似,多个Pages组成为Block,但是区域中的页面并不是连续的,这个block和SCSI以及文件系统中的block还是有所区别。NAND类型的闪存盘写入都是在Block级别。Block的镜像存储在闪存盘的缓存中,知道一个区域写满了,然后再写入到闪存盘存储单元的Block内。

•通道(Channels):闪存盘中芯片处理数据的通路,闪存盘拥有多个通道,保证存储单元可以同时进行读和写的操作,对于大IO,会在多个通道上分段处理。

闪存盘中的页面通过几种状态来管理数据状态:

•Valid State:包含可用数据

•Invalid State: 包含过期数据

•Erased State:没有被使用区域

页面状态会受到负载的影响,页面状态也会影响到可用的区域。可用的区域(已经释放的区域)会决定写入的性能。由于随机写入页面变得随机分布,闪存盘使用元数据来定位Valid和Invalid的数据,比如一个占两个Block文件更新写入,第一个block写入到缓存,那么它所对应的NAND上的两个block都会变成invalid。

闪存盘中还有一部预留空间,存储通常意义上的元数据,预留空间会为写入数据提供可用的block位置。

持续的数据写入会使闪存盘饱和,然后闪存盘会在空闲的时间进行擦除(Erase)操作。在擦除之前,为了保证Block中的页面必须都是invalid状态,会将每个block中的valid页面写入到其他block,这个过程类似于硬盘碎片整理,主要分为几个步骤:

•将Valid的页面读取到缓存中

•擦除NAND中旧的区域

•将Valid页面写入NAND的到其他Block中

使用闪存盘时的一些性能考虑与应用场景:

是否闪存盘在使用久了以后会变慢?答案是,的确会有一些影响。闪存盘的剩余空间会是主要因素之一,因为剩余空间的减少会导致碎片的增加,影响到闪存盘对于持续写入的相应时间,较高的空间利用率会导致在每个block中有更多的valid页面。随着时间增加,这种valid页面的分布会变得更加随机分布而且空间利用率增加。如果block中包含比较高的比例的valid页面,擦除的过程中就需要调整更多的页面。闪存盘就需要更多的时间进行碎片整理。

闪存盘的大小是否影响性能?这里需要描述一个概念,叫做小IO和写入页面填充的概念,因为在闪存盘处理写入IO的情况中,如果写入的IO小于一个页面的大小,则闪存盘需要进行Read-Modify-Write操作。因此对于闪存盘来说的负载加倍。所以就闪存盘性能来说,73GB和200GB使用的4KB页面大小会好于400GB的16KB页面大小。

最后还要简要提一下闪存盘的应用场景。其实处于成本效益的考虑,闪存盘的使用还是需要有的放矢。根据适合的应用选择,而且结合存储阵列的情况进行综合考虑,作者认为可以从以下几个方面考虑:

•闪存盘通常还适用于高比例的随机读取和小IO的应用。

•如果随机写入的比例大于20%,则是闪存盘最好发挥作用的情况。

•闪存盘和存储阵列的缓存相结合。闪存盘很多情况下会加速存储阵列的数据刷新效率,比较典型的就是高负债写入的应用,存储阵列的缓存可以提供更短的前端响应时间,减少从存储阵列缓存中载入和写入后端磁盘速度。但当某些极大的数据库情况下也有可能相反,存储阵列缓存对于大量的写入可能会响应不及,而这种情况,根据使用存储阵列实际情况,可以选择性的跳过存储阵列的写缓存,而直接在后端使用大量(超过30个闪存盘)提供高带宽,当然也要考虑存储阵列是否支持关闭写缓存。

•对于数据库应用,闪存盘适用于存放索引、比较繁忙的表、临时空间,而Redo Log和Archive log之类则不适合于存储在闪存盘。

•对于消息系统(Exchange、Notes),闪存盘适用于存放用户数据库。

本文作者为EMC中文技术社区(https://community.emc.com/go/chinese)技术版主。如果您对本文有任何疑问和不同见解,也欢迎到EMC中文支持论坛参与讨论。