寫在DST之前
企業級SSD系統在日益變得復雜,有增強掉電保護的備電電容,有使用頻率越來越高的DRAM,有堆疊層數越來越高的NAND, NAND結構的復雜對固件的要求也相應的變高,如存儲單元里的數據一段時間不讀會導致之后可能讀不出來或者出現很多的bit翻轉等等。而備電電容有老化的風險以及在不同的溫度環境下會影響電容的可靠性;DRAM使用不當易出現ECC,甚至是UNC,影響盤的可靠性;NAND的上的冷數據如果不經常性的去讀取就可能存在數據丟失的風險。
像服務器上電自檢一樣,SSD在上電過程中也會做電容,DRAM等自檢操作。但是一般盤上電使用之后就極少會下電,所以為了能讓HOST能實時的獲取盤內部部件的情況,NVMe協議提供了一個標準的命令Device self-test來主動觸發盤的部件檢測,可以快速的發現盤是哪個部件出現了問題,可以相應的做出反應,保障用戶數據的安全。
Device self-test
NVMe命令device self-test是一個管理類命令,定義了一個操作序列。具體內容如下:
如上圖所示:每個序列都規定了相應的操作,有些操作是針對controller層級,有些操作是NVM層級。Controller層級的主要是用于測試SSD的功能是否還正常,比如電容容值檢查,如果容值變低,則會影響SSD的掉電時間。
1、Device self-test命令在Command DW 10字段中定義了診斷的操作類型,而所有其他命令指定的字段都要保留。
如上圖所示,目前支持的操作類型有4種,
開始一個短診斷操作;
1、短診斷的完成時間不能大于2min。
2、開始一個長診斷操作;
長診斷的完成時間由Identify Controller的字段EDSTT定義,單位是分鐘。
E、開始一個廠商自定義操作;
F、中斷一個診斷操作;
2、中斷一個自檢命令的操作有:
1、Controller reset
2、NVMe Format Command
3、一個STC為F的Device self-test命令
4、一個刪除對應的ns的操作
5、Sanitize命令
3、觸發自檢命令之后,FW會按照相應的序列順序執行,命令運行的情況在device self-test log中顯示,這個log可通過get log page命令的LID=6來獲取。
1、Current Device Self-Test Operation 表示當前的診斷操作類型
2、Current Device Self-Test Completion 表示當前的診斷操作進度
3、Self-test Result Data Structure 總共有20條記錄,記錄了歷史的自檢結果,主要關注兩個點:
* Device Self-test Status:這里顯示了自檢的結果,成功或者失敗。
* Segment Number:這里顯示了失敗在哪個序列操作.
DRAM Check
*由于DRAM用作用戶數據的緩存,以及存放了部分代碼和重要的數據,所以如果對這部分DRAM區域做讀寫校驗的話,會直接導致數據的丟失或者固件exception。
*由于DRAM在打開ECC校驗的情況下,如果出現未寫先讀的情況,會使得DRAM出現UNC.
基于以上兩點,對于DRAM Check,固件主要要做的事情有兩個:
1、對于無法做讀寫校驗(即只讀)的區域,FW需要保證該區域已經寫過數據,所以可以直接去讀該區域。如果出現UNC,則固件存在bug,會危及盤的正常使用。
2、對于用作堆區域的DRAM空間,可以申請出來做讀寫校驗。除了校驗數據的正確性,還需要關注DRAM是否出現ECC,如若出現ECC,則可能會危及盤的正常使用。
Volatile Memory Backup
我們常用的數據緩存介質DRAM是易失性存儲介質,在設備掉電之后DRAM中的數據都會丟失。但是DRAM的數據傳輸速率高,為了性能考慮,其存在又是必須的。
1、緩存用戶數據,加速命令的執行,減少QOS.
2、緩存了設備的元數據,加速了元數據的修改。
所以為了解決設備掉電之后緩存數據丟失的問題,設備需要增加備電電容以供在掉電時保證緩存數據存入flash。但是電容存在一定的失效率,失效的原因可能如下:
1、電容出廠時個體的差異導致能承受的電壓閾值偏低;
2、隨著時間的推移,電容會存在漏液現象導致容值降低。
軟件需要在設備上電或者運行過程中對電容進行定時檢測,以防止電容失效或者電容容值下降不足以保證設備刷新緩存數據所需時間導致數據丟失,但是電容的檢測又不能太頻繁。否則一是會影響電容的使用壽命,二是如果在電容放電的過程中盤掉電了,會影響盤的掉電時間。
所以Host使用device self-test命令來檢查電容的容值是必需的,尤其是在接近盤的生命末期的時候,但是又不能太頻繁。
Metadata validation
在SSD的所有寫入數據中,存在一些頻繁更新的數據和一些很久都不會更新的數據,如果那些很久都不會更新的數據量大的話,那么也會導致對應的元數據很久得不到更新。所以為了解決這個問題,在device self-test命令的元數據檢查序列里,FW會去對元數據做讀校驗,確認元數據的完整性。
1、確保元數據還能從NAND讀出來,不會出現UNC;
2、對讀出來的數據做check,保證數據的正確性。
結尾
限于篇幅以及對協議的理解不同,各個廠商對其他的device self-test序列所做的事情存在區別,所以這里不再贅述。只介紹了對以上3個序列的個人理解。
原文標題:日益復雜的企業級SSD系統,如何做Device self-test?
文章出處:【微信公眾號:大普微】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
電容
+關注
關注
100文章
6090瀏覽量
150773 -
SSD
+關注
關注
21文章
2883瀏覽量
117674
原文標題:日益復雜的企業級SSD系統,如何做Device self-test?
文章出處:【微信號:dputech,微信公眾號:DapuStor】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論