除闪存外,SSD的接口也分为四类,它们是SATA、mSATA、M.2和PCI-E。
SATA是一种电脑总线,分别有SATA 1.5Gbit/s、SATA 3Gbit/s和SATA 6Gbit/s三种规格,读写速度依次为150MB/s、300MB/s、600MB/s,适用于几乎所有台式机和笔记本。
mSATA是迷你版本SATA接口,拥有M50 msata和M30 msata两种规格,读写速度均为520MB/s,主要适用于超极本,比如联想的E220s、E420s、Y460等。
M.2是Intel推出的一种替代mSATA新的接口规范,它有两种类型:Socket 2和Socket 3。Socket 2最大的读取速度可以达到700MB/s,而Socket 3的理论带宽可达4GB/s。Socket 2适用于部分中低端笔记本,Socket 3几乎适用于新上市的台式主板和中高端笔记本。
PCI—E是一种高速串行计算机总线,它有5个版本,从1.0到最新的5.0,读写速度分别为250MB/s、500MB/s、984.6MB/s、1969MB/s以及3938MB/s,适用于几乎所有的台式机。
综合来看,SSD闪存颗粒的不同,它的读写速度和擦除次数也就不同,容量越大的闪存,使用寿命就越有限;SSD接口的不同,直接应影响的是读写速度。
不过,以上两种原因影响的是SSD使用前的速度,使用后速度下降的原因主要分为两个方面:写入放大(WA)和垃圾回收(GC)。
WA是闪存和SSD中的一种不良现象,即实际写入的物理数据量是写入数据量的多倍。由于FLASH芯片需要先擦除再改写的特性,它需要将目标数据所在的文稿整个读出来缓冲到缓存器中,然后再将你要改写的数据覆盖到缓存器,最后将缓存器写入到另一个文稿中,所以,哪怕你更新一个字节,实际上写入了4KB的数据到FLASH芯片。这也就造成了SSD写入文件大小翻倍的现象,从而导致硬盘容量越来越小,写入速度下降。
GC是当FLASH芯片中再也找不到可以直接写入的空白文稿时,JVW(java虚拟机)将调用垃圾回收机制来回收内存空间。GC会在FLASH芯片中查找废弃或删除的文稿,然后将这个文稿擦掉,用来存放你的新数据,但由于GC与FLASH的擦写单位不一致,写入时是按照文稿进行的,而擦除则是按照Block文件类型,一个Block中有16个文稿,所以当GC找到一个废弃文稿时,实际上改文稿需要先把Blovk中的其余15个文件搬到别的地方。因此每当你更新1字节,实际在后台有16个文稿写入,一个文稿大小为4KB,16个文稿就是64KB,这样SSD的容量也会成倍减少,最终导致写入速度下降。
简单点来说,当你的SSD存储数据变多时,空白的文稿会随之变少,为了腾出额外的空间,GC会寻找废弃的文稿,随着次数的增加,SSD的速度自然也就慢了。
另外,GC并不是需要写入数据时才出动,即使SSD处于空闲状态,它也会悄悄地进行操作,提前预留一些空间。
那如何避免SSD因存储数据过多导致速度下降的问题?
厂商的做法是根据SSD等级来制定不同的解决方案,比如:入门级SSD通过缩小可用容量,预留出一部分空间,以此来防止SSD完全写满。最为直观的例子就是有些电脑明明写着512GB的存储容量,实际能用的就只有480GB。
对于中高端的SSD,它们会额外搭载缓存降低写入放大。像三星970 PRO NVMe M.2 1T就配备了4GB的缓存容量。