3. SSD Geometry
3.1 Effective Block
3.1.2 Impact of Effective Block
在 block level mapping FTL 中,由於同一個 data block 內的資料被更新 時,都會先記錄在同一個 log block 內。因此在循序更新資料時,若 write request 的起始位置正好對齊 effective block 的起始邊界,並循序地更新 data block 內的資料。那麼在進行 garbage collection 時,就可以採用較快 速的 partial merge 或是最理想的 switch merge。避免因為 full merge 時所 產生的巨大 overhead 而造成寫入效能低落,讓 SSD 在 sequential write 情 況下可以達到更佳的效能表現。如下圖 A 所示,在 write request 對齊 effective block 的起時邊界時,當更新的資料量正巧為 effective block size 的倍數,由於可以直接進行 switch merge 所以不必進行任何的有效資料 搬移,達到最佳的寫入效能。而 write request size 不為 effective block size 倍數時,則因為要進行額外的有效資料搬移而寫入效能較差。另外如圖 B 所示,當寫入資料量恰巧為 effective block size 時,若 request 之起始位 置沒對齊 effective block 的邊界則無法進行 switch 而速度較慢。
SSD Throughput
Request Size Effective Block
Size
maximum throughput
SSD Throughput
Start Offset Effective Block
Size
maximum throughput
Align effective block boundary Align effective block size
rmance of sequ
one-to-one mapping scheme 的 FTL 中,一個 log block 只能分配給一個
此當 SSD 在進行隨機寫入時,若隨機寫入的資料範圍侷限在一個 資
圖表 14 : Perfo ential write
在
data block 使用,也就是說當一個 data block 內的資料被更新時,FTL 會 去檢查此 data block 現在是否有自己的 log block。若此 data block 已經有 被分配 log block,則被更新的資料將直接寫入此 log block 中。否則 data block 還沒被分配任何的 log block,FTL 便會分配一個新的 log block 提供 此 data block 作為資料暫存空間,此時如果 SSD 內已經沒有可用的 log blocks,flash translation layer 便會進行 garbage collection 來回收已經被使 用的 effective blocks。
因
effective block size 內,那麼僅需要一個 log block 就可以吸收這些寫入 料,並在 log block 的空間完全被使用完時才進行回收,此時能充分利用 一個 effective block 的儲存空間。而對於 flash translation layer 最糟糕的寫 入樣式,如下圖的 write requests 分佈圖所示,write requests 隨機的對不 同的 data blocks 內的資料進行更新時,flash translation layer 必須不斷的 為被更新的 data block 分配 log block,而在全部的 log blocks 被消耗殆盡 之後,每一個對不同的 data block 進行更新的 write request 都會由於沒有 可用的 log block 而不斷的觸發 garbage collection,導致許多 log blocks 在 還有很多閒置空間時就被迫回收,造成大範圍隨機寫入的效能非常低落。
.
Data Block Log Block
Page 0
大部分的 FTL 設計中,當 log block 內的空間使用完時,flash translation layer 便會觸發 garbage collection,以清理出可用的 effective blocks。因此 effective block size 成為影響 flash translation layer 進行 garbage collection 頻率的重要因素,當一個 data block 被更新的資料量達到 effective block size 時,意味著此時 log block 已經無可用空間,便會觸發一次 garbage collection,將此 log block 與對應的 data block 進行 merge operation。所以 當 log block size 越大時,就能盡量延後 garbage collection 的發生。
實際上較大的 effective block size,雖然可以增加 log block 對於所能吸收 的資料量,也可以增加 log block 所能吸收的 random write 的空間區域性,
但是由於 SSD 中可用的記憶體空間是有限的,因此若採用的 effective block size 越大,則總共的 log blocks 數量則較少。而在某些情況下,當 可用的 log block 數量太少時,會造成 data block 之間對於 log block 分配 的競爭,導致許多 log block 內的空間並未被完全利用完,就因為 log block 數量不足而被迫提早回收,造成 garbage collection 發生頻率反而提高,
導致整體寫入效能降低。
因此在檔案系統擺放大型檔案時,若能對齊 effective block 的大小或起始 邊界就能增加被更新時使用 switch merge 的機率,最佳化循序寫入的速 度,避免有效資料搬移的成本,否則就必須使用 full merge 或 partial merge 增加 garbage collection 的成本。而在隨機寫入方面,若能在檔案分佈時 就盡量的將容易被更新的資料或是 metadata 盡量的集中在同一個
effective block 中時,就可以盡量增加 log block 的利用度或是降低 merge operation 的複雜度,最佳化隨機存取效能,否則在資料分佈過於分散的
情況下,在 one-to-one mapping 中可能會造成 log block 被大量競爭而導 致 garbage collection 觸發頻繁,或在 many-to-one mapping 中提高 merge operation 時的複雜度,都會造成效能大幅低落。