當傳統存儲廠商還在大力推動傳統磁盤的時候,卡耐基梅隆大學通過將近4年的時間,通過Facebook數據中心的幾萬臺服務器,進行了閃存 大規模使用的研究報告。這個報告第一次展示了閃存SSD可靠性的大規模研究。“他們在 Facebook數據中心通過近四年和數百萬次的操作小 時進行數據收集來了解閃存SSD失敗的性質和趨勢。”
這次包括的意義在于:企業級測試、大規模、長時間的第一次全面了解閃存在企業級數據中心大規模應用的研究。對于閃存在數據中心的應用具有很高的參考價值。可以預見,此次測試大大加速閃存大規模商業化。
那么此次報道對于閃存可靠性的研究有哪些精彩觀點?近日,筆者參與了自媒體人阿明組織的一個閃存研討會。現場邀請到來自Greenliant 亞太營銷副總裁李炫輝,他就《Facebook閃存失效大規模研究》論文展開一系列現場討論的話題。《大話存儲1&2》作者張冬也將帶來他對 該論文的獨家分享。 同時,本次沙龍還邀請到來自人人網李蓓、美圖楊尚剛等互聯網用戶。
Greenliant亞太營銷副總裁李炫輝認為,“A Large-Scale Study of Flash Memory Failures in the Field《Facebook閃存失效大規模研 究》的論文題目,立足點非常好,它是在一個完整的閃存產品生命周期里面,并且在一個真實生產環境里面,去研究和發現閃存的可靠性對 于現代軟件以及數據中心的影響。因為很多設備廠商可能只看自己設備的情況,但是對于下游廠商如何使用自己的設備應用的情況和問題, 了解不多。而且從整個生命周期去理解這個事情,是非常有意義的。”
目前我們談到的閃存卡或者叫固態盤,其最基礎的組成部分就是閃存顆粒。但是目前業內公認的一個觀點就是,閃存顆粒并沒有因為采用新 的納米材質而提高其可靠性。隨著閃存密度的增加,在芯片層面的可靠性是降低的。大家都在談閃存顆粒越來越便宜了,比如說20納米只有 25納米60%的價格,16納米大概只有20納米50%的價格,越來越便宜了。但是問題是它是便宜了,但是可靠性會下降的。這就是為什么你會看 到有一些企業級產品維持高制程的工藝,并非低制程的工藝。
圖一就是顯示了當前隨著閃存密度的增加帶來了芯片級可靠性的降低 圖一 閃存的可靠性趨勢,通過增加每個單元的比特數來增加閃存密度或者通過減少顆粒大小都會影響到閃存的壽命和可靠性。 縱軸是可靠性、可擦除次數,橫軸是納米制程。所以就有了現在閃存顆粒廠商都開始注重3D NAND。為什么顆粒廠商都開始注重3D NAND?原因在于 3D NAND在平面上可以采取更高制程,可 以讓顆粒在35納米甚至40納米的制程上,通過多層結構增加容量,提高單個晶圓產出率、降低成本,同時最大限度的保持閃存的壽命和可靠 性。
圖一可以看出早期在72納米的情況下,MLC的可擦除次數可以達到1萬次。比如說到了35納米,可擦寫掉到幾千次了。并且這里面還有bit error rate的變化,就是擦寫過程中會出現錯誤的比例。如何測試閃存的穩定性,李炫輝用了一個術語稱為DWPD(Disk Write Per Day)(全盤磁盤寫/每天),固態盤測試穩定性是每天10次DWPD, 就是說每天全盤擦寫十次來測試閃存的性能以及壽命。因為這是符合企業盤在數據中心的實際應用情況。李炫輝表示測試Greenliant是一天 50次擦寫進行測試,在55度的恒溫下去跑。并且現在還再繼續跑,已經跑了一年了。那么如果實際應用就可以支撐5年以上。雖然目前測試 結果是50*360超過18000次擦寫。但是目前還沒有看到衰減跡象。所以還在繼續測試。想看一看Greenliant的閃存卡的極限是多少。
圖二
圖二顯示Greenliant對產品進行長期擦寫以及性能測試 。在疲勞測試環境中,每天全盤擦寫50次, 超過18000次擦寫后,性能衰減不超過10%。
而且通過長期跟蹤測試,有幾個主要發現跟大家分享一下。
(1) SSD失敗并不是單純地隨閃存芯片磨損增加;它們歷經幾個明顯的時期,與失敗如何出現和隨后如何被檢測到相一致
圖三 我們知道磁盤是開機故障率比較高,然后是穩定期,故障率維持恒定,然后經過長時間使用,故障率又上升。閃存不同,看圖三,閃存是開機故障率低,之后故障率有所提高,然后又是穩定期,最后故障率又提高。按照圖示,李炫輝表示,對于閃存來說,早期能夠替換臨界狀態 的顆粒非常重要。當閃存大規模使用時,質量不好的顆粒就會出現損壞,故障率上升。這時,閃存可以通過OP( Over-provisioning,是指SSD保留他用的空 間)的顆粒替換質量不高的顆粒,替換之后,閃存逐步進入穩定工作的狀態,故障率降低,直至生命周期的末端,故障率提升。
因此,Facebook論文里面還提到一個現象,早期替換率高的反而后期是比較穩定的,早期替換低的后期可能故障率更高。原因是什么呢?原 因是前期會有一些顆粒處于臨界值,早期沒有能夠把處于臨界狀態的顆粒給替換掉,隨后臨界狀態顆粒到后期變成壞的了 。早期出現的故 障多是壞塊,由于塊造成的SSD失效。
(2) 讀干擾錯誤并不普遍
圖四圖四:固態硬盤的故障率與閃存單元讀取數據關系不大,圖中顯示,其中超過寫入閃存單元兩倍的從閃存單元讀取數據,但是顯示不出故障 依賴于從閃存單元讀取數據量。
(3) 跨SSD物理地址空間的稀疏邏輯數據布局(如,不連續數據),需要通過大量的存儲在SSD內部DRAM緩存的metadata來跟蹤邏輯地址翻譯, 會極大地影響SSD失敗率
(4) 高溫會帶來高的失敗率,但是通過截流SSD操作看來可以極大地減少高溫帶來的可靠性負面影響,但是會帶來潛在的性能下降
SSD的最適宜穩定可能不是大家想象的那么低,據李炫輝介紹:50℃~55℃是SSD適合的工作溫度,穩定過高會帶來錯誤,導致失敗。溫度過 低,也不利于SSD性能的發揮。
“閃存并不是溫度越低性能越高,實際上溫度越低由于電子驅動性能會下降因此還需要合適的工作溫度,50到55攝氏度是比較好的工作環境 。既比較流暢,又沒有那么高的激發態會出現電子流失。如果說太高了,可能電子流失會比較多一點。如果太低了,對于電子操作性能會下 降了,所以說還不能太低。”,不過對于這個問題,“所謂限流,直接對供電進行限制,相對來講就是降低散熱,降低散熱實際上就變相地 降低溫度了。通過限流可以降低溫度、提高可靠性,但問題是這樣又影響到了性能,實際上這是一個矛盾體。這個問題就需要在板卡的設計 過程中,怎么去這個給分攤掉,防止出現熱點。熱點就是真正的熱點了,就是溫度高點,一個地方的溫度高會造成整個系統溫度高。這就是 之所以用分布式架構的原因,防止出現集中式的熱點。”
SSD故障是由兩方面組成的:早期是由壞塊檢測功能造成的,后期就是wearout磨損造成的,對于wearout可以優化。
那么這里就需要提到磨損均衡的概念。磨損平衡分為動態和靜態磨損平衡以及全局磨損平衡。
如圖縱軸所示,有的塊擦寫了60次,有的塊擦寫了160次。這樣就有很多塊不能合理利用,大大減少閃存顆粒的實際壽命。而通過磨損平衡的概念,讓每個塊都實現150次左右擦寫(如上圖),大大提高了塊的利用率,這樣有利于改善閃存耐久性,會優化閃存的性能。另外 在顆粒級別會有全局磨損平衡算法,這樣進一步提升設備的可靠性。
當有Wear Leveling磨損均衡的時候,基本上所有的擦寫都是一致的。“你擦了102次,我擦了98次,大家都差不多,這樣大家均勻的一起走 向末路,而不會在一個SSD里面,我這個顆粒很快掛掉了,你那個顆粒還有半年的生命周期。”
通過以上閃存顆粒出現的問題可以幫助我們 (1)了解各種不同因素對閃存可靠性的影響,包括系統軟件,應用以及SSD控制器, (2) 設計更加可靠的閃存架構和系統 (3)為今后閃存可靠性研究改善評估方法對于顆粒問題我們可以通過閃存控制器來優化,閃存控制器是閃存系統的核心
閃存控制器是聯系主機和NAND Flash的橋梁 閃存控制器有以下閃存管理功能: Error-correcting code (ECC校驗) RAID保護機制 Wear leveling(磨損平衡) Bad block mapping(壞塊管理) Read/write disturb management(讀寫干擾管理) Garbage collection(垃圾收集) 分布式ECC設計讓性能持續成為可能當Flash設備隨著使用時間和數據量的增長,壞塊會逐漸增加,會產生大量的ECC Error,這時設備性能和可靠性會大幅度下降,對應用性能 和數據安全帶來影響。這就造成常見閃存卡ECC模塊設計潛在的問題:性能衰減和可靠性下降。
由于NAND Flash的工藝不能保證NAND的Memory Array在其生命周期中保持性能的可靠,因此在NAND的生產中及使用過程中會產生壞塊。為了 檢測數據的可靠性,在應用NAND Flash的系統中一般都會采用一定的壞區管理策略,而管理壞區的前提是能比較可靠的進行壞區檢測。
G-Card分布式的ECC校驗架構,就有點像動車了。在每一個顆粒里面,都封裝了一個小的控制器,這個控制器就支持我們內部的ECC校驗的處 理。這就意味著即使說出現比較多的錯誤,我有更多的處理的校驗的芯片在里面,因此我的性能不會受影響,我的可靠性也不會受影響。這 樣就說在顆粒內部實現非常好的性能和可靠性的保障。
Greenliant G-Card 分布式ECC設計架構—NANDrive模組
Greenliant磨損平衡的測試數據顯示,每一個塊的擦寫次數的偏差都在7%以內,非常小的偏差。這樣就保證非常高的可靠性,為此,一天全 卡擦寫10次,G-card可以至少使用5年。李炫輝講到“這五年之內,G-card基本性能和可靠性,沒有變化,一直在整個生命周期是可持續的 。這就是閃存里面的磨損均衡,我要保證顆粒大家都用的次數差不多,我要有一個磨損均衡的算法。”
分布式ECC既帶來了更可靠的校驗計算能力,同時分布式的組件布局降低單個組件的功耗和溫度,防止溫度過高對系統可靠性和穩定性的影響另外需要用戶了解的是SSD的存儲策略。但系統需要對存儲數據的閃存顆粒塊進行擦寫的時候,首先要將塊內的有效數據遷移走,然后對于 整個頁進行擦寫。因此寫放大會大大影響閃存的壽命。
我們知道PCIe設備是不支持Raid卡的,這時候如果出現顆粒級的故障,數據就會丟失。Greenlian在板卡上又定義了一個硬件Raid。每五個這樣的顆粒做一個Raid組,連接一個陣列控制器,我們上面一共有8個陣列控制器,控制了8個組。這樣保證說當顆粒出現故障的時候,用戶的數據也是安全的。
“Greenlian板卡就在這種顆粒之間再實現硬件的Raid,這樣就解決了用戶對于數據高可靠性的一個要求。因為大部分PCIe閃存卡,都是基于操作系統的一個Raid,就會造成性能下降,加大顆粒的磨損度。”李炫輝講到。而Greenlian的G-card閃存卡直接實現顆粒之間硬件Raid,
寫放大(英語:Write amplification,簡稱WA),是影響SSD壽命以及性能的重要因素之一。何為寫放大,我這里根據網上資料,簡單明了的談一下。SSD里的數據不是直接更新,只能通過不斷的擦除、重寫進行。但是因為這個擦除 最小單元是塊級別。所以如果你寫入的數據如果遠遠小于塊的大小。就是所謂的寫放大。
如何你要寫入一個4KB的數據,而塊的大小是512KB,要簡單一步寫入4KB的操作變成:閃存讀取(512KB)→緩存改(4KB)→閃存擦除(512KB )→閃存寫入(512KB),共四步操作,造成延遲大大增加,速度變慢。寫入放大就是: 實際寫4K的數據,造成了整個塊(共512KB)的寫入 操作,那就是放大了128倍。這就是說WA是影響SSD隨機寫入性能和壽命的關鍵因素。
談論了這么多針對《Facebook閃存失效大規模研究》論文的話題,相信大家對SSD包括閃存的技術架構和特點有一定的了解。下篇文章我們 會探討《大話存儲1&2》作者冬瓜哥(張冬)帶來的閃存中最底層的東西,cell、Page、Block等內容。