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. 【题解】CatOJ C0458C 滑动窗口定期重构

    标题 trick 的名字我也不知道是什么,就这样吧. 首先有显然的 dp 式子:\(f(i)=\min \{f(j) \times \max\{a_{j+1},\dots,a_i\}\}\).考虑怎么 ...

  2. 《编译原理》阅读笔记:p18

    <编译原理>学习第 3 天,p18总结,总计 14页. 一.技术总结 1.assembler (1)计算机结构 要想学习汇编的时候更好的理解,要先了解计算机的结构,以下是本人学习汇编时总结 ...

  3. KEIL5 编译生成 hex、bin文件

    --- title: file_name date: 2020-05-31 10:27:10 categories: tags: - stm32 - keil - config --- KEIL 工程 ...

  4. win10: pyinstaller在python2和python3环境下的适应性配置

    win10:pyinstaller在python2和python3环境下的适应性配置 前言 pyinstaller是一个非常优秀的python可执行程序打包工具,在windows下打包成.exe文件, ...

  5. Linux 提权-SUID/SGID_2

    本文通过 Google 翻译 SUID | SGID Part-2 – Linux Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释 ...

  6. SpringBoot定义异步任务类需要获取结果

    注意点: 要把异步任务封装到类里面,不能直接写到Controller 增加Future<String>返回结果AsyncResult<String>("task执行完 ...

  7. truncate table 与delete的区别

    1.DELETE ・DML语言 ・可以回退 ・可以有条件的删除 DELETE FROM 表名 WHERE 条件2.TRUNCATE TABLE ・DDL语言 ・无法回退 ・默认所有的表内容都删除 ・删 ...

  8. 测试人必会 K8S 操作之 Dashboard

    在云计算和微服务架构的时代,Kubernetes (K8S) 已成为管理容器化应用的标准.然而,对于许多新手来说,K8S 的操作和管理常常显得复杂而神秘.特别是,当你第一次接触 K8S Dashboa ...

  9. [oeasy]python0028_直接运行_修改py文件执行权限_设置py文件打开方式

    ​ 直接运行 回忆上次内容 我们把两个程序整合起来了 可以持续输出当前时间 每秒都更新 ​ 编辑 但是我想在 shell 里面 只输入文件名(./sleep.py)并回车 就能不断输出时间 可能吗? ...

  10. AT_tenka1_2015_qualB_b 题解

    洛谷链接&Atcoder 链接 本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读. 题目简述 给定一个集合形式,判断此集合是 dict 还是 set. 思路 简单的模拟题. 首先需 ...