愛伊米

固態硬碟普及的今天,上班族的你對“小夥伴”瞭解嗎?

[PConline 資訊]對於上班一族來說,每天離不開的估計是電腦跟手機,而電腦當中儲存文件跟資料重要介質則是硬碟,隨著固態硬碟普及,估計有不少上班一族的辦公電腦換上固態硬碟,固態硬碟作為大家常接觸“小夥伴”,大家真的瞭解嗎?

自從2005年開始,三星作為第一個進入固態硬碟市場的巨頭。直到現在短短的15年間,固態硬碟已經成為消費級的主流儲存介質。相對於傳統的機械硬碟,固態硬碟的效能能達到機械硬碟的十倍甚至更多。

不管是普通的SATA 固態硬碟,還是NVMe 固態硬碟,對於普通消費者來說,只是介質和效能上的變化,甚至有人會簡單的認為,只要使用了固態硬碟,讀寫速度會有非常大的提升,但這真得是這樣嗎?

固態硬碟普及的今天,上班族的你對“小夥伴”瞭解嗎?

固態硬碟構成知多少?

對於固態硬碟來說,最主要的兩個部分就是硬碟顆粒和主控部分,如今的主流固態硬碟使用的基本都是NAND顆粒來儲存資料。每個顆粒可以儲存1bit(SLC),2bit(MLC),3bit(TLC)和4bit(QLC)資料。儲存顆粒的位數越多,就代表密度越高,製造成本更低。但相對而言,顆粒的使用壽命也會更低。硬碟的擦寫次數就更少。

而固態硬碟讀取和寫入的最小單元並不是顆粒而是由一組顆粒組成的頁(Page)。典型的頁的大小是4KB。固態硬碟有一個重要特性,是顆粒一旦被寫入,就無法類似於機械硬碟一樣直接覆蓋寫入,所以為了能反覆使用,固態硬碟就需要對已經寫入過的顆粒進行發出操作。而擦除的最小單元既不是顆粒也不是頁,而是由若干個頁組成的塊(塊)。塊的典型大小是512KB或者1MB,也就是128Page。所以固態硬碟的最佳化手段,都跟這些基本的特性有著密切的關係。

固態硬碟普及的今天,上班族的你對“小夥伴”瞭解嗎?

硬碟中資料操作和垃圾回收(GC)到底是什麼?

任何硬碟資料操作包括讀和寫,其中讀延時相對穩定,而寫延時會發生一些變化,具體情況取決於磁碟的使用情況。正常情況下都是幾十微秒。與傳統的機械硬碟相比,固態硬多了一個擦除的操作。固態硬碟中的垃圾回收就是用於回收那些已經使用過的,但是資料不再有效的那些塊。硬碟的主控中會設定一個可用塊數量的閾值,當可用塊低於這個閾值的時候就會啟動垃圾回收。

損耗均衡(Wear Leveling)和寫放大(Write Amplification)。固態硬碟 block可執行有限次數的擦除操作,也稱之為程式設計/擦寫(P/E)週期,當寫入非常頻繁時,擦除操作發生得更頻繁。一旦達到P/E最大數量,這個block就不再能寫入了。

對於SLC,可擦除次數通常是10萬次,MLC通常是1萬多次,而對於TLC塊,則是幾千。為了確保容量可用和寫延時效能,固態硬碟控制器需要平衡各個block的擦除次數,這是固態硬碟控制器的核心工作之一,也稱為“損耗均衡”機制。

在損耗均衡期間,資料會在各個block之間移動,然後進行擦除。由於擦除的是不再有效的資料,而移動的是有效資料,因此固態硬碟中有效資料通常會大於實際寫入的資料,這稱之為寫放大WA(Write Amplification)。

固態硬碟普及的今天,上班族的你對“小夥伴”瞭解嗎?

以上這些操作基本上都是透過主控晶片來實現,主控晶片絕對不是很多人想象的找個顆粒把資料寫入,需要的時候再讀取那麼簡單。讀寫定址、資料塊的擦除、寫放大的控制、損耗如何均衡等等,這些都是透過主控晶片實現的,這背後的具體原理都是透過很多邏輯電路實現的,具體原理就不做過多解釋了。

固態硬碟對比機械硬碟有何差異?

固態硬碟這種儲存介質和傳統的機械硬碟有著典型差異,儲存系統也要針對固態硬碟有針對性的最佳化,這些最佳化效果體現在很多仿麥呢,包括效能的提上、硬碟使用效率的提升、硬碟使用壽命的延長等方面都是透過主控實現的。

在機械硬碟時代,機械硬碟的延時在毫秒級別,幾乎可以抹殺掉網路延時帶來的影響,所以只要保證網路協議、網路互動的最佳化,應用程式大可以訪問遠端的機械硬碟,但是固態硬碟的延時已經到了微秒級別,除非使用極低延時的高效能網路,否則訪問遠端的固態硬碟資料的延時會明顯收到影響。

對於分散式儲存而言,必須一方面在資料分散放置的同時,儘可能地利用本地固態硬碟的能力,即在資料放置策略上做權衡。在這方面,我們結合元資料放置演算法和策略,對YRCloudFile分散式檔案系統的元資料採用了一部分的本地化固態硬碟訪問,還將推出智慧快取技術,這將大量熱資料快取在指定的固態硬碟本地裝置中,進一步降低訪問延時。

固態硬碟普及的今天,上班族的你對“小夥伴”瞭解嗎?

控制硬碟儲存使用量。再垃圾回收期間,需要擦除擦除儲存塊後建立空閒的儲存塊。擦除block需要保留在block內儲存著有效資料的page,才能獲得空閒block。建立一個空閒block可能需要壓縮和挪動多個block內的page,具體數量取決於block的儲存度。

假設固態硬碟容量已使用A%,為了擦除一個block,需要挪動和壓縮1/1-A個block。顯然,固態硬碟的使用率越高,將需要移動更多的block以釋放一個block,這將佔用更多資源並導致更長的IO等待時間。例如,如果A = 50%,則僅壓縮2個block以釋放一個block。如果A = 80%,則大約移動5個block資料以釋放一個block。如果考慮上block的page,需要操作的資料則更加驚人,假設每個塊都有P個page,並且所有page都包含有效資料,則每次Garbaged Collected都需要複製PA/1-A個page。如果每個block包含128個page,當A=50%時,每個blcok都需要複製128個page,而當A = 80%時,則為512個page,當A = 95%時,則達到2432 page。

使用多執行緒進行小I/O訪問。因為固態硬碟具有多個級別的內部並行處理機制。單個I/O執行緒是無法充分利用這些並行特性額,使用單個執行緒進行I/O訪問,會導致整體訪問時間延時更長。而使用多個執行緒併發訪問,則可以利用固態硬碟內部這些併發特性。

固態硬碟上對本機命令佇列的支援可以有效地再多個channel之間分配讀寫操作,從而提高內部I/O併發性。所以上層應用活儲存系統儘可能併發訪問小I/O是能提升讀寫效能的。如果針對單個應用很難進行多執行緒併發,則可以考慮多個應用對資料的併發訪問,從而充分利用硬碟的併發特性。

固態硬碟普及的今天,上班族的你對“小夥伴”瞭解嗎?

總結

據悉,固態硬碟已經被儲存系統大量使用通常採用固態硬碟的儲存系統會比使用機械硬碟的儲存系統具有更好的效能。但是在不經過針對性最佳化時,單純地將固態硬碟視為一個普通的儲存裝置使用,不能充分發揮出固態硬碟,尤其是NVMe的極致效能。這是因為固態硬碟的工作原理與普通的機械硬碟有較大的差異,訪問特性上也不同。為了充分利用固態硬碟帶來的效能優勢,現代的儲存系統,尤其是分散式儲存系統都需要對固態硬碟做針對性的最佳化。