固态硬盘架构

news/2024/11/24 22:50:07/

SSD系统架构

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

图2-1 SSD主控模块硬件图

图2-1是一个SSD系统架构的概略图,这款主控采用ARM CPU,主要分为前端和后端两大部。前端(Host Interface Controller,主机接口控制器)跟主机打交道,接口可以是SATA、PCIe、SAS等接口。后端(Flash Controller,闪存控制器)跟闪存打交道并完成数据编解码和ECC。除此之外还有缓冲(Buffer),DRAM。模块之间通过AXI高速和APB低速总线互联互通,完成信息和数据的通讯。在此基础之上,由SSD 固件开发者构筑固件(Firmware)统一完成SSD产品所需要的功能,调度各个硬件模块,完成数据从主机端到闪存端的写入和读取。

前端

主机接口:与主机进行通讯(数据交互)的标准协议接口,当前主要代表为SATA、SAS和PCIe等。表2-1是三者的接口速率:

表2-1 SATA/SAS/PCIe接口速率

接口

速率(@2017,Gb/s)

SATA

6/3/1.5

SAS

12/6

PCIe

通道数 * 8(PCIe 3.0)

SATA的全称是Serial Advanced Technology Attachment(串行高级技术附件),一种基于行业标准的串行硬件驱动器接口,是由Intel、IBM、Dell、APT、Maxtor和Seagate公司共同提出的硬盘接口规范。2001年,由Intel、APT、Dell、IBM、希捷、迈拓这几大厂商组成的SATA委员会正式确立了SATA 1.0规范,在当年的IDF Fall 大会上,Seagate宣布了SATA 1.0标准,正式宣告了SATA规范的确立。

图2-2 SATA接口

SAS(Serial Attached SCSI)即串行连接SCSI,是新一代的SCSI技术,和现在流行的Serial ATA(SATA)硬盘相同,都是采用串行技术以获得更高的传输速度,并通过缩短连接线改善内部空间等。SAS是并行SCSI接口之后开发出的全新接口,此接口的设计是为了改善存储系统的效能、可用性和扩充性,并且提供与SATA硬盘的兼容性。SAS的接口技术可以向下兼容SATA。具体来说,二者的兼容性主要体现在物理层和协议层的兼容。在物理层,SAS接口和SATA接口完全兼容,SATA硬盘可以直接使用在SAS的环境中;从接口标准上而言,SATA是SAS的一个子标准,因此SAS控制器可以直接操控SATA硬盘,但是SAS却不能直接使用在SATA的环境中,因为SATA控制器并不能对SAS硬盘进行控制。在协议层,SAS由3种类型协议组成,根据连接的不同设备使用相应的协议进行数据传输。其中串行SCSI协议(SSP)用于传输SCSI命令;SCSI管理协议(SMP)用于对连接设备的维护和管理;SATA通道协议(STP)用于SAS和SATA之间数据的传输。因此在这3种协议的配合下,SAS可以和SATA以及部分SCSI设备无缝结合。

图2-3 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展示的是PCIe接口,包括卡式和U.2:

图2-4 PCIe接口式插卡(AIC)

图2-5 U.2接口

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

从硬件模块上来看,前端有SATA/SAS/PCIe PHY层,俗称物理层,接收串行比特数据流,转化成数字信号给前端后续模块处理。这些模块处理NVMe/SATA/SAS命令,它接收并处理一条条命令和数据信息,涉及到数据搬移会使用到DMA。一般命令信息会排队放到队列中,数据会放到SRAM快速介质中。如果涉及到加密和压缩功能,前端会有相应的硬件模块做处理,软件无法应对压缩和加密的快速的需求,会成为性能的瓶颈。

从协议角度,以一条SATA Write FPDMA命令为例,从主机端文件系统出发发出一条写命令请求,到主板南桥AHCI寄存器级别的写命令操作,忽略文件系统到AHCI路径的操作细节,从SSD前端总线上看会发出如下的写交互操作:

Step 1: 主机在总线上发出Write FPDMA命令FIS(Frame Information Structure,帧信息结构,是SATA为了实现异步传输数据块而使用的封包);

Step 2: SSD收到命令后,判断自己内部写缓存(Write Buffer)是否有空间去接收新的数据:如果有,则发出DMA Setup FIS到主机端,否则什么也不发,主机端处于等待状态。(这叫流控:数据流量控制);

Step 3: 主机端收到DMA Setup FIS后,发送不大于8KB数据的Data FIS给设备;

Step 4: 重复Step 2和Step 3直到数据全部发送完毕;

Step 5: 最后步骤设备(SSD)发送一个状态Status FIS给主机,表示从协议层面这条写命令完成全部操作。当然Status可以是一个good status或者一个bad/error status,表示这条Write FPDMA命令操作正常或者异常完成。

图1-6 SATA Write FPDMA命令协议处理步骤

SSD把命令和数据接收到SSD内部缓冲区之后还需要做些什么呢?任务还没完成,前端固件模块还需要对命令进行解析,并分派任务给中端FTL。命令解析(Command Decoder)将命令FIS解析成固件和FTL(Flash Translation Layer)能理解的元素:

· 这是一条什么命令,命令属性是读还是写类型;

· 如果是读写类型命令,命令的起始 LBA和数据长度;

· 命令的其他属性,如是否是FUA命令,和前一条命令LBA是否连续(即是连续还是随机命令)。

当命令解析完成后,放入命令队列里等待中端FTL排队去处理,由于已经有了起始LBA和数据长度两大主要信息元素,FTL可以准确地映射LBA空间到闪存的物理空间。至此,前端硬件和固件模块完成了它应该完成的任务。

主控CPU

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

通常我们所说的固件就运行在CPU核上,分别有代码存储区I-RAM和数据存储区D-RAM。如果多核CPU,需要注意的是软件可以是对称多处理(SMP)和非对称多处理(AMP)。对称多处理多核共享OS和同一份执行代码,非对称多处理是多核分别执行不同代码。前者多核共享一份I-RAM和D-RAM,后者每核对应一份I-RAM和D-RAM;前者资源共享,后者多核每核独立运行,没有内存抢占导致代码速度执行变慢的问题。当SSD的CPU要求计算能力更高时,除增加核数和增加单核CPU频率,AMP的方式设计更加适应计算和任务独立的要求,消除了代码和数据资源抢占的导致执行速度过慢的问题。

固件的设计根据CPU核数的设计,充分发挥多核CPU的计算能力是固件设计考虑的一方面,另外固件考虑任务划分,分别加载到不同CPU上执行,达到并行处理的同时也能让所有CPU有着合理均衡的负载,不至于有的CPU忙死有的CPU闲死,这是固件架构设计要考虑到的重要内容,目标是让SSD输出最大的读写性能。

SSD CPU的外围模块包括像UART/GPIO/JTAG是程序必不可少的调试端口,定时器模块Timer,还有其他的内部模块像DMA、温度传感器、Power regulator模块等等。

后端

在前文中关于后端和闪存有过一些描述,这里从SSD主控角度来分析一下后端硬件模块。

后端两大模块:ECC模块和闪存控制器。

图2-7 SSD中的闪存控制器和ECC模块

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

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

闪存控制器如何和闪存连接和通讯的,从单个闪存角度,连接的引脚如下,一个Die/LUN是一个闪存命令执行的基本单元,所以闪存控制器和闪存连接按照如下引脚连接:

l 外部接口:8个I/O口,5个使能信号(ALE、CLE、WE#、RE#、CE#),1个状态引脚(R/B#),1个写保护引脚(WE#);

l 命令、地址、数据都通过8个I/O口输入输出;

l 写入命令、地址、数据时,都需要将WE#、CE#信号同时拉低;数据在WE#上升沿被锁存;

l CLE、ALE用来区分I/O引脚上传输的是数据还是地址;

图1-8 闪存芯片接口

从闪存控制器角度,为了性能需求需要并发多个闪存Die/LUN,通常配置有多个通道 (channel)。一个通道挂多少个闪存Die/LUN,其一取决于SSD容量,其二取决于性能需求,Die/LUN个数越多,并发的个数越多,性能越好。

Die/LUN是闪存通讯的最小基本管理单元,配有上述的一套总线包括:8个I/O口,5个使能信号(ALE、CLE、WE#、RE#、CE#),1个状态引脚(R/B#),1个写保护引脚(WE#)…

如果一个通道上挂了多个闪存Die/LUN,每个Die共用每个通道上一套总线,那闪存控制器如何识别和哪个Die通讯呢?答案是选通信号CE#,在闪存控制给特定地址的闪存Die发读写命令和数据前,先选通对应Die的CE#信号,然后进行读写命令和数据的发送。一个通道上可以有多个CE,SSD主控一般设计为4-8个,对于容量而言选择有一定的灵活度。


http://www.ppmy.cn/news/337496.html

相关文章

SATA硬盘和SSD硬盘性能测试对比

测试工具: fio 测试对象: SATA硬盘, SSD硬盘 测试项目:顺序读、随机读、顺序写、随机写 1. 顺序读 测试命令:fio -name iops -rwread -bs4k -runtime60 -iodepth 32 -filename /dev/sda -ioengine libaio -direct1 …

固态硬盘寿命天梯 2023.3

排名品牌型号颗粒寿命接口#1INTELP5800x/P5810x傲腾100DWPDU.2#1大普微/铠侠X2900PSLC100DWPDU.2#3INTELP4800x/P4801x傲腾60DWPDU.2/AIC (P4800x), m.2 (P4801x)#3铠侠FL6SLC60DWPDU.2#5三星SZ1735SLC30DWPDU.2#5三星SZ985SLC30DWPDm.2#7铠侠PX04/05SHB/SHQMLC25DWPDSAS#8INTE…

三星mzvlb1t0hblr是什么固态_固态硬盘跑分速度天梯图/天梯表,最全搜集。

型号容量跑分 Seagate FireCuda 520 SSD ZP1000GM30002931.5 GB34451 CSSD-M2B1TPG3VNF931.5 GB33890 NVMe Force MP600931.5 GB33382 Gigabyte AORUS NVMe Gen4 M.2 1TB931.5 GB32164 Corsair Force MP600 1TB931.5 GB31789 Sabrent ROCKET 4.0 1TB931.5 GB31586 Seagate Fi…

GTX 750TI 使用 ffmpeg 时无法用 GPU HEVC(h.265) 进行加速

官网版本好像不是能加速的&#xff0c;所以在github上找到一个已经带gpu加速的。 https://github.com/illuspas/ffmpeg-hw-win32 GPU加速命令格式&#xff1a; ffmpeg.exe -hwaccel cuvid -c:v h264_cuvid -i <input.mp4> -vf scale_npp1280:720 -c:v h264_nvenc <out…

tensorflow配置GTX1660Ti+window10

参考文章&#xff1a; 配置环境 https://segmentfault.com/a/1190000023276876 https://blog.csdn.net/Yuan_mingyu/article/details/110856289 jupyter配置 https://blog.csdn.net/qq_35182128/article/details/104347313 安装完毕CUDA10.2 安装cuda10.2cudnn8tf2.8后发现运…

安装 Win10+GTX1050ti+cuda8.0+cuDNN v7.1.4

文章目录 一、前言本机配置 二、安装准备三、安装四、验证CUDA安装是否成功&#xff1a; 一、前言 大家好&#xff0c;之前使用 tensorflow 和 pytorch 是都是用 CPU 速度太慢&#xff0c;后来买了好机器&#xff0c;想着这下可以使用GPU来训练模型了吧&#xff01; 马上网上…

win7_64+GeForce GTX750Ti + Anaaonda3 4.4+tensorflow1.2+cuda8.0+cuDNN5.1安装记

2017-06-16 将&#xff1a; sess.run(tf.global_variables_initializer()) 拆分为两句话&#xff1a; inittf.global_variables_initializer() sess.run(init) 问题莫名不见了&#xff01;&#xff01;&#xff01; -------------------------------------------------…

GTX 750等低配显卡如何玩转Deepfakes?

这里说的Deepfakes软件还是DeepFaceLab&#xff0c;人工智能换脸&#xff0c;是使用深度学习方法来实现的。而深度学习程序对电脑配置要求是非常高的&#xff0c;尤其是跑模型这个环节。很多低配电脑&#xff0c;根本就跑步起来。比如像GTX 750 &#xff0c;1G显存。 默认情况…