存储相关知识①—通用NAND Flash 基础

存储相关知识①---通用NAND Flash 基础

存储核心底层原理(通用Flash根基)

NAND Flash 原理

一、 宏观结构:

NAND Flash的内部,

由大到小可以分为以下几个层级:
①Die(裸片) :一颗NAND芯片内部可能包含一个或多个Die,每个Die是一个独立的存储矩阵。
②Plane(平面) :一个Die包含多个Plane,它们是并行操作的基本单元。
③Block(块) :这是擦除(Erase)的最小单位。一个Block通常包含几十到几百个Page。你可以把一个Block想象成一本书。
④Page(页) :这是写入(Program)和读取(Read)的最小单位。通常大小为4KB、8KB或16KB。一页就像书里的一张纸。
⑤Cell(存储单元):Page由成千上万个Cell组成,真正用来存放1或0数据的地方。

NAND Flash 主要物理痛点:只能按页读写(写数据只能由 1 ---> 0),按块擦除(擦除由 0 ---> 1),而且每次擦除会影响Nand寿命(物理氧化),所以为了延长使用寿命才引入多种算法提高效率

存储算法介绍------目的:提升 SSD 可靠性、寿命与性能

FTL地址映射:(提高Nand寿命和提高访存效率)

FTL(Flash Translation Layer,闪存转换层)​ 是SSD的主控固件,它充当主机(操作系统)与物理闪存之间的"翻译官"。主机看到的地址是连续的,但FTL会将其巧妙映射到物理闪存上。

(个人认为在映射算法这块和计算机组成原理中CPU Cache映射非常相似)

SSD的三种映射方式:
页映射(Page Mapping) :以"页"(通常是4KB或16KB)为单位进行映射。

特点:灵活高效,随机写入性能极佳,但需要庞大的内存来存放映射表(每1GB物理空间就需要约1MB内存存表)。

(类比Cache映射:全相联映射(Full Associative):主存(主机地址)的任意一块,可以放入Cache(物理闪存)的任意一页。最灵活,命中率最高,但查找起来最费劲(需要遍历或复杂的CAM电路))

块映射(Block Mapping) :以"块"(通常包含数十到上百个页)为单位进行映射。

特点:映射表极小,但写入时必须整块操作,效率低,极易造成写放大。

(类比Cache映射:直接映射(Direct Mapped):主存的每一块,只能放入Cache的唯一固定位置。硬件实现最简单,但容易产生冲突(就算其他地方空着,也只能死磕那一个位置)。)

混合映射(Hybrid Mapping) :将数据块与元数据/映射表分开存储,结合两者优点。

特点:兼顾了性能与内存占用,是很多中高端SSD的折中方案。

(类比Cache映射:组相联映射(Set Associative):主存的块可以先分组,组内再使用页映射(全相联)。既避免了频繁冲突,又控制了查找复杂度。)

GC 垃圾回收:(提高空间利用率)

GC(Garbage Collection,垃圾回收):回收无效页、整理空闲块,解决 "写放大 + 空间碎片化"。
背景 :NAND 不能原地覆盖;更新数据时,新数据写入新页,旧页变成 "无效页"。
问题 :长期运行后,块里混杂有效 / 无效页,空闲块变少、写入变慢。
做法

①选一个 "脏块"(无效页多);

②搬移有效页到新空闲块;

③擦除原脏块,变成可再次写入的空闲块。
关键指标写放大 WAF(主控写入量 / 主机写入量),越小越好 ;GC 会带来额外读写,影响性能。

WL 磨损均衡:(延长整体寿命)

WL(Wear Leveling,磨损均衡):让所有块 P/E 次数尽量一致,避免局部块提前写坏,延长整体寿命。
背景:NAND 块擦写(P/E)有上限:

SLC ≈ 10 万

MLC ≈ 3k--1 万

TLC ≈ 500--1500

QLC ≈ 100--500

问题 :热点数据(如文件系统元数据)反复写同一块,很快写坏;冷块几乎不用,整体寿命由最先坏的块决定。
做法 (FTL 映射):

①动态 WL:写数据时,优先选 P/E 最少的空闲块;同一逻辑地址反复写,映射到不同物理块。

②静态 WL:定期把 冷数据从年轻块搬到年老块,抹平块间磨损差异。

BBM 坏块管理:(硬件故障隔离,可靠性兜底)

BBM(Bad Block Management,坏块管理):识别 / 标记 / 隔离坏块,把写入重定向到好块,保证数据可靠、不写入坏块。
坏块来源

①出厂坏块:NAND 出厂就有(不可避免);

②运行坏块:P/E 超限、擦写错误、硬件失效。
核心机制

①坏块表 BBT:记录所有坏块地址,出厂扫描 + 运行时动态更新;

②地址重定向:写入时若命中坏块,自动映射到备用好块;

③隔离 + 屏蔽:坏块不再分配,避免数据丢失 / 错误。

可靠性算法

1. ECC 错误校验纠错

作用:修正 NAND 电荷漂移导致的位错误

等级:SLC 轻量 ECC,TLC/QLC 强制 LDPC 硬纠错

场景:读干扰、编程干扰、电荷漏电纠错

2. RAID 磁盘冗余

RAID0:条带分片,极速无冗余

RAID1:镜像备份,高可靠双倍空间

RAID5:奇偶校验,兼顾容量与容错

RAID6:双校验,双盘容错,企业级通用

3. 掉电保护

硬件:钽电容 / 超级电容,断电缓存落盘

软件:日志日志块、元数据预存,防止断电分区损坏、数据错乱

4. 数据恢复

逻辑恢复:FTL 映射表重建、无效页回溯

硬件恢复:NAND 原始数据读取、ECC 硬解码、坏块跳过重组

性能指标

1.顺序读写 :大文件连续吞吐,视频 / 拷贝场景
2.4K 随机读写 :小文件高频访问,系统、数据库核心指标
3.IO 延迟 :单请求响应耗时,越低系统越流畅
4.带宽 :单位时间最大数据传输量
5.IOPS :每秒最大读写请求数,随机性能核心
6.写入放大 :实际写入 / 主机写入比值,越小越省寿命
7.功耗模型

①活跃功耗:全速读写功耗

②休眠功耗:待机低功耗

③动态调压:闲时降频降压省电

相关推荐
dddwjzx几秒前
嵌入式Linux C应用编程——输入设备
linux·嵌入式
爆浇牛肉面几秒前
Linux三剑客与管道使用全解析:从入门到实战
linux
lightqjx43 分钟前
【Linux系统】程序地址空间(初识)
linux·页表·地址空间
wljy11 小时前
二、线程操作
linux·线程属性·线程操作
mounter6251 小时前
探索未来 AI 算力网络的基石:从传统 RoCE 走向 SRv6 驱动的弹性弹性网络(解析 Netdev 0x1A 创新实践)
linux·网络·人工智能·linux kernel·kernel·rdma·rocev2
x_x-F2 小时前
深入浅出 Linux 网络核心:sk_buff 的内存与指针流转
linux·运维·网络
潘正翔11 小时前
docker核心概念
linux·运维·服务器·docker·容器·centos·运维开发
weigangwin12 小时前
agent-workspace-linux 不是远程桌面:Linux AI 工作区的隔离边界验收
linux·xvfb·mcp·桌面隔离·权限边界·bubblewrap·agent-workspace
Dovis(誓平步青云)13 小时前
远程办公软件文件传输实测:6 款工具的速度、稳定性和办公体验对比
linux·运维·服务器·后端·生成对抗网络
Java小白笔记14 小时前
Docker 安装配置完全指南:MacOS 、Windows、Linux环境下的安装、配置与验证
linux·macos·docker