SSD背后的秘密:SSD的基本工作原理
SSD主要由SSD控制器、FLASH存储阵列、板载DRAM(可选)以及与HOST的接口(如SATA、SAS、PCIe等)组成。
SSD主控制器通过多个通道并行操作多个FLASH粒子,类似于RAID0,大大提高了底层带宽。例如,假设主控与FLASH粒子之间有8个通道,每个通道都挂载一个闪存粒子,主机与FLASH之间的数据传输速率为200MB / s,该闪存粒子的页面大小为8KB, FLASH页面的读取时间为Tr = 50us,平均写入时间为Tp = 800us, 8KB的数据传输时间为Tx = 40us。然后底层的最大带宽阅读(8 kb /我们(50 + 40))* 8 = 711 mb / s,和写的最大带宽(8 kb /(800 + 40美元))* 8 = 76 mb / s。从上面可以看出,增加底层的带宽,你可以增加底部的并行粒子数层,或者你可以选择快速闪光粒子(或使粒子速度越慢,如多层陶瓷SLC)。
对于绝大多数的ssd,我们可以看到它有板载dram,它的主要功能是存储这个映射表。也有例外,比如基于Sandforce的SSD,它不支持板载DRAM,那么它的映射表在哪里呢?SSD工作时,大部分映射存储在FLASH中,一部分存储在片内RAM中。当HOST需要读取数据时,对于板载DRAM的ssd,只需在DRAM中查找映射表,获取物理地址,并访问FLASH即可获取HOST数据。在此期间只需要访问FLASH一次。对于Sandforce的SSD,它首先查看Host Page对应的映射关系是否在RAM中。如果是,则容易根据映射关系直接读取FLASH;如果映射关系不在RAM中,则首先需要从FLASH中读取映射关系,然后根据此映射关系读取Host数据,这意味着与带DRAM的SSD相比,需要读取FLASH两次才能读取Host数据,底层有效带宽减少。一半。对于HOST随机读,由于片上RAM有限,映射关系Cache命中的概率(映射关系是片上RAM)很小,所以对于它来说,基本上每次读都需要访问FLASH两次,所以我们可以看到基于Sandforce master的SSD随机读性能并不理想。
一个新买的SSD,你会发现写速度非常快,那是因为你总能在一开始就找到可用的Block来写。然而,当你使用SSD时,你会发现它变慢了。原因是SSD满了以后,需要写新数据的时候,往往需要做上面的垃圾回收:把几个Block上的有效数据移到一个Block上,然后擦去原来的Block,然后再写你的Host数据。这比在开始时简单地找到一个可用的块要耗时得多,所以速度变得更慢,也更容易理解。
在SSD内部,有一种称为损耗均衡(WL)的机制来确保这一点。
WL有两种算法:动态WL和静态WL。所谓动态WL,就是在使用Block进行擦写操作时,选择PE数低的那个;所谓静态WL,就是把长时间没有修改过的旧数据(比如上面提到的只读文件数据)从PE移出块,然后再找一个PE号高的块进行存储,这样PE号低的块就可以在之前使用了。
主机通过LBA(逻辑块地址)访问SSD盘。每个LBA代表一个Sector(通常为512B大小)。操作系统通常以4K为单位访问SSD。用户页(主机页)。在SSD内部,FLASH Page是SSD主机和FLASH之间访问FLASH的基本单元。我们称FLASH页为物理页。每次HOST写HOST Page时,SSD主机都会找到一个Physical Page来写HOST数据。SSD也会记录这样的地图。有了这样的映射关系,下一次HOST需要读取某个HOST Page时,SSD就知道从FLASH中读取数据的位置。