当前位置: 首页 > news >正文

固态硬盘性能特点解析

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

固态硬盘的结构和工作原理和机械硬盘大不一样。它主要由大量NAND Flash颗粒、Flash存储芯片、SSD控制器控制芯片构成。他们三者的关系通过下图进行表示:

在一个固态硬盘上会有若干Flash存储芯片(可能有2颗、4颗、8颗等数值),每颗存储芯片内部包含大量NAND Flash颗粒,目前(2016年)NAND Flash颗粒的制作工艺已经达到12nm(2012年的主流工艺是90nm)。无论NAND Flash颗粒的制作工艺如何,每一个单位的存储容量都是512字节。

SSD主控芯片的主要工作包括识别来自于外部接口(PCI-E、SATA等)的控制指令、在将数据写入Flash存储芯片前接收和压缩这些数据、在将数据送入内存前解压从Flash存储芯片读取的数据、完成 LBA和PBA的映射转换等工作。

如果将固态硬盘和机械硬盘进行对比,那么机械硬盘中的一个最小的操作单位就是扇区,单位大小就是512字节;固态硬盘中的一个最小操作单位就是Flash Page,单位大小为4K,它包括了8个单位的NAND Flash颗粒称为Flash Page。固态硬盘中最小的操作单位为4K,那么在进行操作系统文件系统格式化的时候就需要注意了。文件系统中设置的一个簇大小不能小于4K且最好为4K的整数倍,这样才能保证充分发挥固态硬盘的性能。

固态硬盘不依靠磁头定位和主马达旋转确定数据的物理位置,所以固态硬盘没有寻址时间SSD控制芯片拥有的多个控制通道可以让它同时向多个Flash存储芯片发送读写指令,这类似于机械磁盘上可以独立工作的磁头臂,但却没有共享主轴马达的限制。这些特点足以保证固态硬盘的性能远远高于机械硬盘。

  • SSD主控芯片:上文已经说到SSD主控芯片几乎完成了固态硬盘上所涉及的所有控制指令操作和数据读写操作。不同的SSD主控芯片内置的FTL算法不一样、数据压缩/解压算法不一样、控制通道数也不一样,所以固态硬盘采用哪种SSD主控芯片将直接影响其性能,目前最好的控制芯片来自于Intel,最广泛使用的控制芯片来自于三星。
  • FLash存储芯片工艺:本文提到的NAND Flash颗粒只是其中一种使用最广泛的型号,实际上还有NOR Flash颗粒等。NAND Flash颗粒又分为两种子类型:MLC存储颗粒与SLC存储颗粒。在相同单位体积下,MLC可以提供两倍于SLC的存储空间,而后者在存储响应时间和存储稳定性上又高于前者。所以MLC存储颗粒市场占有率更高,SLC存储颗粒更倾向于企业级市场。

目前主流的固态硬盘的外部传输速度可达到550MB/S,这个速度基本上达到了SATA 3/USB 3.0接口规范的理论峰值。

TL(Flash translation layer)闪存地址转换是SSD固态硬盘控制芯片需要负责的主要工作之一,FTL的主要作用就是记录物理地址和逻辑地址的转换关系,FTL的核心是一张物理地址和逻辑地址的映射表,这张映射表存储在固态硬盘一个专门的SRAM/DRAM芯片上或者若干独立的NAND Flash Page 上。操作系统对磁盘读写操作的最小单位为“簇”,而固态硬盘的最小单位为“Flash Page”。正是SSD固态硬盘的控制芯片有这样一个转换过程,操作系统才能将固态硬盘当做机械硬盘进行操作,并且SSD固态硬盘主控制芯片上FTL算法的性能直接影响着整个SSD固态硬盘的性能。

 

转载于:https://my.oschina.net/blacklands/blog/879888

相关文章:

  • 网络扫描设置
  • Netty分享
  • 最原始的jdbc代码
  • [转载].关于滤波电容、去耦电容、旁路电容作用
  • 前端开发之旅-zopim在线即时聊天客服
  • linux下cvs安装
  • while
  • 《计算机世界》失去媒体风骨
  • 实习的总结
  • CentOS 5.3配置软件源以及CVS服务器
  • 软件工程第一次作业
  • NeHe OpenGL第四课:旋转
  • ActionScript3 实现拖拽功能
  • RedHat/CentOS 7通过nmcli命令管理网络教程
  • 检测字符串是否是数字
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • Apache的80端口被占用以及访问时报错403
  • CSS魔法堂:Absolute Positioning就这个样
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Iterator 和 for...of 循环
  • js正则,这点儿就够用了
  • PAT A1092
  • quasar-framework cnodejs社区
  • VUE es6技巧写法(持续更新中~~~)
  • Windows Containers 大冒险: 容器网络
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 技术发展面试
  • 人脸识别最新开发经验demo
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 用jQuery怎么做到前后端分离
  • 原生 js 实现移动端 Touch 滑动反弹
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #1015 : KMP算法
  • #git 撤消对文件的更改
  • #LLM入门|Prompt#3.3_存储_Memory
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (二)丶RabbitMQ的六大核心
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (力扣)1314.矩阵区域和
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (转)http协议
  • 、写入Shellcode到注册表上线
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .jks文件(JAVA KeyStore)
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET连接MongoDB数据库实例教程
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • [Android View] 可绘制形状 (Shape Xml)
  • [Android]常见的数据传递方式