SSD软硬件介绍

由于本人之前的C300测试贴中的部分原理解释不是最“傻瓜”式,造成很多朋友的困惑,在群里在论坛里讨论时,发现很多朋友的理解都还是有问题,故此特地开一个帖子解释的更“傻瓜”点。

首先我们来看下,作为L63B颗粒,Intel/Micron的34nm 4KB page的颗粒,内部结构是这样的。

1个8通道8位的主控连接到8个Die上,为了解释方便,我这里就画了每个Die里的第一个Block。(实际当然要复杂很多)

好了,接下来我们要进行读写了,看清楚,这下面的东西才是你们最想知道的。
1. 现在我先对主机发送一条命令,要求写入4KB。

主控接到主机发来的指令后,往颗粒2的Block1里和颗粒3的Block1里各写入4KB。

好了,我们来举一反三,如果写入的是32KB,那么主控就会一下子往每个颗粒的Block1里写入4KB,这样就能发挥出这个SSD主控理论最大的写入带宽,相对4KB来说最好情况下我们可以得到8倍的速度(取决于主控对通道的优化,颗粒当前的文件状况等等)。这样你们就会知道为啥4KB的写入慢,而持续写入SSD并不慢的道理了吧,实际情况下当然不会都写Block1,我这里只是想解释的简单点。这个类似RAID 0的操作模式就是大部分的SSD内部操作情况。

上面是写入的情况,对于读取自然也是如此,4KB的读取就从一个Block里读,而32KB的话就从8个Block里拿,速度是不是8倍提升取决于要读取 的数据是不是平均分布在每个颗粒的Block里,如果32KB数据是存储在图中颗粒1~4的Block1里的(每个Block假设8KB),那么读取就最 多只有4倍的提升了,这也是为啥文件越小传输率越低的道理。

这样经过一段时间之后,所有的NAND Block都被填满了,就会产生如下图的情况:

是的,在SSD主控制器看来,这里的文件都是有效的,也就是不能擦除,那么接下来如何?在操作系统的要求下,继续写入数据的话就要在前面LBA红色的地方写入,对于SSD来说,这时候就需要把整个块的绿色读进缓存并更新操作系统发来的数据,之后擦除这整个块并把缓存里的整个更新完的块写回去,这样即使写入4KB的数据,其实也是大费周章的折腾,这就是早期SSD主控制器或者U盘写入放大高的道理,这些SSD的算法上不支持GC,也没有Trim,所以在随机写入的表现上非常的悲剧。
-------------------------------------------------------------------------------------------------------------------------

Trim是什么?他带来了什么好处?

Trim是一条ATA的指令,当最新的操作系统删除文件的时候(包括格式化),同时把这个文件地址发送给SSD的主控制器,让主控制器知道这个地址的文件地址无效了,好了,到此结束,没有下文了。

Trim的完成需要几点:1.SSD的主控制器必须认识Trim指令,也就是固件要支持。2.操作系统必须会发送Trim指令,也就是删除时候会发送。3.操作系统下的控制器驱动必须要支持Trim指令的传输,也就是能够Pass Trim指令到SSD主控制器。

如果SSD的主控制器支持Trim并且有开启的话,他看到的图就会是这样:


前面说过了,SSD有备用空间,那么合理应用那个空间作为垃圾回收,我们可以把颗粒1的Block1和颗粒2的Block1里的绿色有效page合并到颗粒N的block1里面,并删除掉颗粒1的Block1和颗粒2的Block1.这样我们就用了1个空白Block(颗粒N的Block1换到了2个空白Block) ,并把2个空白Block转到备用区去,这就是垃圾回收操作。

操作后就像下图:

由于没有Trim,操作系统在删除文件的时候并不会告诉SSD主控这个文件地址为无效,那么只有在更新操作的时候SSD主控才知道这个地址为无效(新数据写入新page,旧page地址被主控映射表标记为无效)。由于红色的page很少,这样就给垃圾回收带来了效率低下的问题,按照这个图中的情况做垃圾回收后会如下图:




<img aid="19718" src="http://image86.360doc.com/DownloadImg/2015/06/1417/54959837_15.jpg" zoomfile="data/attachment/forum/month_1101/1101300833f889ff380405fef1.jpg" file="data/attachment/forum/month_1101/1101300833f889ff380405fef1.jpg" aimg_19718"="" inpost="1" lazyloaded="true" _load="1" initialized="true" style="border: none; margin-bottom: 0px; padding: 0px;"> 

有谁认为下图的垃圾回收效率会低于上图的?我相信没人吧,更多的备用空间意味着啥?更高的效率,更多的写入空间,磁盘碎片整理程序也是空白空间越大效率越高吧,在企业级这类极限情况下,靠着被动GC来拉开性能的话,备用空间就显得尤为重要了。

没有Trim的时代:OP的容量越大,代表用户的可用空间越小,当写满整个LBA的时候,用户就需要删除文件以得到空闲容量,LBA里文件占的地址page变红了,而在SSD看来还是全绿(无Trim),删除文件后用户可以继续写入(LBA地址覆盖),在SSD主控内的FTL帮助下,操作系统LBA的红色在慢慢变绿,而SSD实际把数据更新到之后没写入过的PBA(物理地址)里,在SSD里看来,PBA—LBA越大,在LBA里红色出现的概率越高,需要复制进缓存的绿色page越少,性能越好。在没有Trim甚至GC的年代,提升OP容量是唯一保证SSD写入性能的方法,在极端情况下OP是非常重要的,如今虽然SSD性能大大增强了,但是OP被大多数企业级SSD产品沿用了下来。

OP不能提升SSD的最高性能,但是却能明显提升SSD的最低性能,越是极端情况下,OP越显得重要,OP还能让SSD的性能下降更慢,恢复更快,减少写入放大来大大提升颗粒耐久度。

猜你喜欢

转载自blog.csdn.net/weixin_38233274/article/details/80907582