2020-06-04 15:38:08
來源:深信服科技
▲圖表及數(shù)據(jù)均來源于Red Hat
With a cpu clocked at 3ghz you can afford:
HDD: ~20 million cycles/IO
SSD: 300,000 cycles/IO
NVMe: 6000 cycles/IO
在這樣的背景下,對于存儲軟件來說能否發(fā)揮出存儲介質(zhì)的高性能,其關(guān)鍵是如何高效利用 CPU,其中,單核 CPU 能夠提供的 IOPS,是存儲系統(tǒng)的一個關(guān)鍵指標。
而分布式存儲作為當前存儲系統(tǒng)的一個重要分支,其軟件定義的特征,能夠更好更快地適配新硬件的發(fā)展,成為了存儲領(lǐng)域的熱點。
我們先簡單地聊聊分布式存儲中開源領(lǐng)域在適配新硬件的進展,而說到開源的分布式存儲,我們一定會想到明星開源項目 Ceph,它在國內(nèi)外都被廣泛使用,其良好的擴展性和穩(wěn)定性也獲得大家一致認可。
在 Ceph 的迭代發(fā)展中,其本地存儲引擎 ObjectStore 也經(jīng)過了兩代的發(fā)展,由最初的 FileStore,到現(xiàn)在廣泛使用的 BlueStore,但是這些存儲引擎對于高性能的存儲介質(zhì)(如 NVMe SSD 等)都存在一定的不足。
所以Ceph 社區(qū)也在 2018 年提出了新一代本地存儲引擎 SeaStore,對細節(jié)感興趣的讀者可以訪問 https://docs.ceph.com/docs/master/dev/seastore/。
下面筆者根據(jù)個人的理解對 SeaStore 的設(shè)計做一個簡單解讀。
SeaStore 的設(shè)計目標
對于目標 1、2,面向 NVMe 的設(shè)計,筆者認為主要是指當前的 NVMe 設(shè)備是可以使用用戶態(tài)驅(qū)動的,即可以不通過系統(tǒng)內(nèi)核,使用 Polling 模型能夠明顯降低 IO 延時。
同時對于 NVMe 設(shè)備來說,由于其 erase-before-write 特性帶來的 GC 問題需要被高效解決,理論上通過 discard 作為一種 hint 機制可以讓上層軟件啟發(fā)底層閃存去安排 GC,但實際上大部分閃存設(shè)備的 discard 實現(xiàn)的并不理想,因此需要上層軟件的介入。
對于目標 3、4,是從如何降低 CPU 的角度去考慮底層存儲設(shè)計的,如上文中也提到對于高性能的分布式存儲,CPU 會成為系統(tǒng)瓶頸,如何提高 CPU 的有效使用率是一個重點考慮的問題。
目標 3 中采用 run-to-completion 的方式能夠避免線程切換和鎖的開銷,從而有效提高 CPU 的使用率,Intel 曾經(jīng)發(fā)布報告說明,在 Block Size 為 4KB 的情況下,單線程利用 SPDK 能夠提供高達 1039 萬 IOPS,充分說明了使用單線程異步編程的方式能夠有效提升 CPU 的使用率。
而目標 4 則需要充分結(jié)合網(wǎng)絡(luò)模型,一致性協(xié)議等,實現(xiàn)零拷貝,來降低在模塊中內(nèi)存拷貝次數(shù)。
基于 SeaStore 的設(shè)計目標,具體的設(shè)計方案中主要考慮了通過 segment 的數(shù)據(jù)布局來實現(xiàn)的 NMVE 設(shè)備的 GC 優(yōu)化,以及上層如果控制 GC 時的相關(guān)處理,同時在文檔中也提到了用 B-tree 的方式實現(xiàn)元數(shù)據(jù)的存儲,而沒有采用類似 bluestore 中使用 RocksDB 來存儲元數(shù)據(jù)的方式。
但是筆者認為,這個設(shè)計對于實現(xiàn)的難度可能比較高,當前的 rados 不僅僅是存儲數(shù)據(jù)還有大量的元數(shù)據(jù)存儲的功能。如 OMAP 和 XATTR,這些小的 KV 信息實際如果采用新寫一個 B-tree 的方式進行存儲,那相當于需要實現(xiàn)一個專有的小型 KV 數(shù)據(jù)庫,這個功能實現(xiàn)難度會非常大,而類似直接使用簡單的 B-tree 存儲元數(shù)據(jù)就會落入類型 XFS 等文件系統(tǒng)存儲元數(shù)據(jù)的困境,不能存儲大量 xattr 的問題。
上文中只是簡單的描述的 Ceph 對下一代存儲引擎的設(shè)計構(gòu)思,如果想等到具體的開源來實現(xiàn)估計還需要個 3 到 5 年的開發(fā)周期。
而我們對高性能分布式存儲的需求又非常熱切,所以深信服存儲團隊就獨立設(shè)計了一個全新的存儲引擎來滿足高性能分布式存儲的需求。
下面我們簡單介紹深信服企業(yè)級分布式存儲 EDS 團隊在高性能本地存儲的實踐之路。
PFStore 設(shè)計與實現(xiàn)
PFStore(Phoenix Fast Store)是 EDS 團隊自研的基于 SPDK 的用戶態(tài)本地存儲引擎,它的核心架構(gòu)如下圖所示。
在系統(tǒng)中主要有數(shù)據(jù)管理和元數(shù)據(jù)管理兩大核心模塊,下面介紹一下兩大核心模塊的職責和技術(shù)特點:
數(shù)據(jù)管理模塊職責:
它是一個 segment 空間管理的基礎(chǔ)單元,所有的數(shù)據(jù)都是以追加寫入的,即底層的 SSD 都是順序?qū)懭氲?,這樣能夠盡可能發(fā)揮每塊 SSD 的性能,降低 SSD 本身 GC 帶來的開銷。
同時整個 store 的系統(tǒng)都是基于 SPDK 的中 spdk_thread 編程模型實現(xiàn)的,整個 IO 過程全部在一個獨立線程中完成,所以不會有線程切換和鎖的開銷。
當然全異步的編程方式會導致開發(fā)的難度比較高,所以我們研發(fā)內(nèi)部也提煉了一套基于狀態(tài)機的異步編程方式,在各個子系統(tǒng)都采用一個子狀態(tài)機,這樣既保證了系統(tǒng)的高性能,也保證了系統(tǒng)的可維護性和可擴展性。
元數(shù)據(jù)管理模塊職責:
對于元數(shù)據(jù)的存儲,我們借鑒了 Ceph 中 BlueStore 的 Rocksdb 方式,也是采用一個簡化的用戶態(tài)文件系統(tǒng) PLFS 來對接 Rocksdb。
而采用這樣的方式,也是因為我們重點
下面分別介紹一下本地存儲引擎的技術(shù)特點。
元數(shù)據(jù)引擎技術(shù)特點:
數(shù)據(jù)存儲引擎技術(shù)特點:
對于數(shù)據(jù)使用追加寫的方式,更加有利于發(fā)揮每塊 SSD 性能,能夠?qū)崿F(xiàn)更加豐富的數(shù)據(jù)邏輯空間管理,為存儲的一些高級特性,如快照、克隆、壓縮重刪的實現(xiàn)提供基礎(chǔ)。
與此同時,使得我們需要在 store 層實現(xiàn)空間回收(GC),而空間回收的設(shè)計對提升追加寫的存儲系統(tǒng)性能和穩(wěn)定性至關(guān)重要。
在 PLStore 中我們使用數(shù)據(jù)分層管理的方式來減少在進行空間回收時對底層 SSD 對性能和壽命的影響。
如上圖所示,我們將數(shù)據(jù)分為 3 個層次:
其中 zone 由多個 segment 構(gòu)成,通過數(shù)據(jù)的分層管理,能夠?qū)崿F(xiàn)在空間回收時將需要被回收的數(shù)據(jù)集中存放,這樣在執(zhí)行空間回收的過程搬動的數(shù)據(jù)量較少,在空間回收時對正常業(yè)務(wù)的性能影響較小。同時在執(zhí)行空間回收的過程中需要回寫的數(shù)據(jù)量較少,能夠有效的較低空間回收對 SSD 壽命的影響。
在進行數(shù)據(jù)分區(qū)管理后,空間回收是以 segment 為執(zhí)行單位,可以通過靈活的空間回收的策略選擇代價較?。ㄐ枰釀訑?shù)據(jù)較少)的 segment 進行空間回收,這種空間回收過程對上層業(yè)務(wù)的性能影響較小,而且配合 SSD 中 discard 指令,還能夠降低對 SSD 的壽命的影響。
在空間回收的處理時,PFStore 同時會配合其 Qos 模塊,選擇合適的時機進行空間回收,從各個方向降低對正常業(yè)務(wù)的影響,避免分布式系統(tǒng)中出現(xiàn)性能抖動和“毛刺”。
PFStore 只在一個線程中運行,采用 run-to-completion 的編程模型,這樣既簡化了系統(tǒng),也消除了系統(tǒng)的性能抖動。但在實際中一個 CPU 的 core 并不能完全發(fā)揮出一塊 NVMe SSD 的全部性能,所以我們在一個進程中啟動多個獨立線程,每個獨立線程綁定一個 PFStore,而不同的 PFStore 分別管理不同的 SSD 的物理空間,如下圖所示。
總結(jié)
對于一個分布式系統(tǒng)而言,本地存儲引擎只是一個基礎(chǔ)組件,需要與其他模塊,如一致性協(xié)議,網(wǎng)絡(luò)傳輸?shù)饶K相互配合才能發(fā)揮其價值。Ceph 社區(qū)在 2018 年提出 Seastore 草案后,在 2019 年又重新提出了新的 OSD(Crimson)來滿足高性能應(yīng)用場景的需求。感興趣的同學可以閱讀 Crimson:A New Ceph OSD for the Age of Persistent Memory and Fast NVMe Storage 的相關(guān)內(nèi)容。
最近幾年存儲領(lǐng)域有著非常大的進展,硬件領(lǐng)域中非易失性內(nèi)存、SCM 等技術(shù)的逐步成熟與落地,NVMe-OF 等協(xié)議逐漸被各個操作系統(tǒng)所支持,同時學術(shù)界也出現(xiàn)很多好的 Idea,這些都促進了分布式存儲的軟件革新和高速發(fā)展。
深信服 EDS 團隊未來的重點也將放在改進軟件架構(gòu)來更好適配硬件,從而提升系統(tǒng)整體的性價比。