这周我看了《Inside Solid State Device》一书,了解了解SSD作为软件的补充。

固态硬盘区别于将数据以磁形式存储的机械硬盘,使用了一种名为NAND的闪存颗粒,以电信号的形式存储数据。存储介质利用半导体的特性,以高低电平来标记数据的类型。NAND颗粒又以最小存储单元的堆叠形式不同而分为SLC(single-level cell)颗粒、MLC (multi-level cell)颗粒和TLC(triple-level cell)颗粒。单个slc存储单元有0和1两种充电值,(高电平记为“1”,标记为空白,低电平标为“0”,标记为存储)可存储1bit的数据;单个mlc存储单元有四种充电值——00、01、10和11,可存储2bit数据;以此类推,单个tlc存储单元有8种充电值,可存储3bit数据。slc颗粒的结构简单、稳定,具有高速、安全、使用寿命长的特点,(寿命约为100000次完全Program/Erase)而mlc颗粒相比slc颗粒,拥有更高的存储密度,也因为结构的复杂,需要牺牲一定的速度和使用寿命(寿命约10000次完全P/E),tlc则同理,存储密度相比slc有了很大的提升,但速率和使用寿命也大幅下降。(寿命约为500-2000次完全P/E)

2012年开始,民用固态硬盘规模迎来了一次井喷,原因是MLC颗粒的商用开始成熟,解决了传统的SLC颗粒生产成本高的问题,将这种高速安全的存储介质带入民用市场。同样,2015年,解决了使用寿命问题的TLC颗粒凭借成本优势开始逐步取代MLC颗粒。目前,市场在售的大部分固态硬盘都是用TLC颗粒生产而来。

机械硬盘的读写原理是通过机械马达带动机械臂上的磁头对磁碟片进行读取和写入,而这种方式最大的弊端就是寻址要花费至少10ms的时间,从而带来了巨大的延迟,影响了用户的体验。固态硬盘则不存在这样的问题,闪存颗粒的寻址只需要花费约0.1ms。但是固态硬盘也存在天然的缺陷,通过电信号存储数据的方式虽然读写速度快,但是一旦存储颗粒出现问题,数据恢复的几率几乎为0。存储颗粒出现故障的几率随着其读写次数的增多也在不断增加。数据的安全问题似乎是固态硬盘的死穴,特别是随着大量TLC颗粒的固态硬盘的上市,人们越来越关注如何延长固态硬盘的使用寿命(以提高完全读写次数这种方式为主),降低使用时的故障率,保持寿命内的读写速度。目前,固态硬盘中有几种方式来实现这一目的。

首先是磨损均衡(wear leveling)

由于系统在向固态硬盘写入文件时,并不全是完全的顺序写入,大部分时间都是随机写入,文件在系统中体现的逻辑位置和在固态硬盘中的物理位置通过LBA(Logical Block Addressing)表格一一对应,而当固态硬盘的主控发现某些区块的颗粒已经进行了相对多次的擦写,某些区块只进行了相对少次的擦写,会将文件写入相对少次的区块,以平衡各区块间的磨损程度,不致使某些区块提前透支使用寿命,使固态硬盘提前报废。

trim

机械硬盘对删除后重新写入的过程,仅需要磁柱头直接改变碟片上的磁信号,不存在擦除的过程。而固态硬盘对“删除”的理解,则只是在LBA表格中删除对应文件的逻辑位置信息,使系统找不到这个文件从而认为该文件已删除。当该物理区块又有文件写入时,则会先对对应写入的区块进行擦除,然后再写入。若该区块中还包含其他有效的文件,还需要先将该区块中的有效文件复制改写到其他区块中,然后擦除该区块,再进行写入。本来单纯的写入过程却变成了复杂的过程,降低了整体的响应速度。trim就是为解决这一问题而生的。微软在Windows7系统中开始加入对固态硬盘的trim指令。它的作用是,当系统在逻辑层面对文件进行删除时,固态硬盘在物理层面也对对应区块进行擦除,其中的有效文件会提前进行转移改写,保证了使用的速度。

垃圾回收(Garbage Collection)

由于大量的随机写入,固态硬盘中存在着一些小的有效数据,它们分布在不同的区块中,文件大小不足以占用整个区块。固态硬盘的主控会在系统空闲时,将这一部分的文件复制入系统内存中,自动缓存的固态硬盘会复制入自带的缓存中,然后将这一部分文件写入其他的区块,再将原区块擦除,保证原区块的写入性能。这一机制类似于机械硬盘的磁盘碎片整理。

预留空间

因为固态硬盘的垃圾回收机制和改写机制会占用其他空白的区块,所以在一定程度上来说,预留的空白空间越大,对保持固态硬盘的读写速度越有利。

静动数据分离

固态硬盘主控会识别LBA中数据的读写次数,对不经常写入的静态数据(系统文件,软件安装文件)和经常写入的动态数据进行归类分离,在有文件写入时,会主动写入存有动态数据的区块,避免改写静态数据造成性能浪费。

总结

固态硬盘的主控在整个固态硬盘中起到了重要作用,甚至可以说一个主控的优秀与否决定了这个固态硬盘的寿命和性能。竞争激烈的市场上,主控性能的提高也带来了强大的竞争力。在即将到来QLC颗粒上更需要依靠主控严格的纠错和算法的优化,才能保证必要的性能。

《Inside Solid State Device》读书笔记的更多相关文章

  1. csapp读书笔记-并发编程

    这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...

  2. CSAPP 读书笔记 - 2.31练习题

    根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1)  属于第一种情况 sum = x ...

  3. CSAPP读书笔记--第八章 异常控制流

    第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...

  4. CSAPP 并发编程读书笔记

    CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...

  5. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  6. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  7. 《C#本质论》读书笔记(18)多线程处理

    .NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...

  8. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

  9. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  10. Web高级征程:《大型网站技术架构》读书笔记系列

    一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...

随机推荐

  1. ADB 命令介绍

    Android adb shell am 命令介绍 am这个指令是 activity manager的缩写.这个命令可以启动Activity.打开或关闭进程.发送广播等操作. am命令格式如下 adb ...

  2. [原创]Base32加密解密工具

    工具: Base32_Decode编译: VS2012  C# (.NET Framework v2.0)组织: K8搞基大队[K8team]作者: K8拉登哥哥博客: http://qqhack8. ...

  3. numpy.random.randn()与numpy.random.rand()的区别(转)

    numpy中有一些常用的用来产生随机数的函数,randn()和rand()就属于这其中. numpy.random.randn(d0, d1, …, dn)是从标准正态分布中返回一个或多个样本值. n ...

  4. 剑指offer十五之反转链表

    一.题目 输入一个链表,反转链表后,输出链表的所有元素. 二.思路 详细分析见代码注释 三.代码 public class Solution {     public ListNode Reverse ...

  5. 输入两棵二叉树A,B,判断B是不是A的子结构(c++实现)

    #include <iostream> #include <cstdio> #include <stdio.h> #include <string> # ...

  6. webstorm引用ESLint进行静态代码检查

    安装 ESLint 基于 Node 平台,所以 Nodejs 是必须安装的,然后通过 npm 安装 ESLint 包,至于全局安装还是作为开发依赖安装,取决于个人. 然后在 WebStorm 中,打开 ...

  7. Font Awesome 4.0.3 提供了369个网页常用的矢量字体图标,新浪、人人 的矢量图标也到其中哟

    要求 必备知识 本文要求基本了解html与css前端代码. 运行环境 普通浏览器,兼容IE7 源码下载 下载地址 Font Awesome 为您提供了一套可缩放的字体矢量图标,可以快速自定义图标的大小 ...

  8. 配置Codis-Service主机

    Codis-Service配置在三台机器上,每台机器分别配置3个redis,如下: ip:(redis-.redis-.redis-) ip:(redis-.redis-.redis-) ip:(re ...

  9. webkit技术内幕读书笔记 (四)

    资源缓存 资源缓存的目的是为了提高资源使用的效率,其基本思想是建立一个资源的缓存池,当需要请求资源的时候先去资源池查找是否有相应的资源,如果没有则向服务器发送请求,webkit收到资源后将其设置到该资 ...

  10. Spring框架引入

    Struts与Hibernate可以做什么事? Struts, Mvc中控制层解决方案 可以进行请求数据自动封装.类型转换.文件上传.效验… Hibernate, 持久层的解决方案: 可以做到, 把对 ...