
它从来都不是一块存储——eMMC背后的另一层世界
什么是 eMMC
很久以前,人们对“存储”这件事,有一个简单到不能再简单的理解。
他们以为,数据就像写在石板上。
你写上去,它就在那里;你读出来,它就回来。
不吵不闹,不思不想。
但后来,人们发现,这块石板,其实会动。
eMMC,全名叫:
Embedded MultiMediaCard
听起来有点唬人,其实说白了:
👉 就是把“存储芯片”和“控制器”封装在一起的一种设备。
你可以把它想象成:
+----------------------+
| Flash Memory (NAND) |
+----------------------+
| Controller (FTL) |
+----------------------+- 上面一层,是用来存数据的 NAND Flash;
- 下面一层,是一个小小的“脑子”。

问题,就出在这个“脑子”上。
因为 NAND 这种东西,本身很麻烦:
- 不能直接覆盖写
- 擦除粒度很大
- 每个块寿命有限
于是,人们不得不在它前面,加了一个控制器。
这个控制器负责:
- 把逻辑地址映射到物理地址
- 把随机写变成顺序写
- 把磨损均匀分摊
- 把坏块藏起来
这些能力,被统一称为:
👉 FTL(Flash Translation Layer)
BKOPS
到这里,一切看起来都很合理。
但真正的问题也恰恰在这里。
因为从这一刻开始:
eMMC 不再是“存储”,而是“设备”。
它开始:
- 自己搬数据(Garbage Collection)
- 自己调度擦写(Wear Leveling)
- 自己修复错误
- 自己决定什么时候忙、什么时候闲
在规范里,这一切被一个名字统称:
👉 BKOPS(Background Operations)
也就是——后台操作,用来保证性能和寿命。
于是,一个微妙的变化发生了
上层系统仍然以为:
我在写一块“死的存储”。
但实际上,它面对的,却是:
一台“活着的机器”。
这台机器会思考,会决策,也会——在你最不希望的时候,做它认为“必须做”的事情。
比如:
你正在启动系统,
👉它却突然去做垃圾回收。
你正在写一帧关键数据,
👉它却开始搬运旧数据。
你以为你在控制它。
👉其实,它一直在控制自己。
从那一天开始,这个误会,埋下了伏笔。
直到有一天,他们发现:
数据确实能写进去,但系统却越来越慢,设备却越来越短命。
写放大(Write Amplification)
后来,他们发现了一个问题:
文件系统认为“空闲”的块,在 eMMC 看来,依然是“已使用”。
为了写新数据,eMMC不得不“搬家”,再擦除。
于是写一次,变成写两次。
这个现象,有个好听的名字,叫:
写放大(Write Amplification)
听起来很优雅,实际上很残酷。
乱子从什么时候开始的?
当这台机器开始“自己干活”时,问题就来了。
它会在你不经意的时候:
- 突然变慢(因为在做GC)
- 卡顿(因为在搬数据)
- 发热(因为在内部重排)
而你,一无所知。
就像一辆车:
你踩下油门,它却突然去“自检发动机”。
于是,工程师们做了一个决定。
这是一个转折点。
他们造了一层“管理者”
他们说:
既然eMMC是个会思考的机器,那我们就必须有人管它。
于是,这个角色诞生了:
+-----------------------------+
| Emmc Maintenance Manager |
|-----------------------------|
| - health monitor |
| - BKOPS scheduler |
| - refresh controller |
| - statistics collector |
| - vendor abstraction |
+-------------+---------------+
|
v
eMMC driver
这个东西,不写数据,不存文件。
它只做一件事:
👉 管理eMMC的“人生”
五个人,各司其职
这个“管理者”,其实是五个人。
他们各有分工。
1️. health monitor —— 看病的人
他不治病,只看病。
他关心这些:
- 设备还能活多久
- 坏块有没有变多
- 写入是否过量
就像医生看体检报告。
他不参与工作,但他决定你能干多久。
2️. BKOPS scheduler —— 管时间的人
这是最关键的一位。
因为 BKOPS 这件事,本来是 eMMC 自己想做就做。
但现在:
不行,你得听我安排。
于是它说:
- 系统空闲 → 做 BKOPS
- 启动阶段 → 不准动
- ignition off → 可以狠狠干
后台操作可以在空闲时间执行,调度的目标是避免系统卡顿。
于是,这个人存在的意义是:
👉 让“后台工作”,不再影响“前台体验”
3️. refresh controller —— 管记忆的人
NAND有个问题:
久不读写,数据会慢慢“遗忘”。
于是就需要 refresh:
- 读出来
- 再写一遍
就像反复默写单词。
他就是那个让记忆不遗忘的人。
4️. statistics collector —— 记账的人
这个人很低调,却最重要。
他记录:
- 写了多少数据
- 擦了多少次
- BKOPS执行了多少
这些数据,会被:
- 用来分析寿命
- 用来判断异常
- 用来做OTA策略
如果没有他,你只能“等死”。
5️. vendor abstraction —— 翻译的人
每个厂商的eMMC,都有自己的“方言”。
比如:
- 指令不同
- 状态不同
- 能力不同
这个人,把他们统一成一种语言。
让上层不用关心:
👉 是三星,还是西数,还是长江存储。
他们之间的工作关系
你可以这样想:
应用:我只想写文件
↓
文件系统:我帮你分块
↓
Maintenance Manager:放心,我保证它不崩
↓
eMMC:我会自己活下去这就是层次。
真正的变化(很重要)
以前:
eMMC = 存储现在:
eMMC = 设备 + 行为 + 生命周期 + 风险于是系统必须升级:
Storage → Storage + Management