关于硬盘速度及容量的分析

随着科学技术的发展,以闪存颗粒为核心的SSD固态硬盘已经超越了以磁盘为核心的HDD机械硬盘,例如我们用的u盘,移动硬盘,以及现在主流的m.2硬盘,都是使用闪存颗粒进行数据的存储,但是机械硬盘并没有完全的消失在我们的生活中,它仍然在一些重要的方面发挥着它的作用。

固态硬盘和机械硬盘的区别

固态和机械硬盘的区别中最核心的方面就是体现在存储的介质不同,固态硬盘使用闪存颗粒来进行存储,机械硬盘使用可以被磁化的磁盘来进行存储。

机械硬盘的存储方式

当我们执行文件的写入操作时,cpu通过总线指令机械硬盘在主控进行写入操作。机械硬盘接收到指令后,通过数据接口来获得数据,并通过硬盘主控来控制磁盘旋转至对应磁道,通过电磁效应来进行数据的存储,具体过程请自行搜索。
使用这种方式存储的优点很明显,就是数据是通过物理手段来存储的,这就意味着机械硬盘具有很高的可恢复性,例如用刀切割这种损坏的方式,就无法把其他部分的数据彻底消除。

但是这种存储方法也带来了一定的缺陷,由于是通过物理手段存储的这种电磁效应所需要的时间就显得较长,而且由于磁盘需要高速转动,因此进行连续顺序读写时效果尚可,但是如果进行大量零碎小文件的读写,就显得力不从心了。因为在大量零碎小文件的读写中,这些小文件存放的位置不一定紧密相关,可能分布在一个磁片的各个扇区,甚至可能存放在不同磁片的不同扇区。因此机械硬盘在进行4k文件读写这类测试时,速度通常不超过10MB每秒。所以机械硬盘如果用于系统启动盘在执行开机,游戏数据加载等这种大量读写文件的操作时,就会导致拖慢开机速度,游戏表现卡顿这类问题。

机械键盘有这样的缺陷,那么随着科学的发展,就发明了固态硬盘来克服以上缺点。

固态硬盘的存储方式

固态硬盘通过闪存颗粒来进行存储,闪存颗粒按等级可以分为 SLC,MLC,TLC,QLC这4个级别,其中TLC是目前市场上使用最多的闪存颗粒,其具有擦洗次数较多的特点。

大体来说,按上述顺序来排列越前面的性能越好(读写速度越快),且可擦写次数越多,但单位容积就越少,且价格越昂贵。
具体内容请参考这篇文章: [颗粒分析](https://www.reneelab.com.cn/difference-slc-mlc-tlc.html#slc)

提高固态硬盘速度的策略。

由于TLC的读写速度并不高,因此工程师们想出了一种新的办法——混用颗粒。

在一些较为廉价的固态硬盘中,厂商将mlc颗粒与tlc颗粒混用,先向较快的mlc颗粒写入数据, mlc颗粒约占总存储容量的1/3,用户如果在使用容量不多的情况下,就会感到速度更快。

这一办法是从硬盘的整体使用角度进行的,考虑从单次文件读写的操作来说,工程师们也有另外的办法——配备缓存。
通常一块固态硬盘都会配备1块1-4GB的缓存,在写入时先使用SLC或MLC制造的缓存颗粒中高速写入数据,再由缓存向闪存颗粒写入数据。
早期的计算机系统为了使速度看起来更快,在拷贝速度的进度条中,没有计算缓存向闪存颗粒拷贝的时间,因此在早期的计算机系统中要求必须使用弹出硬件才能进行硬盘拔出,还会提示用户如果不这么操作,会有丢失数据的风险。
产生这一现象的原因便是缓存并不能在掉电的情况下保存数据,所以如果一传输完数据就立刻插拔硬盘那么缓存,里面的数据将全部丢失,造成数据整体不完整,甚至可能导致视频音频等无法播放。

此外工程师们还利用模拟的方式,将plc颗粒模拟成mlc颗粒,甚至slc颗粒来增加写入速度。
Slc读写速度快的原因就在于它单位颗粒储存的数据量小,操作量更少,就好比在现实生活中的一人一间房,速度就快了,而且由于使用的次数少,可擦写次数也就大大提高,约10万次。
以此类推,此后就像二人间,三人间,宿舍区,大杂烩一样,单位颗粒的存储数据量多了,但是速度也就自然慢了下来,可擦写的次数也随之降低,目前普遍使用的tlc的可擦写次数约在1000次至3000次之间。

注意:可擦写次数不是指读写次数,可擦写次数是指将该硬盘完全写满后清空,才算一次擦写。如果按最低的1000次计算,即使是一块128g的硬盘,也可以写入128,000g的数据。合128TB,在民用领域完全不用担心因为可擦写次数而导致硬盘报废的问题。

最后,工程师们还将硬盘的容量刻意缩小了一点,这一部分缩小的空间,用来对付写入放大和垃圾回收

写入放大(WA):WA主要发生在使用新数据更新(或者覆盖)旧数据的时候,由于FLASH需要先擦除再改写的特性,其将目标数据所在的page整个读出来缓冲到buffer中,然后再将你要改写的数据覆盖到buffer中,最后再将buffer写入到另一个空白的page中,所以哪怕你只更新1个字节(1KB),但是最终的结果是实际上写入了4K数据到FLASH芯片中。

垃圾回收(GC):GC是当FLASH中再也找不到可以直接写入的空白page时,GC就会启动,GC会在FLASH找已经废弃/删除的page,然后将这个page擦掉,用来存放你的新数据,但是!但是!但是!这里又有两个问题就是FLASH擦写单位不一致的。写入是按照page进行的,而擦除是按照block进行的,一个block中包含有16个page,所以当GC找到一个废弃page的时候,实际上改page所在的block中还有其他page里面的数据时有效的,所以GC擦除这个block之前需要将里面所有有效的page全部搬到其他地方去,比如搬到保留区中。所以导致了哪怕你只更新1个字节,实际上在后台导致了16个page的搬移写入,加入一个page时4K,那一个block就是64KB了。

因此,当固态硬盘的数据存的很多之后,最直接的影响就是空白的page越来越少了,需要GC的次数就越来越多了,最终感觉上就是SSD变慢了。

只是预留空间还不够,工程师们还利用了硬盘的空闲时间运行GC,实际上在不写入的时候,SSD如果空闲,也会偷偷进行GC操作,提前准备一些空闲空间。也可以直接使用系统自带的磁盘碎片整理来进行数据的整合。

因此我们可以预测,如果向一个1TB的固态硬盘内写入一个大文件,将会有以下三段速度表现:

  • 达到标称速度,这个时候实际上就是向缓存写入数据。

  • 缓存空间已满,速度降为tlc颗粒的读写速度。

  • 空白page耗尽,在读写的时候还要进行GC,再次下降,但降幅比上一次略小。

硬盘容量的减小原因

在这里也可以顺带解决一个问题——为什么硬盘的实际空间总是要比宣传的空间要小。

厂家总是宣传是因为进制不同的原因。的确,计算机系统使用的是二进制,在二进制中,2的8次方等于1024,而在十进制中,我们习惯使用1000作为计量单位,因此理论上可能的空间应该有125/128。加上上述的磁盘预留的策略,这才变成我们现在所熟悉的大小。

关于固态硬盘调掉速以及储存容量变化的问题产生这些问题的主要原因均是因性能不足而产生的策略管理。


关于硬盘速度及容量的分析
https://blog.windeling.com/20240204ede1e670/
作者
黄文林
发布于
2024年2月4日
更新于
2025年5月8日
许可协议