深入解析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

相关文章

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

Spring MVC使用视图解析的问题解读

《SpringMVC使用视图解析的问题解读》:本文主要介绍SpringMVC使用视图解析的问题解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC使用视图解析1. 会使用视图解析的情况2. 不会使用视图解析的情况总结Spring MVC使用视图

一文带你深入了解Python中的GeneratorExit异常处理

《一文带你深入了解Python中的GeneratorExit异常处理》GeneratorExit是Python内置的异常,当生成器或协程被强制关闭时,Python解释器会向其发送这个异常,下面我们来看... 目录GeneratorExit:协程世界的死亡通知书什么是GeneratorExit实际中的问题案例