1. 程式人生 > >[轉帖]SSD的工作原理、GC和TRIM、寫入放大以及效能評測

[轉帖]SSD的工作原理、GC和TRIM、寫入放大以及效能評測

SSD的工作原理、GC和TRIM、寫入放大以及效能評測

https://blog.csdn.net/scaleqiao/article/details/50511279  

SSD的物理結構和工作原理

SSD是由SSD控制器,FLASH儲存陣列,板上DRAM(可選),以及跟HOST介面,諸如SAS、SATA、或者PCIE也就是我們通常說的NVMe磁碟。它的結構圖如下:

上面的Nand Flash表示的是Flash顆粒,SSD控制器通過若干個主控通道並行操作這些Flash顆粒,就像RAID0一樣,這樣可以提高資料寫入的並行性以及效率。每一個Flash顆粒又進一步細分為多個block(塊),每一個block又包含多個page,在SSD內部,SSD控制器和Flash之間的最小訪問單元粒度是page。一般一個page的大小為4k,一個block包括16個pages。在寫入資料的時候,像raid0的工作機制一樣,同時並行地將資料寫入到每個Flash顆粒的一個block中的可用的page中,當一個block寫滿之後會接著寫下一個block 。

目前磁碟的分割槽格式大都變為GPT(也就是EFI)了,也就是將整個磁碟按照線性地址空間組織起來,通過LBA(Logical Block Address,邏輯地址)來定址,每個LBA代表一個sector。作業系統一般會以頁的方式來訪問SSD,當用戶寫入一頁資料時,SSD控制器會從block中找到一個page來存放這些資料,並且同時將使用者的LBA和flash顆粒中的page這種對應關係紀錄下來,作為一條記錄加入到SSD內部維護的一張對映表(Map Table),當有資料修改時,會更新對映表中的相應記錄。當用戶要讀取相應的資料時,SSD首先會去查詢Map Table中找到存放資料的pages,然後從中將資料讀取出來返回給使用者。關於對映表,不同的SSD是存在不同的地方的,對於有DRAM的,直接將對映表存放在DRAM裡,而沒有DRAM的,則將這些對映關係也儲存在了flash顆粒了。

SSD的GC和寫入放大

GC是(Garbage Collection,垃圾回收)的縮寫,是固態硬碟(SSD)的一個基本技術,它對SSD的效能和壽命有直接的影響。這裡主要介紹一下GC是如何工作的。

當使用機械硬碟時,檔案系統可以直接將新資料寫入到舊資料儲存的位置,即可以直接覆蓋舊資料。在固態硬碟中,境況有所不同。如果想讓儲存無用資料的塊寫入新資料,就需要先把整個塊刪除,才可以寫入新的資料,也就是說固態硬碟並不具備直接覆蓋舊資料的能力。對於固態硬碟來說,GC(垃圾回收)是指把現存資料重新轉移到其他快閃記憶體位置,並且把一些無用的資料徹底刪除的過程。上面介紹了,資料寫入的方式,即以頁面為單位寫入,但是要想刪除資料卻需要以塊為單位。因此要刪除無用的資料,固態硬碟首先需要把一個塊內包含有用的資料先複製貼上到全新的塊中的頁面內,這樣原來塊中包含的無用資料才能夠以塊為單位刪除。刪除後,才能夠寫入新的資料,而在擦除之前是無法寫入新資料的。

說了GC之後,再說一下經常聽到的SSD的寫放大問題。因為當寫入新資料時,如果SSD控制器找不到可以寫入的page時,會執行GC過程,然後GC機制會將一些block中的有效資料合併寫入其他的block中,然後將這些block的無效資料擦出,再將新資料寫入到這些block中,而在整個過程中除了要寫入使用者的資料之外,實際上SSD還寫入了一些其他block合併過來的資料,所以這就叫寫入放大。

TRIM或DISCARD

瞭解了GC和寫入放大之後,再來說一下TRIM和DISCARD。TRIM(或者DISCARD)的出現主要為了提高SSD垃圾資源的回收效率以及減少寫入放大的發生。我們知道,在檔案系統上刪除某個檔案時候,它只是簡單的在邏輯資料表內把儲存要刪除的資料的位置標記為可用而已,而並不是真正將磁碟上的資料給刪除掉。使用機械硬碟的系統根本就不需要向儲存裝置傳送任何有關檔案刪除的訊息,因為在將來,系統可以隨時把新資料直接覆蓋到無用的資料上。固態硬碟的情況就不同,只有當系統準備把新資料要寫入那個位置的時候,固態硬碟才意識到原來這寫資料已經被刪除了!(無用資料。),而如果在這之前,SSD執行了GC操作,那麼GC會把這些實際上已經刪除了的資料還當作是有效資料進行遷移寫入到其他的block中,這是沒有必要的。

TRIM和DISCARD的支援,不僅僅要SSD實現這個功能,而是整個資料鏈路中涉及到的檔案系統、RAID控制卡以及SSD都需要實現。要使用這個功能必須要在mount檔案系統時,加上discard選項。如果想要確認SSD是否支援,可以通過hdparm -I命令檢查。

SSD效能測試

我們在購買SSD時如何對其進行效能評估呢?不能只看它的官方資料,可以常用的效能測試比如fio、IOMeter等工具評估一下,並且需要測試一下SSD使用率達到80%以上時SSD的效能。

比較有趣的是,我發現有些SSD針對常用的測試工具fio做了優化,所以使用fio是測試不出真實效能,必須上IOMeter。