zoukankan      html  css  js  c++  java
  • [转]SSD深度技术解析FTL层算法对性能的影响

     相信大家对美光C400/M4的最新固件提升性能,对于SandForce不同固件之间性能差距的表现还历历在目,一个固件更新竟然可以改变那么大?这到底是啥道理?本次解析我就来谈谈我自己的理解吧。

    这些对性能提升或者限制的根本原因主要是对SSD内部的FTL层做了改动,那么啥是FTL层呢?这是SSD的性能表现最关键的一个层面,里面包含了无数开发技术人员的心血。

    FTL层就是一个让闪存完全模拟传统硬盘操作的软件层,有了FTL层,闪存设备才能使用,FTL层的效率直接影响设备的性能表现。



    FTL层起到的作用主要有下面几部分:

    1.
    性能的表现:

    A. 逻辑和物理地址的映射 (Mapping)
    B. 垃圾回收的处理。 (GC)
    C. 增量空间的供给。
    (OP)
    D. 冷/热数据的交换处理。
    E. Plane,芯片,通道间的并行处理。
    F. 任务请求的排序。
    G.
    缓冲区的管理。
    等等。。。。

    2. 稳定性的表现:

    A. 坏块的管理。
    B. 磨损平衡的处理。
    C.
    掉电恢复的处理。
    D. ECC的处理。
    等等。。。。

    3. 其他功能的表现:

    A. 加密的处理。
    B.
    压缩的处理。
    C.
    重复数据删除的处理。
    等等。。。。

    ------------------分析FTL层的影响------------------------

    我们来看下Barefoot-ECO主控搭配34nm的Intel
    MLC颗粒在原版固件下的性能。

    Barefoot主控制器的参数:
    ▪ ARM7TDMI-S
    ▪ 96KB SRAM
    ▪ SATA
    2.0 (3Gbps)
    ▪ Mobile SDRAM 64MB
    ▪ NAND flash 8/12/16-bit BCH ECC per
    sector
    ▪ SDRAM 2-byte RS ECC per 128 +4 bytes
    ▪ Maximum 64CE’s (4
    channels, 8 banks/ch)
    ▪ System bus running up to
    175MHz

    SSD主控制器是4通道16bit的,所以内部拓扑图如下:



    由于一个Bank是16bit的,但是使用的闪存是8bit的接口,所以用2颗闪存并联,分别处理高8bit和低8bit。




    Barefoot在FTL层里重新定义了一个虚拟Page尺寸=颗粒物理Page尺寸
    X 2(16bit并联)X 2Plane(单颗粒2plane),34nm
    MLC的Page为4KB,所以这里虚拟Page尺寸为16KB。




    上面是采用这个主控的SSD的测试图,颗粒由128GB的Intel
    34nm MLC组成,如果看随机4KB的速度话,9.63MB/s,我们来计算下。



    Intel L63B颗粒参数:(34nm
    MLC)
    Multilevel cell (MLC) technology
    — Page size: 4,320 bytes (4,096 +
    224 bytes)
    — Block size: 256 pages (1,024K + 56K bytes)
    — Plane size:
    2,048 blocks
    — Random read: 50 μs
    — Sequential read: 20 ns
    — Page
    program: 900 μs (TYP)
    — Block erase: 2 ms
    (TYP)




    内部操作是这样的,16KB拆分成4个4KB,分别写入一个通道的颗粒A(高8bit)和颗粒B(低8bit),然后每个颗粒里有2个Plane(T1代表Plane
    1,T2代表Plane 2)

    时间消耗计算: 颗粒A(T1)约等于 4320 X 20ns = 86.4μs . 颗粒A(T2)约等于 4320
    X20ns = 86.4μs 颗粒B(T1)约等于 4320 X 20ns = 86.4μs . 颗粒B(T2)约等于 4320 X20ns =
    86.4μs
    总时间消耗(16KB编程总时间):   约等于 (86.4μs X 4) + 900μs = 1.245ms。

    IOPS计算:1秒/1.245ms 约等于 800IOPS, 800IOPS X 16KB = 12.8MB/s ,
    去掉主控指令,数据包,ECC,主机接口延迟等等开销(20%),最后得到接近10MB/s的随机4KB性能。



    如果我们把颗粒换成SLC的话,因为SLC的编程时间比MLC颗粒短了3倍以上,因此采用这个算法的主控随机4KB速度也会提高约3倍。下面这个就是SLC的颗粒跑的成绩。




    如果我们改动下FTL层的算法,把指令集中起来发送到全部4个通道会如何?




    理论上来说这样做之后,随机4KB性能可以提高接近4倍,实际表现会如何?



    这么的改动后,128GB
    MLC的颗粒已经可以达到甚至超过之前FTL算法搭配SLC的性能。

    很惊讶吧,即使完全相同的硬件,不同的FTL就可以造成那么大的差距,所以说FTL层影响SSD的性能发挥一点不过分。
    这也很好的解释了即使Intel
    510和美光C400使用的主控相同,但是由于固件内部FTL层的代码不同造成了完全2种类型的性能表现。

    本文总结:以当前工艺来说,一个闪存芯片的速度(MLC
    Die),一般来说最大只有持续读取150MB/s附近,持续写入速度也不会超过50MB/s(同步模式或者DDR模式)。如果SSD在读写持续文件时,只使用1个通道内的1个闪存芯片来读写的话,那么大家会见到SATA
    6G接口的持续只有150MB/s和50MB/s的SSD。可想而知,SSD的操作是靠着把一个大文件拆分,经过主控制器的各个通道,分别写入通道下的所有闪存内,来达到高速度的道理。上文中,虚拟Page起到的主要就是合并拆分的作用,但这个定义并不适用所有的SSD控制器FTL层的操作方式,FTL层是各家主控固件的机密,做法各异。

    【转自】http://bbs.pceva.com.cn/archiver/tid-26362.html?page=1

  • 相关阅读:
    嘉年华专访 | 我有故事,你有酒吗?
    adminset 管理员认证
    adminset 管理员权限
    C/C++ scanf 函数中%s 和%c 的简单差别
    C/C++ scanf 函数中%s 和%c 的简单差别
    Boost Log 基本使用方法
    Boost Log 基本使用方法
    Boost Log 基本使用方法
    Boost Log 基本使用方法
    mybatis if test标签的使用
  • 原文地址:https://www.cnblogs.com/shelly/p/2786218.html
Copyright © 2011-2022 走看看