码农必备:SSD编程秘籍29条(上)

3D_NAND_Die_with_M2_SSD

 

荷兰阿姆斯特丹的一个码农Emmanuel Goossaert写了一系列文章,介绍程序员为SSD编程的秘籍。也有中文翻译,本文介绍其中的要点总结。

 

基础

 

1. 存储介质

 

SSD的基础是NAND Flash芯片,一个物理单元(cell)里面可以放1个,2个,3个bits数据,分别叫做SLC(single level cell, SLC),MLC(multiple level cell, MLC),TLC(triple-level cell, TLC)。它们的特性如下图:

码农必备:SSD编程秘籍29条(上)

2. 写的次数有寿命限制

 

NAND Flash里面分为很多个块(Block),必须先擦除才能写。而每个块的擦写次数(P/E cycles (Program/Erase))是有限的,根据质量,从几万次到几千次不等。如上图所示。

 

3. 性能评测难啊

 

SSD在不同条件下评测结果都不一样,所以要参考多家评测机构的结果。比如空盘的读写和满盘不一样,随机和顺序读写不一样,用个几个月又不一样。对于有Cache的SSD,读之前写的数据量大小也会影响后面性能。最好在自己未来要用的环境中来个最常应用的实测。

 

块和页的用法

 

4. NAND Flash的块(Block)和页(Page)

 

Block是存储单元组成的矩阵,里面有很多个Page。Page大小有2KB,4KB,8KB,16KB,Block中Page个数有128,256,512等,所以Block大小从256KB到8MB不等。Page是读写的基本单位,就是读写一次至少要有一个Page,而不是像内存一样操作1个Byte。写之前必须擦除旧的数据,擦的单位必须是一个Block。所以要写个Page,要把整个Block擦掉,意味着写之前要保证Block没有有效数据了。

 

5. 读数据最小单位是页

6. 写数据最小单位是页

7. 页不能重写

 

页写了一次之后里面的物理状态就固定了,不能重写也不能改写,必须把所在的块擦掉之后再写。如果重写的话,一般的结果就是旧的和新的数据都没了。

 

8. 擦除(Erase)最小单位是块

 

下图显示了写的一个流程。

  • 块1000有4个页,写了x,y,z,x ,所以x被x重写了,就作废了。
  • 有效的是x,y,z,要继续用块1000,只能把这3个有效的页搬走,写到块2000,这样块1000就空了,可以擦掉继续写。有效的数据也没有丢失。

码农必备:SSD编程秘籍29条(上)

SSD控制器的奥秘

 

9. 地址转换层

 

地址转换层叫做FTL(Flash Translation Layer),就是把操作系统发下来的逻辑页地址转换为NAND Flash内部的物理页地址。

 

10. 内在的并行性

 

SSD是个缩小版的磁盘阵列,因为由很多个NAND Flash芯片组成,它们是可以并行读写的。单个芯片并没多快,很多个拼起来并行读写,速度就很快了。这就是SSD比机械硬盘快的原因

码农必备:SSD编程秘籍29条(上)

 

11. 磨损平衡

 

因为块擦写次数是有寿命的,所以SSD控制器必须用算法保证所有的块的擦写次数能够相差不大。如果有些块擦写过多,就很快不能用了,容量下降了,同时也会影响其他块的稳定性。

 

12. 垃圾回收

 

第8条的图就是垃圾回收的流程,把要擦掉的块有效数据搬走叫做垃圾回收。因为无效数据的空间被释放出来了。

 

13. 后台操作会影响用户前台使用

 

因为SSD控制器在后台做垃圾回收等操作,占用了NAND Flash芯片,所以前台用户的读写性能就会下降。这就是SSD写满之后速度慢于空盘的原因:写满后,没有空间了,垃圾回收开始了。

 

引用:

原文:http://codecapsule.com/2014/02/12/coding-for-ssds-part-1-introduction-and-table-of-contents/

中文翻译:http://blog.jobbole.com/69969/

 

想要每天看一条SSD文章吗?扫一扫,微信关注我们!或者微信搜索公众号ssdfans关注。

码农必备:SSD编程秘籍29条(上)

微信搜索ssdfans,扫描或长按下面二维码图片关注ssdfans微信公众号,每天看一篇SSD好文!

你想在SSD领域积累更多人脉、学习核心技术、掌握最新动态?我们建了一个微信群,方便SSD Fans们讨论SSD,闪存和存储相关的话题。群友既包括各大公司SSD、存储方面的技术精英,行业大牛,也有很多SSD爱好者。

欢迎各位SSD行业人士、使用者和爱好者加入,谢绝猎头,广告(可联系contact@ssdfans.com通过公众平台发布)。

 加入后请修改昵称为:姓名(或昵称)-公司(或领域)-职业

例如:张三-Marvell-SSD FW QA
蛋蛋-SSD Controller-FW开发

微信加nanoarch为好友拉你入群。

转载请注明来自SSD技术学习网,本文地址:http://www.ssdfans.com/?p=340
除非注明,SSD Fans网站文章均为原创,欢迎转载,转载必须注明出处,作者和链接,并保留二维码图片!
signature

One comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注