专栏首页女程序员的日常SSD固态硬盘的GC与Trim

SSD固态硬盘的GC与Trim

操作系统:其实并没有删除数据;

 事实上,它只是在硬盘前的索引区里标记这块文件占用的区域为无效的,

 所以等该区域被擦除后,下次数据将要再次写入的时候,可以写入这块被标记的区域。

 这也就是为啥那 些所谓的文件恢复软件能恢复的道理。(数据依然存在)。

固态硬盘:在固态硬盘闪存内,数据存储一般是以page(页)为最小单位存储的(典型的为4KB),而128个page组成了一个block(块),

数据以页(page)为单位来读取和写入,但却只能以块(Block)为单位来删除。

 当读取数据或者写入到一个没有被使用过的page上时,固态硬盘的速度是很快的,

 但是在无效数据区上的话,就比较复杂了,需要许多步骤来完成。

*注意:硬盘本身是不知道当前数据的状态的,他只是被控制着做这做那。

 上面这一套在普通的机械硬盘上工作起来非常完美,因为他们可以直接覆写旧的区域,

 但是当用到NAND闪存上就行不通了,当全部闪存被写满一遍后,没有空余 (从未写过)的块可以被使用的情况下,速度就下来了。

GC:要覆写(这里指在无效数据区域写)一个4KB 页的文件系统,首先要把整个512KB 块复制进缓存里。

 然后,在缓存里删除这个4KB页,替换成新的数据。

 接下来,清空整个闪存内的这个512KB区域,并从缓存里把新的数据写回去。

Trim:SSD一样会复制整个包含删除数据的块到缓存,清空块并写入有效数据的页回去,

区别是这样等于把这个延迟时间从覆写数据的那个时间提前到了删除数据的时候

简而言之,这个问题是因为操作系统和文件系统不能和SSD的主控进行删除文件的交流造成的,

 如果有之前没清除干净的数据,所有写入的页的操作都要先清除块再改写,将严重影响写入速度。

 有2种途径来修复这个问题:

第一个:定期运行垃圾回收程序(GC)

 这个操作有点像整理,在SSD空闲时,全盘扫描有效的页并合并整理起来变为一个包含全部有效页的块,而那些无效的页和块都将被完全的清除。

第二个:更好的途径就是当数据删除时候让系统告诉SSD数据没了,让SSD立即擦掉那些数据占用的块,这就是Trim命令做的事。

 当一个文件在支持Trim的系统里被删除后,操作系统会发个命令给SSD,

 让他知道这个数据所在的这个page可以直接被写入,

 等于把控制权从操作系统变 为了SSD主控制器固件。

总结:Trim保证速度不下跌的真正秘密是: 把将来要做的事提前做掉了, 但是这件事迟早要做,所以基本不会影响SSD原有的写入次数(寿命)。

Trim的三要素:

  1. 系统: Win7, 2008R2 , Linux核心2.6.28以上。

  2. 固件: SSD的厂商在固件里要放有Trim算法。

  3. 驱动: MS的驱动,Intel的AHCI驱动目前支持。 别的要看之后的更新了。

以上3点缺一不可。

RAID阵列里的盘明确不支持TRIM,不过RAID可以支持GC。

参考:http://blog.csdn.net/dayancn/article/details/52054664

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 51单片机学习1

    一、单片机发展 单片机由单板机发展而来 单板机: 将CPU芯片、存储芯片、 I/O接口芯片和简单的I/O设备(小键盘、LED显示器)等装配在一块印刷电路板上,再...

    Christal_R
  • 全面理解SSD和NAND Flash

      Flash Memory又叫做闪存,是一种非易失性存储器。非易失性是指断电之后数据不会丢失,这里就涉及到断电保护(后面详细讲解)。 总体思路 1、前言:HD...

    Christal_R
  • 值类型和引用类型的区别,struct和class的区别

    C#值类型和引用类型 1、简单比较   值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中。   值类型(value type):...

    Christal_R
  • 以大数据之名,变身!——In big data we trust

    先关注一则旧闻11月20日,德国联邦网络局禁止在该国销售儿童智能手表,穿戴设备的麦克风,可让家长听到孩子的环境,涉嫌侵犯他人隐私。另10月,挪威消费者理事会在报...

    企鹅号小编
  • Mongoose 操作数据库实现增、删、改、查

    Mongoose 是在 Node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具,Mongoose 是 NodeJS 的驱动,为NodeJS独有...

    越陌度阡
  • 数据分析案例:用数据研究房地产,买到理想的房源

    买房,可以说是很多人一辈子最大的投资,几百万的代价那得慎之又慎,否则买到烂尾的、有质量问题、设施问题的房子那就实在不值了。另外,现在的市场房子楼盘还是很多的,房...

    沉默的白面书生
  • Spark Shuffle在网易的优化

    Spark是目前主流的大数据计算引擎,而Shuffle操作是Spark计算中的的核心操作,也往往是瓶颈所在。首先简单介绍下Shuffle操作。如下图所示.

    大数据技术与架构
  • 拉链表

    4.3.1.8.1.1 拉链表回顾 拉链表就是之前我们讲过的SCD2,它的优点是即满足了反应数据的历史状态,又能在最大程度上节省存储。 拉链表的实现需要在原...

    ChinaManor
  • 用数据全面解读新型冠状病毒疫情趋势

    花了一天的时间做了个浙江省疫情的数据分析仪表盘,我们就根据这个数据仪表盘来对浙江的疫情做个大概的解读。

    王佩军
  • Javascript数组操作

    使用JS也算有段时日,然对于数组的使用,总局限于很初级水平,且每每使用总要查下API,或者写个小Demo测试下才算放心,一来二去,浪费不少时间;思虑下,堪能如此...

    晚晴幽草轩轩主

扫码关注云+社区

领取腾讯云代金券