详解SSD之垃圾回收GC

简介: 当在操作系统(例如 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指令的支持。即操作系统通知固态硬盘特定文件已删除,这样固态硬盘能够更好地管理 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.



相关文章
|
8月前
|
算法 Java
JVM GC和常见垃圾回收算法
JVM GC和常见垃圾回收算法
92 0
|
8月前
|
Java Go
Golang底层原理剖析之垃圾回收GC(二)
Golang底层原理剖析之垃圾回收GC(二)
125 0
|
8天前
|
算法 网络协议 Java
【JVM】——GC垃圾回收机制(图解通俗易懂)
GC垃圾回收,标识出垃圾(计数机制、可达性分析)内存释放机制(标记清除、复制算法、标记整理、分代回收)
|
3月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
105 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
4月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
3月前
|
存储 Java PHP
【JVM】垃圾回收机制(GC)之引用计数和可达性分析
【JVM】垃圾回收机制(GC)之引用计数和可达性分析
85 0
|
4月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制(GC)
本文将探讨Java的自动内存管理核心——垃圾回收机制。通过详细解析标记-清除算法、复制算法和标记-整理算法等常用垃圾回收算法,以及CMS、G1等常见垃圾回收器,帮助读者更好地理解Java应用的性能优化和内存管理。同时,探讨分代收集、分区收集等策略在实际项目中的应用。结语部分总结了垃圾回收机制在Java开发中的重要性,并展望了未来可能的发展。
93 0
|
5月前
|
缓存 监控 Java
"Java垃圾回收太耗时?阿里HBase GC优化秘籍大公开,让你的应用性能飙升90%!"
【8月更文挑战第17天】阿里巴巴在HBase实践中成功将Java垃圾回收(GC)时间降低90%。通过选用G1垃圾回收器、精细调整JVM参数(如设置堆大小、目标停顿时间等)、优化代码减少内存分配(如使用对象池和缓存),并利用监控工具分析GC行为,有效缓解了高并发大数据场景下的性能瓶颈,极大提升了系统运行效率。
114 4
|
5月前
|
算法 Java 应用服务中间件
探索JVM垃圾回收算法:选择适合你应用的最佳GC策略
探索JVM垃圾回收算法:选择适合你应用的最佳GC策略
|
6月前
|
监控 算法 Java
Java面试题:如何在Java中触发一次Full GC?请详细解释垃圾回收机制和知识
Java面试题:如何在Java中触发一次Full GC?请详细解释垃圾回收机制和知识
424 4