Controller应该支持每一个Logical Block的Metadata。Metadata是每一块Logical Block的附加数据。对于Host如何使用Metadata数据是没有要求的。一个最普遍的用法是传达E2E保护信息。
Medatada可以用两种方式向Host或者是从Host获取数据。这两种机制在Namespace格式化时被选择。
第一种机制是Metadata和关联的Logical Block是连续的,Metadata位于Logical Block的后方,形成一个扩展Logical Block。这种机制的原理如图252。在这种情况下,Logical Block和Metadata被PRP1和PRP2指针所指出。
图252:Metadata-Contigous with LBA Data,Forming Extended LBA
LBA n Data
|
LBA n
Metadata
|
LBA n+1 Data
|
LBA n+1
Metadata
|
Data Buffer(PRP1&PRP2)
第二种机制是Meadata作为一块单独的数据buffer。机制原理如图253。在这种情况下Metadata由Metadata指针单独指向,Logical Block由Data指针单独指向。当命令中的Metadata使用了PRPs时,这个Metadata被要求必须是存放在连续的物理空间。
图253:Metadata-Transferred as Separate Buffer
LBA n
Metadata
|
LBA n+1
Metadata
|
LBA n+2
Metadata
|
LBA n Data
|
LBA n+1 Data
|
LBA n+2 Data
|
当Namespace被格式化的时候应该去选择一种传输机制。同一个Namespace下不支持Metadata部分传输用机制1,而另一部分传输用机制2.
如果使用了E2E数据保护,每一个Logical Block的保护信息应该存储在Metadata中。
|
|
标签:Handling,nvme1.3,Logical,LBA,机制,Data,Block,Metadata
来源: https://blog.csdn.net/qq_25210633/article/details/90342416