Flash Drive閃存盤,作為代替使用了幾十年的機械硬盤,它與機械硬盤相比有著絕對的性能優(yōu)勢,架構上也與機械硬盤有著很大的區(qū)別。本文以摘要的形式梳理了閃存盤的內部結構Page、Block、Channel的作用以及使用閃存盤上的一些性能考慮和使用范圍。
閃存盤就像一個小型的存儲系統(tǒng),它包括一下的組件:
緩存區(qū)(Buffer): 緩存里存著所有區(qū)域的索引信息,正在寫入的數據、并且使用專用的電容器(Power capacitors)在系統(tǒng)掉電的時候為緩存供電,然后把數據寫入到持久存儲NAND單元。
頁面(Pages):閃存盤內部的芯片通過頁面為單位來尋址,73GB和200GB的閃存盤頁面大小為4KB,400GB的閃存盤頁面大小16KB。頁面內容組成連續(xù)的尋址空間,就像存儲系統(tǒng)中的緩存一樣。寫入過程中,對于兩個2KB的IO在閃存頁面中必須寫入兩個連續(xù)的LBA(Logical Block Address),也就是占用兩個頁面。
扇區(qū)(Blocks):NAND類型的閃存盤的映射關系和文件系統(tǒng)類似,多個Pages組成為Block,但是區(qū)域中的頁面并不是連續(xù)的,這個block和SCSI以及文件系統(tǒng)中的block還是有所區(qū)別。NAND類型的閃存盤寫入都是在Block級別。Block的鏡像存儲在閃存盤的緩存中,知道一個區(qū)域寫滿了,然后再寫入到閃存盤存儲單元的Block內。
通道(Channels):閃存盤中芯片處理數據的通路,閃存盤擁有多個通道,保證存儲單元可以同時進行讀和寫的操作,對于大IO,會在多個通道上分段處理。
閃存盤中的頁面通過幾種狀態(tài)來管理數據狀態(tài):
Valid State:包含可用數據
Invalid State: 包含過期數據
Erased State:沒有被使用區(qū)域
頁面狀態(tài)會受到負載的影響,頁面狀態(tài)也會影響到可用的區(qū)域。可用的區(qū)域(已經釋放的區(qū)域)會決定寫入的性能。由于隨機寫入頁面變得隨機分布,閃存盤使用元數據來定位Valid和Invalid的數據,比如一個占兩個Block文件更新寫入,第一個block寫入到緩存,那么它所對應的NAND上的兩個block都會變成invalid。
閃存盤中還有一部預留空間,存儲通常意義上的元數據,預留空間會為寫入數據提供可用的block位置。
持續(xù)的數據寫入會使閃存盤飽和,然后閃存盤會在空閑的時間進行擦除(Erase)操作。在擦除之前,為了保證Block中的頁面必須都是invalid狀態(tài),會將每個block中的valid頁面寫入到其他block,這個過程類似于硬盤碎片整理,主要分為幾個步驟:
將Valid的頁面讀取到緩存中
擦除NAND中舊的區(qū)域
將Valid頁面寫入NAND的到其他Block中
使用閃存盤時的一些性能考慮與應用場景:
是否閃存盤在使用久了以后會變慢?答案是,的確會有一些影響。閃存盤的剩余空間會是主要因素之一,因為剩余空間的減少會導致碎片的增加,影響到閃存盤對于持續(xù)寫入的相應時間,較高的空間利用率會導致在每個block中有更多的valid頁面。隨著時間增加,這種valid頁面的分布會變得更加隨機分布而且空間利用率增加。如果block中包含比較高的比例的valid頁面,擦除的過程中就需要調整更多的頁面。閃存盤就需要更多的時間進行碎片整理。
閃存盤的大小是否影響性能?這里需要描述一個概念,叫做小IO和寫入頁面填充的概念,因為在閃存盤處理寫入IO的情況中,如果寫入的IO小于一個頁面的大小,則閃存盤需要進行Read-Modify-Write操作。因此對于閃存盤來說的負載加倍。所以就閃存盤性能來說,73GB和200GB使用的4KB頁面大小會好于400GB的16KB頁面大小。
最后還要簡要提一下閃存盤的應用場景。其實處于成本效益的考慮,閃存盤的使用還是需要有的放矢。根據適合的應用選擇,而且結合存儲陣列的情況進行綜合考慮,作者認為可以從以下幾個方面考慮:
閃存盤通常還適用于高比例的隨機讀取和小IO的應用。
如果隨機寫入的比例大于20%,則是閃存盤最好發(fā)揮作用的情況。
閃存盤和存儲陣列的緩存相結合。閃存盤很多情況下會加速存儲陣列的數據刷新效率,比較典型的就是高負債寫入的應用,存儲陣列的緩存可以提供更短的前端響應時間,減少從存儲陣列緩存中載入和寫入后端磁盤速度。但當某些極大的數據庫情況下也有可能相反,存儲陣列緩存對于大量的寫入可能會響應不及,而這種情況,根據使用存儲陣列實際情況,可以選擇性的跳過存儲陣列的寫緩存,而直接在后端使用大量(超過30個閃存盤)提供高帶寬,當然也要考慮存儲陣列是否支持關閉寫緩存。
對于數據庫應用,閃存盤適用于存放索引、比較繁忙的表、臨時空間,而Redo Log和Archive log之類則不適合于存儲在閃存盤。
對于消息系統(tǒng)(Exchange、Notes),閃存盤適用于存放用戶數據庫。