neeyuese
發表於 2011-6-12 19:18
【原創】鎂光M4 128G & 256G測試
本次測試我會分成如下部分:
1、SSD專業術語解釋:適合真正想去了解SSD的朋友,如果有興趣和時間,強烈建議先看這部分。
2、產品的品質和穩定性:SSD是拿來放數據的,也就意味著穩定是第一位的,沒有穩定的前提,一切速度都是浮雲。
3、產品的包裝和內部拆解:產品包裝和內部裸照,各大網站都有不稀奇。(個人照相技術很爛,不要鄙視我)
4、產品的標准測試部分:喜歡看分數的朋友可以直接跳到這段。
5、產品的新特性:對比上一代產品,新產品提高或者下降的地方。
6、產品的極限測試部分:我個人有蹂躏傾向,重口味,不喜勿入。
7、產品的使用部分:系統安裝和使用上的注意事項。
8、測試總結部分:自己到後面去看,這裡沒有。^_^
---------------------------------------------------------
第一部分: 專業術語解釋
邏輯區塊地址(Logical Block Address, LBA)
邏輯區塊地址(LBA)是一種描述計算機存儲設備上資料所在區塊的通用機制,一般用在像硬盤這樣的輔助儲存裝置上。LBA可以指某個資料區塊的地址或者某個地址上所指向的資料區塊。如非特別說明,一般硬盤上所謂一個邏輯區塊的大小通常為512字節(Bit)。對於機械硬盤來說,一個數據區域由它所在的磁頭(C)、柱面(即磁道 H)和扇區(S)三個數據所唯一確定。邏輯塊尋址模式把硬盤所有的物理扇區的C/H/S編號通過一定的規則轉變為一線性編號,在訪問硬盤時由硬盤控制器內的地址翻譯模塊將這種邏輯地址轉換為真正的物理地址。因為機械硬盤舊數據可以直接被覆蓋,所以邏輯<->物理地址是固定的。到了固態硬盤(SSD)就沒那麼簡單了,因為閃存(NANDFLASH)具有必須先擦除才能再次寫入的工作特性(寫入以頁(Page),擦除則以塊(Block)為單位),所以固態硬盤的邏輯<->物理地址是不固定的,需要經過轉換才能應用在如今的文件系統上,做這工作的轉換層就叫做FTL。(後面有關於FTL的說明)
由於閃存的工作特性,數據不能像普通機械硬盤那樣被直接覆蓋。當數據第一次寫入SSD的時候,由於SSD內所有的NAND顆粒都為已擦除狀態,所以數據能夠以頁為最小單位直接寫入(頁大小一般是4K,詳情參考具體顆粒數據手冊),SSD上的主控制器,使用了邏輯地址和物理地址的映射表來管理閃存。(邏輯地址我們一般指操作系統所記錄的地址即LBA,而物理地址則是閃存上數據實際存在的地址即PBA)。當有新的數據寫入,需替換舊數據時,SSD主控制器會把新數據寫入到另外空白的閃存空間上(狀態為已擦除的),然後更新地址映射表把邏輯地址指向新的物理地址。而舊地址的內容就成了無效的數據,但是若要在上面再次寫入數據,就需要首先擦除掉這個無效數據(閃存的工作特性,1個塊一般含128~256個頁)。那麼問題來了,閃存有編程的次數限制(由於閃存不能覆蓋,寫前必須擦除,所以習慣叫編程),這樣每次的編程/擦除就叫做1個P/E(program/erase cycles)周期,大家應該都知道MLC一般是5000~10000次,而SLC是10萬次左右(詳情參考具體閃存顆粒數據手冊)。
FTL(Flash translation layer) 閃存轉換層
我們的操作系統通常是按照扇區大小寫入數據(512Bit)。不幸的是,閃存的讀寫單位是頁(大小4KB),且閃存的擦除操作是按照塊來的(1塊=128~256 頁),更要命的是寫入數據前必須要先擦除,也就是不能覆蓋,這就給我們現有的文件系統帶來了麻煩,很明顯需要更高級、更繁瑣的文件系統來解決這個問題。為了減輕操作系統的負擔(不使用高級復雜的文件系統),我們可以用軟件來把閃存的操作習慣虛擬成以獨立的扇區操作(512Bit),這樣就出現了閃存轉換層(FTL)。它存在於文件系統和物理介質(閃存)之間。有了FTL,操作系統就可以按照扇區操作了,不用擔心碰到之前說的擦除/讀/寫問題。一切邏輯地址到物理地址的轉換,全部由FTL包了。FTL算法,說穿了就是一種邏輯地址到物理地址的映射,因此,當文件系統發送指令說要寫入或者更新一個特定的邏輯頁,FTL事實上是把數據寫入到一個不同的空閒物理頁並且更新映射表(邏輯地址映射物理地址的關聯),並把這個頁上包含的“舊數據”標記為“無效”。(更新後的文件已經寫入新地址了,舊地址的文件自然就失效了)。可以說有了FTL,我們才能像平時的機械硬盤那樣操作。很明顯FTL的轉換速度也直接影響著SSD的傳輸性能。
假設在page0上寫入數據(物理地址n),接下來寫入數據到page1(物理地址n+1)。接著page0數據被更新,但是更新後的數據並不是覆蓋上去,FTL會把它寫入到地址(n+2)上,然後標記(地址n)為“無效”。經過多次這樣的操作後,這個塊上就會裝滿了許多“有效”及“無效”的數據。如果要再次寫入到這個塊,就需要先擦除整個塊的數據,當然就需要先把所有“有效”數據復制到另外的空白塊上再進行擦除。這樣的操作就是“垃圾回收”(GC,相關知識在後面會介紹)
WL (Wear leveling) 磨損平衡 - 確保閃存的每個塊被寫入的次數相等的一種機制。
通常情況下,用戶邏輯地址空間裡的數據更新速度是不同的:有些區域會經常更新,有些則不常更新。很明顯,那些經常更新的數據所占用的閃存塊會被快速的磨損掉,而不常更新的數據占用的閃存塊磨損就小得多。為了解決這個問題,需要讓每個閃存塊的編程次數盡可能保持一致:這就需要對每個頁的讀取、編程操作進行監測,在最樂觀的情況下,這個技術會讓整個SSD的顆粒物理磨損程度接近並同時報廢,當然由於閃存塊之間的耐久度個體差異也不小,綜合來說這只是個最理想態。磨損平衡技術依賴於邏輯和物理地址的轉換:也就是說,每次主機上應用程序請求相同的邏輯頁地址時,閃存控制器動態的映射邏輯頁地址到另一個不同的物理頁地址,並把這個映射的指向存放在一個特定的”映射表“裡。而之前過期的物理頁地址就被標記為”無效“並等待隨後的擦除操作。這樣一來,所有的物理塊就能被控制在一個相同磨損范圍,並同時“老化”。磨損平衡算法分靜態和動態。動態磨損算法是最基本的磨損算法:只有用戶在使用中更新的文件所占用的物理頁地址被進行磨損平衡。而靜態磨損算法是更高級的磨損算法:在動態磨損算法的基礎上,增加了對於那些不常更新的文件占用的物理地址進行磨損平衡,這才算是真正的全盤磨損平衡。解釋得更簡單點 - 動態磨損平衡就是每次都挑最年輕的閃存塊來用,老的閃存塊盡量不用。靜態磨損平衡就是把長期沒有修改的老數據從一個年輕閃存塊裡面搬出來,重新找個最老的閃存塊放著,這樣年輕的閃存塊就能再度進入經常使用區,其實概念都很簡單,就這麼一句話,實現卻非常的復雜,特別是靜態磨損平衡。
GC(Garbagecollection) 垃圾回收 - NAND顆粒“清潔工”
接著上面FTL的圖,開始做“垃圾回收”,把所有“有效”頁復制到新的空白塊裡,然後把舊的塊整個擦除。垃圾回收是SSD裡一個非常關鍵的操作,對性能起到決定性的影響作用。
垃圾回收的效率取決於整個塊裡包含的“有效”頁數量,“有效”頁越少,垃圾回收的效率就越高,因為需復制的“有效”頁數量少,所花費的時間也就少。下面那張圖中把Block X和Block Y裡的“有效”頁復制到Block N裡,然後擦除Block X和Y作為備用的“空白塊”。由前面的磨損平衡機制可知,磨損平衡的執行需要有“空白塊”來寫入更新後的數據。當可以直接寫入數據的備用“空白塊”數量低於一個閥值(廠商在主控固件裡設置,一般是全盤閃存容量寫滿後),那麼SSD主控制器就會把那些包含“無效”數據的塊裡的所有“有效”數據合並起來放到新的“空白塊”裡,並刪除“無效”數據塊來增加備用的“空白塊”數量。這個操作就是SSD的垃圾回收機制。閒置垃圾回收:很明顯在進行垃圾回收時,會消耗大量的主控處理能力和帶寬,從而造成處理用戶請求的性能下降,SSD主控制器可以設置在系統閒置時候“預先”做垃圾回收(提前垃圾回收操作,保證一定數量的"空白塊"),讓SSD在運行時能夠保持較高的性能。閒置垃圾回收的缺點是會增加額外的“寫入放大”,因為你剛進行垃圾回收的“有效”數據,也許馬上就會被更新後的數據所替代,變成“無效”數據,這樣就造成之前的垃圾回收做無用功了。被動垃圾回收:每個SSD都支持的技術,對SSD主控制器的性能有相當要求,在垃圾回收操作消耗帶寬和處理能力的同時處理用戶操作數據,如果沒有足夠強勁的主控制器性能則會造成明顯的速度下降。這就是為什麼很多SSD在全盤寫滿一次後會出現性能下降的道理,因為要想繼續寫入數據就必須一邊做垃圾回收一邊做寫入操作。簡單點來說:GC的本質是在包含“無效”頁和“有效”頁的塊中把“有效”頁復制到新的只包含“有效”頁的塊,擦除舊的“無效”頁所占用的塊,之後這個被“回收”的塊就能被用來寫入新數據(空白塊)。而閒置GC,就是提前做GC,讓"空白塊"更多,這個行為是固件“主動”去做的。Trim能直接產生“無效”頁,沒有Trim的時候,對SSD主控制器來說,被更新的數據,舊數據就是“無效”的。應該說GC是每個SSD的必須要有的基本功能,根本不能算是什麼需要特別提起的功能,每次看到廠商宣稱支持GC,我都覺得很可笑。除非他們還在使用U盤時代的算法,每寫一個頁,都要寫入整個塊,那樣就不需要 GC了,但是會造成任何時候都一樣非常爛的性能。(Trim的相關知識在後面介紹)
OP(Over-provisioning)預留空間
預留