硬盘爱好者 发表于 2012-7-7 15:05:49

SSD固态盘存储原理学习

    固态硬盘(Solid State Disk或Solid State Drive),也称作电子硬盘或者固态电子盘,是由控制单元和固态存储单元(DRAM或FLASH芯片)组成的硬盘。
  固态硬盘的接口规范和定义、功能及使用方法上与普通硬盘的相同,在产品外形和尺寸上也与普通硬盘一致。由于固态硬盘没有普通硬盘的旋转介质,因而抗震性极佳。其芯片的工作温度范围很宽(-40~85摄氏度)。
SSD工作原理
    下面是一个关于NAND闪盘的原理图。从下图我们可以看到,每一个“单元”就是由一个这样的晶体管组成的。
   
  在单级单元(SLC,single level cell)闪存设备中,一个晶体管可容纳1比特数据。您通过电子通道将数据写入单元;将足够高的电压加于两端,创造一个足够强大的电场,电子将穿透氧化物进入浮动门。消除电压,电子将继续停留在浮动门。将电压穿越通道而不施加到门上,扭转偏压,电子将向另一个方向移动。
  简单的说,这就是闪盘的工作原理-你有两种状态,0和1,即使单元没有电了,状态也会维持住,因此对存储设备来说是非常理想的。
  编程闪存是一个反复的过程。该控制器将电压施于门(或通道)上,允许一些电子穿过并检查单元的临界电压。当临界电压已达到一些预定的值时,就开始编程并储存数据了。
MLC与SLC的区别
  目前SSD硬盘使用两种形式的NAND闪存:单级单元(SLC)和多级单元(MLC)。两者之间的差别是每单元存储的数据量,SLC每单元存储1比特而MLC每单元存储2比特。关键在于,SLC和MLC占据了相同大小的芯片面积。因此,在同样的价格下,MLC可以有两倍容量的效果。  英特尔的SLC和MLC闪存实际上使用了相同的晶体管,不同之处在于怎样读/写这两个闪存。SLC只有两个电压符,因为它只有两个状态(0或1)。MLC却有四个状态(00,01,10 ,11),因此需要花费较长的时间来访问,因为你不想意外写入错误的数据;您已有了相同的最大、最小电压,您现在仅仅有它们两者之间更多的刻度:

SLC (left) vs. MLC (right)
  下面是一个关于SLC和MLC性能基本数据的表格:

  SLC和MLC的擦除性能是一样的,MLC闪存的读取性能需花费两倍长的时间,写入性能需花费四倍长的时间。如果您以前听说过有人抱怨MLC写入速度,这就是部分原因。不过一定要记住,我们在这里谈论的这些数字低得离谱——甚至900微秒写入MLC闪存的速度都远远超过向普通机械硬盘的写入速度。   SLC的最大优势不在于它的性能好而在于它的使用寿命长。要了解闪存的耐用性,我们首先需要看看存储设备的内部构造。
闪存层次和数据丢失
  我们已经证实了一个闪存单元可以储存一个还是两个比特取决于它是SLC还是MLC设备。把一群单元聚集到一起,就得到了一个page。page是您可以编程(写入)NAND闪存装置最小的结构。
  大部分MLC NAND闪存的每一page是4KB。一个block是由许多page组成的,在英特尔的MLC SSD中一个block包含128 pages(128 pages x 4KB/page = 512KB/block = 0.5MB。Block是您可以擦除得最小结构。
  因此,当您写入SSD时,您一次可写入4KB数据;但是当您从SSD擦除数据时,您一次不得不删除512KB。过会儿,我会进一步探讨这个问题,但现在让我们看看当您从一个SSD删除数据时会发生什么事情。

  无论何时您将数据写入闪存,我们都会反复经历同样的编程过程。创建一个电场,电子穿过氧化物并储存电荷。擦除数据会导致同样的事情发生,但却向着相反的方向。问题是电子穿过氧化物的次数越多,就会变的越弱,最终将电压也不能再阻止电子的自由活动了。这时候,SSD的这个单元就发生故障了。

  大约经过一万次擦除/编程周期后,MLC闪存才会最终出现那个问题。而SLC可使用十万次,这得益于它的简单设计。
  由于寿命有限,所以SSD必须非常小心地选择擦除/编程每个单元的时间和方式。请注意,您可以从一个单元里读取数据,多少次都行,这并不减少单元存储数据的能力。只有擦除/编程周期才会降低了寿命。
  此外需要注意的是,因为SSD没有擦除block这个概念,唯一擦除block的时候就是写入新数据的时候。如果您删除Windows里的一个文件而没有创建新的文件,SSD实际上并没有从闪存中移走这个数据,除非您准备好写入新的数据。
SSD如何保证使用寿命
  现在回到编程和擦除SSD数据之间方式的差异上来。您在page上编程,在block上擦除数据。假设您保存了一个8KB的文件,之后决定要删除它,这可能是您写给自己的简单便条,表示您不再需要了。
  您保存该文件时,它会以2 pages的形式保存在闪存记忆体中;您将其删除时,SSD会标记pages为无效,但实际上并不会删除该block。SSD将等到block中一定比例的pages被标记为无效时,才会复制一些有效的数据到新的pages里去并擦除该block。SSD这样做是为了限制了每个block擦除的次数,从而延长驱动器寿命。
  但是并非所有的SSD都采用同样的方式来处理删除请求,因此,从硬盘原理上来说,如何处理删除请求对SSD安全性产生较大的影响。
  我们已经从概况的角度介绍了SLC SSD与MLC SSD的不同,并且阐述了一般SSD的设计者如何通过编程和算法来保证SSD的性能和安全性,下文我们将详细阐述Intel X-25M SSD硬盘如何应付数据丢失。

实际设计问题及方法:

ssd一些细节:

1、 随机写,性能降低到1/10,寿命也下降。

2、 随机读 + 顺序写 降低不是很明显。

3、 ssd磁盘不建议放太满,使用70%差不多。

4、 ssd 调用rm时候会不会擦除?擦除本身很耗费时间,update是擦除后,重写512K。

5、 ssd 持续追加写,会不会因为擦除导致效率很低?尤其是对多个文件追加写的时候?也比update快很多。

6、 对sata写操作,会不会影响ssd读?理论上不会

7、 ssd磁盘没有缓存,操作系统有缓存(buffer cache)?


删除常用方法?

1、4K块设计,追加写时,擦除逻辑如何?

2、非4K设计,追加写会怎么样?碎片,碎片影响。操作系统会做优化?

3、黑名单缓存,好不好

4、删除对索引文件的要求?追加写,只能放内存?



思考最佳方案:

1、 黑名单

2、 不使用追加写,索引文件就是文件,放磁盘。

3、 文件定期整理。在sata上整理

ssd vs 传统磁盘

io操作分为:随机读、顺序读、随机写(多文件顺序写)、顺序写、替换写

替换写,在传统磁盘也有,只是因为传统磁盘的数据块分的很小。影响较小。在ssd上,因为ssd擦除必须是block为单位,512K,所以一个替换写,就要先读512K,再擦除,再回写。影响很大。

在ssd上,因为没有磁头的概念,顺序写或多个文件的顺序写,节约的都只是擦除时间。唯一有少许问题就是碎片,因为page是不能重复编译的。但这点操作系统的buffer-cache会起到一定作用。

jqelec 发表于 2012-7-8 08:57:36

好贴,支持!

威海数据恢复 发表于 2012-7-8 16:57:26

好文章 扫盲了

yzhize 发表于 2012-7-12 14:00:41

比较深的讲述,看的晕乎乎的

sshcwcgf 发表于 2012-8-19 19:34:28

比较深的讲述,看的晕乎乎的

本文来自: 中国硬盘基地技术论坛 详细文章参考:http://bbs.intohard.com/thread-115886-1-1.html

defender 发表于 2012-9-10 16:41:24

看来还是不够成熟!准备下手,犹豫中。。。。。。

120734837 发表于 2012-9-13 17:39:49

看到晕乎乎的

christmans 发表于 2012-9-24 22:55:07

很好,学习了

足迹 发表于 2012-11-5 17:18:51

这个很不多请问一下 要是SSD的数据丢失用什么软件好啊

zhi2583691 发表于 2012-12-27 21:44:33

进来学一学学习
页: [1] 2 3 4
查看完整版本: SSD固态盘存储原理学习