SSD 上的 TRIM 和文件碎片

SSD 上的 TRIM 和文件碎片

我跑了TRIM 测试提议者防寒保卫并发现这里。结果 1MB 的文件碎片很多。这是怎么回事?

我唯一的存储设备/dev/sda是三星 500GB SSD。它“支持 TRIM”,内核带有fstrim可执行文件/etc/cron.weekly。尽管如此,出于好奇,我还是想运行测试。测试生成了一个 1MB 的文件 trim.test,其中填充了yalpha 字符。

创建文件后,我检查了文件在磁盘上的确切位置:

> cd /
> yes | sudo dd iflag=fullblock bs=1M count=1 of=trim.test
> sudo filefrag -s -v trim.test

Filesystem type is: ef53
Filesystem cylinder groups approximately 177
File size of trim.test is 1048576 (256 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..      15:    2816076..   2816091:     16:             merged
   1:       16..      31:     170064..    170079:     16:    2816092: merged
   2:       32..      63:     170848..    170879:     32:     170080: merged
   3:       64..     127:     168269..    168332:     64:     170880: merged
   4:      128..     255:     170112..    170239:    128:     168333: merged,eof
trim.test: 5 extents found, perfection would be -1 extent

如果我删除该文件并重复该过程,这种情况就会重复发生。1MB 的文件怎么会碎片化这么严重?

答案1

在仔细研究并阅读有关 TRIM 和碎片问题后,回答我自己的问题可能会对其他人有所帮助。

阅读有关 TRIM 的文章时,经常会提到文件碎片。这两个方面都是有关 SSD 存储性能的合理问题的来源,但这两个问题是截然不同的。

  • 文件碎片一个文件被写入到硬盘或固态硬盘的许多不同的非连续写入区域,使用分布在分区内存储介质上的物理块。在固态硬盘的特定环境中,我们将看到它与 TRIM 的操作甚至与 TRIM 的存储管理级别无关,但它与磨损均衡(WL)是 SSD 中始终存在的另一种低级存储介质管理过程(与 TRIM 不同)。SSD 中的内部数据管理与 HDD 的根本区别在于,它将扇区分配给非易失性闪存单元(即 SSD 的单元)及其相应的块(闪存块)。它对文件碎片有直接影响。
  • 修剪在 SSD 上为新写入操作 (Wops) 准备至少一次写入的物理块,从而避免在 Wop 发生之前立即擦除目标块(在没有 TRIM 的设置中就是这种情况)。为此,SSD 必须具有 TRIM 就绪的硬件控制器。情况并非总是如此。在使用的第一阶段之后(即当 SSD 仍然相对较新并且其所有块尚未至少写入一次时),Wops 会减慢速度,直到达到速度稳定期。在此阶段,经验法则是,与未启用 TRIM 的相同硬件相比,TRIM 将 TRIM 就绪 SSD 上的写入时间大约减半。

在 Wops 期间,SSD 的行为与 HDD 截然不同。HDD 永远不需要在 Wop 之前擦除块。SSD 总是需要,而且这很耗时。TRIM 有助于减少时间消耗,方法是预先处理支持 TRIM 的 SSD 上最近释放的块,本质上是通过预先擦除在文件被修改并移动到卷的不同区域后释放的块。这是对现实的简化视图,但非专家用户可以大致依靠它来开始做出有关硬件和低级硬件管理的决策。请继续阅读...

TRIM 和 SSD 的碎片有关吗?
- 简短回答:不,它们没有关系。
- 详细回答:碎片化与磨损均衡 (WL) 有关,但其他优化 SSD 使用寿命的过程。WL 对于使整个 SSD 的卷/分区内的空闲/可用/未保留块空间中的 Wop 均匀化至关重要。这样做是因为每个 Wop 都会通过在半导体层的一小块区域上施加相对较大的电压,使相应的 SSD 单元老化,从而缩短其使用寿命。(我相信,这与 SSD 主体中引入的热致缺陷有关,但这不是主题。)

如果在 SSD 上像在 HDD 上一样管理 Wop,存储介质的某些区域会比其他区域更早磨损,从而导致无法操作的块、容量损失、数据丢失和错误。WL 实际上可确保任何给定 SSD 分区中的所有块都受到相同数量的 Wop 的影响,并且磨损在整个 SSD 的可用分区空间中“均衡”。从这个意义上说,它有效地延长了 SSD 的使用寿命,同时保持其全部容量直至其报废。

WL 模式有两种:静态和动态。维基百科(德语)指定与关闭 WL 的相同硬件相比,SSD 使用寿命结束时的写入周期数(静态 WL)可能增加 100 倍,动态 WL 可能增加 25 倍。

由于 WL 会尽可能均匀地将 Wops(定义 SSD 寿命的限制参数)物理分布在分区内的整个 SSD 存储空间中,因此不可避免地会导致数据碎片化。这样做是为了实现其主要目标,即优化写入块在任何给定 SSD 分区中的分布。值得注意的是,存储在 SSD 上的任何文件可能比传统 HDD 上的碎片化程度要高得多。然而,碎片化并不会造成 SSD 性能下降。

WL 的运作方式还有其他推论:SSD 容量越大,在给定的使用条件下,其使用寿命越长。对于用户来说,“使用条件”主要指:
- SSD 分区上的已用空间量和
- Wop 的频率,即存储介质的写入访问量。
这实际上可能有利于:
- 将 lx swap、/home、/tmp 和 /var 放在 HDD 上,而操作系统的其余部分可以愉快地运行在较小的 SSD 上。-
不要将 SSD 上任何包含大量 Wop 的分区弄得太小。例如,如果交换必须在 SSD 上,并且您读到 lx-swap 最好设置为 DRAM 大小的两倍,请将其设置为 4 倍。我不知道我的算术是否正确,但一般的想法是,这也将或多或少地使您的交换空间寿命翻倍。如果您进行了大量需要交换的操作(具有大量使用 DB 的服务器等),请考虑将交换和 /tmp 移动到 HDD 上,当然,除非您喜欢将燃气燃烧器带到 SSD 上的想法。

同时,TRIM 为任何即将到来的新 Wop 准备 SSD 的块。它通过擦除这些单元(实际上操作发生在块级别)并开始为新 Wop 预处理曾经写入的单元垃圾收集在需要时。从这个意义上讲,TRIM 会密切关注新释放的(至少使用过一次的)块的分布图,因为它们由 WL 控制器进行低级管理。

结论

  • 碎片化并不重要。碎片化不会损害 SSD 的性能。SSD 不需要(参见英特尔关于固态硬盘 (SSD) 的演讲) 也不会从碎片整理中获益。无论您的操作系统是什么,请关闭碎片整理。现在。
  • TRIM 非常重要且有益,前提是 SSD 已准备好支持 TRIM。如今,少数品牌提供支持 TRIM 的 SSD。如果您从一开始就阅读了此主题,那么您至少会知道其中一个知名品牌的名称。几年前,ext2 被认为是比 ext3 更好的选择,因为在使用第一代 SSD 时,日志记录实际上违背了 TRIM 带来的一些好处。现在情况已不再如此,ext4 实际上建议使用 TRIM + 垃圾收集。

嗨嗨。

相关内容