Trim命令
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
缺点
这些设备已被列入Linux内核中libata-core.c的黑名单,从而强制发送非排队的TRIM命令到这些设备,而 不是排队的TRIM命令:
此文件也已将SuperSSpeed S238列入常规TRIM的黑名单,因为发出TRIM会导致错误的块丢失数据。
libata-core.c还有一个列出子系统维护者已确认正确实现DRAT和RZAT标志(flags)的SSD,这不同于许多 忽略它们的驱动器。白名单中的设备如下:
各LBA范围被称为一个LBA范围条目,并由八个字节表示。 LBA由LBA范围条目的前6个字节表示,范围长度是 由剩下两个字节表示的一个从零开始的计数器。如果两个字节组成的范围长度为零,那么LBA范围条目应视作填 充而丢弃。这意味着以512字节为TRIM块范围支持的设备,该最大值为64个32 MB,也就是2 GB。如果设备在S高 技术配置字105处设为8,则它应该能在单个TRIM(数据集管理)命令中修整16GB。
截至2017年1月,大多数基于硬件的RAID技术未实现TRIM命令的支持。但是,软件实现的RAID通常提供了 TRIM支持。
Windows: Windows 10为SSD RAID卷在配置一个RAID卷时通过“优化驱动器”选项提供了TRIM支持。 Mac OS: macOS RAID驱动程序不支持TRIM。自Mac OS X 10.7至macOS 10.12.x的所有版本均是如此。 对于使用第三方SoftRAID®应用程序的RAID(0,1,4,5和10)卷支持TRIM,包括使用非苹果品牌SSD设备的 TRIM支持。 (注:非苹果品牌的SSD设备必须使用终端命令“sudo trimforce enable”来启动TRIM) Linux: 2011年1月以后的Linux内核中dmraid的发布版本已实现BIOS辅助的“假硬件RAID”支持,并且通行来自 RAID阵列上的文件系统的任何TRIM请求。
在使用不支持自动TRIM的文件系统时,某些实用工具可以手动发送Trim命令。通常它们将确定哪些块为空闲, 然后将该列表以一系列的Trim命令传递给驱动器。这些实用程序可从各制造商(例如Intel、G.Skill)或作为一 般实用程序(例如Linux的hdparm自v9.17起,或者如上所述的mdtrim)。
谢谢观看
小型计算机系统接口(SCSI,SmallComputerSystemInterface)是一种用于计算机及其周边设备之间(硬 盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准。SCSI标准定义命令、通信协议以及实体的 电气特性(换成OSI的说法,就是占据物理层、链接层、套接层、应用层),最大部分的应用是在存储设备上 (例如硬盘、磁带机);但,其实SCSI可以连接的设备包括有扫描仪、光学设备(像CD、DVD)、打印机……等 等,SCSI命令中有条列出支持的设备SCSI周边设备。理论上,SCSI不可能连接所有的设备,所以有“1Fh unknown or no device type”这个参数存在。
闪存磁盘驱动器特有的问题
因为许多文件系统以标记数据块为“未使用”来处理删除操作,存储介质(传统硬盘、SSD)通常不知道哪 个扇区/页是真在使用,哪些可被认作空闲空间。因此与重写操作不同,删除将不涉及对数据所在扇区的物理写入。 由于通用SSD不了解文件系统结构(例如未使用的块/扇区的列表),存储介质无法获知哪些块已经变为可用。这 使反删除工具能从传统的机械硬盘上恢复文件,因为尽管操作系统报告文件已被“删除”,文件所在的扇区只是 在操作系统之后进行写入时作为空闲空间的扇区,从而有效使操作变得像重写操作。对于机械磁盘来说,这与写 入空扇区没有区别,但因为SSD最底层的一些特性,与将数据写入空页面相比,重写会有显着的开销,从而潜在 地削弱写入性能。
硬件支持
SCSI
高技术配置
SD/MMC
TRIM命令规范已被标准化为AT Attachment接口标准的一部分,由国际信息技术标准委员会(INCITS)的技 术委员会T13所领导。TRIM根据D高技术配置 SET MANAGEMENT(数据集管理)命令(操作码06h)实现,ACS-2规 范草案。高技术配置标准被并行(IDE、P高技术配置)和串口(S高技术配置)高技术配置硬件所支持。
SATA(Serial ATA)于2002年推出后,原有的ATA改名为PATA(并行ATA配置,Parallel ATA)。2013年12 月29日,西部数据正式停止PATA硬盘供应,而希捷科技则已停售产多年,这意味着1986年设计的PATA接口在经历 27年后正式退出历史舞台。
小型计算机系统接口
操作
TRIM命令使操作系统得以通知SSD哪个页不再包含有效的数据。对于文件删除操作,操作系统会将文件删除 标记为可用于新数据,然后向SSD发送TRIM命令。在Trim后,在新的数据写入闪存页面时,SSD不保留块的任何内 容,从而实现更少的写入放大(更少的写入)、更高的写入吞吐量(不需要读取、擦除、修改),从而增加驱动 器寿命。
原版高技术配置 TRIM命令的缺点是它被定义为不可排队命令,因此不能轻松地与正常的、排队的读和写操 作混合。S高技术配置 3.1引入了一个排队的TRIM命令来纠正这一点。
高技术配置 IDENTIFY DEVICE命令返回的S高技术配置 Words 69和169定义了不同类型的TRIM。
在S高技术配置字105中有额外信息,描述驱动器可以在每个数据集管理命令(D高技术配置 SET MANAGEMENT)支持最多多少个512字节的数据块。通常此值默认为8(或4kB),但许多驱动器将其减少到1,以 满足微软Windows硬件要求对TRIM的部分——该命令完成时间不应超过20 ms或者8 ms × (LBA范围项的数量), 且两者中的较大者应始终小于600 ms。
SSD在闪存单元中通常以4至16kB的分组来存储数据,并将分组组合成128至512页的块。例如,512kB以4kB 为一页存储在128页的块中。NAND闪存单元只能在处于空状态时写入。如果它们可能包含数据,则执行写操作前 必须擦除其内容。一次SSD写入操作可以只完成单个页,但由于硬件限制,擦除命令始终会影响整个块;因此将 数据写入到SSD上的空页非常快,而写入存在数据的页就会显著变慢。由于页被再次写入前需要擦除单元,但擦 除只能对整个块,改写将按“读取、擦除、修改、写入”的方式完成;整个块的内容会先存储在缓存中,然后在 SSD中擦除整个块,再将改写的页写入到缓存的块,最后再将更新的块写入闪存介质。这种现象也称写入放大。
不同的SSD实现的命令有所不同,因此性能可能也有所差异。
Trim为不可逆地擦除数据,无法恢复;这不同于机械硬盘中被删除的数据可能被数据恢复。
实现
RAID问题
操作系统支持
为不支持的操作系 统使用
Trim仅在支持它的操作系统上有效。下表列出了各个重要的操作系统支持该命令的首个版本。此外,在TRIM 命令添加到高技术配置标准之前设计的旧款固态驱动器需要更新固件(如果有)才能支持Trim,否则将忽略这个 新命令。
ATA配置
ATA(英语:Advanced Technology Attachment,简称“ATA”)与由集成驱动电子设备(英语: Integrated Drive Electronics,简称IDE)技术实现的磁盘驱动器关系最密切。
IDE是一种计算机系统接口,主要用于硬盘和CD-ROM,本意为“把控制器与盘体集成在一起的硬盘”。数年 以前PC主机使用的硬盘,大多数都是IDE兼容的,只需用一根电缆将它们与主板或适配器连起来就可以了,而主 要接口为SATA接口。而在SATA技术日益发展下,没有ATA的主板已经出现,而且Intel在新型的芯片组中已经不默 认支持ATA接口,主机版厂商需要另加芯片去对ATA作出支持(通常是为了兼容旧有硬盘和光盘驱动器)。
Trim在SSD被推出后很快被跟着推出。因为SSD的底层操作与硬盘驱动器显著不同,操作系统处理诸如删除和 格式化等操作的典型方式将导致SSD上的写操作不可预期的逐步性能退化。Trim(意为修整、修剪、裁剪)使SSD 能更有效地处理垃圾收集,否则将减慢在未来对所涉及块的写入操作。
尽管在引入Trim前已有将某些驱动器“重置”为新状态的工具,但它们也将删除该驱动器上的所有数据,从 而使这些工具和技术不能用于持续性优化。在2014年,许多SSD有内部的后台垃圾收集机制,它们与修整工作相 独立。尽管这在不支持修整的操作系统上也成功地保持了性能,它存在增加写入放大和闪存单元磨损的相关缺点。
SCSI提供了UNMAP命令(TRIM的完全模拟),以及带有UNMAP标志集的WRITE SAME命令(10和16个变量)。
多媒体存储卡和SDERASE(CMD38)命令提供了与高技术配置 TRIM命令类似的功能,但它要求擦除的块用0 或1重写。eMMC 4.5进一步定义了一个“discard”(丢弃)子操作,从而更紧密的配合高技术配置 TRIM,因为 丢弃的块的内容可以被认为是不确定的(即“不在乎”的)。
Trim命令
计算机术语
目录
01 闪存磁盘驱动器特有 的问题
03 实现
02 操作 04 硬件支持
目录
05 缺点
07 小型计算机系命令集中称为TRIM,SCSI命令集中称为UNMAP),它使操作系统能通知固态硬盘(SSD)哪些 数据块已不再考虑使用,可以被内部擦除。