经常看到但是不懂?什么是固态硬盘的TRIM?
在各种固态硬盘的检测软件打开的时候,大家经常会看到一个词:TRIM。那么,这个TRIM对固态硬盘来说是什么意思呢?什么是SSD的TRIM?
你有没有注意到,当你进入Windows10的磁盘优化时,显示的已经是“XXX正在被修剪”,,而不是过去机械硬盘的整理碎片了。
这个“修剪”,就是所谓的SSD TRIM的直译。SSD修剪是一个过程,有助于随着时间的推移继续保持固态硬盘的性能。Trim的工作原理是定期擦除不再使用的数据块。TRIM后的数据并不总是直接删除,因为需要一个复杂的过程来确定何时删除。而定期TRMI,不仅可以释放硬盘空间,还可以帮助SSD性能更好,寿命更长。
简单,是吗?然而,实际发生的事情要复杂得多——请继续阅读以了解!
至于其中的原理,我们就慢慢讲来。
根源在于固态硬盘的工作原理
要理解为什么SSD在你按下按钮时不会删除文件,我们需要快速了解一下它们的工作原理。
下图是一个比较老的SATA SSD拆开外壳后的样子,但即使是最新的M.2接口的NVME固态硬盘(再下图),在组成的组件方面也没有太大的不同。
左边的controller就是主控芯片,是一个管理所有指令、数据流、加密和其他算法的处理器。它上面是少量的DRAM缓存(低端的SSD没有),作为一个指令和数据缓存,并在驱动器上存储了一个数据位置表。
右边的两排芯片,就是NAND颗粒了。这些是存储所有数据的芯片。
在这些芯片的深处有数十亿个微小元件,称为“电荷捕获浮栅金属氧化物半导体场效应晶体管”。由于这个名字又长又难念,所以通常被称为电荷陷阱闪存(CTF),是当今SSD中最常用的存储数据的最小单元。
每个CTF作为一个单独的存储单元,被称为存储器或位单元,有三条电通路(字符选择行,字行,接地选择行)连接到它。CTF被分组在一起,首先作为一个长列(字符串,下图中的string),包含32到128个单元格。
字符串(图中的string)中的单元格共享一个共同的轨迹(比特位行,图中的bit line),用于读取存储在其中的数据。那些彼此在同一行(图中的page部分,称为“页”)上的都连接到另一个共同轨迹 (图中的word line,字行)。字符串选择行(string select line)部分和地线选择行(Ground select line)与字行一起使用,以确定是否进行读、写或擦除处理。
由字符串string和页page组成的数组,构成了所谓的块(block)。页和块的大小差异很大,前者小到4 kB,后者大到512 kB,这在很大程度上取决于NAND颗粒的制造商和型号。
而一个NAND闪存颗粒芯片将包含数千个块,而SSD本身可能包含多个NAND芯片。这些庞大而复杂的栅格轨迹和晶体管构成了每一个SSD。
当然,从原理上讲,优盘也是这样的。
页和块很重要,因为在这种结构中,所有的存储单元都共享相同的衬底——所有晶体管都建立在半导体材料的薄片封装上。
而SSD的NAND颗粒写入和擦除就出现了很奇怪的现象。
要从任何单元清除数据,需要使用高负电压,迫使存储在CFT中的任何电子流入衬底。
但从电子学的角度来讲,就形成了一个非常奇怪的现象:NAND颗粒写入非常快,因为它们写入时是按“页”为单位进行电子写入。但擦除进程会擦除数据“块”中的每个单元格(也就是该块的每个页和“字符串”),而不是其中一个。
另一个奇怪之处是,在所有存储单元都被擦干净之前,无法用新数据对存储单元进行写入。换句话说,SSD从不像传统硬盘那样直接将新数据覆盖写入旧数据。擦除必须在块这个级别进行,而写入则在页这个级别进行,这意味着对SSD进行写入比擦除要快得多。
而写入和擦除的过程每次都会损坏记忆单元,磨损晶体管内部存储电荷的层。为了提高NAND颗粒的寿命,管理它们的主控芯片,最理想的工作调度,就是循环遍历所有的块,直到每个块都使用过一次(一次写循环),然后再回到开始,重新安排每个单元写入或者擦除。
写得快,擦得慢,任何一种写入删除操作都会损坏自己——这就是NAND有颗粒寿命的原因。
而SLC、MLC、TLC、QLC,实际上就是组成每个单元的“cell”的大小不同,依次递增。所以每次擦写颗粒时,越是3D NAND化程度越高的颗粒,其实每次被擦除的块的尺寸也就越大,颗粒的寿命减少也就更快。这也是为啥以前人们为啥追求SLC和MLC这种低密度颗粒的固态硬盘的原因。
而现在TLC和QLC的普及,就在于现在的主控能够尽量接近最理想的工作调度,避免一切非必要的短期重复存储单元擦写,而是尽量均匀安排所有颗粒中的存储单元擦写负荷均衡,从而提高了SSD的实际使用寿命。
删除与垃圾回收操作:TRIM的意义来了
现在,让我们回过头来了解SSD的TRIM的意义了。
我们举个例子,一个SSD,它有4KB的页和256KB的块的规格,所以每个块有64个页。如果你想删除一个占用SSD上3056KB空间的文件,该怎么办?
该文件将占用764页,其中有11个完整的块,还有一个块被占用64页中的60个页。如何删除这个文件而不影响最后4页的晶体管寿命呢且不误删数据?因为它们可能包含其他文件的数据。
再简化一点,反映在下图,就是ABD页的数据打算删除,而CE页的数据打算保留。
解决这个问题,就以垃圾回收形式出现。被操作系统删除的文件和文件夹会被标记为不再需要,当发出删除命令时,存储在SSD的DRAM缓存(或者NAND颗粒自身的模拟SLC单元,如果SSD是无缓方案的话)中的表会被更新以反映这一点。
当NAND的固件和主控启动垃圾回收过程时,标记为需要清除的数据就会被清除。这涉及读取一个数据块,将需要保留的页复制到缓存中,然后写入一个完全空的数据块。然后删除前一个页以及标记为删除的页。
因此,此时,C和E中的数据会被拷贝到一个新的块里,那个块也会被标注为可继续进行更多写入,然后随着QPR等页面被陆续写入,块也满了,实现了数据块的不浪费写入。
而要删除ABD页的块,此时就被通知可以擦掉了,直接清空整个块。
显然,固态硬盘的垃圾回收机制对SSD的使用寿命及其整体性能都有好处。
而TRIM的意义此时就出现了:让垃圾回收变得更好(有时这两个术语会互换使用)。
这是因为如果没有TRIM,垃圾收集将不断移动所有页,压缩部分填充的块,以保持新擦除的块可用于编程——但这意味着不需要的页也将被移动,浪费时间并增加内存单元的磨损。因为TRIM明显地指出哪些页现在是垃圾,所以可以在垃圾收集期间不去管它们,并根据需要删除它们。
在发送TRIM命令之后,数据不会立即被擦除——它要么在驱动器空闲时在后台进行,要么在下一次向块写入数据时操作。使用哪种方法取决于固件和主控方案。一般来说,消费级固态硬盘方案喜欢在系统空闲时处理擦除,而企业级SSD通常在写入时处理擦除操作。
而消费级SSD“在空闲时进行TRIM”,其实对大多数人来说,就是WIN10里的磁盘优化程序默默地在后台执行“优化”,优化颗粒的存储和擦写可用性和顺序。
在某种程度上,这个过程对于SSD就像磁盘碎片整理传统机械硬盘一样,但它不是同一件事。
TRIM和碎片整理是一样的吗?
SSD的TRIM操作和机械硬盘碎片整理不是一回事。碎片整理是通过重新安排磁盘上的数据,使其以连续的方式存储在同样的扇区和磁道上。这种物理上的连续和相邻的数据放置,就可以减少读取和写入数据所需的磁头移动距离和时间量,提高机械硬盘的效率。
而TRIM用于保持SSD随时间推移的性能。固态硬盘颗粒有有限的写入周期,而在WIN7以前的操作系统里,没有TRIM机制,删除SSD上的数据后,所占用的空间不会立即恢复使用。这也是早期固态硬盘为何“越用越卡”(包括安卓手机的存储),然后土办法就是定期备份数据后执行“快速格式化”的原因。
而在有TRIM机制的操作系统(win7 SP2后和WINN10、WIN11)和现在的SSD固件中,会将该空间标记为“无效”,直到执行TRIM过程才会覆盖该空间。这个过程有助于防止驱动器变得碎片化和变慢。TRIM是由Windows自动发出的,当你永久删除一个文件时(即从回收站中删除它),TRIM命令被添加到一个队列中,并在SSD准备就绪时进行处理——什么时候准备就绪?当系统空闲时,或者你直接选择“优化”SSD时。
不过,这个TRIM队列有一个最大长度,如果它被填满了,其中一些TRIM请求将被丢弃。默认情况下,Windows计划定期重新发出TRIM命令(称之为re-TRIM)。这也是为啥WIN10和以后的系统,默认磁盘管理会将定期“优化”SSD写入到系统的计划任务中去的原因。
因为TRIM可以在垃圾回收机制启动时,指出哪些页现在是垃圾,可以在垃圾收集期间不去管它们,而把需要移动的页放到不用删除的块里,再根据需要删除垃圾页所在的块。
如果你的操作系统或SSD配置不支持TRIM,垃圾收集仍然会进行,但这个过程没有那么有效。旧数据最终会被删除,因为SSD最终会在某个时间点覆盖所有不需要的页。
对于使用Windows 7, TRIM仅支持SATA SSD;对于NVMe SSD,TRIM命令仅在Windows 8、10和11中可用。
另外,用SSD组成RAID系统通常不支持TRIM。
总结:TRIM是ATA(Advanced Technology Attachment)接口的一个指令,当操作系统需要告诉固态硬盘它将删除文件且这些文件页需要可用于新信息时,TRIM会提供此功能。搭配垃圾回收,TRIM会清理并组织固态硬盘,使其更高效并延长其寿命。
页:
[1]