zoukankan      html  css  js  c++  java
  • Trim

    Trim

    参考资料《深入浅出SSD》

    1.概述

    1)是一个指令,即Data Set Management(SATA)or Deallocate(NVME),用于告诉NAND闪存,SSD要擦除哪些数据。

    2)当相关页面的数据可以被覆盖时,操作系统会给SSD发送一个trim指令,SSD控制器等到操作系统执行删除或再次写入时,

       将执行安全擦除操作。

    3)因为在写入过程中不用花时间去擦除原有的数据,所以写入速度会快很多。

    2.作用

    增强SSD的性能,延长SSD的寿命

    3.SSD处理Trim命令的流程

    前提条件:逻辑页0~7的映射,分别写在物理地址PBA a~h

    说明

    1)一般FTL有3个表,

      FTL映射表记录每个LBA对应的物理页位置;

      Valid Page Bit Map(VPBM)记录每个物理块上哪个页有有效数据;

      Valid Page Count(VPC)记录每个物理块上的有效页个数

    2)通常GC会根据VPC进行排序来回收最少有效页的闪存块

    3)VPBM为了在GC时只读有效数据(有的FTL省略这个表)

    4)FTL的映射往往是非常分散的,连续的逻辑页对应地址会在很多不同的闪存块上

    流程

    1)主机向SSD发送Trim命令,删除0~7的逻辑页上的数据,让SSD可以把这些数据当做垃圾来处理

    2)SSD清除L2P table到空地址

    3)清除Valid Page Bit map上对应的bit

    4)重复2,3,4直到完成每一个LBA

    5)根据新的VPC重新 计算GC的优先级

    6)回收最少VPC的block

    7)擦除全是垃圾的block

    4.案例:用户删除文件

    1)操作系统把文件划分为若干个逻辑块,然后写入SSD的闪存空间

    2)当用户删除文件A时,实际上它只是切断了用户与 操作系统的联系,即用户访问不到这些地址空间

    3)但是在SSD内部,逻辑页与物理页的映射关系依然存在,即文件数据依然是有效的,如下图

    4)在没有Trim前,SSD无法知道这些被删除的数据是否无效,必须等到系统要求在相同的地方(用户空间,逻辑空间)写入数据时才知道数据是无效的,进而放心删除

    5)由于SSD不知道这些数据是无效的,在做垃圾回收时,仍把它们当做有效的数据进行数据搬移,这不仅影响性能还影响SSD的寿命(写放大增大)

    6)当用户需要删除一个文件时,操作系统发trim命令给SSD,告诉SSD该文件对应的数据无效了;

       这样SSD在做垃圾回收时,回把这些删除的数据抛弃掉,而不是去做无谓的数据迁移

     

    5.注意

    Trim命令不会触发GC

  • 相关阅读:
    滚动页面时DIV到达顶部时固定在顶部
    【Java学习笔记】拾遗
    【Java学习笔记】文件信息
    【Java学习笔记】使用BufferedReader类(流的读写)
    【Java学习笔记】可变参数
    【Java学习笔记】控制台读写
    【Java学习笔记】关于默认值
    【Java学习笔记】FileChannel的学习
    【JAVA学习笔记】静态导入
    【Java学习笔记】Java中关于tostring方法的误操作
  • 原文地址:https://www.cnblogs.com/marton/p/12638232.html
Copyright © 2011-2022 走看看