Solid State Drive(SSD)技術介紹(2)

SSD架構介紹

王柏文
Aug 21, 2020

基本上SSD就是由Nand Flash所構成,不過中間還有個SSD Controller,還有一個Flash Controller,以及一個Buffer,還有Firmware。

這樣講或許有點太粗糙了,底下就來詳細解釋一下。

在SSD中,NAND Flash的儲存單位的Hierarchy由上至下為:

  1. Die(LUN)
  2. Plane
  3. Block
  4. Page

大致上是這4層,不過雖然是說是這樣,一切都還是要視你的Nand Flash中的架構是長怎樣來訂,要怎麼設計你的Firmware基本上都是要視你的Nand Flash而訂。

雖然分成4層,不過SSD最基本的Read Write單位為page,但要注意的事erase的基本單位為block(因為erase所需的電壓較高),和R/W不一樣,而一個block被erase後再被寫入,我們則稱它經過了一個P/E(Program/Erase) Cycle。當你這個Block所歷經的P/E Cycle愈多,則代表它離壽終正寢也就更近一步了。若按一個Cell可以存多少個bit再去分類SSD的話可以分成4種:

  1. SLC: 一個cell只能存一個bit,速度最快,可以撐約100000個P/E Cycles
  2. MLC: 一個cell能存兩個bits,第二快,可撐約10000個P/E cycles
  3. TLC: 一個cell能存三個bits,第三快,可撐約1000個P/E cycles
  4. QLC: 一個cell能存四個bits,最慢,也是能撐約1000個P/E cycles

再介紹一個名詞,IOPS(input output per second),指的是一個硬碟他一秒鐘能做的IO次數。

以下大致上講一下Host(即是你的主機)存取SSD的流程

  1. Host要存取SSD,發出Logical Block Address(LBA)給SSD,這邊講一下比較細的細節,若是用NVMe SSD,則其實是Host把Command(你也可以想成存取的指令)寫到NVMe中的Submission Queue,然後再設定NVMe中的Doorbell register。叫SSD controller自己來取指令。
  2. 再來SSD controller拿到指令後,目前指令中的Address是Logical address(LBA),那我們要把它轉成Physical address(PBA),我們就需要Flash Translation Layer(FTL),等等再講FTL在幹嘛。FTL會把Logical Block Address(LBA)轉成Physical Block Address(PBA)。
  3. 之後我們取得了PBA,再來因為種種原因(像是電子訊號的錯誤),可能在傳送位址時會有錯誤,因此我們需要Error Correlation Code(ECC),才能確保資料是對的。
  4. 之後就要去Flash中找資料了,Flash也會有一個Controller,來操作Flash來找資料,可能還會通過多Channel的方式來平行加速存取
  5. 存取完資料後就return資料,若你是用NVMe SSD,則就是把結果放在Completion Queue,讓Host來取。

大致上的存取流程就是這樣,底下介紹一些名詞:

Flash Translation Layer(FTL):因為OS或File System設計時SSD還沒被發明,所以基本上都是針對HDD做設計的,並沒有對SSD的Performance做優化,導致SSD無法發揮它的速度。如剛剛提到的LBA,其實是HDD的東西,為了快速導入SSD所以才延用了HDD的LBA mapping,但其實SSD和HDD的操作細節又有很大的不一樣(如erase的cost比read巨大),因此就需要中間夾一個interface,來做加速以及針對Flash的一些存取方式做優化。算是一個抽象層的概念。其實FTL設計時要做或考慮的觀念非常多,如Garbage Collection、Wear Leveling、Mapping Table的設計以及Write Buffer的Block Replacement Policy等。畢竟SSD的底層運作原理和HDD還是不太一樣的。

Write Amplification:指的是SSD中你所想要寫入的資料大小和實際上寫入的大小的比例。粗略的計算如下:

WA = 實際上寫到Flash的量/Host想寫入SSD的量

為什麼會有這個問題?還是因為SSD的erase是以block為單位所導致的問題,其實有很多的操作或現象都會導致Write Amplification,這也是SSD中一直被討論的問題之一。

Over Provisioning:硬碟的預留空間,裡面都是free block。由於SSD的Block必需要erase掉才能再寫,都會搬到預留空間。或者是當你的SSD要放一些記錄的表格時(例如FTL),就會放在這裡,故Over Provisioning的空間是很重要的,若預留空間不足,可能會導致Performance低落。像商用的SSD它的預留空間通常都會比一般消費級的大。一般消費級的SSD的預留空間大約都在7%。

Wear Leveling:在整個記憶裝置中,通常會有一些資料是一直被存取的,我們稱之為hot data,那相反的那些不常被存取的data我們稱之為cold data。那上一篇有講到,其實SSD中的顆粒是有erase的上限的,若一直存取hot data,則那些cold data所在的page可能一直都沒存取到,導致SSD整體的page的壽命不平衡,因此我們必須要讓每個page都被平衡的用到,這就是Wear Leveling想要達到的目標。

至於Garbage Collection,在下一篇就會講到了,這篇就先不解釋了。打了一堆也不知道看不看的完。

系列文

Solid State Drive(SSD)技術介紹(1)簡介

SSD (Solid State Drive) 固態硬碟 技術介紹(3) Garbage Collection

--

--