---
tags: David, SSD, Concept, Note
---
# SSD Concepts
## Overview
SSD 大致上由主控單元(CPUs, RAMs, Controllers)與記憶單元(Flash Cells)兩個部份所組成,整體架構如下圖所示:
> Source: [VSSD: Performance Isolation in a Solid-State Drive](https://dl.acm.org/doi/10.1145/2755560)
>
> 
:::danger
> Source: [Fast, Energy Efficient Scan inside Flash Memory SSDs](http://www.adms-conf.org/p36-KIM.pdf)
>
> 
>
> ==每個 Channel 都有 controller or 共用?==
:::
當裝置要對 SSD 進行讀寫時,會透過 Host Interface(如相容於 HDD 的 [SATA](https://en.wikipedia.org/wiki/Serial_ATA) 或不相容於 HDD 的 [PCIe](https://en.wikipedia.org/wiki/PCI_Express))傳送訊號給 SSD,然後再由 SSD 中的 Host Interface Controller 負責處理,再由 Flash Controllers 透過 Channels 將資料讀取或儲存至儲存區。
而如上方的示意圖,儲存區是由數個 Chip (Flash-Memory Package) 所組成,每個 Package 都會透過 Channel 與 Controller 相連,而每個 Package 又可以再細分成 Plane、Block、Page 等不同層級的儲存區,整體來看如下圖所示:
> Source: [Multi-Channel Architecture-Based FTL for Reliable and High-Performance SSD](https://ieeexplore.ieee.org/document/6582411)
>
> 
如上圖所示,每個 Package 皆由數個 Die 組成,其中的每個 Die 都會透過 Way 與 Channel 相連;而每個 Die 又可以再分成數個 Plane,每個 Plane 上都有獨立的 Registers,Garbage Collection 也能夠在不同 Plane 上獨立進行。
而 Plane 又是以數個 Block 組成,**Erase 操作通常就是以 Block 為單位**進行;Block 則又是由數個 Page 組成的一維陣列,**Read 與 Program 操作則通常以 Page(或稱作 Sector)為單位**進行。
:::danger
TODO: page 組成、多通道
:::
---
## FTL - Flash Translation Layer
Flash Memroy 的韌體部份,如同它名稱中的 Translation 的意思,主要負責將讀寫操作指定的 Logical Address 轉換成 Physical Address,但並不只是單純的進行 Address Mapping 而已,還需要考量到幾個重要的議題:
- Translation Performance
不同的 FTL Algorithm 會有不同的 translation 策略,使得將 LBN 轉換為 PBN 所需的時間有所差異、進而影響效能。
- Memory Usage
若要將整個 table 搬進 DRAM 中作為快取加速 translation 速度的話,需要大量欄位、可能會造成
- Write Amplification
資料的寫入/修改若沒有對齊 page/block 大小的話,會造成實際寫入值比預期大:
- Erase-before-write 使得修改 block 中的「部份資料」時也須 erase 掉整個 block
- 讀寫單位為 page,寫入小於 1 page 的資料,也相當於對整個 page 進行寫入
此外,Gargabe Collection 與 Mapping Information Management 也可能需要額外的資料搬動、造成額外寫入。
- Wear Leveling
每個 flash memory 都有各自的寫入次數限制(P/E Cycle),因此若是特定的 flash memory 被頻繁寫入的話,可能造成該區塊無法正確儲存資料、使得資料部份損毀。因此通常會需要控制每個 flash memory 的資料寫入量,也必須特別紀錄損毀的區塊(Bad Block Management)以免資料損毀,而這些管理機制很可能造成額外的資料搬移與效能影響。
### Block Management
Mapping table 中需要儲存的資訊主要包含以下幾種:
- 尚未使用的 free block
- 等待回收的 dirty/stale block
- 存有資料的 used block
- 損毀、無法使用的 bad block
free block 與 used(and dirty, bad) block 的可以簡單的透過 bitmap 管理,
:::danger
TODO:
:::
### Mapping Information Management
為了避免這些資訊在斷電重啟後消失,mapping table 也必須儲存在 flash memory 中,,大致可分成兩種直觀的保存方式:
#### 1. Per-block
#### 2. Map Block
:::danger
- wear leveling
- data consistency
:::
### Address Mapping
前面提到的,這些議題卻很難兼顧,因此在不同情境下需要根據需求進行取捨、採用不同的 mapping 策略,而這些策略大致上可以分成三類:
- Page Mapping
以 page 為單位進行 mapping,若有 $P$ 個 page 的話,mapping table 中就應該要有 $P$ 個欄位,每個欄位都將一個 Logical Page/Sector Number (LPN/LSN) 對應到 flash memory 上的 Physical Page/Sector Number (PPN/PSN)。
優點:
- 彈性較高:
讀寫操作是以 page 為單位,因此若某個 page 的資料需要更新的話,只需要直接將原 page 標記為 dirty/stale,然後再分配一個尚未使用的 page 存放新的資料即可。
- Write Amplification 較輕微:
不用像 block mapping 修改一個 page 就要移動整個 block、造成實際寫入比資料量大。
缺點:
- DRAM 與儲存空間用量較高、成本較高:
快取機制需要將 table 讀入 DRAM 中,但每個 page 都在 table 中佔有一個欄位,且當 page 數過多時,可能還需要使用更大的資料結構來管理,造成 DRAM 需求高並連帶影響成本。
且為了讓 mapping 資料能夠在斷電後仍能保存,也必須將資料寫入到 block 中,造成 table 佔用大量儲存空間。
- Wear-leveling 與 Garbage Collection 考量較複雜
Erase 操作是以 block 為單位進行,但讀寫卻是以較小的 page 為單位,所以在分配 page 時額外處理、避免可用 page 過於分散,避免 Garbage Collection 時要移動 page、空初一整個 block。
- Block Mapping
與 page mapping 相似,以 block 為單位進行 mapping,若有 $B$ 個 block 的話,mapping table 中就應有 $B$ 個欄位紀錄 Logical Block Number (LBN) 與 Physical Block Number (PBN) 間的對應關係,而 page 間的對應關係則是以 page offset 來決定,例如:若 $LPN_i$ 是 $LBN_i$ 中的第 $k$ 個 page 的話,$PPN_i$ 就會是 $PBN_i$ 中的第 $k$ 個 page。
優點:
- DRAM、儲存空間用量較低
由於一個 block 是由多個 page 所組成,因此不論是儲存 block number 需要的大小還是 table 的欄位數都比 page mapping 少,使得記憶體與儲存空間的使用量比 page mapping 少很多。
缺點:
- 速度較慢
讀寫時需要找到對應的 PPN,但 table 中只有儲存 LBN 與 PBN 的對應關係,所以要先找到 PBN,然後再透過 page offset 找到 PPN。
更新資料時不論 block 中的幾個 page 需要被更新,都必須分配新的 block 然後在 DRAM 中更新 page,最後再寫入到新的 block 中,需要的流程明顯比 page mapping 繁瑣,造成速度較慢。
- Write Amplification 較嚴重
承上,若要更新的 page 數在一個 block 中的佔比越低,寫入放大的問題越嚴重。
- Hybrid Mapping
優點:
缺點:
:::danger
TODO:
:::
### Parallelism
---
## References
1. Michael Cornwell. 2012. Anatomy of a Solid-state Drive: While the ubiquitous SSD shares many features with the hard-disk drive, under the surface they are completely different. Queue 10, 10 (October 2012), 30–36. https://doi.org/10.1145/2381996.2385276
2. Tae-Sun Chung, Dong-Joo Park, Sangwon Park, Dong-Ho Lee, Sang-Won Lee, and Ha-Joo Song. 2009. A survey of Flash Translation Layer. J. Syst. Archit. 55, 5–6 (May, 2009), 332–343. https://doi.org/10.1016/j.sysarc.2009.03.005
3. https://hackmd.io/@RinHizakura/Hy89c4sFF
4. https://codecapsule.com/2014/02/12/coding-for-ssds-part-6-a-summary-what-every-programmer-should-know-about-solid-state-drives/
### Specs
1. NVM Express, Inc. 2022. *NVM Express Base Specification, revision 2.0b*. NVM Express. <https://nvmexpress.org/wp-content/uploads/NVM-Express-Base-Specification-2.0b-2021.12.18-Ratified.pdf>