讀寫次數有限
SSD最大的缺陷在於讀寫次數有限,SSD分為兩種;快閃存儲器的多層式儲存單元(Multi-Level Cell,MLC)要比單層式儲存單元(Single-Level Cell,SLC)更有價格優勢,也比較有取代傳統硬碟的架勢。雖然在抹除(寫入)次數上,MLC號稱一萬次,SLC號稱十萬次,但根據老蔣取得的統計數據顯示,實測過後,MLC只有三千次,SLC則只到三萬次。
這樣的壽命用在一般消費電子、數碼相機、USB隨身碟都沒什麽問題。但若要做為計算機的系統碟,不論是產品可靠度或是資料完整度,都不可能滿足計算機系統的需求。
包括Intel在內的快閃存儲器及固態硬碟控制器廠商,都透過Wear Leveling技術,讓固態硬碟機的各個存儲器單元抹除次數盡可能平均。加上錯誤更正碼(Error Correction Code,ECC)來提高產品可靠度。
但老蔣認為,目前的技術無法「有效」解決固態硬碟機的抹除次數限制。
目前小筆電的固態硬碟幾乎清一色使用MLC架構,企業運算環境則多采用SLC架構。這樣的差異來自市場特性、價格及資料完整度、產品可靠度的要求。SLC更穩定,價格也高更多。
商用必須謹慎導入
至於企業運算應用環境的使用經驗上,包括Sun Microsystems、EMC甚至Google等大廠,雖然都宣稱要擁抱固態硬碟,但目前都只是測試階段,還沒正式導入。
比起個人市場,企業用戶需要更長的時間,來評估產品是否可以導入。而且企業運算環境比個人運算的負荷要高出很多。
如果固態硬碟無法在三年提升穩定性,免除使用者不愉快的經驗。以後就要要花數倍的努力,才能讓人重新接受它。畢竟傳統硬碟是個發展超過50年的成熟科技。
價格還是太高
很多業界朋友認為,當固態硬碟每GB售價低於0.5美元時,一般使用者就會接受固態硬碟代替傳統磁碟機。這樣的預測在商用計算機市場也許可以成立,不過,對於成本非常敏感的消費計算機市場,卻不容易實現。雖然目前使用者不需要那麽大的容量,但實際的購買行為卻不是如此。
64GB的固態硬碟絕對無法滿足一般使用者。如何把價格盡快降到大眾可接受的範圍,又要維持產業本身的健康發展,對廠商的挑戰絕對不下於前面提到的兩個問題。
使用傳統硬碟的機種幾乎稱霸整個迷你筆電市場,僅華碩部分機型用固態硬碟,且容量都不大。
●傳統硬碟的一些謬論
雖然傳統硬碟機給大家許多刻板印象:比固態硬碟機耗電、抗沖擊及抗震能力不如固態硬碟、運轉噪音大。當人們對於固態硬碟的激情過後,我們仔細來看,在筆記型計算機系統中,硬碟機的耗電只占總耗電的10~15%。這代表硬碟對電池使用時間的影響不超過20分鐘。
在產品回修率及資料可靠度上,傳統旋轉式硬碟機也是比固態硬碟機為佳。萬一硬碟機故障,又無事先備份資料,在資料救援難度上,固態硬碟的資料幾乎完蛋。但只要碟片沒被完全刮壞,儲存在傳統硬碟機的資料幾乎都可以恢復。
在一臺完整的計算機系統中,用來顯示畫面的耗電量最大,傳統硬碟的耗電量大約在15%左右。(資料來源:Intel)
SLC與MLC一個穩定、安全卻貴到翻;另一個便宜、容量大卻令人不安。看樣子只有雲存儲的分布式存儲系統能解決MLC不穩定的問題。
MLC只有三千次,SLC則只到三萬次讀取。這在企業級存儲上幾乎是不能用的,但是wear-leveling的技術讓SSD的數據存儲壽命增加了很多,簡單說wear-leveling就是讓系統平均的讀寫SSD中每一個數據塊。
動態Wear-Leveling
Wear-Leveling有兩種類型:動態和靜態。動態Wear-Leveling算法保證數據的編寫和循環的擦除會被均勻地分布到NAND flash的所有塊中。該算法之所以是動態的是因為它每次都在緩沖區處理數據,然後寫入閃存中。就像前面提到的那樣,該算法主要是為了避免讓應用程序重復不斷地對同一個存儲區域進行擦除/寫入,從而讓該存儲單元出現永久性損壞。
當出現一個寫數據請求時,動態Wear-Leveling就會開始啟動。該算法先對ECT的空閑塊池進行瀏覽,尋找一個擦除計數值最小的塊單元。一旦找到符合要求的塊,就將數據寫入,並將該塊送入數據塊池。然後將新塊的物理地址與主機發送過來的邏輯地址在轉換映射表上建立彼此的映射關系。
通過這種做法,即使重復地對同一個邏輯地址進行寫數據,由於邏輯地址和物理地址之間的映射關系發生了變化,所以數據自然不會在同一個物理塊上進行重復寫入。數據寫入後,就需要將與主機寫入的邏輯地址最初相映射的物理數據塊進行擦除,然後更新ECT塊擦除計數值,並將塊送入空閑塊池,修改ECT中的塊組信息。
靜態Wear-Leveling
單單使用動態Wear-Leveling無法保證所有塊能夠在相同的概率下使用Wear-Leveling。對於有些特殊的情況比如數據寫入閃存並存儲了相當長一段時間甚至無限期的情況,動態Wear-Leveling就無法起作用。當其他塊頻繁地進行交換,擦除和存儲,上述這些塊單元在Wear-Leveling操作中卻始終保持不活動狀態。
為了確保所有塊都能夠受到Wear-Leveling算法的檢測,第二種Wear-Leveling算法――靜態Wear-Leveling就應運而生了。靜態Wear-Leveling會對那些處於不活動狀態的塊單元進行尋址,並把數據寫入它們之中。靜態Wear-Leveling使用兩個觸發機制定期地進行操作。
第一個觸發機制是檢測不活動塊單元的閑置存儲階段。如果這個閑置階段超過了所設定的上限,就會啟動ECT進行瀏覽操作,尋找在數據塊池中擦除計數值最小的塊單元,以及空閑塊池中擦除計數值最大的塊單元。
一旦該查找完成,第二個觸發機制就會將數據塊池中最小的擦除計數值與空閑塊池中最大的計數值進行相減,如果結果超過了設定上限,那麽在數據塊池中擦除計數值最小的塊單元的數據就會被轉移到空閑塊池中擦除計數值最大的塊單元中。
然後,這兩個塊的位置也要互換。數據塊池中擦除計數值最小的塊就會被擦除,並放置到空閑塊池中。而原先在空閑塊池中計數值最大的塊則由於已經被寫入了其他塊的內容,而被轉移到數據塊池中。轉換完成後,在FTL中轉換映射表就要進行更新,將邏輯塊地址映射到新的物理塊地址上。最後,ECT會對每一個塊重新組隊。
6.無效塊處理和映射
無效塊包含一些無效內容,導致SSD的穩定性無法得到保證。在制造過程或者運行時,難免會產生一些損壞的塊單元。當SSD第一次啟動時,驅動器就會瀏覽每個塊單元,在FTL的無效塊列表中(IBT)找出那些由SSD賣主事先標記好的無效塊。
靜態Wear-Leveling塊示意圖
在運行過程中,擦除編寫也會出現錯誤。它們會被NAND Flash芯片中的監測狀態寄存器檢測出來。如果錯誤出現,狀態寄存器中指定的比特位就會被重設,以此來表示該塊已經不再穩定,必須被標示為無效。當一個損壞的塊被檢測出來時,FTL會將該塊上的數據重新寫入到空閑塊池中擦除計數值最小的塊中,並將該邏輯地址重新映射到新的物理地址上。被檢測到出現錯誤的塊會在IBT中被標示,並從空閑塊池中刪除。
當無效塊的數量增加時,伴隨而來的是可用閃存的減少,空閑塊中的可用塊也會隨著減少。而上述方法相較於其他將無效塊替換的算法來說,能夠有效地提高閃存的使用率。因為那些替換算法是使用那些保留未使用的塊單元來替換無效塊的。
總結:
顯然,影響SSD使用壽命的因素很多,包括SSD擦除與寫入數據的策略、SSD的電氣性能甚至是SSD使用環境溫度等等,而在其中,數據寫入的均衡性算法無疑是最為重要的延長SSD使用壽命的方法之一,好的寫入均衡性算法可以使數據平均地分布在整個驅動器的block裏,而不會造成某一區塊成為信息讀寫的熱點從而影響到整個SSD的壽命。
Tags: 計算機系統 數碼相機 Google 消費電子 控制器
文章來源: