转 给SSD(固态硬盘)编程
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
给SSD(固态硬盘)编程(1):简介和目录
本文由 伯乐在线- 熊铎翻译。未经许可,禁止转载!
英文出处:Emmanuel Goossaert (CodeCapsule.com)。欢迎加入翻译组。
简介
我想为我的键值对存储项目弄一个固态硬盘(SSD)最佳存储解决方案。为此,我必须确保我完全了解SSD是如何工作的,这样就可以优化我的hash表实例来适合SSD的内部特征。网上有很多不完全和相悖的的信息,找到关于SSD的可靠信息并不简单。为了找到适当的文献和基准以说服自己,我必须要进行大量的阅读。如果我要为SSD编程,我需要知道我在做什么。
研究完之后我搞明白了,相信将我所得到的结论向大家分享会有用的。我的意图是将所有的可用信息转化为实用知识。最后我写了一篇30页的文章,但它不太适合发布在博客上。因此我决定将这篇文章分为数个可被独立消化的数个逻辑部分。而目录在本文的下方。
第六部分有最为显著的贡献,这一部分是整个“为SSD编程”文章系列的总结,我相信那些心急的程序员最为喜欢。这个总结涵盖了SSD的基本知识以及所有推荐的实现固态硬盘的最佳读写性能的访问模式。
另外一个重要的细节是,“为SSD编程”与我的键值对存储项目(IKVS series)之间是相互独立的,因此并不需要IKVS文章中的知识。我正打算写一篇关于IKVS series的文章,内容是关于 如何用hash表来实现利用SSD的内部特征,不过我还没有具体的发布时间。
我唯一的遗憾就是,我还没有写任何代码,以证明我建议的访问模式确实是最好的。但是即使有这些代码,我也需要在大量不同的固态硬盘上测试性能基准,这将消耗我所不能承受的大量的时间和金钱。我仔细列举了我引用的文章,如果你认为我的建议不对,请留下评论指明。当然,如果你有什么疑问或想在任何方面做出贡献,请随意留下评论。
最后,不要忘了订阅电子报,以便在每当有新文章发表在Code Capsule上时能够收到通知。订阅面板在博客的右上角。
目录
第一部分:简介和目录
第二部分:SSD的架构和基准
1. SSD的结构
1.1 NAND闪存单元
1.2 SSD的组织
1.3 制造过程
2. 基准和性能指标
2.1 基本基准
2.2 预处理
2.3 任务负载和指标
第三部分:页、块、和闪存转换层
3. 基本操作
3.1 读、写、擦除
3.2 写入的例子
3.3 写入放大
3.4 耗损均衡
4. 闪存转换层(FTL)
4.1 FTL的必要性
4.2 逻辑块映射
4.3 产业状态的备注
4.4 垃圾回收
第四部分:高级功能和内部并行
5. 高级功能
5.1 TRIM
5.2 预留空间
5.3 完全抹除
5.4 本地命令队列(NCQ)
5.5 掉电保护
6. SSD的内部并行
6.1 被限制的I/O总线带宽
6.2 多层并行
6.3 块的集群
第五部分:访问模式和系统优化
7. 访问模式
7.1 定义顺序和随机I/O操作
7.2 写入
7.3 读出
7.4 合并读写
8.系统操作
8.1 分区对齐
8.2 文件系统参数
8.3 操作系统I/O调度
8.4 交换空间
8.5 临时文件
第六部分:总结——每个程序员都应该了解的固态硬盘知识
下一部分
第二部分在这。如果你比较忙,你可以直接去总结了所有其他部分内容的第六部分
为SSD编程(2):SSD的架构和基准
本第二部分包含了“为SSD编程”的6个内容,包括1、2两节,你可以参考目录。这是我在阅读了各种关于SSD的文档之后,为了分享我所学到的东西写的一系列文章。如果你没有时间慢慢看,你可以直接跳转到第六部分,这部分总结了所有其他部分的内容。
在本部分,我将解释NAND闪存的基本知识、闪存单元类型、和基本SSD内部架构。同样包括了SSD基准和如何解释这些基准。
1. SSD的架构
1.1 NAND闪存单元
固态硬盘(SSD)是基于闪存的数据存储设备。每个数据位保存在由浮栅晶体管制成的闪存单元里。SSD整个都是由电子组件制成的,没有像硬盘那样的移动或者机械的部分。
在浮栅晶体管中,使用电压来实现每个位的读写和擦除。写晶体管有两个方法:NOR闪存和NAND闪存。我不会更加深入的讨论NOR和NAND闪存的不同。本文将只包含被大多数制造商采用的NAND闪存。更多关于NOR和 NAND的不同点的信息,你可以参考Lee Hutchinson写的这篇文章[31]
NAND闪存模块的一个重要特征是,他们的闪存单元是损耗性的,因此它们有一个寿命。实际上,晶体管是通过保存电子来实现保存比特信息的。在每个P/E循环(Program/Erase,“Program”在这表示写)中电子可能被晶体管误捕,一段是时间以后,大量电子被捕获会使得闪存单元不可用。
有限的寿命
每个单元有一个最大的P/E 循环数量,当闪存单元被认为有缺陷后,NAND闪存被损耗而拥有一个有限的寿命。不同类型的NAND闪存有不同的寿命[31]。
最近的研究表示,通过给NAND一个相当高的温度,被捕获的电子可以被清除[14, 51]。尽管这仍然还只是研究,并且还没有确定到底哪一天能够将这个研究应用的消费市场,但这确实可以极大地增加SSD的寿命。
目前业界中的闪存单元类型有:
- 单层单元(SLC),这种的晶体管只能存储一个比特但寿命很长。
- 多层单元(MLC),这种的晶体管可以存储2个比特,但是会导致增加延迟时间和相对于SLC减少寿命。
- 三层单元(TLC),这种的晶体管可以保存3个比特,但是会有更高的延迟时间和更短的寿命。
闪存单元类型
固态硬盘(SSD)是基于闪存的数据存储设备。比特存储在闪存单元中,有三种闪存单元类型:每个单元1比特(单层单元,SLC),每个单元2比特(多层单元,MLC),和每单元3比特(三层单元,TLC)。
下方的表1中是每种NAND类型的详细信息。为了比较,我添加了硬盘、内存、和L1/L2缓存的平均延迟。
SLC |
MLC |
TLC |
HDD |
RAM |
L1 cache |
L2 cache |
|
P/E循环 |
100k |
10k |
5k |
* |
* |
* |
* |
每单元比特数量 |
1 |
2 |
3 |
* |
* |
* |
* |
寻址用时(μs) |
* |
* |
* |
9000 |
* |
* |
* |
读取用时(μs) |
25 |
50 |
100 |
2000-7000 |
0.04-0.1 |
0.001 |
0.004 |
写入用时(μs) |
250 |
900 |
1500 |
2000-7000 |
0.04-0.1 |
0.001 |
0.004 |
擦除用时(μs) |
1500 |
3000 |
5000 |
* |
* |
* |
* |
备注 |
* 该种计量不适用此种存储设备 |
||||||
引用 |
P/E 循环 [20] |
表1:NAND闪存不同类型的特征和用时与其他记忆组件比较
在相同数量的晶体管中的比特数更多可以降低生产成本。与基于MLC的SSD相比,基于SLC的SSD更可靠,并具有更长的寿命,但是有更高的生产成本。因此一般的大众SSD是基于MLC或者TLC的,只有专业的SSD是基于SLC的。因此往往会基于硬盘的目标工作负载和可能的数据更新频率,选择正确的存储类型。对于较高的更新工作负载,SLC是最后的选择,而高读取低写入的工作负载(例如视频存储和直播),TLC将极其适合。另外,TLC硬盘基于实际工作负载的基准检测显示出在实际中不必考虑基于TLC的SSD寿命。
NAND闪存的页和块
闪存的模块组织在被称为块的格子中,而块则组织成平面。块中可以读写的最小单元称为页。页不能独立擦除,只能整块擦除。NAND闪存的页大小可能是不一样的,大多数硬盘的页大小是2 KB, 4 KB, 8 KB 或 16 KB。大多数SSD的块有128或256页,这即表示块的大小也可能是256KB和4MB之间不同的值。例如Samsung SSD 840 EVO的块大小是2048KB,而每个块有256个8KB的页。页和块访问的细节在3.1节中
1.2 SSD的组织
下方的图1是SSD硬盘及其组件的示例。我只是重复了数篇论文[2, 3, 6]中已有的基本示意图。
图1:固态硬盘的架构
来自用户的命令是通过主机接口交换的。在我写这篇文章的时候,最新发布的SSD有两种最普遍的接口:SATA和PCIe。SSD控制器中的处理器接收这些命令并将它们传递给闪存控制器。SSD同样内嵌有RAM存储器,通常是作为缓存和存储映射信息使用。章节4包含了关于映射策略的细节信息。NAND闪存芯片通过多个通道组织在一起,和这些通道有关的信息在章节6中。
下方的图2和图3是从StorageReview.com [26, 27] 复制过来的,展示出真的SSD是长的什么样子的。
- 1个SATA3.0接口
- 1个SSD控制器(Samsung MDX S4LN021X01-8030)
- 1个RAM模块(256 MB DDR2 Samsung K4P4G324EB-FGC2)
- 8个MLC NAND闪存模块,每个模块有64G的存储空间(Samsung K9PHGY8U7A-CCK0)
图2:三星固态硬盘840 Pro(512 GB)— 感谢StorageReview.com[26] 的图片
图3是一个美光P420m 企业级PCIe固态硬盘,2013年末发布。主要组件有:
- PCIe 2.0接口 x8
- 1个SSD控制器
- 1个RAM模块(DRAM DDR3)
- 32通道上的64个MLC NAND闪存模块,每个模块有32GB的存储空间(Micron 31C12NQ314?25nm)
总存储空间为2048GB,但在应用over-provisioning技术后只有1.4TB可用。
图3:美光P420m企业级PCIe固态硬盘(1.4TB)— 感谢StorageReview.com[27] 的图片
1.3生产过程
很多SSD的生产商使用表面贴装技术(SMT,电子组件直接放置在PCB板上的一种生产方法)来生产SSD。SMT生产线由一系列机器组成,每个机器上下衔接,并有各自生产过程中的任务,例如安放组件或者融化焊锡。整个生产过程中同样贯穿了多重质量检测。Steve Burke的两篇参观金士顿在加利福利亚芳泉谷市的生产工厂的文章[67, 68]和Cameron Wilmot的一篇关于台湾金士顿组装工厂的文章[69]中,有SMT生产线的照片和视频。
另外还有两个有趣的视频,一个是关于美光Crucial SSD[70]的,而另一个是关于金士顿[71]。后边一个视频是Steve Burke文章的一部分,我同样在下方引用了。金士顿的Mark Tekunoff领读者参观了他们SMT生产线。有意思的是,视频中的每个人都穿着一套萌萌的抗静电服,看起来很有意思。
2.基准和性能度量
2.1基本基准
下边的表2展示的是不同的固态硬盘在顺序和随机工作负载下的读写速度。为了便于比较,这里包含了2008年到2013年发布的SSD、一个硬盘盒、和一个内存芯片
Samsung 64 GB |
Intel X25-M |
Samsung 840 EVO |
Micron P420m |
HDD |
RAM |
|
品牌 / 型号 |
Samsung(MCCDE64G5MPP-OVA) |
Intel X25-M(SSDSA2MH080G1GC) |
Samsung(SSD 840 EVO mSATA) |
Micron P420m |
Western Digital Black 7200 rpm |
Corsair Vengeance DDR3 |
存储单元类型 |
MLC |
MLC |
TLC |
MLC |
* |
* |
上市年份 |
2008 |
2008 |
2013 |
2013 |
2013 |
2012 |
接口 |
SATA 2.0 |
SATA 2.0 |
SATA 3.0 |
PCIe 2.0 |
SATA 3.0 |
* |
总容量 |
64 GB |
80 GB |
1 TB |
1.4 TB |
4 TB |
4 x 4 GB |
每块的页数 |
128 |
128 |
256 |
512 |
* |
* |
页大小 |
4 KB |
4 KB |
8 KB |
16 KB |
* |
* |
块大小 |
512 KB |
512 KB |
2048 KB |
8196 KB |
* |
* |
顺序读取 (MB/s) |
100 |
254 |
540 |
3300 |
185 |
7233 |
顺序写入 (MB/s) |
92 |
78 |
520 |
630 |
185 |
5872 |
4KB 随机读取(MB/s) |
17 |
23.6 |
383 |
2292 |
0.54 |
5319 ** |
4KB 随机写入 (MB/s) |
5.5 |
转 给SSD(固态硬盘)编程相关推荐
- [SSD固态硬盘技术 0] SSD的结构和原理导论
版权声明: 本文禁止转载 机械硬盘的存储系统由于内部结构,其IO访问性能无法进一步提高,CPU与存储器之间的性能差距逐渐扩大.以Nand Flash为存储介质的固态硬盘技术的发展,性能瓶颈得到缓解. ...
- [原创](免改BIOS)使用Clover升级旧电脑-支持NVMe M.2 SSD固态硬盘作为系统盘引导
[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX 个人网站: https://www.x86asm.org QQ交流: 643439947 编程生涯: 2001年~至今[共20年] 职业 ...
- 海康威视E3000 笔记本SSD固态硬盘M.2接口(NVMe协议)
由工采网代理的海康威视E3000 SSD固态硬盘采用NVME协议,高速传输,采用联芸1001主控,内嵌了LDPC 纠错技术.端对端数据保护(E2E)和灵活可编程 ECC 奇偶校验为SSD的数据安全稳定 ...
- ssd内部是多个flash一起操作_一键自毁军工级SSD固态硬盘的技术亮点
通过短路方式实现,烧毁时可见明火及冒烟,5秒(时间可调整)防误触发功能,每2秒烧毁一片闪存芯片,独特的反馈电路实时反馈烧毁状态,确保所有闪存全部被烧毁.烧毁后电子盘彻底报废,无法通过任何手段恢复数据. ...
- 固态硬盘是什么接口_什么是SSD固态硬盘,跟机械硬盘有什么不同?
硬盘分为机械硬盘(HDD)和固态硬盘(SSD),早期电脑装的是机械硬盘,随着科技发展,固态硬盘开始普及.这句话告诉你固态硬盘有多重要:把电脑的机械硬盘换成固态硬盘,开机时间从60s瞬间变为10s,这就 ...
- 原win7系统迁移到SSD固态硬盘
原文地址为: 原win7系统迁移到SSD固态硬盘 应用场景 原先使用的电脑,用起来越来越慢,跟不上速度,买了一块120G的SSD固态硬盘,把原系统迁移到固态硬盘上,提升效率,加快开机速度等. 操作方案 ...
- 什么软件测试固态硬盘坏没坏,固态硬盘容易坏吗 SSD固态硬盘坏掉前有什么征兆【详细介绍】...
固态硬盘坏掉怎么看?有哪些征兆要留意.随着SSD的流行,如今很多用户电脑都用上了速度更快的固态硬盘.现在问题来了,固态硬盘容易坏吗?SSD固态硬盘坏掉前有什么征兆呢?由于SSD一旦破坏,数据就无法恢复 ...
- 固态硬盘装到服务器上影响寿命吗,谈谈SSD固态硬盘的寿命问题
分享者:iweb2020 阅读量:371 小金子学院目录最新收录:投资寓言故事之鸡的故事 D 囻 囼协ёжзий клм项 D 囻 囼协ёжзий клм项 谈谈SSD固态硬盘的寿命问题 相信不少人 ...
- 服务器固态硬盘raid0,SSD固态硬盘,撸一把RAID0模式大提速
原标题:SSD固态硬盘,撸一把RAID0模式大提速 RAID含义:磁盘阵列(Redundant Arrays of Independent Disks,RAID),有"独立磁盘构成的具有冗余 ...
- 固态硬盘计算机怎么自定义分区,如何设置SSD固态硬盘为主硬盘 怎样把SSD分区设置成主分区?...
今天给大家带来如何设置SSD固态硬盘为主硬盘,怎样把SSD分区设置成主分区?,让您轻松解决问题. 这类问题只能难住第一次学者安装系统的朋友,而且是谨慎有余不敢于动手实践的那类人!在老鸟看来,根本没有介 ...
最新文章
- caffe修改hdf5的datalayer
- 反射-获取java私有内部类反射类型、私有字段
- 混合云:公共云和私有云之间取得平衡的方式?
- 苹果宣布加入CNCF;华为要求美国运营商支付专利费;微软删除最大的公开人脸识别数据集...
- matlab 参数识别,[转载]自编最小二乘法的Matlab参数辨识程序(含实例)
- 守得云开见月明:一次ASM存储高可用故障解决过程分析
- CentOS部署SpringBoot项目(二)
- 《乌镇互联网饭局图鉴》
- Linux中的两个经典宏定义
- 为什么天朝互联网的三巨头是BAT
- 2018.10.24-day3 python总结
- css3渐变画斜线 demo
- 注册测绘师划出后的分析与思考
- data fastboot 擦除_fastboot命令大全
- python cmd窗口 title_解决python在windows上运行弹出cmd窗口(dos窗口)
- 基于ATmega128单片机的LCD12864显示密码锁
- PDF转ONENOTE的方法
- springboot 解决缓慢的http攻击
- UE4人物冲刺瞬移多段跳
- C# API POST与GET的调用