新品特性——可變Sector Size管理(下)

上篇文章介紹了nvme format命令,通過這條命令就可以開啓端到端數據保護功能,並且可以在VSS技術支持下,根據業務需求選擇合適的格式化方式。

在進行讀寫操作之前, 我們先要熟悉一下 Protection Information的定義。

PI信息格式與Type1/2/3

在列舉命令之前需要簡要介紹一下Protection Info的格式:

 

                                                                                         PI保護信息的數據結構

可以看到每個8bytes的PI都會包括由16 比特 guard tag(用戶數據的CRC校驗信息),16比特application tag(應用指定tag)和32比特reference tag(檢測數據寫入正確的LBA地址)組成。

端到端數據保護中的Type1/2/3就代表了不同的reference tag設置和PI檢查方式。

  • Type1:reference Tag隨着LBA增加遞增,並且Host必須保證ILBRT和ELBRT與LBA的最後4個Bytes相等;

  • Type 2:reference Tag隨着LBA增加遞增,SSD檢查PI的方式與Type1 相同,允許Host指定任意ILBRT和ELBRT;

  • Type3:reference Tag保持不變,SSD不會檢查ILBRT和ELBRT。

 

從nvme write命令看數據如何加上PI存進NAND

基本知識介紹完畢。接下來就讓Host發筆寫數據給這塊PBlaze5 D926 NVMe SSD。

上圖中第一條命令先生成了一個512Bytes的實驗數據,並在由第二條write命令寫入到NVMe SSD中。在這條命令中,-s指明瞭數據起始的LBA,-z是數據量,-y爲元數據大小。倒數第二個--prinfo既是Protection Information Field 的意思,其包含PRACT和PRCHK兩個參數,分別有如下定義:

 

PRACT(指明瞭PI信息生成的機制)

=1時, controller生成PI並將其寫入NAND

=0時, controller獲取上層應用下發的PI信息,將檢查PI信息並寫入NAND

PRCHK(指明瞭控制器收到包時檢查的PI信息)

Bit2=1,SSD在收到packet時,檢查CRC

Bit1=1,SSD在收到packet時,檢查App Tag

Bit0=1,SSD在收到packet時,檢查Reference Tagca

 

這條命令裏我們設置了PRINFO爲0xf(即所有bit均爲1),並且指定了一個ref-tag (0x12345678)。NVMe SSD控制器在接到命令之後爲數據生成PI並整合命令中ref-tag的值,存進NAND。不指定ref-tag,那麼控制器會生成完整的PI信息,存進NAND。這個過程示意如下:

從nvme read命令看數據如何從SSD正確讀出

 

相應的,我們將剛寫進SSD的數據讀出來。

同樣,我們在命令中也看到了prinfo參數,這裏的PRINFO同樣包含PRACT和PRCHK,其作用解釋如下:

 

PRACT(指明讀數據時控制器是否返回PI信息)

=1時, SSD controller不向host返回PI信息;只返回data block

=0時, SSD controller;檢查PI信息, 向host返回PI信息以及data block

PRCHK(指明控制器校驗的PI信息)

Bit2=1,SSD在收到packet時,檢查CRC

Bit1=1,SSD在收到packet時,檢查App Tag

Bit0=1,SSD在收到packet時,檢查Reference Tag

 

這條命令可以解釋爲,我們從起始LBA爲0x12345678開始讀512Bytes數據和8Bytes元數據,並記錄進data_meta_read_7.bin文件中。在此過程檢查CRC、APP tag和Reference Tag三個PI信息,並將PI信息和數據一併返回給host。整個過程如下圖:

 

讀命令中ref-tag=0x12345678,與上文寫命令中ref-tag相等,否則會報出end-to-end reference tag check failure。

讀者朋友們如果有興趣,可以嘗試在read 命令中去掉 ref-tag; 或者將ref-tag修改爲其他值,看一下返回結果的變化。

我們展示了一組數據如何通過nvme write命令從host下發到SSD,最終存進NAND,又如何通過nvme read命令將數據校驗後正確讀出。需要指出的是爲了便於理解,我們限制了很多實驗條件,事實上不同的PRINFO、不同的應用及系統環境都會有相應的規範。

需要深入定製的用戶可以聯繫我們的工程師進行進一步溝通!

 

 

本文作者:黃輝   |   Memblaze 產品工程師

更多原創技術內容,請關注 Memblaze 微信公衆號。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章