SSD主要由两大模块构成---主控和闪存介质。另外可选的还有Cache缓存单元。主控是SSD的大脑,承担着指挥、运算和协调的作用,具体表现在:

  1. 前端实现标准主机接口与主机通信,接口包括SATA、SAS、PCIe等。
  2. 中间层SSD固件运行FTL(Flash Translation Layer)算法。
  3. 后端实现与闪存的通信,主要包含数据编解码和ECC。

一款主控芯片的好坏直接决定了SSD的性能、寿命和可靠性。

SSD作为数据存储设备, 其实是一种典型的(System on Chip) 单机系统, 有主控CPU、 RAM、 操作加速器、 总线、 数据编码译码等模块(见图2-1) , 操作对象为协议、 数据命令、 介质, 操作目的是写入和读取用户数据。

1.前端

前端是负责主机和SSD设备通信的接口, 命令和数据传输通过前端总线流向或流出SSD设备。

主机接口:与主机进行通信(数据交互)的标准协议接口,当前主流的接口为SATA、SAS和PCIe等。三者的接口速率如下。

SATA的全称是Serial Advanced Technology Attachment(串行高级技术附件),是一种基于行业标准的串行硬件驱动接口,是由Intel、IBM、Dell、APT、Maxtor和Seagate公司共同提出的硬盘接口规范 。

SAS(Serial Attached SCSI)即串行连接 SCSI,是新一代的SCSI技术,和现在流行的SATA硬盘相同,都是采用串行技术以获得更高的传输速度,并通过缩短连接线改善内部空间等。SAS是并行SCSI接口之后开发出的全新接口,此接口的设计是为了改善存储系统的效能、可用性和扩充性,并且提供与SATA硬盘的兼容性。SAS接口技术可以向下兼容SATA。

具体来说, 二者的兼容性主要体现在物理层和协议层。 在物理层, SAS接口和SATA接口完全兼容, SATA硬盘可以直接用在SAS的环境中; 从接口标准上而言, SATA是SAS的一个子标准, 因此SAS控制器可以直接操控SATA硬盘, 但是SAS却不能直接用在SATA的环境中, 因为SATA控制器并不能对SAS硬盘进行控制。

PCIe(Peripheral Component Interconnect Express)是一种高速串行计算机扩展总线标准,它原来的名称为3GIO,是由英特尔在2001年提出来的,旨在替代旧的PCI、PCI-X和AGP总线标准。PCIe属于高速串行点对点多通道高带宽传输,所连接的设备分配独享通道带宽,不共享总线带宽。

主要支持主动电源管理、 错误报告、 端对端的可靠性传输、 热插拔以及服务质量(QoS, Quality of Service) 等功能。 它的主要优势就是数据传输速率高, 目前最高的4.0版本可达到2GB/s(单向单通道速率) , 而且还有相当大的发展潜力。 PCI Express也有多种规格, 从PCI
Express 1X到PCI Express 32X, 意思就是1个通道到32个通道, 能满足将来一段时间内出现的低速设备和高速设备的需求。 PCI-Express最新的接口是PCIe 4.0接口。

图2-4和图2-5展示的是PCIe接口, 分别为卡式和U.2。

2.主控CPU

SSD控制器SoC模块和其他嵌入式系统SoC模块并没有本质的不同,一般由一颗或多颗CPU核组成,同时片上有I-RAM、D-RAM、PLL、IO、UART、高低速总线等外围电路模块。CPU负责运算、系统调度,IO完成必要的输入输出,总线连接前后端模块。

SSD所说的固件就运行在CPU核上。如果是多核CPU,软件开发分为2类多核处理:

对称多核处理(SMP)

对称多处理多核共享OS和同一份执行代码,共享一份I-RAM和D-RAM,资源共享。

非对称多核处理(AMP)

非对称多处理多核分别执行不同的代码,没核对应一份I-RAM和D-RAM独立运行,没有内存抢占导致代码速度执行变慢的问题。

当SSD的CPU要求计算能力更高时,除了增加核数和单核CPU频率外,AMP的设计方式更加适应计算和任务独立的要求,消除了代码和数据资源抢占导致执行速度过慢的问题。

固件会根据CPU的核数进行设计,充分发挥多核CPU的计算能力是固件设计考虑的一方面。另外固件会考虑任务划分,会将任务分别加载到不同CPU上执行,在达到并行处理的同时让所有CPU有着合理且均衡的负载,目标是让SSD输出最大的读写性能。

SSD的CPU外围模块还包括UART、GPIO、JTAG这些都是程序必不可少的调试端口,其内部资源和我们了解的MCU差不多。

  • 国外主流的主控厂商:Marvell、三星
  • 国内主流的主控厂商:智微(JMicron)、慧荣(Silicon Motion)、群联(Phison)、联芸(Maxio)。

3.后端

后端两大模块分别为ECC模块和闪存控制器。

ECC模块是数据编解码单元,由于闪存存储天生存在误码率,为了数据的正确性,在数据写入操作时应给原数据加入ECC校验保护,这是一个编码过程。读取数据时,同样需要通过解码来检错和纠错,如果错误的比特数超过ECC纠错能力,数据会以“不可纠错”的形式上传给主机。 这里的ECC编码和解码的过程就是由ECC模块单元来完成的,SSD内的ECC算法主要有BCH和LDPC,其中LDPC正逐渐成为主流。

闪存控制器使用符合闪存ONFI、 Toggle标准的闪存命令, 负责管理数据从缓存到闪存的读取和写入。

闪存控制器如何实现与闪存连接和通信?从单个闪存角度看,一个Die/LUN是一个闪存命令执行的基本单元,闪存控制器和闪存连接引脚如下图所示:

从闪存控制器角度看,为了性能需求需要并发多个闪存Die/LUN,通常配置有多个通道。一个通道挂多少个Die/LUN,取决于性能需求,个数越多并发性能越好。一个通道上的Die/LUN共用一套总线,通过CE#引脚来进行片选通信。一个通道上可以有多个CE,SSD主控一般设计4~8个,对于容量而言有一定的灵活度。

SSD---系统架构相关推荐

  1. 亿级流量系统架构之如何设计承载百亿流量的高性能架构【石杉的架构笔记】...

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 本文来源:石杉的架构笔记(ID:shishan100) 一.往期回顾 上篇文章<大型系统架构 ...

  2. 百亿级日志系统架构设计及优化

    作者:杨津萍,大数据架构师,从业十余年,专攻 Web 架构及大数据架构. 来自:51cto技术栈(ID:blog51cto) " 日志数据是最常见的一种海量数据,以拥有大量用户群体的电商平台 ...

  3. android入门之系统架构和环境搭建

    1.android背景 android起源 android系统是由安迪鲁宾团队开发的,最初用于数码相机,2005.08被google收购.(真是抱了一个好大腿)在接下来的几年中,android的发展简 ...

  4. [深入理解SSD 为SSD编程] SSD的架构和基准

    声明 主页: 元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言. 个人辛苦整理,付费内容,禁止转载. 内容摘要 前言 1. SSD的架构 1.1 NAND闪存单元 1.2 SSD的组织 ...

  5. 【架构师之路】四、系统架构

    高并发,大流量 Google 日均 PV 数 35 亿,日均 IP 访问数 3 亿 微信在线用户数 10 亿 天猫双十一活动一天交易额 3000 亿 高可用 系统 7*24 小时不间断服务.大型互联网 ...

  6. 架构师的 36 项修炼第07讲:高性能系统架构设计

    本课时讲解大家常听到的高性能系统架构. 高性能系统架构,主要包括两部分内容,性能测试与性能优化.性能优化又可以细分为硬件优化.中间件优化.架构优化及代码优化,知识架构图如下. 性能测试 先看系统的性能 ...

  7. 想染指系统架构?看这篇就够了

    https://juejin.im/post/58f45b058d6d8100648a69f0 原文地址:github.com/donnemartin/system-design-primer 译文出 ...

  8. 系统架构-基础篇-(高性能基础建设说明与选型条件)

    本文牵扯的面积可能会比较泛,或者说比较大,在这个层面很多人也有自己的见解,所以我这也仅仅是抛砖引玉,结合前面讲述的一些基础技术,从思想中阐述更为深入的架构思想基础,因为最好的架构思想是架构师结合实际情 ...

  9. 亿级访问量下的新浪微博系统架构

    亿级访问量下的新浪微博系统架构 亿级访问量下的新浪微博系统架构 亿级访问量下的新浪微博系统架构 2016-04-24 架构说 序言 新浪微博在2014年3月公布的月活跃用户(MAU)已经达到1.43亿 ...

  10. 想染指系统架构?你绝对不可错过的一篇

    本文讲的是想染指系统架构?你绝对不可错过的一篇., 系统设计入门 翻译 有兴趣参与翻译? 以下是正在进行中的翻译: 巴西葡萄牙语 简体中文(已完成) 土耳其语 目的 学习如何设计大型系统. 为系统设计 ...

最新文章

  1. 关于python 中的__future__模块
  2. ExtJs 备忘录(6)—— GirdPanl表格(二) [ 搜索分页 ]
  3. hdu 4966 最小树形图
  4. VTK:直线网格之VisualizeRectilinearGrid
  5. 中兴存储服务器 操作系统,中兴新支点服务器操作系统:企业级的国内服务器操作系统...
  6. 语言速算24点的小窍门_期末备考:小学数学期末常考题型汇总+速算解题思路分析...
  7. 领域驱动设计,让程序员心中有码(六)
  8. leetcode 1449. 数位成本和为目标值的最大数字(dp)
  9. linux数据泵导入command not found_MySQL:数据库结构优化、高可用架构设计、数据库索引优化...
  10. 华为路由器交换机基本配置方法
  11. Java小白学习指南【day43】---Linux
  12. 如何在unity中调用电脑或安卓自带的摄像机
  13. 计算机任务栏的透明颜色设置,详细教您让Win10任务栏全透明_一分钟让Win10任务栏全透明...
  14. python画球面投影_球面投影图片 python opencv实现[附代码]
  15. 关于windows桌面网络图标显示未连接却可以上网的情况
  16. 调试大普RTC芯片驱动-ins5699s
  17. Hibernate课堂笔记
  18. 分享APP软件,发现好玩好用的工具
  19. 纵向抽奖滚动效果代码
  20. 计算机一级证书领取时间和方式

热门文章

  1. mongoDB 使用 mongoVue
  2. 智能车图像处理7-车库的判断
  3. 【多多情报通】拼多多个人店铺怎么升级为企业店铺?怎么转让?
  4. C# SQL拼接字符串
  5. 空号检测/空号检测接口/号码状态查询/号码状态查询接口/号码状态查询api/精准实时版/免费试用
  6. c语言词法分析例子,实验一词法分析器实验报告示例
  7. 录屏直播时,只有部分屏幕的解决办法
  8. SonarLint 默认扫描规则
  9. java程序员 英文简历_Java程序员英文简历范文
  10. 前端开发必备工具之 - TinyPNG