存储相关知识①—通用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.功耗模型

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

②休眠功耗:待机低功耗

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

相关推荐
实心儿儿2 分钟前
Linux —— 线程池(1)
linux
卧室小白9 分钟前
K8S-Pod基本配置
linux·运维·服务器
yyuuuzz9 分钟前
谷歌云基础服务的入门认知
linux·运维·服务器·数据库·人工智能·github
煜声远播17 分钟前
相册卡顿的系统级排查复盘:fsync 不要在锁里调用
linux
syagain_zsx29 分钟前
Linux进程全面解析:从基础到高级管理(2/3)
linux·运维·服务器
Irissgwe40 分钟前
8-1\IP 分片和组装的具体过程
linux·网络·tcp/ip·网络层·分片·组装
Zevalin爱灰灰1 小时前
makefile从入门到实战 第一章 认识makefile(一)
linux·makefile
Shadow(⊙o⊙)1 小时前
进程间通信0.0-pipe()匿名管道,详细分析进程池调度队列执行逻辑,进程池模拟实现。
linux·运维·服务器·开发语言·c++
CQU_JIAKE1 小时前
6.6aaaaaa
linux·运维·服务器
Apibro1 小时前
【Linux】Qt Creator 中文输入法
linux·qt