陈 博,肖 侬,刘 芳,欧 洋,何晚辉
(国防科学技术大学高性能计算国家重点实验室,湖南 长沙 410073)
随着大数据时代的到来,目前NAND Flash已经不仅局限于嵌入式领域,基于NAND Flash的SSD(Solid State Disk)已经在大型数据中心得到广泛应用。越来越多的公司开始涉足SSD市场,不仅一些老牌磁盘厂商,例如希捷、西部数据,开始生产SSD,华为公司也宣布其第一款PCIe SSD ES3000正式上市。然而,随着NAND Flash单片容量的不断增大,SSD的容量也不断增加,源科公司的Kylin III MAX的单盘容量达到4.6 TB。
相比机械磁盘,基于NAND Flash的SSD具有诸多优势,例如低延迟、无噪声、抗震动等[1],但是SSD还没有替代机械磁盘,一个很大的原因是SSD的价格远高于机械磁盘。为了降低MYM/GB的价格,相继出现MLC和TLC。但是,相比SLC的105的擦写次数,MLC和TLC的擦写次数急剧下降,仅有104和103[2,3],并且数据的错误率也会增加[4]。
为了保证数据的可靠性,传统的方法是采用ECC校验,在数据写入Flash的每一页时,相应的校验信息写入页的Spare Area。但是,基于海明码的ECC校验仅能检测两位错,纠正一位错;而基于RS和BCH及LDPC的ECC校验能纠正多位错,但是硬件实现复杂,并且增加了数据访问的延迟[5]。
另外一种保证数据可靠性的方法是采用RAID技术。RAID技术可以用在SSD与SSD之间,SSD内部的Flash芯片与芯片之间,提供不同层次的可靠性。当前的一些PCIe SSD产品中已经使用RAID技术来保证数据的可靠性。例如,Violin Memory的闪存系统采用了ECC和独有的RAID技术保证数据的可靠性,在有Flash芯片出现故障时不会造成数据的丢失,华为的ES3000也采用了Dynamic RAID技术保证数据的可靠性。但是, Skyera公司指出,使用最为广泛的RAID5技术在用于SSD阵列时,会缩短SSD寿命。这是因为每一次更新数据,都需要更新相应的校验信息,使得校验信息更新比较频繁,从而产生较多的无效页,增加SSD的擦除次数,降低了整个SSD的性能且缩短了寿命。
针对这个问题,本文提出了校验信息感知的SSD控制器,称为PA-SSD(Parity-Aware SSD)控制器。传统的RAID5控制器向SSD控制器发送数据请求和校验请求时,在SSD控制器看来都是数据请求,从而SSD控制器不能针对校验信息做专门的处理。本文稍微修改RAID5控制器,使其在向SSD控制器发送校验请求时,同时发送一个校验标志,表示该请求是校验请求。在SSD控制器层设置一个校验缓存Pcache,更新校验信息时,SSD控制器接收到校验标志后,将校验信息缓存在Pcache中;读取校验信息时,先在Pcache中查找该校验,如果命中,则将校验信息返回给RAID5控制器;否则,向SSD发送读请求,这样就减少了对SSD的读写操作。在将Pcache中的校验信息写回SSD时,写入专门的一片空间。与数据相比,校验信息相当于热数据,将热点数据单独存放可以减少整体的擦除次数,从而提高SSD的性能和寿命。实验表明,PA-SSD控制器能够将SSD的寿命提升28%。
Im S等人[5]提出了一种Delayed Partial Parity Update的RAID策略来构造高性能高可靠性的SSD,在每次更新数据时,计算当前新数据的校验信息,并将校验信息缓存在RAID控制器的Cache中,在下次更新数据时,利用Cache中存在的校验信息再一次更新校验信息,这样多次更新数据只需要更新一次校验信息,但在Cache中保存的是部分校验信息。这种延迟更新校验信息的方法减少了校验信息更新的开销,但是这种策略是在RAID控制器层工作,不能利用SSD控制器针对校验信息的特点做优化。
Lee Y等人[6]提出FRA(Flash-aware Redundancy Array)方法,将写数据和写校验两部分分开,当写请求到达时,先将要写入的数据写入SSD,在系统空闲时再将校验写入SSD。这种方法将校验信息和数据信息一起存放,频繁地更新校验信息使得块中无效页的数量增加很快,进而触发垃圾回收,影响系统的性能。
杜溢墨等人[7]提出MuLe-RAID(Multiple Level RAID)技术,将RAID控制器分成两层,即上层的RAID5控制器和下层的RAID0控制器,这种方法减轻了上层RAID5控制器的负载,提高了整个系统的性能,但是没有解决校验信息的更新对系统的影响。
传统的SSD控制器不能感知校验信息,因此不能针对校验信息的特点做出相应的优化,只能在其访问频繁时,当做普通的热点数据处理。当前针对基于SSD的RAID系统的校验信息的优化都是在RAID控制器层或者文件系统层,没有在SSD控制器层次做优化的。而在RAID控制器层对校验信息处理时,RAID控制器不知道底层SSD的数据布局。针对这一问题,我们提出PA-SSD控制器设计。
PA-SSD控制器的体系结构图如图1所示。与传统的RAID5控制器和SSD控制器不同的是,RAID5控制器将校验信息请求发送给SSD控制器的同时,发送校验标志信号,通知SSD控制器该请求是校验信息。此外,在SSD控制器内部增加一个缓存Pcache,将更新的校验信息暂存在Pcache中,以减少对SSD的写次数。同时,在SSD内将存储区间分为数据区和校验区,分别存放数据和校验。
Figure 1 PA-SSD controller architecture图1 PA-SSD控制器体系结构图
下面是PA-SSD控制器的访问流程伪代码:
//lpn:请求的逻辑地址
//ppn:lpn对应的物理地址
/request:RAID5控制器发出的请求
//parity_flag:RAID5控制器发出的校验标志
RAID5控制器发送request和parity_flay
if(request==parity_request)
if(request==read)
parity=find(lpn,pache);
if(parity不为空)
将parity返回给RAID5控制器
else
ppn=map_table[lpn];
ssd_read(ppn);
endif
else
write_pcache(parity);
endif
else
if(request==read)
ppn=map_table[lpn];
ssd_read(ppn);
else
ppn=alloc(lpn);
write_ssd(ppn,data);
endif
endif
RAID5控制器发出请求和校验标志,PA-SSD控制器根据校验标志判断请求类型。如果是数据请求,则根据地址映射表访问SSD,如果是校验请求,则判断读写类型,如果是写请求,则写入Pcache中,如果是读请求,则根据逻辑地址在Pcache中查找校验信息是否存在,如果存在,则将校验信息返回RAID5控制器,如果不存在,则根据地址映射表访问SSD。
根据程序的局部性原理,一个被访问的地址在将来一段时间内可能被再次访问,在一段时间内,程序的访问空间集中在某一片区域。因此,在更新某一个地址的数据后,在将来一段时间内,该地址以及它周围的地址的数据可能被再次更新,如此,校验信息的更新将会很频繁。如果不加处理,每次更新校验信息都对SSD执行写操作,同时将旧的校验信息置为无效,则SSD中会有许多无效页,进而触发垃圾回收操作。为了减少校验信息的更新对SSD的写操作,在SSD内部设置Pcache存放更新的校验信息。更新校验信息时,如果在Pcache中存在该校验信息,则直接覆盖旧的校验信息,这样就减少了校验信息的更新对SSD的写次数。
由于Pcache中保存的是最近一段时间内使用的校验信息,根据程序的局部性原理,最久未被使用的校验信息可能在将来也不会被使用,因此Pcache的替换策略采用LRU方式。
校验信息需要被频繁地更新,与数据相比,校验信息相当于热点数据。如果将校验信息与数据共同存放,则频繁更新校验数据会使得数据块中无效页的数量快速增加,在垃圾回收时需要擦除较多的数据块,并且移动大量的有效数据页,增加了垃圾回收的负担。将数据和校验信息分开存放,则校验信息的频繁更新不会影响到数据块,数据块的垃圾回收次数减少,校验块的垃圾回收移动的有效页数量减少,减轻了垃圾回收的负担。
PA-SSD控制器将SSD的地址空间分为数据区和校验区,由图1中的地址分配单元负责数据和校验的地址分配。写数据请求到达时,地址分配单元在数据区分配一个空闲页给该请求,同时将地址映射表中与该逻辑地址对应的物理地址赋值。写校验信息时,控制器不给校验信息分配物理地址,而是将校验信息先写入Pcache中。当Pcache需要替换时,地址分配单元给替换出的校验信息在校验区分配一个空闲页。
校验区存放的校验信息虽然由于Pcache的存在减少了校验信息写入SSD的次数,但是由于校验信息的更新比数据的更新更加频繁,所以与数据区的块相比,校验区中块的擦除次数更多,因此校验区的块更加容易磨损。针对这种情况,我们在控制器中维护两个块地址链表,一个是校验区块地址链表,另一个是数据区块地址链表。对每个块记录擦除次数,当校验区的块擦除次数超过一定阈值时,就与数据区中干净的擦除次数最少的块做交换,以此来延长整个SSD的寿命。
Pcache使用RAM实现,为了防止掉电时Pcache中的校验信息丢失,造成数据的不可靠,在SSD阵列上增加一块电池或者电容,在检测到掉电时,由电池或者电容向Pcache供电,将其中的校验信息写入SSD中。
为了评估PA-SSD控制器的性能,我们实现了支持校验标志传送的RAID5模拟器和包含PA-SSD控制器的SSD模拟器,分别用来模拟RAID5的功能和对SSD的操作,记录SSD运行的结果,并与传统的RAID5模拟器和SSD模拟器的运行结果相比较。
我们使用四个真实的磁盘IO trace作为测试用例,分别是prxy、usr、Exchange和Financial,这四个trace都是服务器trace,prxy和usr是Microsoft Research Cambridge在服务器上搜集的数据[8],是典型的企业数据中心的数据;Exchange是从Microsoft Exchange Server上搜集的数据[8],包含61 000 000条请求,其中43%的请求是读请求;Financial是一个OLTP应用程序trace[9]。
我们比较了普通SSD控制器(regular SSD)和PA-SSD控制器的性能和寿命。普通SSD控制器没有从RAID5控制器接收校验信息标志,没有使用Cache缓存校验信息,也没有在SSD内部将校验信息集中存放。Parity-aware SSD控制器使用不同大小的Cache测试其容量对性能的影响,Cache容量分别为SSD总容量的0.5/1000、1/1000、2/1000和4/1000。
图2表示regular SSD和Cache为不同大小的PA-SSD执行各个trace的擦除次数,以regular SSD的擦除次数为1。从图2中可以看出,PA-SSD相比regular SSD减少了擦除次数,在不同Cache大小的情况下,擦除次数平均减少23%~28%,最高可减少40%。在PA-SSD中,Cache越大,校验信息在Cache中命中的几率越高,从而写回SSD的校验信息越少,因此SSD的擦除次数越少。减少了SSD的擦除次数,SSD的寿命就得到了提高。
Figure 2 Comparision of erase count(normalized to regular SSD)图2 擦除次数比较(归一化到regular SSD)
图3表示regular SSD和Cache为不同大小的PA-SSD的垃圾回收时移动的页数,以regular SSD的页移动次数为1。从图3中可以看出,四个trace在PA-SSD下的页移动次数相比regular SSD都有所减少,平均减少19%~27%,最高可减少37%。由图2可知,在PA-SSD控制器中,擦除次数减少,结合图2所示结果, PA-SSD控制器相比regular SSD控制器,在性能上有所提升。
Figure 3 Comparision of page move count(normalized to regular SSD)图3 页移动次数比较(归一化到regular SSD)
综合图2和图3的测试结果, PA-SSD控制器在减少擦除次数和降低垃圾回收时的页移动次数方面都有很好的表现,在Cache容量为SSD总容量的4/1000的情况下,擦除次数平均减少28%,页移动次数平均降低27%。因此,相比普通的SSD控制器,采用PA-SSD控制器的RAID5系统,延长了SSD的使用寿命,提升了整体的性能。
本文针对基于SSD的RAID5系统中校验信息更新频繁的特点,提出了PA-SSD控制器。RAID5控制器向SSD控制器发送请求的同时发送校验标志,使得SSD控制器可以识别校验信息。在SSD控制器内部实现一个缓存Pcache,用于缓存更新的校验信息,并且在将校验信息写入SSD时,与数据分开存放。这种方法有效地减少了校验信息对SSD的写操作,减少了SSD的擦除次数,提高了系统的性能,且其开销仅增加了一个小容量Cache。
[1] Gupta A, Kim Y, Urgaonkar B. DFTL:A flash translation layer employing demand-based selective caching of page-level address mappings[C]∥Proc of ASPLOS, 2009:229-240.
[2] You Byoung-sung,Park Jin-su,Lee Sang-don,et al. A high performance co-design of 26 nm 64 Gb MLC NAND flash memory using the dedicated NAND flash controller[J]. Journal of Semiconductor Technology and Science, 2011, 11(2):121-129.
[3] Goldman M, Pangal K, Naso G, et al. 25nm 64Gb 130mm23bpc NAND flash memory[C]∥Proc of the 3rd IEEE International Memory Workshop, 2011:1-4.
[4] Grupp L M, Davis J D, Swanson S. The bleak future of NAND flash memory[C]∥Proc of FAST’12,2012:2.
[5] Im S, Shin D. Flash-aware RAID techniques for dependable and high-performance flash memory SSD[J]. IEEE Transactions on Computers, 2011, 60(1):80-92.
[6] Lee Y, Jung S, Song Y Ho. FRA:A flash-aware redundancy array of flash storage devices[C]∥Proc of CODES+ISSS’09, 2009:163-172.
[7] Du Yi-mo, Xiao Nong, Liu Fang, et al. MuLe-RAID:Constructing large scale and high-performance SSD with multiple level RAID architecture[J]. Journal of Computer Research and Development, 2012,49(z1):111-117.(in Chinese)
[8] Narayanan D,Thereska E,Donnelly A,et al.Migrating server storage to SSDs:Analysis of tradeoffs[C]∥Proc of EuroSys’09, 2009:145-158.
[9] Laboratory for Advanced System Software. UMass Trace Repository[EB/OL].[2009-10-16].http://www.traces.cs.umass.edu/.
附中文参考文献:
[7] 杜溢墨,肖侬,刘芳,等. MuLe-RAID:面向大容量高性能SSD的层次化RAID[J].计算机研究与发展,2012,49(z1):111-117.