SSD知识贴

理论知识篇



SSD的主控

SSD的主控是决定SSD性能的主要原因。简单介绍下市面上常见的各种主控芯片吧(关于代表产品,我只列举国内比较常见的一些牌子)

1. Intel主控:优势体现在持续读取和低延迟上,随机写入优势明显,写入放大低,寿命有保障,性价比突出,适合作为系统盘。因为寿命,家用版主控能力被Intel限了,企业版的非常强(X25-E),代表产品:INTEL自家的SSD,以及部分kingston,A-DATA的SSD。

2. Indilinx的Barefoot主控:优势体现在持续能力上,随机读写能力偏弱,买了不算吃亏,适合经常传输偏大文件的用户,写入放大中上,寿命不如Intel和SandForce。10年后Indilinx逐渐不行了,因为随机读写能力才是SSD所需要的。不过Indilinx并没有坐以待毙,代号为"Martini"的Barefoot改进版出现了,貌似解决了随机性能问题,性能如何还不清楚。代表产品:OCZ,G.Skill,A-DATA的部分SSD。

3. SandForce主控:优势体现在主控能力上,性价比不高,写入放大超低,寿命有保障,适合作为系统盘和程序盘,官方指标水分大。代表产品:OCZ的大部分SSD。

4. JMicron的JMF602/612主控:602寿命低,随机小文件写入会卡,写入放大高,算法不理想,说JMF602这个系列在性能上是失败作品的话,在市场上却是最大的赢家,山寨SSD最喜欢用的主控之一。602代表产品:山寨SSD,KingFast,A-DATA的部分SSD;612代表产品WD的SSD。

5. 三星主控:实际性价比低,不推荐购买,代表产品:三星自家SSD。

6. Marvell 88SS8014/88SS9174主控:前者性价比不高,没有突出的特点。后者是Marvell目前的旗舰主控,也是目前唯一支持SATA 6G的主控,高端发烧友可以玩玩。

7.toshiba的主控:性价比不高,不推荐。代表产品:toshiba自己SSD,kingston的部分SSD。

SSD闪存芯片的分类

闪存芯片分为两类:SLC(Single Level Cell 单层单元)和MLC(Multi-Level Cell多层单元)。SLC的特点是成本高、容量小、速度快,而MLC的特点是容量大成本低,但是速度慢。此外,SLC闪存的优点是复写次数高达100000次,比MLC闪存高10倍。为了保证MLC的寿命,控制芯片都校验和智能磨损平衡技术算法,使得每个存储单元的写入次数可以平均分摊,达到100万小时故障间隔时间(MTBF)。 

总结下来选择SSD最主要看的是:

1.寻道时间,随机读/写性能和IOPS(Input Output Per Second/每秒请求数)

2.生命周期主要看的是算法,主控算法的好坏,直接影响寿命。

写入放大(Write amplification)

SSD的存储介质是闪存,由于闪存的特性,数据不能像在HDD里那样被直接覆盖。一个新SSD,当数据第一次写入的时候,由于SSD内所有的颗粒都为已擦除状态,所以数据能直接写入,但如果SSD闪存上原来就有数据,那么写入操作就不一样了,主控会把新数据写在空闲闪存空间,然后把逻辑地址(Logincal Block Address)指向这个新的物理地址,而旧的地址内容就变成了无效的数据,但是以后要在上面再次写入的话,就需要首先擦除掉这个无效数据。因为闪存有擦写寿命(每次的编程/擦除就叫做1个P/E(program/erase cycles)周期),MLC一般是5000~10000次,而SLC是10万次左右,写入放大越低,闪存寿命就越久,写入放大主要取决于主控的算法。

写入放大=实际主控写入的数据量/用户准备写入的数据量

举个例子,比如用户要写入一个4KB的数据,最坏的情况就是,一个块里已经没有干净空间了,但是有无效数据可以擦除,所以主控就把所有的数据读出来,擦除块,再加上这个4KB新数据写回去,这个操作带来的写入放大就是: 实际写4K的数据,造成了整个块(512KB)的写入操作,那就是128倍放大。同时带来了原本只需要简单的写4KB的操作变成读取(512KB),擦 (512KB),改写(512KB),造成了延迟大大增加,速度变慢,但实际上用户感觉不明显,用SSD跑分软件就比较明显了。这也是为什么新买来的SSD跑分成绩很高,使用一段时间以后,分数就低的可怜的主要原因。

影响写入放大的主要因素

1.垃圾回收 Garbage collection

一旦SSD的所有块都已经写入了一次,SSD主控制器将会初始化那些包含无效数据的块。(陈旧数据,这些块里的数据已经被更新的数据替换,已经无效了,没了LBA地址),现在他们正在等待被删除,以便新的数据可以写入其中,如何优化并整理这些个等待被删除的无效数据,这个算法被称为垃圾收集(GC)。我们可以看出这个操作是要有前提的,就是SSD必须要支持Trim技术,不然GC就显不出他的优势了(这也是为啥目前只有支持Trim的SSD才会有GC功能),而GC的本质区别是它们何时处理?效率多少?

数据的最小写入单位是页,然而擦除的最小单位是块(大小取决于闪存,自己查资料,一般128~256页)。如果在块上的某些页中的数据不再需要,与在该块内好的数据的其他所有页必须全部读取并重新写入到新的已擦除的块内。这个操作叫做Copy Block,每个主控都会带。(包括U盘主控,这也是为了磨损平衡考虑)然后主控制器再删除掉这个块,用来给下一次写入数据用。这种操作一切指令来自主控而非用户的叫做GC,将会影响写入放大。请记住,GC有点像整理硬盘,所以要保证有一定的可用容量,可用容量越大,GC效率越高。

GC分为后台GC和主动GC

我们知道垃圾的收集过程,包括读取和重写数据到闪存。意味着这样操作会大大降低主控的性能,因为占用了主控的能力和带宽。所以,一些SSD控制器采用所谓的后台垃圾收集算法(也称为闲置垃圾收集),该控制器会使用空闲的时间来做垃圾收集,让主控在使用时一直保持高性能。试想一下如果垃圾回收把所有的空间都整理合并过了,那样在性能提升的同时,也增加了写入放大,所以像barefoot主控的SSD(闲置GC)一般只垃圾回收一小部分的空白空间来限制过多的写入操作。另一种方案就是主动GC,这需要有相当性能的主控制器,来保证在操作数据的同时进行GC操作,这类GC适合在服务器里用到,因为个人用户可以把电脑闲置了做GC,但是服务器可不行,所以要保证性能的话必须在运行的同时做GC,这对主控制器的性能提出了很高的要求,SandForce的主控就是这类。。

手动GC

不管你的SSD是不是支持Trim或者在RAID阵列状态下,手动GC或多或少都会有点作用(特殊的除外),为何?

SSD的NAND颗粒有2个状态,物理上来说就是颗粒充电表示1,颗粒放电表示0,擦除数据意味着全盘写1(充电)。颗粒必须以块为最小单位一下子充电,能以页为单位一个个放电。前面我们得知,如果SSD不支持Trim的话(RAID阵列目前都不支持),在全部SSD写满后,主控并不知道颗粒的块中哪些数据是无效的,所以它认为他们都有效,操作系统的LBA却知道(因为新数据有LBA,无效数据的LBA已经被重定向了),所以不支持Trim的SSD就意味着全盘颗粒写满后(指的是颗粒写满,其中包括有效和无效数据,不是我们通常看到的系统里可用容量满)再写入数据要等待写前的擦除操作,系统就会在没用到的 LBA地址下做写入操作。说白了就是系统知道哪里可以写而SSD主控不知道。手动GC正是利用了这一点,做了全盘填FF操作,FF在逻辑上就是1,那么就是全盘颗粒里的无效数据处填1,1在NAND颗粒上代表充电,代表擦除。所以随着用户的可用容量越来越少,然后再一下子删除这个生成出来的大文件,代表了全部可用容量区域都为逻辑1(擦除状态),这个状态就是GC操作后删除无效数据区块后的状态,所以叫做手动GC,自然这些区块在之后的操作中可以直接写入而不需要再擦除了。

2.预留空间 Over-provisioning

预留空间一般是指用户不可操作的容量,为实际物理闪存容量减去用户可用容量。这块取用一般被用来做优化,包括磨损均衡,GC,Trim和坏块映射。

预留空间分为3层:

第一层为固定的7.37%,这个数字是如何得出的哪?我们知道机械硬盘和SSD的厂商容量是这样算的,1GB是1,000,000,000字节(10的9 次方),但是闪存的实际容量是每GB=1,073,741,824,(2的30次方) ,2者相差7.37%。所以说假设1块128GB的SSD,用户得到的容量是128,000,000,000字节,多出来的那个7.37%就被主控固件用做OP了。

第二层来自制造商的设置,通常为0%,7%和28%等,打个比方,对于128G颗粒的SandForce主控SSD,市场上会有120G和100G两种型号卖,这个取决于厂商的固件设置,这个容量不包括之前的第一层7.37%。

第三层是用户在日常使用中可以分配的预留空间,像Fusion-IO公司还给用户工具自己调节大小来满足不同的耐用度和性能,而用户也可以自己在分区的时候,不分到完全的SSD容量来达到同样的目的。(要有Trim支持)

预留空间虽然让SSD的可用容量小了,但是带来了减少写入放大,提高耐久,提高性能的效果。

3.TRIM

Trim是一种SATA命令,他能让操作系统在删除某个文件或者格式化后告诉SSD主控这个数据块不再需要了。

一般情况下,当LBA被操作系统更新后,只有随着之后的每次数据写入(其实等于覆盖),SSD主控制器才知道这个地址原来早已经失效了。(之前认为每个数据都是有效的)在Win7里,由于Trim的引入解决了这个问题,当某些文件被删除或者格式化了整个分区,操作系统把Trim指令和在操作中更新的LBA 一起发给SSD主控制器(其中包含了无效数据地址),这样在之后的GC操作中,无效数据就能被清空了,减少了写入放大同时也提升了性能。

Trim的依赖性和局限性:

1.Trim命令需要SSD的支持,某些老型号的SSD可以靠刷新固件得到Trim支持(G2,barefoot,YK40),或者用一些独特的工具(barefoot wiper)提取出系统里所有无效的LBA告诉SSD主控并清除。

2.Trim命令之后,速度并不一定是立马就能提升的,因为Trim后的干净空间可能随机的包含在每个块里,只有等着多次的copy block操作和主控的GC操作才能明显感觉到速度的提升。

3.就算操作系统,驱动,SSD主控固件都满足Trim命令了,也不代表在某些特定环境下能工作,比如RAID阵列和数据库(至少到目前为止)。

4.可用空间

SSD控制器会使用所有的可用空间做垃圾回收和磨损均衡。保证一定的可用空间可以提升SSD效率,减少写入放大。(前提是支持Trim)

5.安全擦除 Secure erase

ATA安全擦除命令用来清除在磁盘上的所有用户数据,这个指令会让SSD回到出厂性能(最优性能,最少写入放大),但是随着之后的使用,GC,写入放大又会慢慢增加回来。许多软件使用ATA安全擦除指令来重置磁盘,最著名的为HDDErase。对SSD来说,重置就是全盘加电(逻辑1),瞬间即可完成清除所有数据让SSD回到初始状态。

6.静动数据分离 Separating Static and Dynamic Data

高端SSD主控制器支持静态和动态数据的分离处理,此操作要求SSD主控制器对LBA里经常写入(动态数据,热数据)和不经常写入(静态数据,冷数据)的数据块进行归类,因为如果块里包含了静态和动态数据,在做GC操作的时候会为了改写其实没必要改写的静态数据而增加了写入放大,所以把包含静态数据的块归类后,因为不常改写,减少了写入放大。但是迟早SSD主控会把这块静态的数据转移到别的地方来弥补平衡磨损。(因为静态数据占着的数据块一直不改写,编程次数低于平均值的话,会造成颗粒磨损不平衡,违背了WL,真够矛盾的。)

7.持续写入

当SSD持续的写入数据时,写入放大一般为1,原因是随着数据写入,整个块都是持续的填充着同一个文件,如果系统确认这个文件需要改写或者删除,整个块都可以被标记为无效(需要Trim支持),自然就不需要之后的GC操作了。(读取整个块并写入新的块)这个块只需要擦除,比读,改,写更快速有效。

8.随机写入

一个SSD主控的随机写入峰值速度一般发生在安全擦除后,完全GC,全盘Trim,或新安装的状态下。而随机写入的能力取决于主控制器的1.通道数。2.固件效率。3.闪存颗粒写入页面的性能。然后就是写入放大的多少,越接近于1越好,小于1更那好。当全盘颗粒都被写过后,GC功能就将被启用,速度就会受到影响,之后的写入放大就会达到SSD主控制器的最大倍数。大量的随机小文件的写入是“闪存杀手”。

9.磨损平衡(WL) Wear Leveling

假设一个特定的块被持续的编程写入而不编程写入到别的块,那么这个块将很快被消耗掉编程寿命,造成整个SSD的报废。
处于这个原因,SSD主控制器要平均分配每个块的编程次数,这个技术叫做磨损平衡。
在最乐观的情况下,这个技术会让全盘的颗粒磨损程度接近并同时报废。
可惜的是这个技术要牺牲写入放大,假设对于冷数据,必须经常的移动到别的块,再把热数据移过来,保证2边的块都是一样的磨损度,无谓的增加了写入次数。
关键就是要找一个最优化的算法来尽可能的同时最佳化这2个矛盾的条件。

安装篇

上面说了这么多,其实最适合于新手玩的SSD就是INTEL的X25 G2系列了。120G的G2的性价比最高,大概1400,其实G3也马上出来了,如果等的住的话,也可以等G3。
G2盒装是带有3.5寸架子的,放台机里没问题,不用架子悬在机箱里也没问题,SSD没机械传动装置。

安装方法和普通硬盘一样,记得手拿SSD前,碰其他金属物一下,以防止静电损坏SSD

关于SSD分区,因为SSD和HDD性质不同的关系,分区起始偏移量和HDD是不一样的,传统的HDD分区工具如果是默认属性的话,分SSD必定不对齐,SSD没有分区对齐的话,有些写入的数据都会卡在2个物理扇区(page)容量之间,我们知道扇区(page)为磁盘写入的最小单位,如果卡在2个扇区(page)之间,写入的时候就需要进行读-改写操作(对SSD来说读-擦-写),造成性能的下降。对新手来说,一个非常简单的做法就是 用 WIN 7来进行分区和安装。微软意识到了SSD必将流行,于是WIN 7对 SSD的支持是非常好了。WIN 7来分区SSD必定是对齐的。BIOS设置硬盘模式为 AHCI模式,不推荐用IDE模式,只有AHCI才能打开NCQ(Native Command Queuing,中文的意思是本地命令序列,是英特尔与希捷于2003年7月共同公布的SATA的一个重要特性,简单说本地命令序列就是对读写硬盘的命令在执行前优化排序,减少寻道时间和潜伏期,以便更合理的读写硬盘)。

WIN 7分区,只能分“主分区”,SSD的特性是分不分区都一样,只是你使用习惯问题,所以分不分区都看你自己了。关于为啥实际SSD容量小了好多,请参见第一篇。

关于系统安装,不要用GHOST,安装完系后,驱动安装顺序是(我用intel主板+intel G2 SSD来举例说明)

1.主板驱动,记得重启

显卡,声卡驱动,这个顺序无所谓,记得重启

intel RST 驱动,目前是10001046版本,记得重启(如果你是AMD的主板,那就不要装了,AHCI的驱动,用WIN 7自带的就好)

Intel SSD Toolbox 如果是intel的SSD,推荐安装,目前最新为2.1,不过我用的是2.0 (这个工具,第一项,要每周运行一次,保持SSD最佳状态,第二项是WIN 7的优化工具,会自动关闭WIN7对SSD来说不需要,甚至有害SSD的程序,只装完系统运行一次即可,第三个是安全删除工具,G2还好,其实性能下降很慢,但一般来说。半年就得用一下全删除,这个安全删除工具就是用来清空SSD所有数据,恢复出厂性能的。如果是系统盘,那要挂接SSD到其他电脑来用这个软件安全删除,当然也有其他的安全删除软件)

不太推荐SSD组RAID,因为组RAID后TRIM失效。

最后,SSD不要全塞满东西,那样对SSD寿命有极大的影响,具体请参照第一篇。



测试优化篇

一般SSD WIN 7的硬盘评分有7.0-7.8,intel G2的评分大概是7.6-7.8(AHCI模式,win7自带驱动或intel rst驱动下)

关于测试工具,可以用AS SSD benchmark,CrystalDiskMark等,hd tune是HDD的测试工具,用来测试SSD已没有多大意义。

有些主板,特别是笔记本,节电设置时默认打开的。比如intel的C1E,EIST等。这些东西都会对SSD的性能有影响。如果跑分感觉比标准低了,特别是4K的成绩。也可以在BIOS里禁用节电

建议少跑测试软件,基本跑分软件都是SSD杀手。

如何检测TRIM是否开启,在win7中 进入CMD命令界面输入fsutil behavior query disabledeletenotify 如果返回0,则表示TRIM已开启,如果返回1,表示TRIM未开启,或不支持。

很多人都会把SSD用作系统盘和WOW盘,然后挂接一个HDD用作数据盘。但是请把所有软件以及软件的缓存文件夹设置在SSD,安装软件,默认装就OK了。

举个例子吧,比如QQ,有些人会把QQ程序放在SSD,然后用户文件夹放在HDD,这样用来减少对SSD的过多的读写,我感觉没必要,SSD买来就要用的。不会那么容易就挂掉的。(不过我禁止了QQ群的图片)

又比如浏览器的缓存文件夹,也请默认就OK。虚拟内存不需要改动默认位置,没必要为了SSD的寿命,转移到HDD里。特别是intel的SSD,3年保修。。。

请不要把SSD用作下载盘。。可以在SSD装下载软件,但是请把下载目标位置,设置在HDD中。

如果为了SSD的寿命,都把需要经常数据交换的文件夹设置在HDD,那就体现不出买SSD的优势了。闪存虽然有读写次数,但是寿命也没想象的那么短。

装了SSD后,WOW的启动速度,快了几秒,读地图的速度也快了很多,基本1-2秒就进游戏,主城的话,可能要再多个1-2秒,卡拉然上去后,周围人物瞬间刷出,不会像HDD那样狂转,慢慢的刷出周围的人物。

你可能感兴趣的:(SSD知识贴)