How Controllers Maximize SSD Life
neeyuese 翻譯于 2014-1-1320:59
原文下載:http://www.snia.org/sites/default/files/SSSITECHNOTES_HowControllersMaximizeSSDLife.pdf
現在的MLC顆粒P/E基本上是3000~10000附近,隨著制程進一步提高,未來會跌到1000~1500。如何通過主控最大限度的提高整個SSD的壽命呢?
這點寫入量對消費級產品來說無傷大雅,但是對企業(yè)級產品來說問題越來越嚴峻,畢竟MLC顆粒已經正式進入企業(yè)級市場不少時間了,而且大有取代昂貴的SLC顆粒地位的趨勢。
既然大家都用著一樣制程的顆粒,為何有些廠牌標稱的SSD寫入耐久度那么高,而有些卻又很普通呢?
那是因為主控算法架構帶來的明顯區(qū)別,本文會講一下SSD主控提升耐久度的8個秘密。
1.磨損均衡 - Wear Leveling
2.外部數據緩沖 -External Data Buffering
3.改進的ECC -Improved ECC
4.錯誤管理技術 -Error Management
5.降低寫入放大 -Reduced Write Amplification
6.提升預留空間 -Over Provisioning
7.閃存區(qū)塊磨損反饋 -Feedback on Block Wear
8.閃存的內部管理 -Internal NAND Management
任何主控只要做好了上面的8點,即可大幅度的提升SSD的壽命,用3000P/E的MLC顆粒做出的SSD產品跑出平均3~5萬P/E也不在話下,當然沒有廠商會用顆粒耐久度標稱自己SSD的產品,只會寫多少TB,甚至PB的耐久度。
1. 磨損均衡是如何幫助主控提高SSD耐久度的。
閃存壽命是以P/E次數來計算的,而磨損均衡就是確保閃存內每個塊被寫入的次數相等的一種機制。當數據試圖寫入到某個塊之前,它會自動被迫寫入到另外的塊內來保證磨損的均衡。每個廠商的磨損均衡算法都不同,總有一些做的比別人更好。
有兩種基本類型的磨損均衡:靜態(tài)和動態(tài)。動態(tài)磨損均衡只會處理正在變化的和未使用的數據區(qū)域,而不會去處理已有數據的區(qū)域。靜態(tài)磨損均衡會在發(fā)覺已有數據的區(qū)域磨損度數明顯小于平均磨損度時候對它們進行搬運操作來達到磨損均衡。這兩種磨損均衡的執(zhí)行范圍也有講究,有全局磨損均衡和局部磨損均衡,全局磨損均衡觀察整塊SSD的磨損度操作,而局部磨損均衡則針對特定區(qū)域范圍進行操作。當然磨損均衡的操作特別是全局靜態(tài)磨損均衡由于需要來回移動數據,會增加不必要的寫入,這中間如何折中考慮則需要看SSD的設計師對主控內部的管理算法獨特的理解,好的算法取決于許多變量,例如閃存的類型,工作量和速度等要求。
上面是Intel給出的2個例子,前一個圖磨損最大值比平均值相差近3倍(早期SSD主控),后者最大值和最小值只相差4%。(初代和二代Intel主控)很明顯Intel使用的磨損均衡算法在這里表現更好了,相應的能夠更多的利用到所有顆粒的耐久度達到提高整塊SSD耐久度的目的。
2. 外部數據緩沖是如何幫助主控提高SSD耐久度的。
外部數據緩沖用來緩存閃存數據,減少閃存的磨損度。不管是主控內部的緩存還是外部緩存,都有很多使用方式來降低閃存磨損度。其中最常見的就是合并寫入,把許多零碎的小文件在緩沖區(qū)內合并再一起寫入閃存,能夠大幅度的提升寫入速度和降低寫放大。舉個例子:如果SSD在寫入時候沒有使用緩沖區(qū),當寫入許多小文件,之后的文件寫入可能因為之前的文件已經寫入進同一個閃存介質而需要把它們同時再搬運到另一個閃存塊中,無謂增加了操作時間和浪費了P/E。外部數據緩沖的優(yōu)勢除了合并寫入外,還可以用來做“覆蓋寫入”,比如把原本需要大量寫到同一個地址的數據在緩沖區(qū)內“覆蓋”操作,直到最后才寫入到閃存上,大幅度降低了閃存的寫放大,外部數據緩沖區(qū)一般很小,一般在2MB以內,取決于主控算法的設計需求。當然外部數據緩沖區(qū)有掉電數據丟失的隱患,所以需要靠掉電保護來保證數據的完整性。

3. 改進的ECC是如何幫助主控提高SSD耐久度的。
ECC的強度是影響SSD耐久度的一個關鍵因素,所有的閃存都需要ECC糾錯,這些錯誤是隨機產生的,我們一般叫做“軟錯誤”,因為閃存芯片內部的噪聲非常大,傳輸時候的信號強度較弱,這也是為何閃存是當今最便宜的存儲記憶體的道理。另外隨著閃存的磨損,出錯率會越來越高,這是因為某些bit會永遠卡在一個狀態(tài)下,我們稱作“硬錯誤”。因此不難理解,閃存的耐久度取決于大量磨損后"硬錯誤”大量增加導致無法糾錯,如果提高ECC能力,自然也就能盡可能晚的出現這種情況。當然有時候人品不好“軟錯誤”忽然大量增加導致突破ECC能力的情況也會發(fā)生,但是那個不應該會對全局耐久度產生大影響,只是會出現幾個重映射而已。
舉例子吧,讓我假設某個全新的閃存芯片軟錯誤是8bit的ECC需求,這個意思是每個Page在讀取時可能會隨機出現不大于8bit的軟錯誤(通常就是芯片噪聲導致),如果主控的ECC能夠糾錯12bit的話,那么就是說除非這顆閃存芯片P/E磨損到至少5個bit的硬錯誤再加上8bit的軟錯誤,才會導致ECC無法糾錯重映射的情況發(fā)生。現在讓我們說如果閃存廠保證出現5bit硬錯誤的情況是需要P/E磨損達到10000(或者5000,或者3000...)才會出現,那么我們就說在這個ECC能力下,這個產品可以做到xxxP/E的指標,如果把ECC能力提高到20bit糾錯就能達到更多的P/E要求。
當然提高主控ECC糾錯強度的代價是價格的大幅度提高,更強力的ECC需要更多的功耗,計算資源,更復雜的架構設計,更多的內存容量,同時降低了SSD的性能。ECC的架構同時也是數學家們一直研究的項目,如何犧牲最小的資源來達到優(yōu)秀糾錯能力,這絕對不是隨便就能做好的。LDPC將成為下一代SSD的標配ECC算法,當然如果沒有相關技術經驗積累的話,反而會得不償失的,傳統(tǒng)機械硬盤控制器芯片制造廠商這時候就要開心的笑了。
4. 錯誤管理技術是如何幫助主控提高SSD耐久度的。
前面說的ECC是糾錯能力,那么這里說的錯誤管理技術則指的是錯誤過濾能力(降低出錯率)。聰明的朋友應該知道我要說的是什么了,他就是DSP數字信號處理。DSP能夠過濾閃存芯片產生的軟錯誤,這些軟錯誤主要是因為閃存芯片內部干擾產生。
解釋下吧,閃存芯片內部每個存儲單元狀態(tài)的變化會對相鄰的存儲單元狀態(tài)產生細小干擾,例如你對這個存儲單元放電,旁邊的單元其實也會放電,如果是充電,旁邊的單元也會充電,只是這個值會很弱,但是一旦積累到一定值后狀態(tài)就變化了,這個就叫閃存的讀寫干擾。以前我說過取決于閃存芯片的品質,同一個區(qū)域讀取幾百次后,就要把這個區(qū)域的數據移動到別處,不然會出現錯誤,因此閃存的讀取次數也并非無限大的,只是相比寫入磨損來說小得多。
數字信號處理引擎知道閃存中哪個存儲單元會干擾另外的存儲單元,通過把原本的數據重新編碼后變成特定不易干擾的"符號"寫入來降低干擾的程度,由于這些"符號"也需要時間處理,因此會降低寫入速度。當讀取這些閃存區(qū)域時,這些"符號"重編碼成實際的數據,大幅度降低了出錯率,再進入ECC引擎糾錯。因此可以把數字信號處理理解成一個過濾處理,大幅度降低了軟錯誤的數量,達到大幅度增加耐久度的目的。數字信號處理在當前的SSD中并沒有非常廣泛的應用,但是隨著閃存工藝的提升,這是必須要使用到的技術之一。
5. 降低寫入放大是如何幫助主控提高SSD耐久度的。
寫放大成為了當前SSD主控算法研究的重點之一,低寫放大不但能夠大幅度提升SSD壽命同時保持高性能。由于閃存的特性導致讀寫和擦除單位不等,因此閃存主控需要自己對內部數據結構進行管理和優(yōu)化,而這部分操作并非主機的請求,導致了主機請求的寫入量和閃存實際寫入量出現了差距,造成了寫放大。某些主控支持數據的壓縮處理,能夠降低閃存中數據的寫入量,在一些特定的情況下寫放大也就能降低到1以下。如果把寫入同一地址的數據在數據緩沖區(qū)里就覆蓋掉,也能降低一定的寫入放大。不管如何,通過SSD的算法設計,盡可能的降低寫入放大能夠降低閃存的磨損度來達到耐久度提升的目的
6. 提升預留空間是如何幫助主控提高SSD耐久度的。
預留空間的多少也是影響SSD耐久度的關鍵因素之一,因為它幫助SSD主控降低了寫放大。預留空間能夠提高多少SSD耐久度呢?根據相關數據表明,如果一款SSD的算法設計到位,使用MLC閃存的話,45%預留空間的SSD相比20%預留空間的SSD耐久度多2倍,而75%則提高到3倍,100%預留空間則接近4倍,提高到250%的話則是6倍。許多消費級的SSD產品只有7%的預留空間,相比20%的預留空間耐久度會少3倍。
7. 閃存區(qū)塊磨損反饋是如何幫助主控提高SSD耐久度的。
SSD主控通過區(qū)塊磨損反饋能夠得知現在操作的閃存的磨損度到底如何,這個技術在目前的SSD中使用的極少,但卻是個趨勢。我們都知道閃存制造商定義了顆粒耐久度3000,5000或者10000次等,那么現在的問題是如果P/E超過這個數字后會如何?根據SNIA一份報告顯示,Fusion-IO的某款采用SLC的產品,達到了200~400萬P/E才出現大量錯誤,但是閃存制造商只標稱10萬次。
既然閃存能夠寫入和擦除那么多次,為何閃存制造商不標稱高點呢?這樣不是能夠帶來更大的市場競爭力么?實際上閃存制造商并沒有去測,特別是消費級產品市場上,大量的證據表明過高的標稱值并不能賣出更多的閃存芯片,相反要去驗證實際顆粒耐久度的花費是無法估量的,同時耐久度測試也毀了測試的芯片。由于耐久度會因為生產晶圓批次品質的不同而出現大幅度的變化,制造商不可能花費大量的精力去測試每個批次的耐久度,即使能夠這樣做(測試每個批次耐久度花去大量時間),也會導致產品發(fā)貨日期的大幅度推遲。因此正確的做法是設置一個最低標稱值,就算最爛的合格顆粒也能通過的標準。
既然如此,閃存區(qū)塊磨損反饋的技術就能起到作用了,SSD主控可以通過顆粒的擦寫反饋信號得知當前顆粒的磨損狀態(tài),再結合磨損平衡算法針對這些顆粒進行進一步的耐久度挖掘。說的簡單點就是不支持這個技術的主控會對每個顆粒進行完全平衡的磨損例如統(tǒng)一3000次,而支持此技術的主控通過顆粒反饋的出錯率和信號狀態(tài)來判斷每個顆粒的耐久度臨界點而進行更進一步的耐久度挖掘。
8. 閃存的內部管理是如何幫助主控提高SSD耐久度的。
上面7點感覺已經把閃存的耐久度挖掘到極限了,難道還有更狠的?是的,沒有比閃存制造商更了解自己的產品了。只看制造商給出的標準數據手冊做出的產品怎么可能比的過擁有內部參數的高級版數據手冊呢?除非你和制造商的關系很鐵,或者你有足夠的理由讓它們相信你即使放棄更有價格競爭力的別家顆粒,也只使用它們的顆粒開發(fā)產品。市場上做SSD的那么多,一般很難讓它們注意到你,拿到了這款顆粒的內部參數,對設計產品將獲得巨大的幫助,這些參數對SSD耐久度會起到至關重要的作用。
愛華網



