Flash錯誤的辯證論治

辨證論治是一箇中醫的概念,強調一種根據病因的不同和每個人身體情況的差別有針對性地展開救治,從而達到最優化治療的過程。辨證論治反映的是對待事物的態度和原則,並沒有揭示具體的方法,因此在具體過程中需要採用科學的方法通過實踐總結積累經驗。現代統計分析方法和數據挖掘技術爲我們提供了積累經驗的具體方法。

例如,針對當前新型冠狀病毒肺炎疫情,瑞德西韋的臨牀驗證採用了組輕、中症患者308例,重症患者453例共計761例病患樣本和採用雙盲試驗方法保證驗證結果的科學性。採用足夠樣本的雙盲試驗從統計上排除了每名患者自身差異對於藥效的干擾,確保了測試結果的科學性。而構建不同年齡、性別等特徵的病患集合則可以幫助確定藥物對於不同的病患的作用方式和效果。

如何將論治和辨證應用於SSD數據讀取?

在SSD從Flash讀取數據的過程中,經常會遇到各種情況導致數據幀糾錯失敗的情況。Flash廠商通常會提供針對不同情況進行數據恢復的“診療方案”。對於SSD特別是企業級SSD來說,如何利用Flash廠商提供的數據恢復方法,結合自己的實際情況最優化數據讀取過程的正確性和效率,是SSD廠商的一大技術核心。下面我們將從“論治”和“辯證”兩方面進行介紹。

如果把Flash中數據寫入和讀出過程看作數據在這個信道中傳輸,我們一定會關心這個信道的容量。通過估算這個信道的信噪比,可以大致推測出來,如果採用8~16位量化就可以充滿信道容量,這對應於TLC~QLC這兩種形態的Flash,並不支持更多的量化位數。但是2019 FMS國際閃存會議上,鎧俠電子(原東芝存儲)已經開始PLC閃存的討論,這說明理論的通信信道模型與Flash信道特性有差異。實際上Flash信道確實有自身獨特的地方,這與芯片的原理、製造缺陷和使用過程有關。

一般來說數據幀在讀取的時候發生錯誤,通常是幾個原因造成的,下圖總結了一些常見的Flash錯誤類型。實際上這些錯誤類型通常是定性的和理論化的,實際的數據幀在存儲過程中出現錯誤通常是各個問題的疊加。這使得先辨明問題再嘗試針對每種問題針對性地解決顯得不現實。通常廠商會提供很多組Readretry的序列對該信道進行修復,再加上SSD讀取Flash軟信息或通過糾刪碼進行糾錯的方法能夠解決大部分問題。由於每種方法只能有針對性地解決一小部分問題,並且這些方法所能解決的問題會部分重疊,而總的方法數可能多達上百種,像程咬金的三板斧一樣把所有方法依次試一遍的思路顯得很低效,並且會造成極大的延遲。有效的方案需要在一堆糾錯方法裏面挑選出一部分較好的方法,並把它們組合起來使用。

 

下面我們把這個問題數學化,考慮一個所有Flash數據幀出錯的集合爲S。根據經驗可以總結出n種錯誤恢復方法。其中第k種方法糾錯的集合爲Sk。而爲了解決的問題所產生的代價爲ck。這裏ck可以表示爲了糾錯所需要多次讀Flash數據幀或者是其他操作產生的代價。那麼這個問題就可以表示爲在n中糾錯方法中選出一部分方法,使得總代價不超過B,且糾錯能力最大。這個問題在數學上被稱爲限定預算的最大覆蓋問題。理論上,如果我們確定了能承受的最大代價,就可以確定一組方法,對錯誤幀依次使用這一組方法嘗試糾錯可以確保能夠最大程度進行糾錯。

實際應用中,像Readretry這樣的方法會調整判決電壓並嘗試再次從Flash上讀取數據,這類方法的代價主要是增加了數據讀取的時間。而採用XOR糾刪碼這樣的錯誤恢復方法則會需要讀取多個數據幀,從而產生更大的代價。因此合理估計每種方法的代價,並根據SSD的設計約束確定合理的總代價B很關鍵。而確定每種方法所能解決的可能性大小和重疊程度則是通過離線或者是在線的方法對Flash進行特性測試(Characterization)所獲得。通過特性測試,我們通常會得到這樣一個表格:

這個表的每一列代表一種測試方法,而每行代表一個數據幀。交點位置用1表示指定的測試方法對於該數據幀糾錯成功,而0表示糾錯失敗,空白表明對於這幀數據未採用這種方法進行測試。

爲了能轉化成最大覆蓋問題,我們先把空白的位置填上使用這個方法糾錯成功的先驗概率(或樣本概率)值,然後再使用最大覆蓋求解該問題。最大覆蓋問題不能通過貪婪算法得到最優解。從下面的集合維恩圖中容易看出來,C包含的面積最大,如果採用貪婪算法會首先把它選出來,然後才能繼續選擇A或B。但是如果限定選擇兩個方法,那麼選擇A+B作爲目標方法集合會比C+A或者C+B所覆蓋的面積要更大。

由於最大覆蓋問題是一個NP-Hard問題,且表格列數很多,因此工程上難以求得精確解。可以採用模擬退火算法或者是遺傳算法獲得其近似解。一旦確定了方法集,也就可以根據每種方法糾錯能力確定最優執行順序。如果我們把平均執行代價作爲最優執行順序的依據,那麼這同樣是一個NP-Hard的問題,可以採用類似的近似解求解方法。

SSD的數據診斷

採用了上述方法,就可以根據實際情況和SSD的設計目標選擇合適的糾錯方法集合,達到有效“施治”的目的。但是籠統的把這些方法應用到所有的出錯的位置,並沒有根據每種錯誤情況來具體分析,使用針對性的方法來提高糾錯能力和降低反應延遲。爲了引入“辯證”的理念,我們需要找到正確的方法對錯誤的“症狀”進行分類,針對每種症狀找到個性化的解決方法。這裏面臨一個困難:如果分類過細,那麼相鄰類別所對應的糾錯方法可能差不多,造成冗餘分類;還有可能造成對應類別的測試樣本不足,不能用於概括這類問題。而如果分類過粗,那麼一個類別中的不同情況可能需要嘗試多種糾錯方法,造成效率低下。

既然把Flash錯誤比作疾病,也可以看看醫學是如何藉助大數據來幫助我們診斷疾病。計算機輔助診斷(CAD)體現了現代統計學對於疾病診斷的價值。把病例診斷數據輸入計算機,它可以根據預先設計的算法和約束條件自動生成診斷方法。而決策樹如CART、Decision Forest等方法因爲其可解釋性和高有效性使得基於決策樹的輔助診斷被最早應用到自動診斷中來。

同樣的,在SSD內部,出於管理的需要通常會對每個Flash Block建立一個“病歷本”。如果我們能夠形成一個診斷方法,可以根據Flash使用具體情況如擦寫次數、數據寫入時間、溫度等特徵形成一個個性化的糾錯方案。

診斷方案可以使用機器學習和人工智能的方法構建。與通常的診斷不同,每一種糾錯方法與錯誤類型並不是一一對應的關係,希望採用分類的方法構建診斷方案不可行。此外用於分類的“症狀”可能擁有多個特徵,需要從中確定有效的特徵。因此,需要根據Flash的特徵來構造出不同類別,實現類內糾錯方法一致高效,類間的糾錯方法區分度大。爲了能夠利用算法進行自動聚類,需要首先收集攜帶有分類特徵的特性測試數據樣本,然後再定義具體的聚類標準和優化目標函數,並構建聚類模型。爲了確保算法的可靠穩定,採用上述方法收集到的模型和流程需要經過數據和人工的驗證,確保其合理解釋性。

 

Memblaze的望聞切問

掌握了針對Flash錯誤的“望聞切問”診斷原理,還需要通過大量的特性測試獲得NAND Flash對應型號的特性數據。Memblaze深知數據對於用戶的價值,在企業級SSD的研發中,一直把Flash特性分析、錯誤檢測和預防作爲關鍵設計要求。由於Flash更新換代很快,爲了能夠高效、及時、準確獲得特性數據,需要有自動化的檢測平臺和檢測流程。目前Memblaze已經擁有自主知識產權的軟硬件平臺,藉助檢測平臺和基於人工智能統計學分析方法,可以對於不同廠商、不同型號的NAND Flash進行深入分析,快速獲得優化的錯誤檢測和預防方案,並在產品設計、驗證導入等層面通過嚴格的流程把關,確保交付給用戶放心的產品。此外,Memblaze還與上游NAND Flash廠商和控制器廠商進行深入溝通合作,充分理解和掌握Flash的應用模型便於SSD全局優化Flash錯誤處理機制,並提供協作設計的典範。

 

 

本文作者:路向峯   |   Memblaze 聯合創始人 & CTO

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

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