LTU 和 PTU 是闪存子系统在**地址翻译(translation)**语境下的一对术语:
LTU = Logical Translation Unit(逻辑转换单元)
PTU = Physical Translation Unit(物理转换单元)
它们出现在某些厂商/协议的 FTL 实现里,用来定义 L2P 映射的粒度单位------L2P 表本质上是"LTU → PTU"的映射。
两者的定义与关系
PTU(物理转换单元)
-
是存储器装置管理的数据基础粒度(base granularity)
-
每个 PTU 对应一个具体的物理位置,物理位置可由
LUN + Plane + PTU三者唯一确定 -
在一个具体实现中:1 个 LUN 可关联 1 个 Plane,每个 Plane 包含若干 PTU(例如每个 LUN 4 个 Plane、每个 Plane 4 个 PTU,合计 16 个 PTU/LUN)
LTU(逻辑转换单元)
-
是主机视角的逻辑地址单位,即 L2P 表的索引(key)
-
L2P 映射表维护的就是"LTU → PTU"的一对一映射
-
一个 LTU 的大小可以是 4KB、8KB 等若干 NAND Page 的数据量,对应若干个主机扇区(512B / 1KB / 2KB 等)
两者关系
L2P 表 = LTU 到 PTU 的映射表。每个逻辑翻译单元(LTU)映射到一个物理翻译单元(PTU),PTU 对应内存 110 中的唯一物理位置。
举个具体例子:假设 L2P 表维护 32 个 LTU(LTU0~LTU31)和 32 个 FPA(Flash Physical Address, FPA0~FPA31),那么表中定义的正是 LTU0→FPA0、LTU1→FPA1 ...... 这样的对应关系。
在 FTL 中的实际作用
当主机发来一个读写命令(指定逻辑地址,即某个 LTU),控制器的处理流程是:
-
接收主机指定的逻辑地址(LTU)
-
查询 L2P 映射表,找到对应的物理地址
-
将逻辑地址翻译为具体物理地址(LUN, Plane, PTU)
-
据此在 NAND 上执行读写
连续写入的 LTU 往往落在同一个 Block 或 Page 里,这有助于顺序读性能------这也是某些专利设计 PTU/LTU 这套术语体系的出发点之一。
与"有效/无效数据判定"的关联
回到你上一个问题的语境,LTU/PTU 这套术语在 GC 里是这样用的:
-
当某个 LTU 被重新写入(覆盖)时,FTL 会把数据写到新的 PTU(通常是不同的物理页),L2P 表里该 LTU 的映射随之更新
-
旧的 PTU 因为不再被任何 LTU 指向,成为 invalid / stale PTU
-
GC 时,固件维护每个 Block 的 Valid TU Count(VTC)------即该 Block 内有效 PTU 的数量。每当一个 PTU 被 invalidate,它所属 Block 的 VTC 就减 1
-
VTC 降到足够低的 Block 被选为 victim,里面的有效 PTU 被搬走(Folding),随后整个 Block 被擦除
所以在 PTU/LTU 术语体系下,"有效数据"= 当前仍被某个 LTU 通过 L2P 指向的 PTU;"无效数据"= L2P 已不指向它的 PTU。判定逻辑和你之前理解的完全一致,只是换了术语:LPN→PPA 变成了 LTU→PTU。
一点提醒
⚠️ LTU / PTU 这套叫法并非所有 SSD 厂商统一使用的标准术语,它集中出现在 Western Digital 等相关专利文献中。在其他厂商的固件/文档里,你可能看到的是:
LPN → PPA(Logical Page Number → Physical Page Address),如前文科普文所用
LBA → PPA
或者直接说 L2P entry
它们的本质相同:逻辑映射粒度 → 物理位置粒度。看到 LTU/PTU 时,心里换算成"逻辑页号/逻辑单元 → 物理页地址"即可。
如果你是在某份特定文档里同时看到 LTU、PTU 和 DPT Page,那基本可以确认这份文档采用的是上面这套翻译单元术语体系------DPT Page 里存的就是一张张 LTU→PTU 的映射条目。
L2P(LBA、LTU、FPA):用来映射逻辑地址到物理地址
LBA:逻辑上用户(host)读写数据的基本单元,默认512B
LTU:逻辑上FTL读写数据的基本单元,现在是4K
FPA:Flash Physical Address,物理层映射到对应LTU的基本单元
PTU:物理翻译单元(管理粒度视角)
PTU(Physical Translation Unit)是存储器装置管理数据的基础粒度(base granularity) 。一个 LUN 关联若干个 Plane,每个 Plane 又包含若干个 PTU(例如每 LUN 4 个 Plane、每 Plane 4 个 PTU,合计 16 个 PTU/LUN)。每个 PTU 对应一个具体的物理位置,该位置由 LUN + Plane + PTU 三者唯一确定。
强调的是"管理单元"------GC、磨损均衡、有效页计数(VTC)等操作都是以 PTU 为粒度的。
FPA:闪存物理地址(地址视角)
FPA(Flash Physical Address)是NAND 闪存上的物理地址,L2P 映射表维护的就是 LTU → FPA 的一对一映射。一个 FPA 通常包含 Die、Plane、Block、Page 等信息,用来唯一定位 NAND 上的某个物理位置。在部分文献中 FPA 也称为 PBA(Physics Block Address,物理块地址)。
强调的是"地址值"------是映射表里填的那个物理地址。
两者的真实关系
💡 在 L2P 映射表里,每个 FPA 对应一个 PTU。换句话说:
PTU 是物理位置的"单元"概念(这个位置上存的数据)
FPA 是物理位置的"地址"概念(这个单元在哪里)
举个具体例子:L2P 表维护了 LTU0~LTU31 和 FPA0~FPA31 的映射,而 FPA0 这个值解码出来,就是某个具体 PTU 的物理坐标(LUN x, Plane y, PTU z)。
所以:
| 维度 | PTU | FPA |
|---|---|---|
| 本质 | 管理数据的物理单元/粒度 | 标识位置的物理地址 |
| 视角 | 闪存管理视角 | 地址映射视角 |
| 包含信息 | LUN + Plane + PTU 序号 | Die/Channel/Plane/Block/Page 等 |
| 在 L2P 中的角色 | 被 FPA 指向的实体 | 映射表里填写的值 |
实际使用时
在你看的这份专利/文档语境里,FPA 和 PTU 基本可以视为等价------提到 FPA 就是在说那个物理位置上的 PTU,提到 PTU 也是在说 FPA 所指向的地方。固件内部做地址翻译时:
-
主机给出 LTU
-
查 L2P 表 → 得到 FPA(物理地址值)
-
通过 PAT(Physical Address Translation)表将 FPA 翻译成具体的 PTU 坐标(LUN, Plane, PTU)
-
在 NAND 上对该 PTU 执行读写
⚠️ 需要注意:在其他厂商的文档里,你可能看到的是 PPA(Physical Page Address) 而非 FPA,或者 PBA(Physical Block Address)------它们和 PTU 的关系与 FPA/PTU 完全类比:PPA/PBA 是地址,PTU 是那个地址上的管理单元。本质上都是"逻辑单元 → 物理位置"的映射,只是命名习惯不同。
回到你之前的问题链:DPT Page 里存的就是 LTU→FPA(也即 LTU→PTU)的映射条目。当你做 GC、判断某个 PTU 上的数据是否有效时,就是用该 PTU 对应的 FPA 反查 L2P,看 L2P 里这个 LTU 指向的 FPA 是不是当前这个------是则有效,不是则无效。