文件系統在NVMe SSD上的性能表現分析

文件系統是訪問存儲的一種常用方式,目前常用的文件系統都是針對磁盤的特性進行設計的。例如,爲了解決磁盤隨機小數據訪問的問題,在文件系統層面引入了Page cache機制,利用內存緩存對這種訪問進行加速。大多數業務都會存在數據局部性,因此,通過這種Page cache機制可以很好的提升文件系統的性能。另外,文件系統的數據佈局也會考慮磁盤的特性,元數據聚合存放在一起,這樣可以高效的實現元數據的存放,避免磁盤抖動。如下圖描述,包括文件系統在內的存儲軟件棧在各個層次都會對磁盤抖動問題進行優化。

 

wKioL1fn6tHQvY3kAACb6EZzsPM720.jpg


NVMe SSD替換磁盤的過程中,我們發現傳統文件系統在很多方面表現的不盡人意,導致系統性能變差,無法充分發揮NVMe SSD的性能。其中主要原因有如下兩點:


1,  傳統存儲軟件棧採用堆疊式的方式,並且存在較多層級。每個層級封裝成一個模塊,構成了所謂的“模塊化設計”。在面向磁盤的存儲系統中,這種設計方式非常好,帶來的價值是存儲軟件棧設計與實現的靈活性。用戶需要增加一個功能的時候,可以在軟件棧中堆疊一個模塊,非常的高效,軟件功能與質量可以得到很好的控制。但是,在面向高性能介質的存儲系統中,存儲盤已經不再是性能瓶頸點的主因,存儲軟件棧本身變成了嚴重的性能瓶頸點。而傳統的軟件棧在設計與實現的時候根本沒有考慮自身的瓶頸問題、軟件的效率問題,根本沒有考慮如何高效使用CPU的問題。從而導致傳統軟件棧使得處理器的運行效率極低,成了性能瓶頸的主要因素。尤其最近幾年處理器往多核化方向發展,基於“存儲是IO密集型應用”爲指導思想的存儲軟件棧,很少採用多核併發處理的設計思想,因此無法發揮多核化帶來的價值。高性能存儲介質恰恰需要多處理器的支持,性能的發揮需要得益於多處理器的能力。在這一點上,傳統軟件棧的設計存在天然缺陷,其主要原因還是沒有考慮到IO性能瓶頸點的轉移,所以,存儲軟件棧在揹負較重的情況下,自身成爲瓶頸點,性能低下在所難免。


wKiom1fn6tKB_37gAACmLEDbbqE611.jpg


2,  包括文件系統在內的傳統存儲軟件棧的設計是面向磁盤介質的,磁盤介質與高性能NVMe SSD相比存在截然不同的特性。對於NVMe SSD而言不存在隨機訪問性能抖動的問題;但是會存在業務IO影響寫放大的問題,以及個別SSD存在寫後讀性能極差等問題。面向磁盤設計的一些機制對SSD而言沒有價值,並且在有些應用場景下會極大的影響整體性能。例如似乎可以增加隨機訪問性能的Page cache,在NVMe SSD上會對業務性能造成影響。在隨機訪問的情況下,Page cache的命中率比較低,並且會不斷的在SSD與內存之間進行page頁的換入換出,這種頻繁的換入換出操作會增加大量的無用操作,在軟件設計存在競爭鎖的情況下,文件系統的性能表現會大打折扣。


在高性能介質上,我們對比測試了裸盤與文件系統之間的性能。下圖對比了4KB8KB在隨機訪問情況下的性能。從圖中可以看出,在4KB8KB隨機讀情況下,文件系統的性能要遠遠低於裸盤性能。此時我們發現文件系統在忙於Page Cache的換入換出操作。在4KB8KB隨機寫情況下,兩者性能接近。


wKioL1fn6tLQ5U7RAABnV9Z-k6o584.jpg

64KB128KB大壓力數據訪問情況下,文件系統與裸盤的性能接近,如下圖所示:


wKiom1fn6tLxVT9GAABuDyVf3_g243.jpg

從測試與分析的結果可以看出,Ext4文件系統在隨機訪問方面性能損失較大,在其他方面兩者的性能相近。因此,Page cache等策略在SSD上起到的效果基本沒有,可以忽略。此外,我們也可以體會到傳統軟件棧不僅沒有優化高性能存儲介質,反而帶來了性能以及壽命等方面的影響。所以,SSD在數據中心等應用中大規模使用時,存儲軟件棧需要做深層次變革。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章