为什么固态硬盘在装满时会变慢

基准很清楚:固态硬盘在装满时会变慢。将固态硬盘填满至接近容量时,其写入性能将大幅降低。原因在于SSD和NAND闪存的工作方式。

将硬盘装满容量是固态硬盘绝对不能做的事情之一。几乎满的固态驱动器的写入操作会慢得多,从而降低计算机的速度。

空块和部分填充的块

当您将文件写入固态驱动器时,它会查找并填充空块。写入空块是最快的写入操作。这就是为什么新的操作系统(Windows7和更高版本)支持Trim功能,一旦你在操作系统中删除了文件,该功能就会自动从固态驱动器中删除文件的数据。这与磁性硬盘的工作方式不同,在磁性硬盘上,已删除的文件位会留在硬盘上。

它们不会闲坐在固态驱动器上-调整可确保清空数据块,以便SSD将来可以快速将新数据写入空块。在已经写入的扇区上写入与写入机械硬盘上的空扇区一样快,但是固态驱动器在写入之前必须擦除一个块。

NAND闪存以256 KB块内的4 KB页面写入数据。要向部分填满的块添加额外的页面,固态驱动器必须在将数据写回之前擦除整个块。

随着固态驱动器填满,可用的空块越来越少。取而代之的是部分填满的积木。固态驱动器不能只将新数据写入这些部分填充的块-这会擦除现有数据。与简单的写入操作不同,固态驱动器必须将块的值读入其高速缓存,用新数据修改该值,然后将其写回。请记住,写入文件可能会涉及写入多个块,因此这可能会带来大量的额外延迟。

修剪不合并部分填充的块

如果您将驱动器填满容量或接近容量,则在删除文件后,很可能最终会出现许多部分填满的块。trim命令仅指示固态驱动器在删除文件时删除文件数据。它不会强制驱动器执行任何类型的清理操作。

换句话说,在删除文件之前填满固态驱动器的容量,很可能最终会得到许多部分填满的块。驱动器不会不遗余力地将这些部分填满的块合并为完整块,从而释放空块。驱动器仍将充满部分填满的数据块,写入性能将会降低。

过度调配和垃圾数据收集

为了防止消费者填满固态硬盘,最终导致性能严重下降,固态硬盘制造商正在想方设法应对这一问题。

消费级固态硬盘通常会留出约7%的闪存存储空间,使用户无法使用。这就是所谓的“过度配置”--额外的存储硬件被添加到驱动器中,但是计算机看不到它可以使用的可用存储。备用区可确保驱动器永远不会完全满-始终有一些备用容量可帮助保持写入性能稳定。

每个固态硬盘的控制器都有一个垃圾收集算法来尝试缓解这个问题。当驱动器变满时,它将查找部分填满的块并开始整合它们,从而释放尽可能多的空块。不同的固态硬盘在不同的时间和阈值运行这些操作-这取决于硬盘的控制器。

基准证据

AnandTech对不同的驱动器执行了各种基准测试,以梳理出固态驱动器的备用区与其写操作性能一致性之间的关系。当填满空驱动器时,他们发现在该过程非常早的时候写入性能很高,随着写入操作继续填满驱动器,写入性能会显著下降。

在驱动器上预留更多的备用区有助于保持性能的一致性,因为这可确保驱动器始终有足够的空块可用。

他们发现,“一旦这些(消费类)硬盘的备用区达到25%,最低性能就会大幅提升。”他们最后的建议是,如果你想在性能一致性和容量之间取得良好的平衡,你应该“计划只使用(你的驱动器)容量的75%左右”。

如果您使用的是固态硬盘,则应尽量避免使用超过75%的容量。购买比您需要的存储容量更大的驱动器,您将确保始终具有一致的写入性能。幸运的是,固态硬盘正逐渐变得便宜得多,所以现在不像以前那么贵了。

图片来源:Wikimedia Commons的音乐分类器,Flickr上的Simon Wüllhorst

相关文章