A Hybrid Approach to NAND-Flash-Based Solid-State Disks
SLC与MLC混合SSD
TC 2010 原文链接
1、背景:SLC与MLC对比
SLC与MLC的简介
SLC 比 MLC 写入快,耗电少,使用寿命长,GC容易 MLC容量大,便宜
为了补充两者的优势,需要混合架构
思想来源
- HDD混合存储——DCD(Disk Cache Disk) 通过日志记录随机写提高性能
这种新的结构也带来了新的挑战
- 数据放哪里
- 冷热数据如何识别?
- 使用什么样的迁移策略
- 如何实现磨损平衡
2、具体设计
2.1 总体架构
物理结构
2.2 热数据过滤器
如何区分数据冷热?
–> 据观察,热数据多为小写入,冷数据多为大写入
- 从图a可以看出,数据写入呈双峰分布,要么是大量小写,要么是大量连续大块写入,中等大小写入较少
- 从图b可以看出,小写(4KB)更新率高,大写更新率低
更新率指的是一个请求中每个块平均被更新的次数,更新率高表示对某些块更新频繁
- 图c图d显示大量块写入次数不超过4096,只有少数块写入频繁
现有方法:LRU、LRU-k、哈希表等 (复杂,需要RAM)
–> 使用简单的分类,认为小写请求大多是热数据,大写是冷数据
具体方式:K-Means方法进行二分类聚类
- 通过一个C[i]数组记录每一个请求访问的区块数
其中, i表示2^i如果访问次数不是2的幂次,则记录在附近C[i]
比如 请求访问 333个区块,在2^8(256) 与2^9(512)之间的记录更接近256C里面,即C[8]
文中规定C[]数组为11位,即最大访问区块不超过2^10=1024
- 通过不断迭代,找出两个聚类中心:i,j 细节不会展开
这样,哪些请求就可以通过i值来确定,即写入热数据
- 算法会定期更新阈值i,例如,在重新运行前写入1000次
思考: 二分类用Kmeans? 没必要吧 而且这种分类方法用的2的幂次太粗略了
- 贝叶斯可以用其他方法进行二分类?
- 而且可以用更精细的数组记录,比如100次请求?
实验中i值通常为3,即4KB的小写请求
2.3 SLC的数据管理
环形缓冲区
数据分为有效和无效的数据
所谓无效数据,是指后来的新数据更新
它有k块,指针不断向前移动
一旦头指针和尾指针之间的K块以上,尾指针开始回收数据块
无效块直接回收,有效块复制至MLC
这样子对于SLC垃圾回收和磨损均衡是友好的,毕竟是顺序、轮流写入和回收
SLC地址映射:哈希表
因为SLC存储的数据很少,没有必要记录每个块的地址 这里不详细说明如何选择。.详细介绍了4节
2.4写入节流
由于两者的寿命不同,为了实现磨损平衡,需要控制写入
公式没有解释,只需要知道rws是SLC相对MLC的磨损即可
-
也就是说,要使两者磨损均衡,rws应该等于rwm
-
当SLC相对MLC磨损过多,即rws更大的时候,开始写节流
- SLC不再接受新数据(不在哈希表中的数据),因为根据之前的推论,热数据将永远存在SLC不然就没那么热了。
- 一段时间后rws仍大于rwm当代表热数据太多时,必须清除一些,因此减少以前环形缓冲区的K值
- 当rws不再大于rwm时,写入节流机制停止,K价值继续缓慢增加
下面是细节中的细节
- 写节流机制可能会导致SLC数据不被替换,哈希表添加了虚拟项机制 也就是说,第一次写作只是空指针,写作MLC,如果第二次还在的话,如果还在的话SLC如果哈希表中没有回收(热),将被真实地写入SLC
2.5 MLC管理
在之前的论文中,一种通用的方法 FTL一般采用(10年)
数据块和更新记录块的概念
如上图:
- 一开始写的块是数据块
- 因为SSD旧数据的写入不能直接更新原块,需要找新块写入,然后将旧块标记为无效,称为
双层映射:L2P表与LB(log block)表
假如要获得逻辑地址LBA 需要1的最新数据
- 通过查L2P获取其物理地址PBA,即4
- 查找LB表,4对应的指针不空,得到3
- 继续搜索3,得到相应的块 6
- 6对应指针为空,块链找齐,最终数据为6
对应的描述如图左侧所示,块通过指针连接成块链
当垃圾回收时,检查块链上的有效数据,并将其写入新的空闲块中 将块链变成数据块称为块链折叠
写回策略
不要马上写MLC,会看MLC里面有数据吗?如果没有,续写入SLC,也没啥特别的
文中第4节
-
提出了一种计算写入开销的方式,在文中作者自己的实验中得到了有效地认证,这里不再细述
-
计算了存放SLC、MLC的L2P表等数据结构需要的RAM大小
3、性能分析
- 工作负载:一台便携PC的日常使用(很老的配置了,CPU都是赛扬),时间为一个月
- 操作系统以及文件系统: XP和NTFS 以及 Linux和ext3
三种不同的混合SSD配置
3.1 响应时间快了
是普通SSD速度的1.8倍
RS 比:SLC响应时间相对MLC快多少
测试结果显示,SLC大小要超过128MB才能达到比较好的效果
3.2 GC操作减少了
通过记录对SSD的各类请求,可以看出,加入SLC后的混合SSD相比MLC SSD,大量减少了GC操作,从而提升了性能(上图RS比最高可达1.84)
3.3 写入的随机性大大减少
这是对MLC访问区块随时间变化的记录
3.4 寿命
由图(a)可看出,SLC与MLC各自的磨损均衡做的很不错,基本每个块磨损程度差别不大
这里因为SLC小,数据完全看不见
由图b可看出,SLC与MLC之间的磨损均衡也没有超过各自寿命的比值BW比 当SLC增大时,BW率还会低于各自寿命比值,这意味着MLC会比SLC磨损稍快 写入节流机制还是很有效的
另外,混合SSD的能耗更低,对比结果显示,以256MB SLC为例,仅需多花%4倍的钱,能耗可以低46%
总结
本文提出了一种MLC与SLC混合SSD的设计方案,通过冷热数据分流、写入节流机制,有效地利用好了SLC的优势,相对纯MLC SSD以更低的价格达到了更好的性能
但是文章比较老旧(10年),其中很多方法可能过时,并且针对于其自身配置的设计不可能完全适用于目前的设备