文章目錄
- 概述
- DIF數據格式
- 盤片支持DIF
- Format
- PIL
- PI
- MSET
- LBAF
- 協議命令DIF支持
- PRACT
- PRACT=0
- PRACT=1
- PRCHK
- 相關參考
概述
NVMe協議將DIF信息作為元數據的一部分進行攜帶。
DIF數據格式
DIF的PI由多個字段組成,包括:
- Guard字段:基于邏輯塊數據計算的CRC校驗值(CRC-16、CRC-32或CRC-64),用于檢測數據完整性。
- Application Tag:由上層應用定義,用于業務邏輯標識。
- Reference Tag:將數據與邏輯塊地址(LBA)關聯,防止寫入錯誤位置。
盤片支持DIF
Format
使能NVMe DIF特性的前提是盤片需要格式化成支持DIF,協議提供了Format命令對盤進行格式化,其中有幾個字段描述了對DIF的關鍵支持。
PIL
描述DIF信息在元數據中存放的位置,通常元數據的大小要超過8字節,8字節的DIF信息則通常放置在元數據的首部或尾部的位置,具體則取決于PIL字段的值:
- PIL=0:描述DIF信息存放于元數據的首部8個字節;
- PIL=1:描述DIF信息存放于元數據的尾部8個字節。
若元數據大小恰好為8字節,那么PIL設置成0或1都無所謂。
PI
PI描述了盤片使能的DIF類型,有4中取值,如下:
MSET
MSET描述了元數據的傳輸方式:分離或連續。
LBAF
LBAF描述了當前使用的扇區格式,常見的格式包括:512、512+8、4096以及4096+64等,盤片支持的元數據大小也由這個字段所指定。
協議命令DIF支持
NVMe讀寫命令中提供了兩個字段:PRACT和PRCHK,用于描述了NVMe控制器對DIF數據的處理行為和校驗方式。
PRACT
PRACT字段用于描述NVMe控制器是否對DIF信息進行插入、替換或剝離等處理,并與元數據大小有關,分為以下幾種情況:
PRACT=0
無論攜帶的元數據多少,DIF信息都會原封不動進行傳輸,NVMe控制器不會對DIF信息進行修改;
PRACT=1
元數據傳輸過程中不會攜帶DIF信息,NVMe控制器會自動生成DIF信息下盤(Write命令)或剝離DIF信息(Read命令):
- 元數據大小為8字節:數據傳輸過程中不會攜帶DIF信息,等價于任何元數據也不會攜帶,NVMe控制器會針對讀寫命令處理DIF信息,插入或者剝離;
- 元數據大小超過8字節:數據傳輸過程中,元數據對應DIF區域不會攜帶有效的DIF信息,NVMe控制器會替換DIF區域數據后下盤,或剝離。
PRCHK
PRCHK描述了數據檢驗類型。
相關參考
- 《NVM-Express-Base-Specification-2.0c-2022.10.04-Ratified-1》