详解SSD之垃圾回收GC
来源:互联网 发布:曲婉婷jar of love知乎 编辑:程序博客网 时间:2024/06/08 07:03
当在操作系统(例如 Windows)中删除文件时,操作系统只是在其内部文件表中做标记表示该文件已删除。由于NAND 闪存设备不能覆盖现有数据,所以在固态硬盘SSD上,当前无效的数据仍然保留在硬盘上。
这样的话就会产生大量的失效数据,也称为数据垃圾。为了提升SSD的利用效率,这时候就该“垃圾回收”(Garbage Collection, 下文全部简称GC)出手了。
那什么是GC呢?别着急,听在下细细道来~~~
GC过程简单来讲就是:
固态硬盘控制器会先复制所有有效数据(仍在使用中的数据)并将其写入不同数据区的空白页、擦除当前数据区中的所有数据单元,然后开始将新数据写入刚刚擦除过的数据区。
冬天到了,我举个栗子(如下图):1. 假设SSD中有两个空的(erased)的Block X和Block Y, 每个Block有12个Pages;
2. 首先在Block X中写入4个Pages(A, B, C, D);
3. 接着再向Block X中写入新的4个pages(E, F, G, H), 同时写入PageA-D的更新数据(A', B', C', D'), 这是PageA-D变为失效数据(invalid);
4. 为了向PageA-D的位置写入数据,需要将E, F, G, H, A', B', C', D' 8个pages先搬到Block Y中, 之后再把Block X erase掉,这个过程就为GC。
在更新的操作系统中,例如Windows 7/Windows Server 2008 R2/Linux 2.6.33/FreeBSD 8.2/Open Solaris/Mac OS X Lion,它们都加入对Trim指令的支持(关于Trim, 详见本公众号历史文章“SSD为什么需要Trim?”)。即操作系统通知固态硬盘特定文件已删除,这样固态硬盘能够更好地管理 GC 过程以便恢复之前的空间,并防止保存和移动所有无效数据。
通过上面的介绍,想必聪明的你应该就知道GC是怎么回事咯。
不过,由于GC的过程增加了数据的读写过程,势必会对SSD的performance的产生一定的影响,所以GC发生的条件与触发点很关键。
GC触发条件大致有3点:
1. Spare Block太少,
2. Wear leveling,
3. 处理ECC错误Block,
GC触发情形主要有两种:
1. Idle clean. 在状态处于Idle时,SSD会启动Background Clean, 也称为Idle clean, 这样可以不影响SSD正常工作时的performance;
这样的话就会产生大量的失效数据,也称为数据垃圾。为了提升SSD的利用效率,这时候就该“垃圾回收”(Garbage Collection, 下文全部简称GC)出手了。
那什么是GC呢?别着急,听在下细细道来~~~
GC过程简单来讲就是:
固态硬盘控制器会先复制所有有效数据(仍在使用中的数据)并将其写入不同数据区的空白页、擦除当前数据区中的所有数据单元,然后开始将新数据写入刚刚擦除过的数据区。
冬天到了,我举个栗子(如下图):1. 假设SSD中有两个空的(erased)的Block X和Block Y, 每个Block有12个Pages;
2. 首先在Block X中写入4个Pages(A, B, C, D);
3. 接着再向Block X中写入新的4个pages(E, F, G, H), 同时写入PageA-D的更新数据(A', B', C', D'), 这是PageA-D变为失效数据(invalid);
4. 为了向PageA-D的位置写入数据,需要将E, F, G, H, A', B', C', D' 8个pages先搬到Block Y中, 之后再把Block X erase掉,这个过程就为GC。
在更新的操作系统中,例如Windows 7/Windows Server 2008 R2/Linux 2.6.33/FreeBSD 8.2/Open Solaris/Mac OS X Lion,它们都加入对Trim指令的支持(关于Trim, 详见本公众号历史文章“SSD为什么需要Trim?”)。即操作系统通知固态硬盘特定文件已删除,这样固态硬盘能够更好地管理 GC 过程以便恢复之前的空间,并防止保存和移动所有无效数据。
通过上面的介绍,想必聪明的你应该就知道GC是怎么回事咯。
不过,由于GC的过程增加了数据的读写过程,势必会对SSD的performance的产生一定的影响,所以GC发生的条件与触发点很关键。
GC触发条件大致有3点:
1. Spare Block太少,
2. Wear leveling,
3. 处理ECC错误Block,
GC触发情形主要有两种:
1. Idle clean. 在状态处于Idle时,SSD会启动Background Clean, 也称为Idle clean, 这样可以不影响SSD正常工作时的performance;
2. Write flow clean. write过程中,在将write推入write FIFO之前,判断是否要做clean.
更多精彩内容,敬请关注微信公众号: 存储随笔,Memory-logger.
阅读全文
0 0
- 详解SSD之垃圾回收GC
- SSD 之GC垃圾回收机制
- SSD 之GC垃圾回收机制
- Android GC 垃圾回收详解
- java gc(垃圾回收系统)详解
- C#.Net 垃圾回收机制GC详解
- JVM GC垃圾回收参数详解(转)
- JVM GC垃圾回收器详解
- Java垃圾回收(GC)机制详解
- Java垃圾回收机制(GC)详解
- Java垃圾回收机制(GC)详解
- C#.Net 垃圾回收机制GC详解
- Java垃圾回收机制(GC)详解
- JVM GC垃圾回收器详解
- 再论C++之垃圾回收(GC)
- 再论C++之垃圾回收(GC)
- 再论C++之垃圾回收(GC)
- 再论C++之垃圾回收(GC)
- 为什么Python中没有Switch/Case语句?
- 替换空格
- java 7 中 接口 的用法
- Java上传图片到OSS
- 230. Kth Smallest Element in a BST
- 详解SSD之垃圾回收GC
- 关于kettle初始化的那点事
- 17.5.28C组总结
- Springboot状态码总结
- spring事件机制_http://enjiex.iteye.com/blog/1070094
- iptables简单应用
- 【剑指offer】面试题 24:反转链表
- 类实现输出最高成绩
- 游戏开发中的人工智能(四):群聚