1.SSD的基本概念以及结构

SSD是一种以半导体(半导体闪存)作为存储介质吗,使用纯电子电路实现的存储设备。

SSD硬件包括几大组成部分:主控、闪存、缓存芯片DRAM(可选,有些SSD上可能只有SRAM,并没有配置DRAM)、PCB(电源芯片、电阻、电容等)、接口(SATA、SAS、PCIe等),其主体就是一块PCB

1.1主控的主要功能

(1)负责数据的读些管理:将主机请求的数据读写操作在NAND闪存中完成,并进行必要的缓冲、排序、纠错。

(2)垃圾回收:根据闪存的特性,数据不能直接覆盖,需要将数据进行擦除后再重新写入,主控来管理这个过程

(3)磨损均衡:主控需要控制闪存各部分的擦写次数,这样才能避免部分闪存块因过度擦写而损坏

(4)错误纠正:我了解到有ECC纠错,主要原理是通过汉明码纠正出发生bit反转的位置。因为大多数的bit反转可以通过重启解决,所以ecc基本都用在服务器的存储设备中,例如内存和固态。且价格相对比消费级产品较贵。

(5)固件更新:很多产品使用时都会出现bug或是一些不足,通过固件更新来改善或修复这些问题。

(6)加密:保证数据安全

1.2闪存

(1)闪存是一种非易失性存储器。非易失性就意味着断电后数据仍然会保留。闪存的存储单元是由浮动栅极晶体管组成的阵列,每个存储单元可以存储一位或者多位的数据,例如以下类型的单元:

SLC 单层单元、MLC多层单元,TLC三层单元、QLC四层单元。这几个存储的单元存储数据的位数依次增加,可靠性与速度依次降低成本依次下降。

(2)读写特性:写入时需要将数据写进闪存页,并且再写入数据是不能直接覆盖,写入速度受限于擦除速度。

2.NVME协议基础

整个固态硬盘存储基本流程其实很简单,数据经过计算机等设备的物理接口,此时进入物理存储层;接着通过闪存转换层,由物理信息转换成逻辑代码,并被计算机识别,整个存储过程结束。而在存储过程中,存在着一系列协议和指令,去引导相关设备进行工作,其中指令协议就起到总体指挥调配的作用,而逻辑协议则是作用于逻辑层中。

常见消费级指令协议、逻辑协议以及物理接口旗下的名词配对关系。

物理接口

逻辑协议

指令协议

SATA

AHCI

ATA

M.2/PCIe

PCIe/U2

NVMe

NVMe

  2.1NVME 定义和作用

NVMe,全称为Non-Volatile Memory Express, 是一种基于非易失性存储器的传输规范,是跑在PCIE接口上的标准协议制定了Host与SSD之间的通讯命令格式以及命令的执行过程.NVME的诞生以及优势的详细介绍: https://mp.weixin.qq.com/s/nVF2LJlZzlQwWn6OI0cb-g

  2.2NVME 命令

NVME包含两种命令:Admin CommandIO Command, Admin Command作用:用于Host管理和控制SSD, IO Command作用:用于Host和SSD之间传输数据

  2.3nvme命令执行过程

  • 1. Host写指令到SQ中:
    主机(Host)生成一个写命令,并将其写入到NVMe提交队列(Submission Queue,SQ)中。这个队列位于主机的内存中,队列中存储了多个要执行的命令。每个命令都有一个描述符,其中包含了命令类型(如读、写)、目标地址、数据长度等信息。
  • 2. Host写DoorBell,通知SSD取指令:
    主机在将命令写入提交队列后,会通过写入“DoorBell寄存器”通知SSD控制器,告知有新的命令已经放入队列。这个寄存器类似于一个“门铃”,它是SSD控制器用于接收通知的方式。
  • 3. SSD收到通知,从SQ中取走指令:
    SSD控制器接收到主机的通知后,会读取提交队列中的命令。SSD控制器知道从哪里开始读取命令,因为主机会更新队列的“头指针”,指向最新放入的命令。
  • 4. SSD执行指令:
    SSD控制器解析命令,根据命令的类型执行相应的操作。例如,对于写命令,SSD会将主机提供的数据写入到内部的NAND闪存中。对于读命令,SSD会从NAND闪存中读取数据并准备返回给主机。
  • 5. SSD执行指令完成,将执行结果写入CQ中:
    当SSD完成了命令执行后,会将执行结果写入完成队列(Completion Queue,CQ)中,就像每次写个函数,接口都需要有返回值。CQ同样位于主机内存中,用来存储每个命令的执行结果和状态信息(如成功、失败或错误代码)。
  • 6. SSD生成中断,通知Host指令执行完成:
    SSD在将结果写入完成队列后,会向主机发出一个中断信号,通知主机该命令已经完成。这个中断可以通过硬件中断的形式触发,确保主机能够及时响应。
  • 7. Host收到通知,开始处理CQ,查看指令完成后返回的状态和数据:
    主机收到中断后,会处理完成队列中的条目,查看每个命令的执行结果。这包括检查状态码,确定操作是否成功,以及读取相关的数据或错误信息。
  • 8. Host写DoorBell,通知SSD执行结果已处理,然后释放CQ:
    主机处理完完成队列中的条目后,会再次通过写DoorBell寄存器通知SSD控制器,表示这些完成队列条目已经被处理,可以释放空间用于后续的命令结果。SSD控制器收到这个通知后,会更新队列的“尾指针”,确保下次新的结果可以正确写入。

总结:
整个流程展示了NVMe协议中主机和SSD之间的高效通信机制,充分利用了提交队列和完成队列的并行处理能力,实现了高速、低延迟的数据读写。每一步中,通过“DoorBell”寄存器和中断机制,确保了主机和SSD之间的快速、同步协调。这个过程让我想到了http协议的三次握手与四次挥手。

3.SSD基本工作原理

操作系统对SSD发出请求,文件系统需要将这些请求转换成SSD能够识别的命令才能进行对应的操作,就像电源适配器一样。SSD的输入是命令(Command),输出是数据(Data)和命令状态(Command Status)。SSD前端(Front End)接收用户命令请求,经过内部计算和处理,输出用户所需要的数据或状态。

SSD系统调用

3.1SSD的读写

在写入时:

(1) 主机发送写命令:主机(如电脑、服务器)通过接口(如NVMe、SATA等)向SSD发送写命令,并附带要写入的数据。这些命令通过存储协议(如NVMe协议)进行传输。
  (2)SSD接收命令并缓存数据:SSD接收到写命令后,首先会将数据暂时存储在其内部的RAM缓存中。这个缓存是高速度、低延迟的存储区域,可以极大地提高数据处理速度,避免频繁的闪存写入操作带来的延迟。(缓存系统一般都是用来提高读写速度的小容量、高速存储工具) 在某些情况下,数据也可能直接写入到SSD的SLC缓存区域,这种区域利用了SLC(Single-Level Cell)闪存的高写入速度特性来进一步加速写入。
  (3)FTL(闪存转换层)分配地址:FTL(Flash Translation Layer)是SSD固件中的一个关键部分。它负责将主机看到的逻辑地址(LBA,Logical Block Address)映射到实际的物理闪存地址。当数据存入RAM缓存后,FTL会为每个逻辑数据块分配一个具体的闪存物理地址。由于NAND闪存的特性,数据不能覆盖写入,所以FTL还要考虑磨损均衡(Wear Leveling)和垃圾回收(Garbage Collection)等任务,确保存储寿命和性能的优化。
  (4)数据积累与写入闪存:当缓存中的数据达到一定数量或触发某些条件(如缓存满或达到时间阈值)后,FTL会生成一个写请求,准备将数据写入实际的NAND闪存。这个写请求会被发送到SSD的后端控制器,后端控制器根据请求中的信息,将缓存中的数据写入到对应的NAND闪存块中。
  (5)NAND闪存写入:SSD的后端控制器按照FTL分配的物理地址,将数据从缓存写入到NAND闪存的对应页中。由于NAND闪存是以页为单位进行写入,以块为单位进行擦除的,因此这个写入过程可能涉及复杂的页、块管理操作。如果写入的页在一个新的闪存块中,写操作会比较直接。但如果需要在已经使用的块中写入新数据,可能会触发垃圾回收操作,移动和合并有效数据,腾出空间进行写入。
  (6)写入完成与确认:数据成功写入NAND闪存后,SSD会更新相应的映射表,并向主机发送写入完成的确认信息。之后,这些数据就会永久保存在闪存中,直到需要更新或删除为止。

在读取时:host发来读取命令,SSD就需要根据逻辑地址映射出需要读取需要读取数据的物理地址,使后端从闪存将数据传输到缓存,前端再将这些数据返回给host

学习SSD—day1_20240814的更多相关文章

  1. [计算机视觉][神经网络与深度学习]SSD安装及其训练教程

    SSD的安装 在home目录下,获取SSD的代码,下载完成后有一个caffe文件夹 git clone https://github.com/weiliu89/caffe.git cd caffe g ...

  2. Messes in Reading Source Coding of SSD

    这里记录在学习SSD源码过程中用到的相关内容 keras.applications.imagenet_utils.preprocess_input(): 用来将读入的原始图片张量转换成为需要Image ...

  3. 【目标检测】SSD:

    slides 讲得是相当清楚了: http://www.cs.unc.edu/~wliu/papers/ssd_eccv2016_slide.pdf 配合中文翻译来看: https://www.cnb ...

  4. keras中自定义Layer

    最近在学习SSD的源码,其中有两个自定的层,特此学习一下并记录. import keras.backend as K from keras.engine.topology import InputSp ...

  5. 对CNN感受野一些理解

    对CNN感受野一些理解 感受野(receptive field)被称作是CNN中最重要的概念之一.为什么要研究感受野呐?主要是因为在学习SSD,Faster RCNN框架时,其中prior box和A ...

  6. 【深度学习】目标检测算法总结(R-CNN、Fast R-CNN、Faster R-CNN、FPN、YOLO、SSD、RetinaNet)

    目标检测是很多计算机视觉任务的基础,不论我们需要实现图像与文字的交互还是需要识别精细类别,它都提供了可靠的信息.本文对目标检测进行了整体回顾,第一部分从RCNN开始介绍基于候选区域的目标检测器,包括F ...

  7. 深度学习笔记(七)SSD 论文阅读笔记简化

    一. 算法概述 本文提出的SSD算法是一种直接预测目标类别和bounding box的多目标检测算法.与faster rcnn相比,该算法没有生成 proposal 的过程,这就极大提高了检测速度.针 ...

  8. R-CNN,SPP-NET, Fast-R-CNN,Faster-R-CNN, YOLO, SSD, R-FCN系列深度学习检测方法梳理

    1. R-CNN:Rich feature hierarchies for accurate object detection and semantic segmentation 技术路线:selec ...

  9. 『TensorFlow』SSD源码学习_其二:基于VGG的SSD网络前向架构

    Fork版本项目地址:SSD 参考自集智专栏 一.SSD基础 在分类器基础之上想要识别物体,实质就是 用分类器扫描整张图像,定位特征位置 .这里的关键就是用什么算法扫描,比如可以将图片分成若干网格,用 ...

  10. R-CNN,SPP-NET, Fast-R-CNN,Faster-R-CNN, YOLO, SSD系列深度学习检测方法梳理

    1. R-CNN:Rich feature hierarchies for accurate object detection and semantic segmentation 技术路线:selec ...

随机推荐

  1. 记一次 Edge 及谷歌 Chrome 浏览器兼容性冲突的解决

    目录 记一次 Edge 及谷歌 Chrome 浏览器兼容性冲突的解决 浏览器兼容性冲突症状 解决方法 1. 把本机和远程的 8235 和 8237 端口屏蔽,包括 TCP 和 UDP 端口 2. 在 ...

  2. Spring之webMvc异常处理

    异常处理可以前端处理,也可以后端处理. 从稳妥的角度出发,两边都应该进行处理. 本文专门阐述如何在服务端进行http请求异常处理. 一.常见的异常类型 当我们做http请求的时候,会有各种各样的可能错 ...

  3. Linux设备模型:5、device和device driver

    作者:wowo 发布于:2014-4-2 19:28 分类:统一设备模型 http://www.wowotech.net/device_model/device_and_driver.html 前言 ...

  4. MAPREDUCE中的序列化

    Java的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带很多额外的信息(各种校验信息,header,继承体系....),不便于在网络中高效传输: 所以,hadoo ...

  5. SpringBoot可视化接口开发工具magic-api

    magic-api简介 magic-api是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller.Service ...

  6. 2024 年 Visual Studio 实用插件集合

    前言 在软件开发领域,选择正确的工具可以极大地提升开发效率和质量. Visual Studio作为微软推出的强大集成开发环境(IDE),通过安装合适的插件,可以进一步增强其功能,满足开发者多样化的需求 ...

  7. 介绍几款强大实用的 IDEA 插件,助力大家开发【工欲善其事必先利其器】

    俗话说:"工欲善其事必先利其器",本问介绍几款强大实用的 IDEA 插件,助力大家开发. 希望大家做一个聪明又努力的人,而不只是一个努力的人. Alibaba Java Codin ...

  8. 使用ES6中Class实现手写PromiseA+,完美通过官方872条用例

    目录 Promise出现的原因 myPromise的实现要点 myPromise的实现 myPromise - 实现简单的同步 myPromise - 增加异步功能 myPromise - 链式调用( ...

  9. GIS前沿技术

    无论是初步接触到GIS的学生,还是对GIS已经有一定的了解的从业者,肯定都非常关心两个问题:GIS有没有发展前景,GIS有哪些应用价值? 关于这两个问题,笔者的答案是GIS作为一门融合了空间数据采集. ...

  10. Microsoft Azure AI 机器学习笔记-1

    机器学习基础: 数据与建模: 数据统计和数学建模是处理数据和描述现实情况的关键工具. 观测值是记录的数据实例,而特征是描述观测对象的属性. 标签则代表监督式学习中的已知输出值. 学习类型: 监督式学习 ...