闪存潜规则:你的毛病比方案重要

news2024/11/25 10:49:32

大家好,我是了五月。

前言

目前绝大数存储设备都是以闪存为存储介质的,内部许多固件算法方案都是在为闪存服务的。

无论是什么算法,都是遵循着Flash的特性为前提的

那闪存究竟有哪些潜规则的特性呢?

先擦后写

闪存块(Block)是不能覆盖写的,它不允许开发者在一个地方上重复写入,必须先擦除一遍才行。

一般来说,当有一笔数据写入的数据,都是安排写到新的地址空间上,当你实在不清楚一个地址究竟有没有有效数据的时候,稳妥的做法一般都是先擦除一遍再写入。

整page写入,整Block擦除

闪存允许最小的写入单位就是page,最少写入的数据量都得是1个page。

FTL算法中有一个基本操作,会把主机Host传下来的数据凑成1page,再写入Flash中,不足1page的,就放在Dbuf中,等待下一次数据来凑成1page,再写入Flash中。

闪存允许擦除的基本单位是1个Block,只要发生了擦除操作,那么这一整个Block的数据都会被清除掉,所以我们一般不会轻易做整块擦除。

解决办法:当有一笔新数据下来的时候,会把数据放在新的物理地址上,这样做一来是为了不轻易做擦除操作,避免失误擦除掉了有效数据,二来也避免在同一个物理地址上做重复的擦写,过快消耗闪存块寿命。

写入数据需要随机化

我们写的时候,如果简单把数据写进去,会遇到很多错误,有时候是写失败,有时候是读出来数据不对。

这是由于闪存存储电子的工作模式导致的,其对数据写入的样式特别敏感,如果不断地写入全0或者全1,容易导致内部电荷量不足,造成信号抗干扰性下降。

直观的现象就是你会发现某些数据bit位发生了翻转。

解决办法:写入数据前需要先将数据做随机化处理,也就是打乱数据,使得0和1的分布均匀。

但是打乱也不是随便打乱的,它会以某种方式进行随机化处理写入flash,读取数据的时候,会先进行一次反随机化处理,得到真实数据

数据写满整个Block才会稳定

闪存还有个奇怪的特性,就是数据你必须得写满一整个块,这个块的数据才会稳定下来

但是很多时候,我们没有那么多数据正正好好去写满一整个Block。

解决办法:为了保证写入数据稳定,我们写入一笔数据后,会额外写入几页数据,目的就是让写入的那笔数据保持稳定,而额外写入的几页数据,称之为附加逻辑页数据。

闪存块都有一定的寿命

每一次写和擦,都会对闪存块造成磨损,磨损久了,闪存块也就坏掉了。其寿命是用PE(擦写次数)来衡量的。

在使用中,我们尽量避免集中在同一片区域上重复擦写,不然这片区域的块很快就磨损没了。

解决办法:FTL中需要做一个磨损平衡的处理,让所有的Block都来均摊数据的写入

将数据分担到其他的Block上,让每一个Block都磨损的平均些,既可以保证闪存有最大数据写入量,还能延长闪存的寿命。

每个闪存块读次数是有限的

除了有擦写次数限制,闪存块还有读次数的限制,读取的次数多了,数据便会出错,这种现象称之为读干扰现象。

解决办法:FTL算法需要做一个读干扰处理当某个Block的读次数达到一定的阈值时,就把数据从该Block上搬移到新的Block上

数据保持会丢失

闪存能存储数据的原理就是电荷的存储,但是电荷是流动不定的,时间一旦久了,电荷就会流失,反映出来的现象就是数据的丢失。

这个时间不好说,长则十多年,短则几年,几个月,甚至更短。

如果是在高温的环境下,电荷流失的速度会更快。

解决办法:FTL算法需要做一个扫描处理,去发现是否有数据保持丢失的问题,如果发现了,立马将数据搬移到新的位置,未雨绸缪。

坏块产生不可避免

闪存出现坏块这是无法避免的,有的是出厂的时候就有的坏块,有的是闪存在使用中产生的坏块。

坏块的症状就是擦除失败,或者写失败,或者读失败(ECC纠错纠不过来)

解决办法:FTL算法需要做一个坏块管理的处理,对坏块打上坏块标记,在使用的时候就不要用这些坏块了,挑好的Block用。

对于MLC或TLC而言,存在下页损坏问题

对于MLC,一个worlLine存在Upper page和Lower page;

对于TLC,一个worlLine存在Upper page、Extra page和Lower page;

在写入时,如果发生意外,比如异常掉电这些,Lower page上成功写入的数据会被破坏掉

解决办法:一个办法是在电路上加上电容,一旦发生异常掉电,让电容开始放电,在这段时间将数据保存起来,并且开启正常掉电流程。

还有一个办法是在FTL算法中需要做一个掉电恢复的处理,通过重建映射表将丢失的数据恢复回来

一般无论有没有电容,FTL中都会带有一个异常掉电处理模块。

小结

闪存存在这么多的毛病,但是依旧抵挡不住各大存储领域的企业入局去研究其毛病,毕竟,一切方案,都是以特性未前提的,先明白了特性,才能有解决方案。

好了,这次先写到这儿,祝各位生活愉快。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/638996.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PCB设计总有几个阻抗没法连续的地方,怎么办?

大家都知道阻抗要连续。但是,PCB设计也总有阻抗不能连续的时候。怎么办? ​特性阻抗:又称“特征阻抗”,它不是直流电阻,属于长线传输中的概念。在高频范围内,信号传输过程中,信号沿到达的地方,…

CMU 15-445 Project #1 - Buffer Pool(Task #2 - LRU-K Replacement Policy)

Task #2 - LRU-K Replacement Policy 一、题目链接二、准备工作三、部分实现四、自定义测试用例 一、题目链接 二、准备工作 见 CMU 15-445 Project #0 - C Primer 中的准备工作。 三、部分实现 LRU-K的提出是为了更好地解决传统LRU中的缓存污染问题。所谓缓存污染&#xff0…

互联网大厂Java面试题1000+附答案(合适各级Java开发人员)

作为一名优秀的程序员,技术面试都是不可避免的一个环节,一般技术面试官都会通过自己的方式去考察程序员的技术功底与基础理论知识。 2022 年的互联网行业竞争越来越严峻,面试也是越来越难,很多粉丝朋友私信希望我出一篇面试专题或…

【QQ界面展示-细节调整 Objective-C语言】

一、刚才我们已经做到这个状态了 1.刚才我们做到这里了,就是文字可以显示出来了, 基本数据给大家加载了,然后我们再把这个美化一下,再把这个时间处理一下, 2.咱们先把它这个效果稍微美化一下吧,怎么美化呢,来看一下, 首先,我们看一下示例程序,实际程序,中间是没有…

深度学习pytorch实战五:基于ResNet34迁移学习的方法图像分类篇自建花数据集图像分类(5类)超详细代码

1.数据集简介 2.模型相关知识 3.split_data.py——训练集与测试集划分 4.model.py——定义ResNet34网络模型 5.train.py——加载数据集并训练,训练集计算损失值loss,测试集计算accuracy,保存训练好的网络参数 6.predict.py——利用训练好的网…

ChatGPT 应用——使用 chatGPT 写高考作文

写作文,很简单,但写一篇好的作文,是非常有难度的。 想要写一篇高分作文,需要对作文题目有正确的理解,需要展现独到的观点和深入的思考,需要具备清晰的逻辑结构,需要准确而得体的语言表达。 正…

Python程序设计基础:数值

文章目录 一、数值数据类型二、python内置的数值操作三、math库 一、数值数据类型 Python语言可以很方便的用于处理数值运算问题,在数值运算过程中,常见的额两种数据类型分别为整数类型(int)和浮点类型(float&#xf…

【论文阅读】(2023.06.09-2023.06.18)论文阅读简单记录和汇总

(2023.06.09-2023.06.12)论文阅读简单记录和汇总 2023/06/09:虽然下周是我做汇报,但是到了周末该打游戏还是得打的 2023/06/12:好累好困,现在好容易累。 目录 (TCSVT 2023)Facial Image Compression via …

2021-07-12

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

VMware12虚拟机安装macoxs10.14

按照以下教程操作 VMware12虚拟机安装Mac系统虚拟机与本机传输文件虚拟机联本机网络教程【图文详解】_vmware12 mac_扑在代码上的高尔基的博客-CSDN博客 补充,我操作时出现的状况 1、虚拟机的macos补丁 unlocker207.7z文件需要放在全英文路径下运行,…

flutter:文件系统目录、文件读写

参考 参考:老孟 文件存储和网络请求 数据存储 Dart的 IO 库包含了文件读写的相关类,它属于 Dart 语法标准的一部分,所以通过 Dart IO 库,无论是 Dart VM 下的脚本还是 Flutter,都是通过 Dart IO 库来操作文件的。但…

H桥级联型五电平逆变器MATLAB仿真模型

H桥级联型五电平逆变器MATLAB仿真模型资源-CSDN文库https://download.csdn.net/download/weixin_56691527/87899094 模型简介: MATLAB21b版本 逆变器采用H桥级联的形式连接,加设LCL滤波器,三相负载构成主电路。 采用SPWM调制,可…

解密混沌工程——混沌工程价值

在数字化转型、十四五规划的大背景 下,大规模上云、分布式的核心改造等“云化”逐渐走进企业。 但是,云化的发展,使企业系统的复杂度呈指数级增长,故障越来越多。 企业在数字化转型中拥抱云计算、 信创国产化、分布式核心等新技…

【软件测试】性能测试的9大误区,带你少走弯路...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 误区1&#xff1a…

外卖点餐APP小程序系统开发功能有哪些?

外卖点餐APP小程序系统开发功能有哪些? 1、餐饮分类。点餐外卖小程序需要提供餐厅列表,以便于用户浏览餐厅信息。用户可以根据不同的筛选条件,如菜系、评价、地理位置等来选择自己想要的餐厅。 2、美食列表。针对特定餐厅&…

pandas---算术运算、逻辑运算、统计运算、自定义运算

1. Series的运算 适用于NumPy的数组运算也适用于Series。 # 基本算术运算 s 100 s - 100 s * 100 s / 100 s // 2 s ** 2 s % 2 Series之间的运算: 在运算中自动对齐索引;如果索引不对应,则补NaN;Series没有广播机制。 s3 …

Makerbase VESC 75200 AS5047P编码器测试

Makerbase VESC 75200 AS5047P编码器测试 提示:MKESC75200主板推荐使用VESC TOOL V3.0,固件版本V5.2。 第一部分 硬件介绍 1.1 硬件接口 1.2 硬件清单 序号品名数量1MKSESC 75200 V2.0主板122808电机(带AS5047编码器)13DC 24电…

网络安全合规-安全合规地图

网络安全行业国内本质上是合规驱动,但对合规的理解和尺度,甲方与甲方、甲方与乙方之间就有很大差别。 甲方通常来说都具有一定合规方面的积累,包括体系、制度、结构以及职责等等,如果有新的监管要求或是强制性标准发布&#xff0c…

HarmonyOS学习路之开发篇—Java UI框架(DependentLayout)

DependentLayout DependentLayout是Java UI框架里的一种常见布局。与DirectionalLayout相比,拥有更多的排布方式,每个组件可以指定相对于其他同级元素的位置,或者指定相对于父组件的位置。 支持的XML属性DependentLayout的共有XML属性继承自…

ASEMI代理艾赛斯IXFA14N85XHV功率MOSFET综合指南

编辑-Z 在当今世界,电力电子在各种应用中发挥着至关重要的作用,从电源和电机驱动到电动汽车和可再生能源系统。这些应用中的关键部件之一是功率MOSFET(金属氧化物半导体场效应晶体管)。IXFA14N85XHV是一款先进的功率MOSFET&#…