ATA TRIM命令是文件系统用来通知设备哪些逻辑地址不再被占用,可以被设备回收为空闲空间,在ATA命令集中,TRIM命令只是DATAMANAGEMENT SET(DMS)命令的一个子命令,DMS命令是专门用来做设备优化的(The DATA SET MANAGEMENT command provides information for deviceoptimization (e.g., file system information),如图1所示,当DMS的feature属性最低位置1,发送的就是TRIM命令。
TRIM命令的传送过程中,通过入口的方式传递需要告诉设备的LBA地址,比如需要告诉设备第11至18个block可以回收,在DMA的写buffer中共需8个字节,高16bit为len值8, 低48位为LBA起始地址11。 每个入口的长度因为用2个字节16bits表示,然后全0的reserved,所以每个入口最多可以表示65535个blocks,如需单次通知设备更多地址,就会再相应增加一个入口。
图1. DMS命令ATA格式
发送ata_trim命令的代码如下,需要把它放到一个和内核一起