多个(但不是最近的)消息来源建议,应保留约 7% 的 SSD 空间以减少驱动器磨损。目前这是否仍然有效,还是情况已经发生变化?
答案1
Windows 通常会使用 TRIM。这意味着只要文件系统上有 X% 的可用空间,驱动器就会将 X% 视为未分配空间。[*] 无需过度配置。
例外:从历史上看,带有 Sandforce 控制器/固件的 SSD 在 TRIM 之后未能恢复全部性能 :(。
满载硬盘的性能损失可能非常严重,甚至比其他一些硬盘更严重。这将与高写入放大有关,从而增加磨损。来源:Anandtech 评论。
因此,当且仅当
- 您不确定是否会使用 TRIM。据我所知,由于一些旧的和性能不佳的驱动器存在性能问题,它在 Linux 上仍然没有默认启用。
- 或者您担心 Sandforce 驱动器会满了(而且内容无法通过智能控制器进行压缩)。
在 Linux 上启用 TRIM 并不太难,而且您不太可能注意到任何问题。
幸运的是,几个最受欢迎的品牌都生产自己的控制器。Sandforce 控制器不再像以前那么受欢迎。Sandforce 的问题让我对那个特定的“智能”控制器设计产生了怀疑,它在当时是非常激进的。向 Sandforce 致歉,但我没有受影响的具体控制器型号的参考。
[*] 文件系统也需要有足够的可用空间,以减少碎片。所以 TRIM 很棒,因为您不必同时添加两个安全边际,相同的可用空间对它们都有帮助 :)。驱动器可以利用未分配的空间来提高性能,并避免您所说的高磨损。
答案2
现代 SSD 控制器非常智能,因此日常使用中通常不需要过度配置。但是,在某些情况下,尤其是在数据中心环境中,建议使用过度配置。要了解过度配置为何有用,有必要了解 SSD 的工作原理。
SSD 在写入数据时必须应对闪存的限制
SSD 使用一种称为NAND 闪存。与硬盘不同,包含数据的 NAND 单元不能直接被覆盖;驱动器需要先擦除现有数据,然后才能写入新数据。此外,虽然 SSD 以页面大小通常为 4 KB 到 16 KB,它们只能擦除大组页面中的数据,这些页面称为块,在现代 SSD 中大小可以是几百 KB 到几 MB。
NAND 也写入耐久性有限. 避免为了擦除块而不必要地重写数据,以及确保没有块接收不成比例的写入次数,驱动器会尝试将写入(尤其是小的随机写入)分散到所有底层空间。如果写入替换了旧数据,它会将旧页面标记为无效。一旦块中的所有页面都被标记为无效,驱动器就可以自由擦除它,而不必重写有效数据。
SSD 需要内部可用空间才能发挥最佳功能,但并非每个工作负载都有利于维持可用空间
由于每个块可能包含不同数量的等待擦除的无效数据,因此内部可用的空间量可能明显少于操作系统逻辑上可用的空间量。
如果驱动器内部剩余空间很少或没有剩余空间,则可能会被迫立即擦除块以允许写入新数据。这些块中的任何有效数据都必须重新写入其他块中的空闲页面。如果剩余的空闲页面不多,则需要擦除和重写更多块,依此类推。对于每个单独的写入操作,此过程可能会发生多次,尤其是在驱动器处于连续写入流的情况下。
这种重写意味着写入 NAND 的数据总量大于实际发送到驱动器的数据量。这种现象称为写入放大,这会显著降低 SSD 的性能和耐用性。写入放大在随机写入密集型工作负载中尤其明显,例如联机事务处理 (OLTP). 为驱动器提供更多空闲时间的应用程序(包括日常消费者使用)允许后台数据移动,与必须立即为新数据腾出空间的情况相比,这需要更少的重写(从而降低写入放大)。
为了减少写入放大,大多数现代系统都支持名为修剪,它告诉驱动器哪些扇区不再包含有效数据,可以安全擦除。这是必要的,因为否则驱动器将需要假设操作系统逻辑删除的数据仍然有效,从而妨碍其保持足够的内部可用空间的能力。
但 TRIM 无法完全消除写入放大。使用磨损均衡,随机写入会分散到所有底层 NAND 中,因此即使驱动器在逻辑上远未满,一定程度的重写也是不可避免的。此外,较旧的操作系统和某些外部机箱可能不支持 TRIM 命令。在极少数情况下,驱动器可能看似支持 TRIM,但无法释放内部空间,导致该命令无效。
现代 SSD 的写入放大率明显低于旧款硬盘,但某些工作负载仍可从过度配置中受益
最早的 SSD 固件不成熟,往往会重写数据,而不需要太多。早期的 Indilinx 和 JMicron 控制器(JMF602 因卡顿和糟糕的随机写入性能而臭名昭著) 在密集的随机写入工作负载下遭受了极高的写入放大,可能超过 100 倍。(想象一下,当您只想写入 1 MB 时,却向 NAND 写入了超过 100 MB 的数据!)。较新的控制器具有更高的处理能力、改进的闪存管理算法和 TRIM 支持,可以更好地处理这些情况,尽管在现代 SSD 中,繁重的随机写入工作负载仍然会导致超过 10 倍的写入放大。
过度配置可确保有一定数量的可用空间来处理随机写入并尽量减少强制重写数据。所有 SSD 都至少有最低程度的过度配置。有些仅使用GB 和 GiB 之间的差异允许大约 7% 的原始容量用作内部可用空间。相反,用于特殊应用程序的驱动器可能会有更多过度配置。例如,用于写入密集型 OLTP 或数据库工作负载的企业级 SSD 可能具有 512 GiB 的物理 NAND,但宣传的容量为 400 GB,而不是具有类似数量 NAND 的消费级 SSD 的典型 480 到 512 GB。
如果您的工作负载特别繁重,或者您在不支持 TRIM 的环境中使用该驱动器,则可以通过对驱动器进行分区来手动超额配置空间,以便某些空间未使用。例如,您可以将 512 GB 的 SSD 分区为 400 GB,并将剩余空间保留为未分配空间,驱动器将使用未分配的空间作为备用空间。但请注意,如果之前已写入此未分配空间,则必须对其进行修剪;否则,它将没有任何好处,因为驱动器会将该空间视为已占用。(分区实用程序应该足够智能,可以做到这一点,但我不能 100% 确定;请参阅“Windows 会修剪 SSD 上未分区(未格式化)的空间吗?”)
如果你只是普通消费者,通常不需要过度配置
在支持 TRIM 的典型消费者环境中,SSD 的占用率低于 70-80%,并且不会持续受到随机写入的影响,写入放大通常不是问题,并且通常不需要过度配置。
最终,即使写入放大率较高,大多数消费者也不会在大多数 SSD 的预期使用寿命内向磁盘写入足以磨损 NAND 的数据,所以这并不是什么值得失眠的事情。
答案3
不同 SSD 驱动器型号的额外空间大小差别很大,但总体来说仍然如此。
答案4
SSD 的最小超额配置量是在工厂设置的,但用户可以分配更多空间以获得更好的性能。无论哪种方式,为了做出更好的 SSD 购买决策并以最有利的方式配置驱动器,以适应每个独特的环境和用例,对超额配置有一定程度的了解是必要的。SSD 的工作方式非常不同。NAND 闪存的基本单位通常是 4 千字节 (4KB) 页面,一个块通常有 128 页。写入可以一次一页进行,但只能在空白(或已擦除)页面上进行。页面不能直接覆盖。相反,必须先将其擦除。但是,擦除页面很复杂,因为必须一次擦除整个页面块。当主机想要重写到某个地址时,SSD 实际上会写入另一个空白页面,然后更新逻辑块地址 (LBA) 表(非常类似于 HDD 的 MFT)。在 LBA 表内部,原始页面被标记为“无效”,新页面被标记为新数据的当前位置。
当然,SSD 必须在某个时候擦除这些无效的数据页面,否则 SSD 上的可用空间最终会被填满。SSD 会定期执行一个称为垃圾收集的过程来清除无效的数据页面。在此过程中,管理 SSD 中的 NAND 闪存的 SSD 控制器或闪存控制器会读取一个块的所有好页面(跳过无效页面)并将它们写入新擦除的块。然后擦除原始块,从而为新数据做好准备。所有 SSD 都会为这些额外的写入操作以及控制器固件、失败的块替换和其他因 SSD 控制器制造商而异的独特功能保留一定数量的空间。最小保留只是二进制和十进制命名约定之间的差异。许多人都不知道,1 千兆字节 (GB) 正好等于 1,000,000,000 字节,而 1 吉比字节 (GiB) 正好等于 2^30 = 1,073,741,824 字节,比 1 GB 多出约 7.37%。许多人还不知道,存储的正确计量单位是千兆字节,而内存的正确计量单位是吉比字节。尽管 SSD 是由 NAND 闪存芯片制成的,但它们被作为存储设备销售,SSD 制造商会额外保留 7.37% 的内存空间,用于垃圾收集等后台活动。
因此,即使 SSD 看起来已满,它仍然有 7.37% 的可用空间来继续运行和执行写入操作。不过,写入性能很可能会在此级别受到影响。实际上,SSD 的性能在达到约 50% 的容量后开始下降。这就是为什么一些制造商会减少可供用户使用的容量,并将其作为额外的过度配置留出。例如,制造商可能会保留 128GB 中的 28GB,并将最终配置作为 100GB SSD 进行营销,并具有 28% 的过度配置。实际上,这 28% 是内置 7.37% 的补充,因此最好了解供应商如何使用这些术语。用户还应考虑到,正在使用的 SSD 很少完全满载。SSD 会利用这种未使用的容量,动态地将其用作额外的过度配置。