SSD越来越受欢迎。现在买电脑不装SSD的都不好意思说自己真的懂用户体验。与传统硬盘相比,固态硬盘由闪存组成。闪存的低延迟使得SSD在随机读写性能上超越HDD,这是流畅 *** 作体验的关键。然而,固态硬盘不仅仅是闪存的简单组装。仅仅靠堆叠闪存不能称之为SSD。调用闪存的软件算法对SSD的寿命、稳定性和性能也有着重要的作用。SSD软件算法你都懂吗?今天我们就来说说什么是SSD软件算法!
SSD不是把闪存焊在一起就能做出来的。
FTL:没有固态硬盘就无法被认可。
我们都知道SSD的硬件结构和HDD完全不同,所以 *** 作系统识别HDD的很多机制并不适用于SSD。比如硬盘是由圆盘组成的,圆盘是同心圆,把圆分成小扇区。数据存储在这些扇区中,这些扇区称为扇区。
*** 作系统将扇区组织起来,形成FAT32、NTFS等文件系统,让用户可以逐个访问文件/文件夹,而不是扇区的物理地址。基本上, *** 作系统基于扇区建立文件系统。
HDD盘片上的扇区,SSD没有这种结构。
SSD由闪存组成,没有磁盘,自然也没有扇区。SSD的闪存颗粒的基本单位是页(Page),数据容量为4KB。页面形成块(区),块形成平面(面),最后平面形成Die(芯片),这就是闪存的硬件架构。可见SSD是没有扇区的。我该怎么办?这个要靠一些SSD软件算法进行转换。
SSD使用闪存,闪存的结构与HDD不同,需要FTL层和文件系统对话。
把SSD架构虚拟成HDD的算法叫做FTL;(闪存转换层).FTL算法由SSDmaster提供,低于 *** 作系统。FTL作为软件中间层,可以将SSD基于页面的硬件架构映射到HDD基于扇区的硬件架构。
当 *** 作系统为SSD建立文件系统时,它拥有FTL。 *** 作系统可以看到和HDD一样的东西,所以可以用传统的方法对SSD进行分区和格式化,而不需要使用专门为SSD设计的文件系统。由于FTL的SSD软件算法,SSD可以无缝接管HDD,没有它SSD无法识别。
垃圾收集:没有垃圾收集,SSD会非常慢。
闪存的机制非常独特。向闪存写入数据时,必须先擦除闪存中的数据,然后才能写入。同时,闪存的最小读写单位是页,而最小擦除单位是块。一个块包含多个页面。SSD工作一段时间后,任何块都没有一页是空白的。如果要擦除一个块,必须先将该块中有有效数据的页面复制备份到另一个地方,然后再擦除,这样才不会丢失数据。
每一页都可以写数据,但是覆写需要先擦除原始数据,一擦除就擦除整个块。
应该将有效的数据页拷贝到哪里进行备份?
一些不良产品会将这些页面的数据复制到缓存中,然后在块被擦除后将数据写回。这样一来,SSD的写入速度更是惨不忍睹。需要写入原始数据和新数据。解决这个问题的方法是SSD中的GC(GabageCollection),即垃圾收集算法。
GC垃圾收集算法看起来有点像碎片整理。它可以将一个块中包含有效数据的页面移动到其他块中,以便 *** 作系统可以擦除整个块。然后将数据写入该块,不需要写回在其他地方备份的页面。CG发生在FTL层,不同SSD的GC算法不同,深刻影响SSD的性能。
Trim:大大提高垃圾收集的效率。
Trim是一种用于提高GC垃圾收集效率的算法。如果没有Trim,就会出现这样的情况:在 *** 作系统中删除一个文件,实际上并没有在物理层面上删除数据。
因此,SSD的一个块中的所有页面都将被填满,只有在实际写入数据时才会强制执行GC垃圾收集,并且主设备会开始将有效数据的页面移动到其他块中,然后擦除该块。结果速度很慢,SSD用久了,每次写数据都要先GC,用户体验很不好。
CMD查询fsutil行为查询DisableDeleteNotify如图所示,Trim打开。
Trim可以大大缓解这种情况。系统删除数据后,Trim会告诉SSD哪些页面对应被删除的数据,这些页面会被标记为无效页面。在空闲时间,SSDmaster会主动CG,去掉有效数据的页面,然后擦除这些块的数据,提前准备足够的块用于 *** 作系统的数据写入。
这样即使长时间使用,只要SSD不太满,性能也不会下降太明显,大大提升了用户体验。Trim算法由 *** 作系统提供,Win7和Android4.3以后的所有 *** 作系统都支持Trim。
磨损平衡:确保闪存的寿命被均匀消耗。
我们知道闪存有擦除寿命。比如MLC闪存只能擦除几千次,TLC闪存只能擦除几百次等等。其实以现在的SSD容量,擦除的数据总量是非常惊人的。比如256GSSD的寿命是500次擦除(P/E),那么需要写入125TB的数据,闪存就会死。就算每天写10G数据,把闪存写完也要30年以上,更别说每天把10G数据写到SSD的人少了。
TLC擦除次数不尽如人意,但正常使用后很难挂机。
但是很多朋友还是不太信任SSD的寿命,因为SSD的这个寿命是按照总容量来估算的。有朋友认为平时读写数据会集中读写SSD的一部分闪存,这部分闪存的寿命会损失的很快。
一旦这部分闪存挂起,整个SSD也会挂起。但事实真的是这样吗?当然,事实并非如此。实际上,SSD有一个磨损均衡算法,使所有闪存的磨损程度尽可能保持一致。
SSD的磨损均衡算法大致可以分为动态和静态两种。动态算法是新数据写入时,会自动写入较新的块,旧的闪存会放在一边休息。
静态算法更先进。即使没有数据写入SSD,检测到一些flash块比较老,也会自动分配数据,让比较老的flash块承担存储任务而不写数据,而比较新的flash块可以空出来空,日常的数据读写会在比较新的块中进行。结果每个街区的寿命损失都差不多。
总结:
SSD永远不可能是闪存堆在一起做出来的。要让SSD稳定快速运行,还是要靠各种SSD软件算法。在选择SSD的时候,可以多关注SSD使用的主控方案,以及主控的算法是否可靠。使用SSD时,选择合适的 *** 作系统,并及时更新SSD的固件和驱动程序。这样,我们会获得更好的体验。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)