前言——
在前段時間小編曾經發布了:固態硬盤知識進階:專業名詞篇。文內介紹了各類固態硬盤中可能會出現的比較晦澀和深入的名詞,而很多朋友可能沒聽說過這些名詞。如FTL、LBA、GC等。。。今天我們將剩下的一些名詞再來說一下,給大家解讀一下。
下面就來為大家解讀這些名詞。
目錄:
一、預留空間(Over-provisioning,OP)
二、Trim
三、寫入放大(Write amplification,WA)
四、壞塊管理(Bad block management,BBM)
五、ECC - 校驗和糾錯
六、Interleaving - NAND 交叉存取技術
正文開場:
一、 預留空間(Over-provisioning,OP)
預留空間一般是指用戶不可操作的容量,為實際物理閃存容量減去用戶可用容量。這塊區域一般被用來做優化,包括磨損均衡,GC和壞塊映射。
第一層為固定的7.37%,這個數字是如何得出的哪?我們知道機械硬盤和SSD的廠商容量是這樣算的,1GB是1,000,000,000字節(10的9 次方),但是閃存的實際容量是每GB=1,073,741,824,(2的30次方) ,2者相差7.37%。所以說假設1塊128GB的SSD,用戶得到的容量是128,000,000,000字節,多出來的那個7.37%就被主控固件用做OP了。
第二層來自制造商的設置,通常為0%,7%和28%等,打個比方,對于128G顆粒的SandForce主控SSD,市場上會有120G和100G兩種型號賣,這個取決于廠商的固件設置,這個容量不包括之前的第一層7.37%。
第三層是用戶在日常使用中可以分配的預留空間,像Fusion-IO公司還給用戶工具自己調節大小來滿足不同的耐用度和性能,而用戶也可以自己在分區的時候,不分到完全的SSD容量來達到同樣的目的。
預留空間雖然讓SSD的可用容量小了,但是帶來了減少寫入放大,提高耐久,提高性能的效果。
二、 Trim
TRIM是一個ATA指令,由操作系統發送給SSD主控制器,告訴它哪些數據占的地址是”無效“的。
要明白什么是Trim和為什么它很重要,需要先知道一點文件系統的知識。
當你在電腦里刪除一個文件的時候,操作系統并不會真正的去刪除它。操作系統只是把這個文件地址標記為“空”,可以被再次使用,這意味著這個文件占的地址已經是“無效”的了。這就會帶來一個問題,硬盤并不知道操作系統把這個地址標記為”空“了,機械盤的話無所謂,因為可以直接在這個地址上重新覆蓋寫入,但是到了SSD上問題就來了。
NAND需要先擦除才能再次寫入數據,要得到空閑的NAND空間,SSD必須復制所有的有效頁到新的空閑塊里,并擦除舊塊(垃圾回收)。如果沒有Trim,意味著SSD主控制器不知道這個頁是”無效“的,除非再次被操作系統要求覆蓋上去。
這里要強調下,Trim只是條指令,讓操作系統告訴SSD主控制器這個頁已經“無效”就算完了,并沒有任何其它多余的操作,對Trim后的優化其實是垃圾回收在干活。Trim能夠減少寫入放大,因為主控制器不需要復制已經被操作系統定義為“無效”的頁(沒Trim的話,主控就因為不知道,而認為這個頁“有效”)到“空白塊”里,這同時代表復制的“有效”頁變少了,垃圾回收的效率提高了,SSD性能下降的問題也減弱了。
所以說Trim的奧秘在于它能大量減少“有效”頁的數量,大大提升垃圾回收的效率。
相對于企業級市場,在消費級的SSD里,Trim顯得更為重要,企業級的SSD大部分都帶有相當大的OP(備用空間)空間,能夠提升一部分的垃圾回收效率。而消費級SSD一般OP都比較小,所以需要Trim來保證垃圾回收的效率。
Trim指令只有在操作系統進行刪除、格式化等操作時候才會發送。Trim指令目前還不支持發送給RAID陣列中的SSD。(操作系統下進行的軟件RAID可以支持)。
Trim的支持需要3個要素:
1.SSD主控制器和當前搭配的固件需要支持Trim命令接收。
2.當前操作系統需要支持Trim指令發送。(Win7/2008R2及后續版本)
3.當前使用的磁盤驅動程序必須支持Trim命令傳輸。
只有同時滿足以上3個條件,才能做到系統Trim命令發送,驅動傳輸Trim命令,SSD固件接收到傳輸來的Trim命令。
Trim目前不支持以下幾種情況:(可能還有更多)
1. Trim目前不支持RAID陣列中的SSD。(操作系統下進行軟件RAID除外)
2. Trim目前不支持磁盤鏡像文件內操作。(VM等虛擬機軟件使用的虛擬磁盤文件)
3. Trim目前不支持加密的文件系統。(以防止暴露加密文件系統信息)
三、 寫入放大(Write amplification,WA)
因為閃存必須先擦除才能寫入(我們也叫“編程“),在執行這些操作的時候,移動(或覆蓋)用戶數據和元數據(metadata)不止一次。這些多次的操作,不但增加了寫入數據量,減少了SSD的使用壽命,而且還吃光了閃存的帶寬(間接地影響了隨機寫入性能)。
早在2008年,Intel公司和Silicon Systems公司(2009 年被西部數字收購)第一次提出了寫入放大并在公開稿件里用到這個術語。他們當時的說法是,寫入算法不可能低于1,但是這種說法在2009年被 SandForce打破,SandForce說他們的寫入放大是0.55。
最簡單的例子,比如我要寫入一個4KB的數據,最壞的情況就是,一個塊里已經沒有干凈空間了,但是有無效數據可以擦除,所以主控就把所有的數據讀到緩存,擦除塊,緩存里更新整個塊的數據,再把新數據寫回去,這個操作帶來的寫入放大就是: 我實際寫4K的數據,造成了整個塊(1024KB)的寫入操作,那就是256倍放大。同時帶來了原本只需要簡單的寫4KB的操作變成閃存讀取 (1024KB),緩存改(4KB),閃存擦(1024KB),閃存寫(1024KB),造成了延遲大大增加,速度慢是自然了。所以說寫入放大是影響 SSD隨機寫入性能和壽命的關鍵因素。
用100%隨機4KB來寫入SSD,目前的大多數SSD主控,在最壞的情況下寫入放大可以達到20以上。如果是100%持續的從低LBA寫到高LBA的話,寫入放大可以做到1,實際使用中寫入放大會介于2者之間。用戶還可以設置一定的預留空間來減少寫入放大,假設你有個128G的SSD,你只分了64G 的區使用,那么最壞情況下的寫入放大就能減少約3倍。
影響寫入放大的因素
許多因素影響SSD的寫入放大。下面我列出了主要因素,以及它們如何影響寫放大。
1. 垃圾回收(GC) Garbage collection ---
雖然增加了寫入放大(被動垃圾回收不影響,閑置垃圾回收影響),但是速度有提升。這個比較特殊的算法用來整理,移動,合并,擦除閃存塊來提升效率。
2. 預留空間(OP) Over-provisioning ---
減少寫入放大,好。(預留空間越大,寫入放大越低)在SSD的閃存上劃出一部分空間留給主控做優化,用戶不能操作的空間。
3. TRIM ---
開啟后可以減少寫入放大,好。一個ATA指令,由操作系統發送給SSD主控,告訴主控哪些數據是無效的并且可以不用做垃圾回收操作。
4. 可用容量 ---
減少寫入放大,好。(可用空間越大,寫入放大越低)用戶使用中沒有用到的空間,需要有Trim支持,不然不會影響寫入放大。 (某些主控制器算法只支持對OP區垃圾回收,這樣就不會影響)
5. 安全擦除Secure Erase ---
減少寫入放大,好。清除所有用戶數據和相關元數據,讓SSD重置到初始性能。
6. 持續寫入Sequential write ---
減少寫入放大,好。理論上來說,持續寫入的寫入放大為1,但是某些因素還是會影響這個數值。
7. 隨機寫入Random writes ---
提高寫入放大,不好。隨機寫入會寫入很多非連續的LBA,將會大大提升寫入放大。
8. 磨損平衡(WL) Wear Leveling ---
直接提高寫入放大,不好。確保閃存的每個塊被寫入的次數相等的一種機制。
四、 壞塊管理(Bad block management,BBM)
不管磨損平衡算法如何聰明,在運作中都會碰到一個頭痛的問題,那就是壞塊,所以一個SSD必須要有壞塊管理機制。何謂壞塊?
一個NAND塊里包含有不穩定的地址,不能保證讀/寫/擦的時候數據的準確性。壞塊分出廠壞塊和使用過程中出現的壞塊,和機械盤的壞塊表一樣(P表和G表),SSD也有壞塊表。
出廠壞塊的話,在壞塊上會有標記,所以很容易就能被識別,后期使用中出現的壞塊就要靠主控制器的能力了,一般來說,越到NAND生命的后期(P/E數開始接近理論最大值),壞塊就會開始大量出現了。
一般來說NAND出廠都包含壞塊,不過廠商有個最小有效塊值(NvB-minimum number of valid blocks),拿Intel的34nm MLC L63B來說,1個die上4,096個塊里至少要有3,936個塊是好的,從這上面可以知道,雖然出廠的NAND可能有壞塊,但是廠商保證在正常生命周期里,好塊數不會低于3936個塊。而且每個die的第一個塊地址(00h)在出廠時是必須保證好的(ECC后,這個塊必須有效)。
NAND出廠前都會被執行擦除操作,廠商會在出貨前會把壞塊標記出來(廠商會在壞塊的第一個頁的SA區上打上標記。) 這樣壞塊管理軟件就能靠監測SA區標記來制作壞塊表。
SA區(頁中4096~4319的區域,用戶不可訪問,主要用來存放ECC算法,壞塊信息,文件系統資料等。)由于在使用中會產生壞塊,所以SSD的每次編程/擦除/復制等操作后都要檢查塊的狀態。對顆粒的ECC要求也要達到廠商的標準以上(主控強不強,看ECC能力也是一個參考)。壞塊管理和平衡磨損算法是必須的。
五、 ECC - 校驗和糾錯
ECC的全稱是Error Checking and Correction,是一種用于Nand的差錯檢測和修正算法。由于NAND Flash的工藝不能保證NAND在其生命周期中保持性能的可靠,因此,在NAND的生產中及使用過程中會產生壞塊。
為了檢測數據的可靠性,在應用 NAND Flash的系統中一般都會采用一定的壞區管理機制,而管理壞區的前提是能比較可靠的進行壞區檢測。
如果操作時序和電路穩定性不存在問題的話,NAND Flash出錯的時候一般不會造成整個Block或是Page不能讀取或是全部出錯,而是整個Page中只有一個或幾個bit出錯,這時候ECC就能發揮作用了。
不同顆粒有不同的基本ECC要求,不同主控制器支持的ECC能力也不同,理論上說主控越強ECC能力越強。
六、 Interleaving - NAND 交叉存取技術
Nand Flash的訪問操作過程包括三項:
訪問操作 = 命令輸入操作+I/O操作+Array傳輸操作
第一項的操作時間所占比例很小,在性能估算中可以忽略。
所以,通常認為:訪問時間 = I/O時間+ Array傳輸時間
在上一代NANDFlash中,第一項占的比例最大,是第二項的4-5倍。
每一個Plane對應一個Page大小的緩沖(dataregister)和一個Page大小的緩存(cacheregister)。數據寫入的順序是:I/O-> cache register -> data register ->Plane(數據讀出的順序剛好相反)。
緩沖(dataregister)與緩存(cacheregister)之間的數據傳輸速度很快,dataregister可以把I/O操作和Array操作分隔開,形成I/O操作和Array操作的“兩級流水線”。
4個Plane對應4組緩沖與緩存,每一組可以分別操作。2個Plane交替操作,可以實現“乒乓操作”,達到2倍的Array訪問帶寬。4個Plane交替操作,可以實現“乒乒乓乓操作”,達到4倍的Array訪問帶寬。
交錯操作可以成倍提升NAND的傳輸率,因為NAND顆粒封裝時候可能有多Die,多Plane(每個plane都有4KB寄存器),Plane操作時候可以交叉操作(第一個plane接到指令后,在操作的同時第二個指令已經發送給了第二個plane,以此類推),達到接近雙倍甚至4倍的傳輸能力。
結語:
這里小編介紹了一部分的專有名詞解釋,后面小編還會為大家介紹更多的專業名詞,敬請期待哦~!
對于本文你有什么看法或建議呢?歡迎留言哦~!
評論
查看更多