在不特别较真的情况下,删除通知就是trim的另外一种文字表达方式。
其实删除通知这个名字,更能形象地表达,trim到底是做什么用的——只是通知一个LBA范围内的数据无效(删除)了,该怎么办你(SSD)自己看着办。
因此,删除通知是一个主机指令——不论你(SSD)是否能听得懂,我(主机)都会说。
到了听众(SSD)这边
如果根本听不懂,就是不支持trim,或者说是不接收trim command。
而听懂了以后要怎么做,就多种多样了,比如是立即执行(non-queued)、排队执行(queued),还是反馈全零(RZAT)、反馈特定数(DRAT, no-RZAT)、随便反馈你个啥(no-DRAT)。
主机在面对不同设备时,删除通知有不同的表达方式(指令集)
ATA——TRIM
SCSI——UNMAP
NVMe——Deallocate
结论就是
①
在Windows系统里面fsutil behavior query disabledeletenotify,返回给你的是主机(操作系统)是否会发删除通知,而不是SSD会不会接收。
只要不手动改,这个值就应该是0(已禁用)。
看不懂为什么是0的都是语死早。
②
早年我讲IDENTIFY_DEVICE的时候就说过,一个功能是区分“支持”和“启用”的。
http://bbs.pceva.com.cn/thread-97913-1-1.html
对trim来说,支持不支持在于SSD本身,启用不启用在于主机,但不支持也就没有后面的启用不启用。
都2019年了,还有人在纠结支不支持trim这件事,但似乎没人纠结收了trim以后怎么办这回事,明明后面这更重要。
支持但做不好会怎么样,严重卡顿(鞭尸OCZ V180和SF全家),丢数据(我黑三丧和美光又不是一天两天了)。
这四件事都知道的,应该已经脱离trim这种低级纠结了。
一劳永逸的方法就是直接禁用删除通知,对,改成1。
③
严格来说trim只是给ATA设备的删除通知,只是被叫习惯了。
所以要抬杠的话,当然可以说NVMe SSD不支持trim。
④
要不要支持trim无非就是能不能和值不值的问题。
当然,要理解能不能和值不值,首先得理解trim的目的是什么,这个我不罗嗦了(如果trim目的都不知道,就开始纠结,我觉得也没啥可谈的)。
能不能就是能否做得到,迄今所有的真·U盘和上古时代的SSD(X25-E和更老的)不支持trim就是做不到,毕竟支持trim command和后续动作是比被动GC更复杂的逻辑。
值不值就是有没有必要,3DXP介质的SSD不支持trim就是没必要,因为介质不需要做擦除操作当然就不需要GC,也就不需要trim去解决GC的问题。
但记住,删除通知并不等于trim,删除通知的本意是释放一定LBA范围内的空间并使之可用,我们所熟悉的trim过程只是更加关注如何使之可用。
完。
|