深刻浅出计算机组成原理学习笔记:第四十六讲

1、引子

随着3D垂直封装技术和QLC技术的出现,今年的“618”,SSD硬盘的价格进一步大跳水,趁着这个机会,我把本身电脑上的仓库盘,从HDD换成了SSD硬盘。个人我的电脑完全摆脱了机械硬盘。算法

随着智能手机的出现,互联网用户在2008年以后开始爆发性增⻓,你们在网上花的时间也愈来愈多。这也就意味着,隐藏在精美App和网页以后的服务端数据请求量,呈数量级的上升。

不管是用10000转的企业级机械硬盘,仍是用Short Stroking这样的方式进一步提高IOPS,HDD硬盘已经知足不了咱们的需求了。上面这些优化措施,数据库

无非就是,把IOPS从100提高到300、500也就到头了。性能优化

因而,SSD硬盘在2010年先后,进入了主流的商业应用。咱们在第44讲看过,一块普通的SSD硬盘,能够轻松支撑10000乃⾄20000的IOPS。那个时候,很多互联网公司想要完成性能优化的KPI,
最后的解决放案都变成了换SSD的硬盘。若是这还不够,那就换上使用PCI Express接口的SSD。oop

不过,只是简单地换⼀下SSD硬盘,真的最⼤限度地⽤好了SSD硬盘吗?另外,即使如今SSD硬盘很便宜了,一部分公司的批量数据处理系统,仍然在⽤传统的机械硬盘,这又是为何呢性能

那么接下来这两讲,就请你和我一块儿来看一看,SSD硬盘的工做原理,以及怎么最大化利用SSD的工做原理,使得访问的速度最快,硬盘的使⽤寿命最长。优化

2、SSD的读写原理

一、SSD和机械硬盘的优缺点

SSD没有像机械硬盘那样的寻道过程,因此它的随机读写都更快。我在下面列了一个表格,对比了一下SSD和机械硬盘的优缺点。
网站

你会发现,无论是机械硬盘不擅⻓的随机读写,仍是它自己已经表现不错的顺序写入,SSD在这些方面都要比HDD强。不过,有一点,机械硬盘要远强于SSD,那就是耐用性。
若是咱们须要频繁地重复写入删除数据,那么机械硬盘要比SSD性价比高不少。

要想知道为何SSD的耐⽤性不太好,咱们先要理解SSD硬盘的存储和读写原理。咱们以前说过,CPUCache用的SRAM是用一个电容来存放一个比特的数据。
对于SSD硬盘,咱们也能够先简单地认为,它是由一个电容加上一个电压计组合在一块儿,记录了一个或者多个比特。

spa

二、SLC、MLC、TLC和QLC

一、什么是SLC操作系统

 

可以记录一个比特很容易理解。给电容里面充上电有电压的时候就是1,给电容放电里面没有电就是0。采用这样方式存储数据的SSD硬盘,咱们通常称之为 使用了SLC的颗粒,
全称是Single-Level Cell,也就是一个存储单元中只有一位数据。3d

二、SLC存在什么问题?

可是,这样的方式会遇到和CPU Cache相似的问题,那就是,一样的⾯积下,可以存放下的元器件是有限的。若是只用SLC,咱们就会遇到,

存储容量上不去,而且价格下不来的问题。

因而呢,硬件工程师们就陆续发明了 MLC(Multi-Level Cell)、 TLC(Triple-Level Cell)以及 QLC(Quad-Level Cell),也就是能在续发明了 MLC(Multi-Level Cell)、 TLC(Triple-Level Cell)以及 QLC(Quad-Level Cell),也就是能在一个电容里面存下2个、3个乃至4个比特。

只有一个电容,咱们怎么可以表示更多的比特呢?别忘了,这里咱们还有一个电压计。4个比特一共能够从0000-1111表⽰16个不一样的数。那么,若是咱们能往电容⾥⾯充电的时候,
充上15个不一样的电压,而且咱们电压计可以区分出这15个不一样的电压。加上电容被放空表明的0,就可以表明从0000-1111这样4个比特了。

不过,要想表示15个不一样的电压,充电和读取的时候,对于精度的要求就会更高。这会致使充电和读取的时候都更慢,因此QLC的SSD的读写速度,要⽐SLC的慢上好几倍。
若是你想要知道是什么样的物理原理致使这个QLC更慢,能够去读一读这篇文章。

3、P/E擦写问题

若是咱们去看一看SSD硬盘的硬件构造,能够看到,它大概是自顶向下是这么构成的。

一、闪存转换层

首先,虽然和其余的I/O设备同样,它有对应的 接⼝和控制电路。如今的SSD硬盘⽤的是SATA或者PCIExpress接⼝。在控制电路,有一个很重要的模块,叫做 FTL(Flash-Translation?Layer),
也就是 闪存转换层。这个能够说是SSD硬盘的一个核新模块,SSD硬盘性能的好坏,很大程度上也取决于FTL的算法好很差。如今容我卖个关子,咱们晚一下子仔细讲FTL的功能。

二、实际I/O设备

接下来是 实际I/O设备,它其实和机械硬盘很像。如今新的大容量SSD硬盘都是3D封装的了,也就是说,是由不少个裸片(Die)叠在一块儿的,
就好像咱们的机械硬盘把不少个盘面(Platter)叠放在一块儿同样,这样能够在一样的空间下放下更多的容量。

接下来,一张裸片上能够放多个 平面(Plane),通常一个平面上的存储容量大概在GB级别。一个平面上面,会划分红不少个块(Block),通常一个块(Block)的存储大小,
一般几百KB到几MB大小。一个块里面,还会区分不少个页(Page),就和咱们内存里面的页同样,一个页的小小一般是4KB。

三、SSD硬盘是如何写入的

对于SSD硬盘来讲,数据的 写入叫做Program。写入不能像机械硬盘同样,经过 覆写(Overwrite)来进行的,而是要先去 擦除(Erase),而后再写入。SSD的读取和写入的基本单位,不是一个比特(bit)或者一个字节(byte),而是一个 页(Page)。SSD的擦除单位就更夸张了,咱们不只不能按照照特或者字节来擦除,连按照 页来擦除都不行,咱们必须按照 块来擦除。

四、SSD硬盘数据写入形象比喻

并且,你必须记住的一点是,SSD的使用寿命,实际上是每个块(Block)的擦除的次数。你能够把SSD硬盘的一个平面当作是一张白纸。咱们在上面写入数据,
就好像用铅笔在白纸上写字。若是想要把已经写过字的地方写入新的数据,咱们先要用橡皮把已经写好的字擦掉。可是,若是频繁擦同一个地方,那这个地方就
会破掉,以后就没有办法再写字了。

五、SLC、MLC、TLC和QLC使用寿命对比

咱们上⾯说的SLC的芯⽚,能够擦除的次数⼤概在10万次,MLC就在1万次左右,而TLC和QLC就只在几千次了。这也是为何,你去购买SSD硬盘,
会看到一样的容量的价格差异很大,由于它们的芯片颗粒和寿命彻底不⼀样。

4、SSD读写的生命周期

一、一块SSD硬盘在平常是怎么被用起来的

下面咱们来实际看⼀看,一块SSD硬盘在平常是怎么被用起来的。
我用三种颜色分别来表示SSD硬盘里面的页的不一样状态,白色表明这个页历来没有写入过数据,绿色表明里面写入的是有效的数据,红色表明里面的数据,在咱们的操做系统看来已是删除的了。

 

一、初始状态

二、数据写入

 一开始,全部块的每个页都是白色的。随着咱们开始往里面写数据,里面的有些页就变成了绿色。

三、数据删除

而后,由于咱们删除了硬盘上的一些文件,因此有些页变成了红色。可是这些红色的页,并不能再次写入数据。由于SSD硬盘不能单独擦除一个页,必须一次性擦除整个块,
因此新的数据,咱们只能日后面的白色的页里面写。这些散落在各个绿色空间里面的红色空洞,就好像硬盘碎片。

四、把整个Block擦除

若是有哪个块的数据一次性所有被标红了,那咱们就能够把整个块进行擦除。它就又会变成白色,能够从新一页一页往里面写数据。这种状况其实也会常常发生。毕竟一个块不大,
也就在几百KB到几MB。你删除一个几MB的文件,数据又是连续存储的,天然会致使整个块能够被擦除。

五、想要写入两个Block大小的新数据

随着硬盘片面里面的数据愈来愈多,红色空洞占的地方也会愈来愈多。因而,你会发现,咱们就要没有白色的空页去写入数据了。这个时候,

咱们要作一次相似于Windows系统“磁盘碎片整理”或者Java里面的“内存垃圾回收”工做做。找一个红色空洞最多的块,把里面的绿色数据,挪到另外一个块里面去,

而后把整个块擦除,变成白色,能够从新写入数据。

不过,这个“磁盘碎⽚整理”或者“内存垃圾回收”的⼯做,咱们不能太主动、太频繁地去作。由于SSD的擦除次数是有限的。若是动不动就搞个磁盘碎⽚整理,那么咱们的SSD硬盘很快就会报废了。

二、SSD硬盘的容量是用不满的?

说到这里,你可能要问了,这是否是说,咱们的SSD硬盘的容量是⽤不满的?由于咱们总会遇到一些红色空洞?

 

 

 

 

没错,一块SSD的硬盘容量,是没办法彻底用满的。不过,为了避免得罪消费者,生产SSD硬盘的厂商,实际上是预留了一部分空间,专们用来作这个“磁盘碎片整理”工做的。
一块标成256G的SSD硬盘,每每实际有240G的硬盘空间。SSD硬盘经过咱们的控制芯片电路,把多出来的硬盘空间,用来进行各类数据的闪转腾挪,
让你可以写满那240G的空间。这个多出来的16G空间,叫做 预留空间(Over Provisioning),通常SSD的硬盘的预留空间都在7%-15%左右。

5、总结延伸

到这里,相信你对SSD硬盘的写入和擦除的原理已经清楚了,也明白了SSD硬盘的使用寿命受限于能够擦除的次数。

仔细想想,你会发现SSD硬盘,特别适合读多写少的应用。在平常应用里面,咱们的系统盘适合用SSD。可是,若是咱们用SSD作专门的下载盘,一直下载各类影音数据,而后刻盘备份就不太好了,特别是如今QLC颗粒的SSD,它只有几千次可擦写的寿命啊。

在数据中内心面,SSD的应用场景也是适合读多写少的场景。咱们拿SSD硬盘用来作数据库,存放电商网站的商品信息很合适。可是,用来做为Hadoop这样的Map-Reduce应用的数据盘就不行了。由于Map-Reduce任务会大量在任务中间向硬盘写入中间数据再删除掉,这样用不了多久,SSD硬盘的寿命就会到了。

好了,最后让咱们总结一下。

这一讲,咱们从SSD的物理原理,也就是“电容+电压计”的组合,向你介绍了SSD硬盘存储数据的原理,以及从SLC、MLC、TLC,直到今天的QLC颗粒是怎么回事儿。

而后,咱们一块儿看了SSD硬盘的物理构造,也就是裸片、平面、块、页的层次结构。咱们对于数据的写入,只能是一页一页的,不能对页进行覆写。对于数据的擦除,
只能整块进行。因此,咱们须要用一个,相似“磁盘碎片整理”或者“内存垃圾回收”这样的机制,来清理块当中的数据空洞。而SSD硬盘也会保留必定的预留空间,避免出现硬盘没法写满的状况。

到了这里,咱们SSD硬盘在硬件层面的写入机制就介绍完了。不过,更有挑战的一个问题是,在这样的机制下,咱们怎么尽量延长SSD的使用寿命呢?若是要开发一个跑在SSD硬盘上的数据库,咱们能够利用SSD的哪些特性呢?想要知道这些,请你必定要记得回来听下⼀讲。

相关文章
相关标签/搜索