---
# System prepended metadata

title: SSD Concepts
tags: [David, ' Note', ' SSD', ' Concept']

---

---
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)
> 
> ![](https://i.imgur.com/sVxCYvq.png)

:::danger

> Source: [Fast, Energy Efficient Scan inside Flash Memory SSDs](http://www.adms-conf.org/p36-KIM.pdf)
> 
> ![SSD structure with multiple channel controller](https://i.imgur.com/vSinldP.png)
> 
> ==每個 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)
> 
> ![](https://i.imgur.com/IbmIQ1N.png)

如上圖所示，每個 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> 