--- 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>