2020.09.11

SSD固態硬碟技術及原理分析

SSD(Solid-state drive) 固態硬碟
2020/9 版


正確認識SSD

間單介紹 SSD 先進技術以及SSD的原理,SSD是設計來取代『傳統硬碟』。其構造完全是『積體電路』結構,無任何機件,所以和『硬碟』無關。市面簡稱『固態硬碟』不是很正確。傳統硬碟內有『碟片』是旋轉碟片來讀寫資料,但 SSD 都是『積體電路』無碟片。讀寫原理完全不同。SSD 在 2020年的規格是採用先進的 3D NAND Flash Memory+PCIe 介面,讀寫極速是傳統硬碟的 4倍,同時,SSD 也有『加密功能SSD』
 
SSD與傳統硬碟比較,混合式硬碟是什麼?

目前市面的資料儲存設備(Data Storage)以儲存的材質區分為『磁性介質表面儲存設備』代表性產品是傳統式硬碟,另一是『積體電路的儲存設備』代表性產品是 RAM, ROM, SSD Flash Memory….。

雖然目前硬碟還佔優勢,但因其『物理極限』已無法克服『怕碰撞,易磨損,耗電...』的問題,也無法再開發更『輕,薄,短,小』的硬碟。科學家因此開始開發以『積體電路的儲存設備』取代硬碟。

而目前最符合『輕薄短小』的儲存設備是 SSD,而SSD 最重要的元件就是『NAND 非揮發性記憶體(Non-volatile Memory Device)』。雖然 NAND 的技術雖然還有『成本高,容量較低,資料儲存年限...問題』但還是已漸漸取代硬碟。
 
SSD 傳統硬碟
NAND 積體電路 精密金屬機件
輕薄短小、省電、溫度低 體積大、重量重、較耗電、溫度較高
讀寫快速 讀寫速度相對較慢
NAND 寫入時會有耗損 理論上磁片讀寫無耗損
耐摔耐碰撞 怕碰撞
晶片燒毀後,無法資料救援 硬碟故障時,資料救援機會較高


SSD的設計是用來取代傳統式硬碟,SSD特性是輕便,讀寫快速,省電.....非常適合『可攜式』使用。為了改善傳統硬碟因機件太精密,萬一碰撞即發生硬碟故障,導致資料無法讀取,必須資料救援。

下圖是『傳統機件式硬碟』和『SSD』內部結構,可明顯看出差異。
 


傳統式硬碟內部都是精密機件,怕碰撞。

SSD 內部都是積體電路元件,較不怕碰撞。

目前的趨勢,Notebook 一律都已改用SSD,符合耐碰撞特性,因為讀寫速度比傳統硬碟快速,連一般 PC 都建議改用 SSD 當開機用磁碟,不必因每次開機時需讀取數量龐大的作業系統檔案而等待的時間,實務上使用者很容易感受速度的差異,幾乎提升 4倍以上。

但提醒重要一點,因 SSD 是用 NAND 快閃記憶體,目前受限於『資料寫入時都對 NAND flash memory 會造成耗損而降低使用壽命』建議不適用於讀寫頻繁的 Server, RAID, NAS。但相信 SSD 廠商一定設法提升技術克服,不久後即會出現『穩定』『可靠』RAID 專用 SSD。
建議目前 RAID, NAS, Server 建議還是安裝 SAS 傳統硬碟,應該是較『保險安全』方式。

混合式硬碟

『混合式硬碟』就是『傳統硬碟+SSD』結合成單一硬碟。有 SSD 讀寫快速的優點,又有傳統硬碟的高容量可使用。等於是 1台當 2台用,規格是只有一個 SATA 介面。SSD 磁碟可安裝作業系統當開機用磁碟,傳統硬碟則當儲存資料用。
 
SSD規格&介面:SATA、M.2 SATA、M.2 PCIe、NVMe


SSD 目前 2020 年規格種類共有3種,
Interface 共2種:
1. 和傳統硬碟外觀相同的 SSD 2.5”,也是用 SATA Interface 可以輕易取代傳統硬碟。
2. 規格尺寸 - m2_2280,也是用 SATA 介面。
3. 規格尺寸 - m2_2280 介面 - PCIe G3 1x4 / NVMe。


上述照片得知 SSD 規格分 3種,但介面( Interface)分2種 SATA & PCIe/NVMe。

SATA 是傳統硬碟用,無法發揮 NAND 極速特性,屬舊型 Interface。
PCIe/NVMe 是專為 SSD 內的 NAND 開發的新協定,可以發揮 NAND 的極速。

多年前 SSD 設計時的用意是為了取代傳統硬碟,為了改善傳統式硬碟『怕碰撞,怕摔』的問題,只先將內部精密機件改用成『積體電路 NAND Flash Memory』當儲存資料元件,但當時 SATA 是傳統硬碟的傳輸介面 Interface 的標準。
為了可以讓市場輕易接受而改用 SSD,所以才繼續延用SATA。但卻因此阻礙了 NAND Flash Memory 讀寫快速的特性。多年後 SSD 廠商才開始推廣專為 NAND 平行運算 (Internal Parallelism) 功能開發出的傳輸協定 『NVMe』,而且是可以採用現有的 PCIe 介面,其極速表現比 SATA 高 4倍。

SATA SSD

這是最早出現市面的 SSD,當時是為了取代暢銷的傳統硬碟而設計,外型就是和一般 2.5”傳統硬碟完全相同,也是採用 SATA 介面,安裝和傳統硬碟相同,毫無困難,可以輕易取代。
目前市面規格 SATA 6.0Gb/s, 讀取時間 560 MB/s ,寫入時間 510 MB/s。

M.2 PCIe (PCI Express) / NVMe

這是搭配目前最高速的 PCIe 介面,NVMe 也是較新 SSD規格,如是舊款主機板可能不支援,但近期新款主機板都已有支援,據說近年的 Notebook 都搭配 PCIe / NVMe 的 SSD。
目前市面規格 3D NAND,讀取時間 3,400 MB/s,寫入時間 3,000 MB/s。

M.2 SATA

這是比 PCIe / NVMe 更早期介面,適用較舊款主機板,
目前市面規格 M.2 SATA,讀取時間 560MB/s, 寫入時間 510MB/s。

據說一般客戶選購 SSD 時,較重視讀寫速度,下列為一簡單比較表。
 
2020年規格 M.2 PCIe / NVMe M.2 SATA SATA
Sequential Read 3,400 MB/s 560 MB/s 560 MB/s
Sequential Write 3,000 MB/s 510 MB/s 510 MB/s
 
NVMe(NVM Express)先進規格,讀寫速度快

上述圖片比較說明,應該已很清楚看出,M.2 PCIe+NVMe 是 SSD 讀寫速度最快的規格。

談 SSD 的技術就不得不談 NVMe 原理,但筆者對 NVMe 技術知道的有限,目前只能簡單介紹基本概念,無法深入說明內部核心『平行運算Internal Parallelism for SSD』原理,請見諒。

NVMe 開發的契機是因為:

1. 目前的 CPU 是具有平行運算。
(Parallel computin 可同時執行高達 64,000 個指令,註:CPU 技術更先進,運算能力也提升)
2. NAND 內部也已具備『平行架構』運算能力。
3. 現已有極高速的傳輸界面『 PCIe』。

如可結合,CPU 的『平行運算』+PCIe 高速傳輸介面+NAND 的『平行運算』,這種組合即可達到『極速』,但只缺 NAND 和 PCIe 的『高速通訊技術』。

所以廠商才為此而開發出 『NVMe』其名稱是『非揮發性記憶體控制介面規格 Non-Volatile Memory Host Controller Interface Specification』通訊協定。此新協定終於定義出可以 100% 發揮 NAND 『平行運算』的高速能力,再利用現有的 PCIe 介面的高速特性,即可發揮 NAND 高達 3,400 MB/s 讀寫速度。這已比傳統 SATA 硬碟快4倍速度。
 
PCle 高速傳輸介面

PCIe 採用四通道連接,讓資料傳輸比 SATA 快4倍,且省電。使用 PCle +NVMe SSD,是目前追求極速唯一選擇。
另外有一優點,NVMe SSD+PCIe 組合,因有省電特性,NoteBook 電池耗損減低,電池壽命才得已增長。
 
SSD 先進的3D NAND&寫入讀取資料原理

先簡單介紹 SSD 重要元件 Controller, NAND 的功能用途。


SSD controller NANDController:就是負責當外部有檔案要寫入時,就是先由 Controller 已內建『File System』將檔案分數段 Blocks『平均寫入』每一顆 NAND Flash Memory 儲存。當 Windows 下指令要讀取檔案時,也是由此 Controller 負責至各 NAND 將該檔案所有的 Blocks 取出,依序傳輸給 Windows。且保證順序,數量正確無誤,檔案才完整可正常使用。
Controller 當然還有其它功能,但都是與讀寫資料有關。後面會一一介紹。

NAND Flash Memory:是先進的 3D NAND 就是負責儲存檔案資料的 Storage。但因屬於半導體高科技,筆者才疏學淺,所知有限不敢賣弄,請包涵。 

註:此處所指 Controller File System 是該 Controller 廠商自行開發專用,是指此顆 Controller 這層的邏輯控制。其主要是負責『讀寫』功能,是將 Windows NTFS、Mac HFS、AFS、Linux EXT3、EXT4、XFS…...作業系統不同格式的檔案,轉換成可寫入至『積體電路 NAND』內的檔案格式。且各廠牌有不同格式。 

接下來說明內部最重要的元件『 NAND 』。NAND 是『非揮發性記憶體』 (Non-volatile Memory Device) 也是 Flash memory 一種。因屬於『積體電路』的設計,其內部結構是先進的『3D立體』的多層邏輯電路佈線,是『垂直+平行 Layout』和傳統硬碟圓形磁片讀寫方式完全不同。當初設計的用意就是為了取代『硬碟』,所以 NAND 的儲存單位也是512 Byte/Unit。

NAND 的最小儲存單位是 512byte / Unit,這種設計就是為了取代傳統硬碟制定的標準協定 512byte / Sector,如此即可 100% 相容。

3D積體電路基本上是一層一層的 Layer,每一層可佈線成數量龐大的 512byte/unit,類似『網格狀』的邏輯電路而且共有 2面,再一層一層堆疊,如此堆疊即可構成『立體的邏輯電路架構』,以達到垂直平行讀寫功能。


NAND 的儲存單位也採用『邏輯虛擬』設計,且不同廠牌、型號....數值不同。但制定的基本標準如下:
1. Unit 是 NAND 最基本儲存單位,Size=512 byte。
2. Page 是網格上的每一列(行),在 NAND 上稱為『Page』。通常數量都是 32、64、128、256、512.../unit,Size 32、64、128...KB,基本上每一層有多少數量的列就相同數量的 Page,但各廠牌設計也有不同。一個page上所有的 unit共用一字元線(Word line)所以 NAND 讀寫一定是一個 Page 一個 Page同時進行。  
3. Block 是 32,64,128,256,512….Page 組成的『區塊』且是『3D立體』,想像成陣列 Array或巨型的『魔術方塊』較易理解。

NAND儲存單位NAND 讀取與寫入原理有點複雜,
NAND 『讀取,寫入』是一個 Page 一個Page 進行。但寫入前必須先將要寫入該 page 的整個 Block 擦除乾淨(Block erasure) 才可寫入。擦除原理就是將 Block 內所有的 bit 變為『1』狀態=Free 。擦除作業只能以「Block」進行,無法以較小的 page。

所以程序是, 先清除一個大的 Block 空間 → 資料才寫入一個小的 page 內。
例如:為了寫入小量的 16KB 資料(page) 需先將一個大量的 512KB(block) 所有 bit 都寫成”1”(Full “11111111”) 變成 Free ,才可寫入 16KB 資料。
 

這就是 SSD 因常『抹除』,寫入比讀出耗時,也導致 NAND 壽命減原因。
如果一直在同一個 Block 寫入與清除資料,這些Block 的壽命會消耗很快,為了儘量減少Erasure的次數,有效率的Block 管理技術就非常重要。
當晶片漸漸磨損,Erasure與讀寫速度會變非常慢,而且需要更多次數 Retry。
NAND Flash還有一項限制就是區塊內的資料只能序列性的寫入,無法像傳統硬碟隨機讀寫(Randon read/write)。這屬於 file system 技術,先不在此討論。

如何管理已損壞區塊(Bad Blocks):

1:出廠時的 Bad Blocks,這是製造生產時已存在的 Bad Blocks。
2:使用時累積的 Bad Blocks,發生在無數次的寫入/擦除,造成一些 NAND單元的『電荷電壓 Electric charge /Coulomb』被永久性的改變了,因此而無法使用。

SSD 有管理Bad blocks 機制,Controller 用 bad Blocks map 紀錄每一 Bad block。傳統硬碟也有相同機制(Bad Sectors Map)。

SSD的Trim(修剪)& 耗損平均 (Wear Leveling)

SSD有一的致命缺點,就是 NAND 物理問題,寫入次數是有限制,太頻繁的寫入(含抹除 Full”11111111”)是會破壞其『電荷電壓 Electric charge /Coulomb』,影響使用壽命。

目前 2020年 SSD 廠商宣稱已用2 方法,解決此問題:
1:目前 NAND 容量已大大提高,Block 數量龐大,其每一 Block 被寫入次數變減少,如此即可延長使用壽命。
2:  NAND 目前先進科技,寫入次數已可達 5萬次以上。

所以此處文章用意只在說明 NAND 先天性的『寫入次數有限制』的技術問題。使用者不必太擔心 SSD 使用壽命問題。

SSD NAND 有一先天上的問題,就是每當要寫入資料時不論資料量是多小,就算只是 16KB /Page,也要先抹除一整個容量較大的 512KB / Block。等抹除完成(Full”11111111”) 才可將16KB 資料寫入。

例如:有一Block 內現已存在 4 pages 的資料,現在Delete 3pages 後只剩1 page。為了日後要讓新資料寫入時使用這 Block,現在須先將這 1 page 遷移另一 Block,再清除這 Block (Full”111111111”)供寫入新資料用。 

所以為了寫入一支檔案,等於那一些 Blocks 會被做了2次『寫入』動作,每一次寫入就多一次耗損。
1: 先將一整個 Block 先抹除(Full”11111111”)這動作也是『寫入』。
2: 再正式寫入新資料。

了解上述問題後,接下來說明SSD的耗損平均 (Wear Leveling) & Trim(修剪) 原理。

Wear Leveling(耗損平均 )是什麼?

SSD NAND 常會被做『寫入』動作,且 Blocks 數量龐大,那就要設法讓每一 Block 被寫入次數是平均的,避免某些 Blocks 時常被寫入而耗損較嚴重,其它不常被寫入的 Blocks 卻耗損較輕微。
簡單形容類似避免『路面』到處坑坑疤疤,最好是每一路段都平均使用,勿集中常使用某一路段,造成這一路段耗損嚴重,其它不常使用路段卻耗損輕微。
最好是一整層路面平均耗損,使用一陣子後又是一整層平均耗損,如此即可保持路面永遠是平整,無坑坑疤疤現象,直到路面已薄到無法再耗損才報廢。
 
Trim(修剪) 的功能是什麼?

先以傳統硬碟來說明,在 Windows, Mac, Linux 下使用傳統硬碟,當刪除檔案時,該檔案在硬碟磁片上只是先被標示成『已刪除』,該檔案在磁片上所佔用的 Blocks 都還存在原資料,並未被清除(未被 Full “00000000”),只是當檔案管理系統 File manage 讀到此『標示已刪除』時會略過不讀,如此才有機會隨時『還原檔案』。

註:各位應該有注意到,Windows,Mac, Linux.. 下 Copy 寫入一支 1GB File 約需幾十秒才可完成,但 Delete File 卻是瞬間完成,足證這『瞬間』只是做了『標示已刪除』的動作,絕不足將 1GB 資料100% 清空(未被 Full “00000000”)。 

但當有新檔案要寫入時,只要是磁片後面還有未使用區塊(Unused Blocks),一律先寫入這些未使用的區塊,不會先去寫入『已刪除』區塊,就是避免覆蓋已刪除檔案,提供隨時『還原檔案』的機會。
但如磁片已被寫滿,無任何未使用區塊可用時,新檔案就只能寫入那些標示『已刪除』的區塊,只要一被寫入新資料,原舊有資料即已被覆蓋,絕不可能『還原』。

這『磁性紀錄』原理類似,錄音帶某段如被再錄製新歌曲,其原舊歌曲即被覆蓋,絕不可能『還原』。

SSD 也有類似此機制,一些『已刪除』檔案所佔用的 Blocks 也只是被標示『已刪除』,原檔案資料還存在,並無被 Full”11111111”,也是有機會『還原』。
當有檔案要寫入時,也是去找未使用區塊寫入。

但 NAND 有一致命缺點,如某些區塊 Blocks 常被頻繁的讀+寫+抹除 (Full “11111111”)其『電荷電壓』會加速減弱,導致這些區塊無法再使用,變成 Bad Blocks,如此整個 NAND 就會到處散佈這些 Bad Blocks,將導致 SSD 讀寫異常。為了避免發生此狀況,就設計了『Trim』這機制來改善。

Trim 的主要功能是,趁 SSD 閒置時,先去啟動『主動垃圾收集機制』直接清除那些標示『已刪除』的 Blocks,供隨時寫入新資料 Pages。
事先清除的優點是,不必等到真正有新資料要寫入時,才去『搬移殘餘 Pages』→『Full “11111111”』→『寫入新資料Pages』。
Trim 是SSD專用功能,某些作業系統版本,非設定自動啟用,可能需要至 /設定/ Trim 手動啟用。

『主動垃圾收集機制』的功能也是趁 SSD 閒置時,主動去收集一些『屬於同一支檔案的所有Pages』集中存放,減少『斷離現象』聽起來有點像『資料重整』。

Trim 與主動垃圾收集機制同時運作即可延長 SSD 的使用壽命,並提升 SSD讀寫效率。是非常聰明的機制,目前新規格 SSD NAND 都有提供此項機制。 以前常聽說 『SSD 不要寫滿,一定要預留約 20% 空間供暫存用,否則讀寫速度會變慢』。
目前新款 SSD已內建此機制,使用者不必再為此操心。
SSD因讀寫時需要遷移殘遺的 Pages,所以需預留一些暫存空間,目前 SSD 設計是已內建『暫存空間』,Windows, MacOS, Linux….. 下是無法識別,使用者也看不到,當然更無法去使用這些空間,這是一種『保護』機制。
 
如何讓 SSD 更快速更聰明?

1. 隨時更新原廠韌體(Update Firmware)。
2. 安裝原廠的 SSD 自我監控,分析和報告技術(S.M.A.R.T)監控系統。

相關文章分享

top