zoukankan      html  css  js  c++  java
  • SSD简介

    SSD简介

    参考资料:《深入浅出SSD》

    概念

    SSD(Solid State Drive),即固态硬盘,是一种以半导体闪存(NAND FLASH)为介质的存储设备。

    SSD组成

    SSD主要部件为控制器和存储芯片,

    SSD硬件包括主控,闪存 ,缓存芯片DRAM(可选),PCB(电源芯片,电阻,电容等),接口(SATA, PCIE等),其主体就是一块PCB。

     

    从软件角度看SSD

    SSD内部运行固件(Firmware)负责调度数据从接口端到介质端的读写,还包括嵌入核心的内存介质寿命和可靠性管理的调度算法以及SSD内部算法。

    SSD三大技术核心

    SSD控制器,闪存和固件

    SSD的优势

    1)性能好

    读写速度比HDD有几倍到几百倍的差异,随机读写性能(速度和时延)差异最为明显

    2)功耗低

    待机功耗可降到毫瓦级别

    功耗消耗

    SSD的功耗主要消耗在闪存上,读取数据和写入并发在后端的闪存,闪存的单位读写功耗决定性的,

    如16KB闪存页(Page)的读写功耗决定了主机端满负荷下SSD的平均读写功耗;

    其次影响读写功耗的是主控功耗,其约占功耗的20%

    科学的比较功耗

    power/IOPS,单位IOPS性能上的功耗输出,该值越低越好

    3)抗震防摔

    SSD内部不存在任何机械部件

    4)无噪声

    5)身形小

    SSD的工作原理

    用户操作SSD的流程

    用户从操作系统应用层对SSD发送请求

          V

    文件系统将读写请求路径驱动转化为相应的符合协议的读写和其他命令

          V

    SSD收到命令执行相应操作,输出结果

    每个命令的输入和输出经协议标准组织标准化

    SSD的输入是命令,输出是数据和命令状态

    SSD三大功能模块

    1)前端接口和相关的协议模块

    负责和主机直接通信,接收主机发送的命令和数据,命令经SSD处理后最终交由前端返回命令状态和数据给主机。

    SSD通过诸如SATA, PCIE等接口与主机相连,实现对应的ATA和NVME协议。

    2)FTL模块(Flash Translation Layer)

    实现让每个闪存均衡写入,坏块管理,读干扰处理,数据保持处理,错误处理等

    3)后端和闪存通信模块

    SSD进行写的例子

    主机通过接口发送写命令给SSD

    SSD接收命令后执行,并接收主机要写入的数据

    数据一般会缓存在SSD内部的RAM中

    FTL会为每个逻辑数据块分配一个内存地址,当数据凑到一定数量后,

    FTL便会发送写闪存请求到后端

    后端根据写请求,把缓存中的数据写到对应的内存空间

    闪存说明

    1)闪存不能覆盖写,所以闪存块需要擦除才能写入

    2)随着闪存的写入,闪存空间会产生垃圾,即无效数据,FTL需要做垃圾回收,以腾出闪存空间来写用户的数据

    案例说明:

    我们以下图为例,Block x和Block y上有很多垃圾数据,其中Block x上的A, B, C为有效数据,Block y上的D, E, F, G

    为有效数据,垃圾回收就是把一个或者多个Block上的有效数据搬出来集中写到某个空闲的Block上,当这些Block上的

    有效数据都搬走后,FTL便能够擦除这些Block(x,  y),然后可以把这些Block(x, y)拿出来供SSD写入新的数据了

    3)闪存是有寿命的,每个闪存不能一直写数据,因此为保证最大的数据写入量,FTL必须尽量让每个闪存均衡写入,即磨损平衡(wear leveling),

    这也是我们测试要测试SSD WAI的原因

    主机读取SSD数据的流程

    主机发来的某个数据块,不是写在闪存的固定位置,SSD可以为其分配任何可能的闪存空间写入,

    因此SSD内部需要FTL这么一个东西,来完成逻辑数据块到闪存物理空间的转换或者映射。

    Step1. SSD内部维护了一张逻辑地址到物理地址的映射表

    Step2. 当主机发送读命令时,SSD根据需要读取的逻辑数据块查找该映射表,获取这些逻辑数据在闪存空间所在的位置

    Step3. 后端便能从闪存上把对应数据读取到SSD内部缓存空间,然后把这些数据返回给主机

    映射表的例子

    SSD大小为256G,逻辑块数据大小为4KB -> 256GB/4KB = 64M个逻辑数据块; 

    每个逻辑数据块在闪存空间都有一个存储位置,即一个映射,闪存大小用4字节表示;

    存储64M个逻辑数据块在闪存中的地址需要64M*4B = 256M大小的映射表。

  • 相关阅读:
    Java实现 计蒜客 拯救行动
    Java实现 计蒜客 拯救行动
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 173 二叉搜索树迭代器
    Java实现 LeetCode 173 二叉搜索树迭代器
    Visual Studio的SDK配置
    怎样使用CMenu类
    mfc menu用法一
  • 原文地址:https://www.cnblogs.com/marton/p/12423202.html
Copyright © 2011-2022 走看看