由于闪存的可擦写次数是有限的,当某些数据被频繁修改时容易导致对应的块很快被耗尽使用寿命,从而导致整块盘无法使用,所以需要有一种技术来将这些块的擦写均摊一下,延长使用寿命。

首先看几个相关的基本概念:

因为闪存不能覆盖写,如果要修改已有的数据需要将原有的数据擦除再写入新的数据。

被频繁修改的数据很烫,叫做热数据

而写入以后就很少修改的数据无人问津就像打入了冷宫一样,叫做冷数据。

写入的最小单位叫做page,大小为 512 – 4,096 bytes

擦除(erase)的最小单位是block,包含多个page(一般为128个)

一次对磁盘完整的写入或擦除叫做一个PE cycle(Program/Erase Cycle),PE cycle表示了盘的寿命,是一个有限的值,比如3000. 注意,一个PE cycle是对整块盘的擦写来写来计算的,不是一个block的擦写。

已擦写次数较少的block,还很年轻,生命力强,所以叫做Young block。相对的 Old block就是已擦写次数较多的block,剩下的次数不多了。

NAND FLASH LAYOUT, 注意page和block就行了

闪存又贵还擦写次数那么有限的,这还怎么玩?于是有了Wear Leveling这样的技术通过磨损均衡来延长闪存的寿命。

无模糊均衡和有磨损均衡的对比

在没有wear leveling的情况下,某些block很可能会被频繁的反复擦写,最终报废,降低了闪存的寿命。Wear Leveling技术就是将擦写操作均摊到各个block,以防止某些block被提前耗尽使用寿命。

Wear Leveling技术按算法分为动态和静态,按作为域分为本地和全局:

  1. Dynamic Wear Leveling 动态磨损均衡

当需要覆盖写的时候,新的数据写到free的page上,而旧的数据被标记为invalid,等待垃圾回收擦除。

动态磨损均衡示意图

从上图中可以看出2nd WRITE失去改写LBA#6的数据,被写到了新分配的page并不是直接在原page上做修改。3rd WRITE也是同理,到Nth WRITE,数据已经被改写了N次,但是垃圾回收还没有发生,所以有很多的Invalid page。

对比上图垃圾回收的左右两个图,可以看到垃圾回收把Invalid的page都擦除了,而且数据LBA#6也被搬移到了新的block。这是因为就像开头说的,闪存擦除的最小单位是block,所以当block中有用户数据的时候是需要迁移的。

弊端:动态磨损均衡有一个明显的弊端是,当一个数据是冷数据,放在那里N久都没被修改的情况下,他所占用的block擦写次数很少,但是又不能拿来做磨损均衡。

2. Static Wear Leveling 静态磨损均衡

Static Wear Leveling 会把所有block包括没被写入和包含冷数据的block都纳入到磨损均衡中。如果冷数据是在擦写次数少的young block中,会把数据迁移到擦写次数较多的old block中。这样young block就可以放到free block池中接收新数据的写入。

静态磨损均衡示意图

动态和静态对比:

动态和静态模糊均衡对比表格

动态和静态磨损均衡作用范围对比

3. Global Wear Leveling 全局磨损均衡

动态和静态磨损均衡按照作用范围都可以分为本地和全局磨损均衡。本地(Local),只是在当前盘中均衡,而全局(Global)能够将系统中所有盘纳入均衡。

本地模糊均衡示意图

如上图,在local均衡的情况下,虽然右边的盘仍然有可用的block,但是左边的盘由于坏块太多已经进入了写保护。

全局模糊均衡示意图

同样的情况,在全局磨损均衡下,盘为统一管理,可以使用右盘的备用block替换,避免了左盘进入写保护。

静态+全局磨损均衡虽然设计更为复杂,系统开销更大,但是能对磁盘达到更好的保护,因此也是主流全闪存存储的实现方式。

NAND Flash 寿命算法——Wear leveling的更多相关文章

  1. NAND FLASH均衡算法笔记(转)

    转来一篇关于NAND FLASH均衡算法的文章,加上一点思考和笔记,认为这种思考有助于更深刻的理解,更好的记忆,所以也算半原创了吧,最起码笔记是原创的.有意思的是,帖子提起这个算法并不是因为嵌入式开发 ...

  2. NAND Flash中常用的纠错方式(ECC算法)

    Hanming,RS,BCH —— NAND Flash中常用的纠错方式 因为闪存中会有出错的可能,如果没有使用ECC模块,读出的数据和写入的数据会有不匹配的可能,也许一个文件中只有一两个bit不匹配 ...

  3. 全面理解SSD和NAND Flash

    Flash Memory又叫做闪存,是一种非易失性存储器.非易失性是指断电之后数据不会丢失,这里就涉及到断电保护(后面详细讲解). 总体思路 1.NAND Flash的用途. 2.NAND Flash ...

  4. nand flash详解及驱动编写

    https://www.crifan.com/files/doc/docbook/linux_nand_driver/release/html/linux_nand_driver.html#nand_ ...

  5. (转载)关于FLASH寿命的读写方法

    NOR(或非)和NAND(与非)是市场上两种主要的Flash闪存,sNORFLASH 和CPU之间不需要其他电路控制,NOR flash可以芯片内执行程序,而NAND FLASH 和CPU 的接口必须 ...

  6. Durable NAND flash memory management

    词条积累 1.NAND flash memory http://www.searchstorage.com.cn/whatis/word_6052.htm http://baike.baidu.com ...

  7. nor flash和nand flash的区别

    NOR和NAND是现在市场上两种主要的非易失闪存技术.Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面.紧接着,1989年,东芝公司发表了 ...

  8. (三)NAND flash和NOR flash的区别详解

    我们使用的智能手机除了有一个可用的空间(如苹果8G.16G等),还有一个RAM容量,很多人都不是很清楚,为什么需要二个这样的芯片做存储呢,这就是我们下面要讲到的.这二种存储设备我们都统称为“FLASH ...

  9. NOR FLASH与NAND FLASH的区别

    NOR和NAND是现在市场上两种主要的非易失闪存技术.Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面.紧接着,1989年,东芝公司发表了 ...

  10. NAND flash和NOR flash的区别详解

    我们使用的智能手机除了有一个可用的空间(如苹果8G.16G等),还有一个RAM容量,很多人都不是很清楚,为什么需要二个这样的芯片做存储呢,这就是我们下面要讲到的.这二种存储设备我们都统称为“FLASH ...

随机推荐

  1. zookeeper源码(01)集群启动

    本文介绍一下zookeeper-3.5.7集群安装. 解压安装 tar zxf apache-zookeeper-3.5.7-bin.tar.gz 创建数据.日志目录: mv apache-zooke ...

  2. spring启动流程 (6完结) springmvc启动流程

    SpringMVC的启动入口在SpringServletContainerInitializer类,它是ServletContainerInitializer实现类(Servlet3.0新特性).在实 ...

  3. Meta AI新发布的超大规模语言模型-OPT-175B

    ​ Meta AI在2022年5月3日新发布的OPT-175B模型,该模型是现阶段第一个模型参数超过千亿级别的开放模型,其次该模型与GPT-3相比,更加开放及便于访问. 具体开放性表现在如下几个方面: ...

  4. SV概述

    System Verilog概述 路科验证视频,B站可看(补充一下知识) 学习SV之前,最好有Verilog基础 SV诞生 SV发展历史 Verilog - 偏向于设计 System Verilog ...

  5. Python Code_05位运算

    coding:utf-8 author : 写bug的盼盼 development time : 2021/8/28 7:16 print(4&8)#非1即0 print(4|2)#同0即0, ...

  6. [转帖]GCC 编译及编译选项

    俗话说:'工欲善其事,必先利其器',一直在工作中使用GNU C编译器(以下简称GCC),这里对GCC的一些警告选项细致的分析,并列举几个简单的例子[注1]供分析参考. 1. -Wall集合警告选项我们 ...

  7. Opentelemetry Collector的配置和使用

    Collector的配置和使用 目录 Collector的配置和使用 Collector配置 Receivers Processors Exporters Service Extensions 使用环 ...

  8. vue3中context.emit遇见的坑

    场景描述 今天遇见一个问题 ,子组件向上抛出去的事件. 被执行了两次,原因是 context.emit('click', item.id) 你的事件名是click 将click更改为其他事件名称,就可 ...

  9. vue3逻辑分离和页面快速展示数据

    逻辑分层 我们在使用vue3开发项目的时候, 如何进行[区域分层]呢???? 举一个简单的小粒子 一个区域有[查询逻辑.修改后的保存逻辑.新增逻辑.删除逻辑] 这个页面可能还有其他的区域.A区域.B区 ...

  10. Vue3中shallowReactive和shallowRef对数据进行非深度监听

    1.Vue3 中 ref 和 reactive 都是深度监听 默认情况下, 无论是通过 ref 还是 reactive 都是深度监听. 深度监听存在的问题: 如果数据量比较大,非常消耗性能. 有些时候 ...