你了解SSD中的软件算法吗

ssd已经日渐流行,现在买电脑不挑带ssd的,都不好意思说自己真懂用户体验。和传统hdd相比,ssd由闪存构成,闪存低延迟的特性,令ssd在随机读写性能方面大幅超越hdd,这也是ssd能带来流畅操作体验的关键。但是,ssd又不仅仅只是闪存的简单组装,仅仅把闪存堆砌起来,并不能称作是ssd。
调用闪存的软件算法,同样对ssd的寿命、稳定性、性能等方方面面起着重大作用。ssd中的软件算法你都了解吗?今天,就一起来谈谈ssd中有哪些软件算法吧!
我们都知道ssd的硬件构成和hdd完全不同,因此操作系统识别hdd的很多机制,并不适用于ssd。例如,硬盘是由盘片来构成的,盘片是同心圆,把圆分成一个个小小的扇形,数据在这些扇形中储存,这些扇形就被称之为扇区。操作系统把扇区组织起来,构成fat32、ntfs等文件系统,用户才得以访问文件/文件夹而不是一个个的扇区物理地址。基本上,操作系统建立文件系统的基础就是扇区。
ssd由闪存构成,没有盘片,自然也没有扇区。ssd的闪存颗粒基础单位是数据容量4kb的page(页),page组成block(区),block组成plane(平面),最后plane组成die(晶片),这就是闪存的硬件架构。可见ssd没有扇区,怎么办?这就得靠一些算法来进行转换了。
ssd使用的是闪存,闪存结构和hdd不同,需要ftl层和文件系统对话
把ssd的架构虚拟成hdd的算法,叫做“ftl”(flash translation lay)。ftl算法是由ssd主控提供的,比操作系统更加底层。ftl作为一个软件中间层,可以把ssd基于page的硬件架构映射成hdd基于扇区的硬件架构。操作系统为ssd建立文件系统的时候,有了ftl,操作系统看到的东西和hdd没啥两样,就可以用传统的方法对ssd进行分区、格式化等操作,不需要使用专为ssd而生的文件系统。得益于ftl软件算法,ssd才能无缝接班hdd,没它ssd就无法识别。
gc垃圾回收:没它ssd就巨慢无比
闪存的机制是比较独特的,当你向闪存写入数据的时候,必须先把闪存中的数据擦除掉,才能写入。同时,闪存的最小读写单位是page,但最小的擦除单位是block。一个block中包含了多个page,ssd工作一段时间后,就没有哪个block中的page都是空白的了。如果要擦除某个block,就必须先把这个block中存在有效数据的page复制备份到其他地方,接而进行擦除,这样一来才不会丢数据。
每个page都可以写入数据,但覆盖写入需要先擦除原先的数据,一擦除整个block都会被擦除
有效数据的page要复制到什么地方进行备份呢?一些比较烂的产品,会把这些page的数据复制到缓存,待到block擦除后,再把数据写回去,这样一来ssd的写入速度就更加悲剧了——既要写原来的数据,又要写新数据。解决这个问题的,就是ssd中的gc(gabage collection),也就是垃圾回收算法。
gc垃圾回收算法看着有点类似碎片整理,它可以把某个block中的存在有效数据的page,移动到其他block中,从而让操作系统得以擦除这整一个block。接着再往该block写数据,就不需要把备份到其他地方的page也写回去了。cg发生在ftl层,不同的ssd的gc算法是不一样的,gc算法的不同,深切影响着ssd的性能。
trim:大大提高垃圾回收效率
trim是一种用来增加gc垃圾回收效率的算法。没有trim的话,会出现这样一种情况:在操作系统删除一个文件,实际上数据在物理层面上并没有被删除。于是,ssd的某个block所有page都会被填满,待到真正写入数据的时候,才被迫进行gc垃圾回收,主控才开始把有效数据的page移动到其他block上,进而擦除该block。如此一来,速度就很慢,ssd用久了每次写入数据都得先gc,用户体验非常不好。
trim就可以大大缓解这种情况。操作系统删除数据后,trim会告诉ssd主控哪些page的数据对应着删除的数据,这些page会被标记成为无效page。接着,在闲暇时段,ssd主控就会主动进行cg,把有效数据的page移走,然后擦除这些block的数据,提前为操作系统的数据写入准备好足够多的block。如此一来,就算是长期使用,只要ssd不是装得太满,性能都不会有太过明显的下滑,大大提升了用户体验。trim算法是由操作系统提供的,win7、android 4.3以后的操作系统都支持trim。
磨损平衡:保证闪存寿命被均匀消耗
我们知道闪存是有擦写寿命的,例如mlc闪存只能够擦写数千次,tlc闪存只能够擦写数百次等等。其实以现在的ssd容量,总擦写数据量是非常惊人的,例如256g的ssd,寿命是500次擦写(p/e)的话,那么就需要写入125tb的数据,闪存才寿终正寝——就算你每天写入10g数据,也需要用三十多年才能把闪存给写挂,更何况很少人每天往ssd中写10g数据。
但是很多朋友仍不信任ssd的寿命,理由是ssd的这个寿命,是根据全盘容量来估算的。有的朋友认为,平时读写数据,会集中读写ssd的其中一部分闪存,这部分的闪存寿命就会损耗得特别快。一旦这部分闪存挂了,那么整块ssd也就挂了。然而事实真的是这样吗?
事实当然并非如此。实际上,ssd拥有磨损平衡(wear leveling)算法,令所有闪存磨损度尽可能保持一致。ssd的磨损平衡算法大致分为动态和静态两种。动态的算法就是当写入新数据的时候,会自动往比较新的block中去写,老的闪存就放在一旁歇歇;而静态的算法就更加先进,就算没有数据写入,ssd监测到某些闪存block比较老,会自动进行数据分配,让比较老的闪存block承担不需要写数据的储存任务,同时让较新的闪存block腾出空间,平日的数据读写就在比较新的block中进行——如此一来,各个block的寿命损耗,就都差不多了。
总结
ssd绝不是把闪存堆在一起就能做成的,要让ssd稳定、快速地运行,还有赖于种种软件算法。在选用ssd的时候,可以多关注一下该ssd所使用的主控方案,关注该主控的算法是否靠谱;在使用ssd时,要选择适合的操作系统,并及时更新ssd的固件和驱动。如此一来,才会得到更好的体验。


smt贴片BGA焊点断裂的原因和对策
S3C44B0X和M12模块设计的GPS接收终端方案
如何进行嵌入式诊断设计?这些方法拿走不谢
掌握这3类二极管钳位电路少走弯路
随着RFID在鞋服领域的普及度不断上升,应用场景和方式会更加成熟
你了解SSD中的软件算法吗
DALI通信的原理及实现方法
复合惯性传感器的工作原理
东芝推出采用新型高散热封装的车载40V N沟道功率MOSFET,支持车载设备对更大电流的需求
国科微以3.6亿元收购深圳华电通讯有限公司100%股权
美国商务部公布了一批“危险名单”,多家半导体企业在列!
在互联网+金融的发展下,银行转型的必要性
MOVIN:打破“低价低质”的行业壁垒,存量市场时代的“必然较量”
曝Windows 10 Version 2004功能更新最早3月下旬推送 主要针对现有功能进行优化和调整
RA MCU使用Virtual EEPROM
厦门士兰集科微电子有限公司12英寸生产线正式投产
小米MIUI9什么时候发布?MIUI9最新消息:7月12日将提供外部测试预览版
基尔霍夫定律kcl和kvl
高速贴片机与中速贴片机的优缺点比较:选对设备,事半功倍
赋能智慧交通的“5G+智能算力”技术