以下內容根據速記整理,未經本人審定:

可計算存儲是這幾年熱門討論的話題。通常IT系統主要功能部件包括三大部分——計算、網絡、存儲。計算部分,主要指CPU,隨著摩爾定律的失效,每年CPU的算力增長非常有限,無法滿足應用需求,因此才有了各種加速卡的出現,這些加速卡可能是基于FPGA或者基于GPU、TPU,為了在某個特定領域極大卸載CPU計算壓力,從而提升整個系統能效比。

網絡也面臨同樣的問題,傳統網絡需要CPU運行一系列網絡協議實現網絡傳輸,但這一方面浪費CPU計算資源,另一方面也使網絡帶寬受限,智能網卡的出現大大緩解了這個問題,卸載CPU網絡相關功能,同時又把網絡傳輸帶寬提升了一個數量級。

再看存儲,物聯網時代已經到來,每天都有海量數據產生,如何對這些數據進行存儲和訪問,對系統而言是非常重要的一環??上驳氖请S著高性能、大容量的SSD逐漸普及,現在的一臺機器上可以部署十幾張存儲卡,整體可提供幾十甚至上百TB存儲空間,存儲帶寬和訪問延遲相比HDD都得到了極大改善。

隨之而來的問題就是如何對這些海量數據進行處理,這就對CPU提出非常大的挑戰,可計算存儲便應運而生。

ScaleFlux作為可計算存儲領域的先驅廠商,一直致力于提升應用及基礎設施附加值,具體來說我們希望產品可以在以下三個方面達成一個目標。

第一,擴展負載容量的同時,也能夠線性擴展性能;第二,優化基礎設施的成本;第三,能夠靈活適配應用,緊跟應用需求。

可計算存儲設備本質上重新定義了存儲和計算的軟硬件邊界,在把可計算存儲推向實際應用的過程中,我們必須要解決以下幾個問題。

第一,存儲設備內的計算能力到底有多少,因為我們本質上是想把主機端CPU的計算能力卸載到近存儲這一邊,所以說如果這個存儲設備沒有足夠算力,那么屬于無效卸載。

第二,可計算存儲到底能給我們整個系統帶來多少性能收益,這與我們所卸載的計算緊密相關,我們希望卸載的計算對整個系統來講占有比較大的權重,這樣性能收益才會比較明顯。

第三,我們使用可計算存儲設備所解決的這個問題,適用范圍到底有多廣。最后一點,ScaleFlux重新劃分了軟硬件的邊界,頂層底層需要協同設計,這個協同設計的復雜度到底有多高,如果復雜度高,很可能會成為可計算存儲設備落地的一個障礙。

下面我們就具體的從幾個方面來介紹一下ScaleFlux在可計算存儲方面所做得一些嘗試。

第一點,透明壓縮。此前實現壓縮功能最常見的辦法是軟件壓縮,就是使用CPU運行軟件代碼實現壓縮效果。通常我們可以看到應用中已經集成了多種多樣的壓縮算法,本質上是在壓縮率和壓縮吞吐之間做一個取舍,壓縮率很好的算法如ZLIB,GZIP壓縮復雜度比較高,所以說相對來說它的壓縮吞吐會比較低,還有壓縮比較快的那些算法,像SNAPPY,LZ4的壓縮效果又不太好。

整體來講,這些軟件壓縮的缺點是占用CPU資源,如果我們想用壓縮效果比較好的壓縮算法,其速度就往往較慢,很可能會成為整個系統的瓶頸。既想達到比較好的壓縮效果,又能夠使壓縮帶寬較大,就需要壓縮加速卡。壓縮加速卡是把壓縮和解壓縮功能從CPU卸載到專門的壓縮卡上,以此實現壓縮率和壓縮吞吐間比較好的平衡。

但單張壓縮加速卡的壓縮吞吐有上限,基本遠低于存儲系統所能夠提供的帶寬,因此為了進一步提升壓縮帶寬,我們需要在一臺機器里插入多張壓縮加速卡,占用額外的槽位,也就是要減少相應存儲設備數量,導致系統可能得不償失。

為了解決這個問題,ScaleFlux提出了透明壓縮,把壓縮和解壓縮功能直接集成到SSD的主控里,當主機端向存儲設備寫入數據時,這些數據首先會在主控里進行壓縮,壓縮完再寫入NAND,當主機端需要讀取數據,主控首先會從NAND上讀取壓縮后的數據,經過解壓縮再返回到上層應用。

所以從應用端來講,整個壓縮和解壓縮的過程,是完全透明的,這就是為什么我們叫它透明壓縮。當然透明壓縮已經具備了之前壓縮加速卡的一些特性,比如壓縮帶寬較高,其自身的額外優勢是不需要額外的槽位,因此在增加存儲設備時,其壓縮和解壓縮的能力,也就得到了相應的擴展,而真正落到NAND上的數據量減少,相對延長了SSD的使用壽命,另外還可以提升應用性能,后面我們會專門介紹到這一部分。

使用透明壓縮,具體有什么效果,這張圖給了我們一個量化的說明,我們對比了具有透明壓縮功能的CSD 2000和市面上普通的PCIe SSD兩種產品,測試場景是2.5:1的數據壓縮比,8個jobs,32個隊列深度的4KB穩態性能下的對比,然后通過這個圖我們可以看到,圖中縱軸是IOPS,也就是每秒操作數,這個數值越高越好,橫軸代表讀寫操作中讀的比例,最左邊的100%對應的是純讀的場景,最右邊的0%對應的是純寫的場景。

可以看出,使用了透明壓縮的CSD 2000,性能上具有很大的優勢,尤其是在讀寫混合的場景下,當我們的寫比例超過50%的時候,基本上CSD 2000在穩態下的性能是普通PCIeSSD的2倍左右,所以也希望借著透明壓縮可以給用戶提供更優秀的混合讀寫性能,更低的單位存儲價格以及更簡單的頂層應用集成。

針對數據庫上的應用,我們對比了MySQL和PostgreSQL兩款最常見數據庫的場景,使用透明壓縮后可以節約50%以上的存儲空間,同時也可以提供更好的性能。

我們還希望可計算存儲可以承擔一些其他的計算邏輯,這些計算邏輯可以由專用的硬件來完成,也可以由通用的硬件完成,專用硬件是面向特定領域專門設計而成,因此可以比較容易的實現更高的并行度和吞吐率,這里的以行存數據庫中間的數據過濾作為例子,對專用硬件下的可計算存儲做一個說明。

這里專用硬件主要承擔的是列投影和行過濾的功能,列投影主要指是在掃描數據的時候,選擇出那些上層查詢感興趣的列,不敢去的列直接過濾掉,行過濾主要指當某一行不滿足上述的查詢條件直接過濾掉,如果有可能滿足,再選上。

我們右邊通過了一個簡單的查詢語句,對列投影和行過濾的概念做一個說明,在查詢語句中,我們是選擇了三個列,ORDERKEY、EXTENDEDPRICE和DISCOUNT,上層只對這三個列感興趣,這三個列在可計算存儲內部就直接被過濾掉了,所以叫做列投影。

同時我們查詢,還有一條額外的條件語句,也就是RETURNFLAG的值必須是52,如果不是52也就是不滿足上層的查詢條件,我們也會在掃描的時候,把這一行整個過濾掉,這個就叫做行過濾。

那么通過列投影和行過濾,我們希望可計算存儲達到這樣一個效果,首先就是可以極大減少從可計算存儲內部傳輸到主機端的數據量,第二個就是減少PCIe帶寬和內存帶寬的占用,第三就是大大減輕主機端CPU在后續處理時的壓力。

專用硬件雖然可以實現較好的計算卸載功能,但設計復雜度高,所以我們也要思考在通用硬件下是否能實現類似的近存儲計算。具體到可計算存儲設備,這里的通用硬件指的是ARM處理器或RISC-V處理器,但相對現有主機CPU計算力較弱。

如果我們想通過計算卸載來獲得整個系統性能的提升,承擔計算卸載的計算單元,其計算能力一般是要大于主機端CPU計算能力,只有在這種情況下,才有可能使整個系統產生一個比較好的效率。但是現在我們所面臨的情況,我們可計算存儲設備內的計算單元,有可能它的計算能力是弱于主機端CPU的,在這種情況下,還有沒有可能實現一個比較有效的近存儲計算呢?

這里我們以列存數據庫中的數據作為例子進行探討,列存數據庫,就是把數據按照列的形式,緊密的排列,進而進行存儲,通過這種方式,一是有利于數據壓縮,第二,當上層查詢需要訪問數據的時候,可以直接訪問感興趣的那些列,不感興趣的列不需要過濾,就直接不讀了。

那么現在由于可計算存儲設備內部的計算單元計算能力比較弱,所以我們盡量需要避免對數據元素依次進行掃描,否則其計算邏輯與主機端的CPU相同,很可能導致整體性能不升反降。

取而代之的,我們不對單個元素進行過濾,而是對數據段進行過濾,一個數據段包含多個數據元素,如果某個數據段內有滿足上層查詢條件,我們就把整個數據段進行選擇,如果不滿足上層的查詢條件,整個數據段就會被舍棄,如何快速對數據段進行一個判斷,這里所給出的一種方法,就是引入了國外的輔助元數據,這些輔助元數據在當初寫數據的時候,我們就已經嵌入到列存數據庫里,輔助元數據就包含數據段內數據分布的一個總結。

通過這種方式,我們也可以達到像之前專用硬件下的數據過濾類似的效果,在可計算存儲設備內部進行一些預過濾,實現從存儲設備返回到主機端的數據量也會減少。

本質上這種方法是在過濾的精確度或帶寬之間做了一個取舍,最終目的就使得我們雖然可計算存儲設備內的計算能力比較弱,但能夠提供的掃描吞吐依然可以匹配,甚至大于上層主機端的掃描速度。

我們也對這種方法進行了一些評估,這里所使用的原始數據還是TPC-H Lineitem表,數據庫使用的是列存數據庫,當前比較熱的一款引擎Click House,處理器是ARM Cortex A53處理器。

我們今天的分享到此結束,謝謝大家。

未經允許不得轉載:存儲在線-存儲專業媒體 » ScaleFlux鄭寧:可計算型存儲的應用案例研究
分享到

崔歡歡

相關推薦

精品国产午夜肉伦伦影院,双性老师灌满浓jing上课h,天天做天天爱夜夜爽,攵女乱h边做边走