来自 http://www.ssdfans.com/?p=1840:

写放大WA:

对空盘来说(未触发GC),写放大一般为1,即Host写入多少数据,SSD写入闪存也是多少数据量(这里忽略SSD内部数据的写,如映射表的写入)。在Sandforce控制器出来之前,写放大最小值为1。但是由于Sandforce控制器内部具有实时数据压缩模块,它能对Host写入的数据进行实时压缩,然后再把它们写入到闪存。举个例子,Host写入8KB数据,经压缩后,数据变为4KB,如果这个时候还没有垃圾回收,那么写放大就只有0.5。

一共36个方块,其中有12个有效数据块,我们做完垃圾回收后,需把这12个有效数据块写回:

后面还可以写入24个方块的Host数据。因此,为了写这24个方块的Host数据,SSD实际写了12个方块的原有效数据,再加上该24个方块的Host数据,总共写入36个方块数据,按照写放大定义。WA= 36/24 = 1.5 。

写放大越大,意味着写入闪存的数据越多,对闪存磨损就越厉害,因此,SSD设计的一个目标不是没有蛀牙,而是让WA尽量小。减小写放大,可以使用前面提到的压缩办法(主控决定),顺序写也可以减小写放大(垃圾集中,但顺序写可遇不可求),还有就是增大OP (这个可控)。

增大OP怎么就能减小写放大

先定义OP比例=(闪存空间-用户空间)/用户空间。

还是以前面SSD空间为例,SSD容量是180个小方块,当OP是36个小方块时,整个SSD空间为216个小方块,OP比例是36/180= 20%。那么180个小方块的Host数据平均分摊到216个小方块时,每个小方块的平均有效数据为180/216 = 0.83,一个Block上的有效数据为0.83*9 = 7.5,也就是一个Block上面平均有7.5个小绿块和1.5个小红块。为了写1.5个Host数据方块,需要写9个方块的数据(原有7.5个有效数据,加1.5个Host数据),写放大是9/1.5 = 6。

如果整个SSD闪存空间不变,还是216个小方块,调整OP比例至72个小方块 (OP比例50%),因此,SSD容量就变成144个小方块。144个小方块的Host数据平均分摊到216个小方块时,每个小方块的平均有效数据为144/216 = 0.67,一个Block上的有效数据为0.67*9 = 6,也就是一个Block上面平均有6个小绿块和3个小红块。为了写3个Host数据方块,需要写9个方块的数据(原有6个有效数据,加3个Host数据),写放大是9/3 = 3。

从中看出,OP越大,写放大减小。很好理解,OP越大,每个Block有效数据越少,垃圾越多,因此需要重写更少的数据,因此写放大越小。同时,由于GC需要重写的数据越少,SSD满盘写性能也越好。

OP大小和写放大以及SSD耐写性的关系见下图:

总结一下: WA越小越好,因为越小意味着对闪存损耗越小,可以给闪存延年益寿;OP越大越好,OP越大,意味着写放大越小,意味着SSD写性能越好。

《FTL之垃圾回收、写放大和OP 》总结的更多相关文章

  1. 《FLASH PROGRAMMING 那些事》总结

    注明来自 http://www.ssdfans.com/?p=5589 以MLC为例: 对FGF(Floating Gate Flash)技术的,MLC programming一般分两步走:先prog ...

  2. Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors

    Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors The goal of the pro ...

  3. [原创] Keil uVision5 下载程序 add flash programming algorithm选项缺少需要的算法解决办法

    MDK开发环境从V4升级到V5后,支持包不再是集成到开发环境当中,而是封装在PACK中,需要自行安装,比较麻烦. 搭建MDK开发环境以及破解的方法,在前面的文章中有详细说明,这里不再赘述,有兴趣的可以 ...

  4. Turtelizer 2 provide JTAG Flash programming and debugging of ARM based boards via USB

    http://www.ethernut.de/en/hardware/turtelizer/ Introducing Turtelizer 2 Overview Turtelizer 2 had be ...

  5. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.3)- 串行NOR Flash下载算法(J-Link工具篇)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是J-Link工具下i.MXRT的串行NOR Flash下载算法设计. 在i.MXRT硬件那些事系列之<在串行NOR Flash X ...

  6. Programming Internal Flash Over the Serial Wire Debug <SWD> Interface -- EFM32

    1 Debug Interface Overview 1.1 Serial Wire Debug Serial Wire Debug (SWD) is a two-wire protocol for ...

  7. Error:Flash Download Failed-"Cortex-M3"

    Error:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/H ...

  8. STM32F4读写内部FLASH【使用库函数】

    STM32F4Discovery开发帮使用的STM32F407VGT6芯片,内部FLASH有1M之多.平时写的代码,烧写完之后还有大量的剩余.有效利用这剩余的FLASH能存储不少数据.因此研究了一下S ...

  9. Flash Download Failed-"Cortex-M3"

    rror:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/HW ...

  10. Stm32_调试出现 Error:Flash Download Failed-"Cortex-M3"

    rror:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/HW ...

随机推荐

  1. Go语言入门系列2 基本语法

    get download and install packages and dependencies install = compile and install packages and depend ...

  2. node.js发http请求

    标准库中默认的HTTP模块 const https = require('https'); https.get('https://api.nasa.gov/planetary/apod?api_key ...

  3. IOS微信API异常:unrecognized selector sent to instance 0x17005c9b0'

    开发IOS整合微信API的时候,在运行程序的过程中可能会在注册你的APPID的时候抛出此异常而导致程序崩溃. 异常描述 [7661:2826851] *** Terminating app due t ...

  4. C++ 类的深拷贝和浅拷贝完美解决

    //类的深拷贝和浅拷贝 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; class Poin ...

  5. 什么是Spring Cloud

    Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均衡.断路器.数据监控等,都可以用 ...

  6. SSH学习三 SESSION

    一.session方法 Session:由同一个IE窗体向同一个WEBAPP发的全部请求的总称,一个会话 同一个会话的多个额请求能够从前到后多个请求.??祖给孙.孙不给祖 浏览器:搜集sessionI ...

  7. mysql根据查询结果,创建表

    create table copy_materials_details (SELECT * FROM `materials_details`);

  8. 如何使用github,简单教程

    前期准备:先行设置SSH KEY(请看我之前发的关于设置添加SSH的文章) 直接上命令: clone 已有仓库到身边的开发环境中 git clone git@github.com:<yourna ...

  9. Spring_day04--Spring框架整合hibernate框架

    Spring框架整合hibernate框架 1 把hibernate核心配置文件中配置数据库信息,把数据库信息在spring进行配置 2 把hibernate里面的sessionFactory创建交给 ...

  10. 【iOS开发】获取wifi的SSID

    #import <SystemConfiguration/CaptiveNetwork.h> NSArray *ifs = (__bridge_transfer id)CNCopySupp ...