榴莲视频APP下载安装_秋霞免费观看_激情欧美日韩成人_又爽又大的少妇视频_成年美女黄网站色大片免费看_欧美日韩在线视频高清_国产极品粉嫩呻吟对白刺激91_亚洲综合国产婷婷精品无码aⅴ_亚洲午夜亚洲天堂_久久国产影片在观看_丁香四房播播_换爱交换乱理伦片中文字幕

新聞中心

從NVMe端到端數(shù)據(jù)保護(hù)看憶芯SSD主控芯片

發(fā)布時(shí)間:2023-11-16 文章來源:憶芯科技

數(shù)據(jù)完整性是數(shù)據(jù)存儲(chǔ)系統(tǒng)中關(guān)鍵的元素之一,對(duì)于用戶而言,不一致的數(shù)據(jù)可能導(dǎo)致嚴(yán)重的業(yè)務(wù)錯(cuò)誤產(chǎn)生,因此保障數(shù)據(jù)的完整性與一致性至關(guān)重要。


NVMe SSD端到端保護(hù)


在主機(jī)和SSD之間進(jìn)行數(shù)據(jù)交互,數(shù)據(jù)從主機(jī)生成到寫入SSD閃存中,以及數(shù)據(jù)從SSD閃存中讀出到寫回主機(jī),這個(gè)過程中會(huì)經(jīng)過多個(gè)部件、多種傳輸和復(fù)雜的軟件處理,任何一個(gè)環(huán)節(jié)發(fā)生錯(cuò)誤都可能導(dǎo)致數(shù)據(jù)錯(cuò)誤。


1.png


但是這種錯(cuò)誤一般無法被立即檢測(cè)出來,而是后續(xù)通過應(yīng)用在訪問數(shù)據(jù)過程中,才發(fā)現(xiàn)數(shù)據(jù)已經(jīng)出錯(cuò),在應(yīng)用層體現(xiàn)出現(xiàn)數(shù)據(jù)不一致,這類錯(cuò)誤我們稱為靜默數(shù)據(jù)破壞,即Silent Data Corruption。


為確保主機(jī)和SSD之間的數(shù)據(jù)完整性,NVMe提供了端到端數(shù)據(jù)保護(hù)機(jī)制,它可以有效降低靜默錯(cuò)誤的發(fā)生,保護(hù)主機(jī)寫入閃存和從閃存讀出到寫入主機(jī)的全部流程,使數(shù)據(jù)的一致性得到保證。


NVMe端到端數(shù)據(jù)保護(hù)的關(guān)鍵在于PI(Protection Information)的使用。完整的端到端數(shù)據(jù)保護(hù)支持由Host端生成PI,提供從Host直至SSD內(nèi)部的完整端到端數(shù)據(jù)路徑保護(hù)。在數(shù)據(jù)生成時(shí),通過對(duì)數(shù)據(jù)添加PI,并將其作為元數(shù)據(jù)始終伴隨用戶數(shù)據(jù)一同傳輸和校驗(yàn),借此降低靜默錯(cuò)誤的發(fā)生;同時(shí),借助ECC(如BCH、LDPC)、Die間RAID5等手段,對(duì)檢測(cè)到的錯(cuò)誤數(shù)據(jù)加以修正,提升整個(gè)端到端數(shù)據(jù)傳輸過程中的可靠性。PI也可以通過SSD Controller生成,提供SSD盤內(nèi)的數(shù)據(jù)保護(hù),通常,我們將后者稱為“數(shù)據(jù)路徑保護(hù)”技術(shù)。



什么是 PI


NVMe協(xié)議規(guī)定(后續(xù)介紹均參照NVMe2.0協(xié)議),Host與SSD之間的數(shù)據(jù)交互,除了邏輯塊(用戶數(shù)據(jù)),還可以攜帶一些額外的元數(shù)據(jù)(MetaData),大小為0~N Bytes。Metadata一個(gè)最重要的角色就是傳遞端對(duì)端(E2E, End to End)數(shù)據(jù)保護(hù)信息(PI, Protection Information)。


PI相當(dāng)于邏輯塊數(shù)據(jù)的保鏢,有DIF(Data Integrity Field)和DIX(Data Integrity Extension)兩種數(shù)據(jù)保護(hù)機(jī)制,兩者的主要區(qū)別是PI信息的位置不同。 


(1)DIF: 是data buffer和Metadata buffer連接在一起傳輸?shù)哪J?。如下圖所示:


2.png


(2)DIX: 是data buffer和Metadata buffer分離的一種模式,最后會(huì)在SSD端把它們拼接在一起。如下圖所示:


3.png



PI 的組成


PI內(nèi)容主要由Guard、Application Tag、Reference Tag和Storage Tag組成。


  • Guard Tag: 用戶數(shù)據(jù)的 CRC 校驗(yàn)信息,支持CRC16/CRC32/CRC64

  • Application Tag: 應(yīng)用指定Tag,固定為16bit

  • Reference Tag: Reference Tag 把邏輯塊數(shù)據(jù)與一個(gè)地址關(guān)聯(lián)起來,防止被誤用或者亂序邏輯塊傳輸,用來檢測(cè)數(shù)據(jù)是否寫入錯(cuò)誤的 LBA 地址;

  • Storage Tag: 應(yīng)用指定Tag


根據(jù)配置不同,PI 主要有四種組成格式:


1)16bit Guard Tag(Storage Tag size is zero)


4.png


2) 16bit Guard Tag(Storage Tag size is non-zero)


5.png



3) 32bit Guard Tag 


6.png



4) 64bit Guard Tag


7.png



PI 的位置


按照NVMe協(xié)議,根據(jù)對(duì)SSD命名空間的格式化(512B or 4KB Sector),PI可以放置在元數(shù)據(jù)的前8或后8字節(jié)。


如果Metadata元數(shù)據(jù)超過8字節(jié)(如支持64B元數(shù)據(jù)),則CRC處理原則如下:


  • PI在Metadata前8字節(jié),PI中CRC tag的生成不包括Metadata字節(jié)。


8.png



  • PI在Metadata后8字節(jié),PI中CRC tag的生成包含Metadata字節(jié),但不包括后8字節(jié)PI。


9.png


Host通過NVMe format命令DWord10中的PIL字段指定PI在Metadata中的位置:為1則是Metadata的首8B,為0則是Metadata 的尾8B。


10.png


PI 的類型


根據(jù)不同的Tag設(shè)置和PI 檢查方式,PI 可分為Type0、Type1、Type2、Type3四種類型。


11.png


Host通過NVMe format命令DWord10中的PI字段指定了PI的類型。


12.png



PI 的生成機(jī)制和Check范圍


NVMe IO命令主要通過PRINFO (Protection Information Field) 和ILBRT/EILBRT命令字來控制PI的生成機(jī)制和Check范圍。


PRINFO控制PI主要包括PRACT(Protection Information Action)和PRCHK(Protection Information Check)。


13.png



1.PRACT


PRACT指明了PI信息生成的機(jī)制。


  • PRACT=0


當(dāng)WRITE命令時(shí):


(1)如果namespace在format的時(shí)候沒有啟動(dòng)PI 使能,針對(duì)Host過來的Logical User Data和Meta,NVMe模塊不會(huì)做任何處理,直接交給后端的Flash Controller模塊處理。


(2)如果namespace在format的時(shí)候啟動(dòng)了PI 使能且PRACT=0,SSD接收到Host傳來的數(shù)據(jù)后根據(jù)PRCHK檢查PI,如果檢查失敗,SSD會(huì)向Host返回命令失敗,并置上相應(yīng)的錯(cuò)誤位(Guard check, App Tag Check 和 Ref Tag Check)。


14.png


15.png



當(dāng)READ命令時(shí):


(1)如果namespace在format的時(shí)候啟動(dòng)了PI使能且PRACT=0,SSD讀取到FLASH的數(shù)據(jù)以后會(huì)根據(jù)PRCHK檢查PI,如果檢查失敗,SSD會(huì)向Host返回命令失敗,并置上相應(yīng)的錯(cuò)誤位(Guard check, App Tag Check 和 Ref Tag Check)。


16.png

17.png


  • PRACT=1


當(dāng)WRITE命令時(shí):


(1)如果namespace在format的時(shí)候啟動(dòng)了PI 使能且PRACT=1,并且Metadata size= 8Byte,SSD會(huì)生成PI信息并跟User Data一起寫入Flash。


18.png



(2)如果namespace在format的時(shí)候啟動(dòng)了PI 使能且PRACT=1,并且Metadata size > 8Byte (比如16 Byte),SSD會(huì)生成并覆蓋原有的PI信息,跟User Data一起寫入Flash。


19.png



當(dāng)READ命令時(shí):


(1)如果namespace在format的時(shí)候啟動(dòng)了PI使能且PRACT=1,并且Metadata size= 8Byte,SSD從Flash讀出數(shù)據(jù)以后會(huì)檢查PI信息,如果失敗,向Host返回命令失敗,如果通過,去掉PI(也就是Meta data)僅將User Data返回給Host。


20.png



(2)如果namespace在format的時(shí)候啟動(dòng)了PI使能且PRACT=1,并且Metadata size > 8Byte (比如16 Byte),SSD從Flash讀出數(shù)據(jù)以后會(huì)檢查PI信息,如果失敗,向Host返回命令失敗,如果通過,將包含PI的Meta data連同User Data一起返回給Host。


21.png



2.PRCHK


PRCHK控制PI具體檢查的內(nèi)容。


  • 如果PRCHK bit2=1,檢查Guard Tag。SSD比較PI中的Guard與User Data的CRC


  • 如果 PRCHK bit1=1,檢查Application Tag。SSD比較PI中的App Tag與讀寫命令里的LBAT (Logical Block Application Tag)位的內(nèi)容


  • 如果PRCHK bit0=1,檢查Reference Tag


     * 針對(duì) Type1 PI,SSD比較PI中的Ref Tag與計(jì)算出的參考Ref Tag,如果檢查失敗,向Host 返回命令失??;

     * 參考Ref Tag包含在讀寫命令的ILBRT或者 EILBRT中;

     * 針對(duì)Type 1和Type 2 PI,參考Ref Tag隨著LBA增加遞增;

     * 針對(duì)Type3 PI,參考Ref Tag保持不變;

     * 針對(duì)Type1 PI,Host必須保證ILBRT和EILBRT與LBA的最后4個(gè)Byte相等;

     * 針對(duì)Type2 PI,SSD檢查PI的方式與Type1 相同,不同處在于Host可以任意指定ILBRT和EILBRT;

     * 針對(duì)Type3 PI,SSD不會(huì)檢查ILBRT和EILBRT,同時(shí)可以直接Abort這個(gè)命令;

     * 針對(duì)Type1和Type 2 PI,如果App Tag=0xFFFF,PI check會(huì)被Disable;

     * 針對(duì)Type 3 PI,如果Ref Tag和 App Tag所有bit均為1,PI check會(huì)被Disable。


3.ILBRT/EILBRT


ILBRT/EILBRT命令字主要用于SSD計(jì)算Ref Tag,計(jì)算方法前文介紹中已有描述。具體內(nèi)容在NVMe CMD的DWord3和DWord14中。


22.png


憶芯SSD主控芯片端到端數(shù)據(jù)保護(hù)


憶芯科技即將流片的新一代高性能消費(fèi)級(jí)PCIe5.0 SSD主控芯片STAR1500和已上市的PCIe4.0 SSD主控芯片STAR2000,均已支持NVMe2.0協(xié)議中的端到端數(shù)據(jù)保護(hù)功能,支持主機(jī)或者SSD內(nèi)部產(chǎn)生PI信息,為用戶提供了高可靠的數(shù)據(jù)業(yè)務(wù)保護(hù),使用戶使用更安心。