深入解析SSD中MLC与SLC的性能差异

2024-02-21 14:32

本文主要是介绍深入解析SSD中MLC与SLC的性能差异,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

from: http://blog.sina.com.cn/s/blog_502c8cc40100pztk.html

 

     固态硬盘( Solid State Disk Solid State Drive ),也称作电子硬盘或者固态电子盘,是由控制单元和固态存储单元( DRAM FLASH 芯片)组成的硬盘。    

  固态硬盘的接口规范和定义、功能及使用方法上与普通硬盘的相同,在产品外形和尺寸上也与普通硬盘一致。由于固态硬盘没有普通硬盘的旋转介质,因而抗震性极佳。其芯片的工作温度范围很宽( -40~85 摄氏度)。目前广泛应用于军事、车载、工控、视频监控、网络监控、网络终端、电力、医疗、航空等、导航设备等领域。  

  本文将详细解析 SSD 固态硬盘的工作原理,并解析 SLC MLC 两种不同的固态硬盘在性能和安全性上的差异。  

   SSD 工作原理  

  下面是一个关于 NAND 闪盘的原理塔图。从下图我们可以看到,每一个 单元 就是由一个这样的晶体管组成的。  

深入解析SSD中MLC与SLC的性能差异

在单级单元( SLC )闪存设备中,一个晶体管可容纳 1- 比特数据。您通过电子通道将数据写入单元;将足够高的电压加于两端,创造一个足够强大的电场,电子将穿透氧化物进入浮动门。消除电压,电子将继续停留在浮动门。将电压穿越通道而不施加到门上,扭转偏压,电子将向另一个方向移动。  

  简单的说,这就是闪盘的工作原理 - 你有两种状态, 0 1 ,即使单元没有电了,状态也会维持住,因此对存储设备来说是非常理想的。  

  编程闪存是一个反复的过程。该控制器将电压施于门(或通道)上,允许一些电子穿过并检查单元的临界电压。当临界电压已达到一些预定的值时,就开始编程并储存数据了。  

   MLC SLC 的区别  

  目前 SSD 硬盘使用两种形式的 NAND 闪存:单级单元( SLC )和多级单元( MLC )。两者之间的差额是每单元存储的数据量, SLC 每单元存储 1 比特而 MLC 每单元存储 2 比特。关键在于, SLC MLC 占据了相同大小的芯片面积。因此,在同样的价格下, MLC 可以有两倍容量的效果。  

   STEC SLC MLC 闪存实际上使用了相同的晶体管,不同之处在于怎样读 / 写这两个闪存。 SLC 只有两个电压符,因为它只有两个状态( 0 1 )。 MLC 却有四个状态( 00 01 10  11 ),因此需要花费较长的时间来访问,因为你不想意外写入错误的数据;您已有了相同的最大、最小电压,您现在仅仅有它们两者之间更多的刻度:  

深入解析SSD中MLC与SLC的性能差异


  SLC (left) vs. MLC (right)  

  下面是一个关于 SLC MLC 性能基本数据的表格:

深入解析SSD中MLC与SLC的性能差异

     SLC MLC 的擦除性能是一样的, MLC 闪存的读取性能需花费两倍长的时间,写入性能需花费四倍长的时间。如果您以前听说过有人抱怨 MLC 写入速度,这就是部分原因。不过一定要记住,我们在这里谈论的这些数字低得离谱 —— 甚至 900 微秒写入 MLC 闪存的速度都远远超过向普通机械硬盘的写入速度。    

   SLC 的最大优势不在于它的性能好而在于它的使用寿命长。要了解闪存的耐用性,我们首先需要看看存储设备的内部构造。  
  闪存层次和数据丢失  

  我们已经证实了一个闪存单元可以储存一个还是两个比特取决于它是 SLC 还是 MLC 设备。把一群单元聚集到一起,就得到了一个 page page 是您可以编程(写入) NAND 闪存装置最小的结构。  

  大部分 MLC NAND 闪存的每一 page 4KB 。一个 block 是由许多 page 组成的,在 STEC MLC SSD 中一个 block 包含 128 pages 128 pages x 4KB/page = 512KB/block = 0.5MB Block 是您可以擦除得最小结构。  

  因此,当您写入 SSD 时,您一次可写入 4KB 数据;但是当您从 SSD 擦除数据时,您一次不得不删除 512KB 。过会儿,我会进一步探讨这个问题,但现在让我们看看当您从一个 SSD 删除数据时会发生什么事情。  
深入解析SSD中MLC与SLC的性能差异


     无论何时您将数据写入闪存,我们都会反复经历同样的编程过程。创建一个电场,电子穿过氧化物并储存电荷。擦除数据会导致同样的事情发生,但却向着相反的方向。问题是电子穿过氧化物的次数越多,就会变的越弱,最终将电压也不能再阻止电子的自由活动了。这时候,SSD的这个单元就发生故障了。 

  大约经过一万次擦除/编程周期后,MLC闪存才会最终出现那个问题。而SLC可使用十万次,这得益于它的简单设计。 
  由于寿命有限,所以SSD必须非常小心地选择擦除/编程每个单元的时间和方式。请注意,您可以从一个单元里读取数据,多少次都行,这并不减少单元存储数据的能力。只有擦除/编程周期才会降低了寿命。 

  此外需要注意的是,因为SSD没有擦除block这个概念,唯一擦除block的时候就是写入新数据的时候。如果您删除Windows里的一个文件而没有创建新的文件,SSD实际上并没有从闪存中移走这个数据,除非您准备好写入新的数据。 
SSD如何保证使用寿命 

  现在回到编程和擦除SSD数据之间方式的差异上来。您在page上编程,在block上擦除数据。假设您保存了一个8KB的文件,之后决定要删除它,这可能是您写给自己的简单便条,表示您不再需要了。 

  您保存该文件时,它会以2 pages的形式保存在闪存记忆体中;您将其删除时,SSD会标记pages为无效,但实际上并不会删除该block。SSD将等到block中一定比例的pages被标记为无效时,才会复制一些有效的数据到新的pages里去并擦除该block。SSD这样做是为了限制了每个block擦除的次数,从而延长驱动器寿命。 

  但是并非所有的SSD都采用同样的方式来处理删除请求,因此,从硬盘原理上来说,如何处理删除请求对SSD安全性产生较大的影响。 

  我们已经从概况的角度介绍了SLC SSD与MLC SSD的不同,并且阐述了一般SSD的设计者如何通过编程和算法来保证SSD的性能和安全性。希望以上的叙述能帮助读者进一步了解SSD,进而能够帮助读者准确地选择合适的SSD。


这篇关于深入解析SSD中MLC与SLC的性能差异的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/732104

相关文章

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

java解析jwt中的payload的用法

《java解析jwt中的payload的用法》:本文主要介绍java解析jwt中的payload的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解析jwt中的payload1. 使用 jjwt 库步骤 1:添加依赖步骤 2:解析 JWT2. 使用 N

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三