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
SSD固态硬盘的GC与Trim的更多相关文章
- [转帖]ssd固态硬盘的Trim命令是什么?
ssd固态硬盘的Trim命令是什么? 收藏 分享 邀请 许多用户朋友在购买SSD的时候都会特别强调Trim,不过Trim是什么?做什么用的? 什么是Trim? Trim指令也叫disable ...
- SSD 固态硬盘,Trim指令 ,查看状态、开启、关闭
一说到SSD 固态硬盘,经常会看到Trim指令这个名词,那什么是Trim? Trim是什么? 为了解决硬盘降速的问题,微软联合各大SSD厂商开发了一个新技术——Trim.Trim指令也叫disab ...
- SSD固态硬盘使用注意事项
SSD固态硬盘的结构和运行方式不同于传统硬盘,在购买以后强烈建议进行一些设置以达到最优的运行效能,延长SSD的使用寿命.以下第一部分是一些可以在网上找到的关于SSD硬盘相关的注意事项,已经介绍很多,这 ...
- 【转】如何使用分区助手完美迁移系统到SSD固态硬盘?
自从SSD固态硬盘出世以来,一直都被持续关注着,SSD的性能优势让无数用户起了将操作系统迁移到SSD的心思,直接后果就是让无数机械硬盘为止黯然退场,很多软件都可以做到系统迁移,然而,被完美迁移的系统却 ...
- 笔记本光驱位置装SSD固态硬盘(亲自试验)
我的笔记本买的早了,2010年的联想Z460,速度有点慢,本来想换台电脑,想想还是算了,没有太大必要.固态硬盘便宜了,于是在原来的光驱位置装了一个256G的SSD固态硬盘,现在的性能能达到刚买来时的1 ...
- 基于SSD固态硬盘的数据库性能优化
基于SSD固态硬盘的数据库性能优化 2010-11-08 00:0051cto佚名 关键字:固态硬盘 数据库管理 SSD 企业软件热点文章 Java内存结构与模型结构分析 Oracle触发器的语法 ...
- 6款实用的硬盘、SSD固态硬盘、U盘、储存卡磁盘性能测试工具
一.检测工具名称汇总 HDTune ATTO Disk Benchmark CrystalDiskMark AS SSD Benchmark Parkdale CrystalDiskInfo 二.各项 ...
- 新买的 SSD 固态硬盘竟然是坏的,我傻了啊!
1. 今天早上上班路上在网上下单了一个 1 T 的 SSD 固态硬盘,晚上 7 点半左右送到手后迫不及待想替换掉原来的机械硬盘,在这个新硬盘上装系统,玩起来. 2. 拆开包装,先用移动硬盘接口检查下新 ...
- 如何把win10系统迁移到SSD固态硬盘
https://jingyan.baidu.com/article/5d368d1ec59ac43f60c05733.html 我之前将两个盘都已经固定在笔记本内,迁移完之后无论怎么改还是从原来的机械 ...
随机推荐
- 铁乐学python_Day40_进程池
进程之间的数据共享 基于消息传递的并发编程是大势所趋, 即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合,通过消息队列交换数据. 这样极大地减少了对使用锁和其他同步手段的需求,还可以扩展到分 ...
- EF CodeFirst示例
新建Web空项目,选择MVC相关基础组件 安装EntityFramework 添加模型和上下文对象 添加包含读写的控制器 点击添加报错 这时需要重新生成项目,然后再试尝试添加控制器,OK 为调试方便, ...
- 在C中调用Matlab (转)
http://blog.163.com/rongting_chen/blog/static/164906844201252354518462/ http://www.ilovematlab.cn/th ...
- 反射工具类.提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,被AOP过的真实类等工具函数.java
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; import org.ap ...
- 【教程】【FLEX】#005 拖动
在Flex中,组件的拖动分为: 1. 加强型(即本身就可以拖动设置是否可以拖动的属 [dragEnabled ,dropEnabled ] 即可) 2. 非加强型(可以通过DragManager,Dr ...
- 20165318 2017-2018-2 《Java程序设计》第三周学习总结
20165318 2017-2018-2 <Java程序设计>第三周学习总结 学习总结 我感觉从这一章开始,新的知识点扑面而来,很多定义都是之前没有接触过的,看书的时候难免有些晦涩.但由于 ...
- Java基础加强之反射
1.什么是反射? 反射其实就是动态的加载类,我们在写JDBC的时候加载驱动Class.forName("xxx")时就涉及到了反射. 反射机制是在运行状态中,对于任意一个类,都能够 ...
- Jenkins + GitLab 通过 Webhook 自动触发构建爬坑记录
前言 在局域网搭建了一个Jenkins服务,用于自动构建和发布,在调通了构建程序之后,想使用内网的GitLab的Webhook功能触发代码推送事件,然后进行自动构建.后来发现在GitLab上做测试 ...
- C++矩阵库 Eigen 简介
最近需要用 C++ 做一些数值计算,之前一直采用Matlab 混合编程的方式处理矩阵运算,非常麻烦,直到发现了 Eigen 库,简直相见恨晚,好用哭了. Eigen 是一个基于C++模板的线性代数库, ...
- codewars-7kyu:Sum of the first nth term of Series
Task: Your task is to write a function which returns the sum of following series upto nth term(param ...