《Inside Solid State Device》读书笔记
这周我看了《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》读书笔记的更多相关文章
- csapp读书笔记-并发编程
这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...
- CSAPP 读书笔记 - 2.31练习题
根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1) 属于第一种情况 sum = x ...
- CSAPP读书笔记--第八章 异常控制流
第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...
- CSAPP 并发编程读书笔记
CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 《C#本质论》读书笔记(18)多线程处理
.NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
- Web高级征程:《大型网站技术架构》读书笔记系列
一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...
随机推荐
- 【CJOJ2375】 【HZOI 2015】偏序 II(cdq分治,树状数组)
传送门 CJOJ Solution 具体实现参考上一篇Blog(四维偏序) 代码实现1(cdq+cdq+cdq+BIT) /* mail: mleautomaton@foxmail.com autho ...
- vue.js - 2
最近开发公司vue前端项目,做一下笔记,偶尔上来查漏补缺 组件操作: 使用flag标识符结合v-if和v-else切换组件 页面结构: <div id="app"> & ...
- 使用python及工具包进行简单的验证码识别
相信大家利用 Python 写的爬虫应该遇到过要输入验证码的尴尬局面,又或者写了个自动填充表单的小程序,结果就卡在了验证码上. 在ctf中有⼀一些题⽬目,本身有弱验证码识别绕过,那么我们怎么解决呢? ...
- [原创]K8飞刀20160613 Plesk密码 & 注册表16进制转换 & Html实体解密
K8飞刀 by K8拉登哥哥@[K8搞基大队]博客: http://qqhack8.blog.163.com 简介: K8飞刀是一款多功能的安全测试工具. Hacker Swiss Army Kni ...
- 菜鸟--shell脚本编写之解决问题篇
一.执行时发现adb shell进入设备后不再继续往下执行了 adb shell cd /system/plugin/....exit 在网上查到的都是bat文件调用adb shell,没有sh文件调 ...
- Python Web框架 bottle flask
Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. 1 2 3 4 pip instal ...
- Nginx单向认证的安装配置
Nginx单向认证的安装配置 首先系统要已经安装了openssl,以下是使用openssl安装配置单向认证的执行步骤与脚本: #------------------------------------ ...
- Android初识Helloworld
在Eclipse+ADT中创建HelloWorld非常简单,直接按照导航下一步就可以了.本文重点不在如何创建,而在理解HelloWorld项目的文件. HelloWorld的目录结构有: src:存放 ...
- ElasticSearch入门3: Spring Boot集成ElasticSearch
第一步:创建项目elasticsearch 编写pom文件 <?xml version="1.0" encoding="UTF-8"?> <p ...
- Android入门学习总结
1.Manifest.xml是程序运行时读取的文件,是核心的配置文件:也是从中读取Activity 2.主要的代码文件存放在MainActivity.java,里面固定会有onCreate函数会通过s ...