可計算存儲:數據壓縮和數據庫計算下推

“摩爾定律”失效指的是什麼?

2016年2月9號《自然》雜誌的《The chips are down for Moore’s law》寫到即將出版的國際半導體技術路線圖不再以摩爾定律(Moore’s law)爲目標,芯片行業50年的神話終被打破。

狹義的摩爾定律指每18到24個月,芯片上晶體管集成的密度會翻一番或者價格下降一半,它連接了價格和集成度。但我們普遍所討論的是摩爾定律其實包含“摩爾定律”、“登納德縮放”和“波拉克法則”三個重要法則。

  • 登納德縮放定律(Dennard Scaling)的核心觀點是,隨着晶體管密度的增加,每個晶體管的功耗會下降,因此,每平方毫米硅的功耗幾乎是恆定的。由於硅的計算能力隨着每一代新技術的發展而提高,計算機將變得更加節能。

  • 波拉克法則(Pollack's Rule)則指出,同製程工藝下,處理器的性能提升幅度,是芯片面積(晶體管數量)提升的平方根。

  • 登納德縮放定律(嚴格說是預測)在2007年開始顯著降速,並在2012年幾乎消失,如下圖所示:

所以,常說的“摩爾定律失效”指的是基於三個重要法則構建的用戶價值三角(價格、集成度和性能)的失效。

異構計算

2017 年圖靈獎獲得者John L. Hennessy and David A. Patterson在他們的文章《A New Golden Age for Computer Architecture》中指出通過異構處理器優化設計時間和成本。

As the focus of innovation in architecture shifts from the general-purpose CPU to domain-specific and heterogeneous processors, we will need to achieve major breakthroughs in design time and cost.

異構計算指將不同體系架構不同指令集(精簡指令集和複雜指令集)的計算單元組合使用,將最合適的任務交給最擅長的計算單元(包括CPU、GPU和FPGA等),最大程度發揮各類計算單元的優勢。

可計算存儲和數據壓縮

可計算存儲可簡單的理解成在原有的存儲介質(比如NVMe SSD)上疊加計算單元(比如FPGA),並由該計算單元加速跟存儲直接相關的計算任務,實現CPU計算任務卸載(Offload)。但持久化應用的相對複雜,如果不能洞察面臨的重要問題、理解現存方案的取捨(Tradeoff)和提出創新性的設計方案,可計算存儲很難發揮真正價值。計算機體系結構泰斗Yale Patt教授曾提出的Look backward(to the past),Look forward(to the future),Look up(to the problem)和Look down(to the device)在存儲領域同樣適用。

Look up(to the problem),存儲實現信息跨越時間的傳遞,對它的抱怨永遠是“不夠快,不夠大”。SSD的出現極大的提升了存儲性能(IOPS和Latency),但是逐年下降的價格依舊跟不上數據爆炸式的增長。SSD的特性決定容量不僅影響成本,也影響性能。SSD不能像內存和機械硬盤直接覆蓋舊數據,只能擦除Block後才能寫入其中一個“乾淨”的Page。當SSD剩餘空間變少,出現大量數據碎片時,就要讀取整個Block數據,將有效數據重新寫到已經擦除的Block。這個過程叫Garbage Collection (GC),導致寫放大(Write Amplification)。單個擦除操作延遲是寫操作延遲的幾倍,而寫操作的延遲又是讀操作的幾十倍。在混合讀寫的場景,GC會引發延時抖動,影響性能。爲降低GC頻率,SSD不僅會優化GC算法(比如“greedy reclaiming policy”),如下圖所示:

同時也會留出空間(也叫OP:Over Provision),企業級SSD的OP通常是28%,消費級SSD內部的OP通常是7%。IBM研究院的相關研究指出剩餘空間爲10%時寫放大在3.5倍和4.5倍之間,剩餘空間爲30%時寫放大可減少爲0.2,如下圖所示:

所以減少寫入的數據量,不僅節省空間,也優化性能。針對不同場景,業界提供了很多壓縮算法,比如zstd,zlib,brotli,quicklz,lzo1x,lz4,lzf,snappy...現有的解決方案可簡單歸納成軟壓縮(基於CPU)和硬壓縮(基於加速卡)。

《硅谷》中年輕的計算機天才Richard發明的超越理論極限的壓縮算法“middle-out”,並由此組建了Pied Piper公司。

軟壓縮(基於CPU)

如上圖所示,壓縮和解壓完全由CPU提供算力。“犧牲”CPU資源換取存儲空間,存在個突出的問題:

  • CPU搶佔:會佔用大量CPU資源,同時也會跟應用搶佔CPU資源。

  • 數據複製導致的帶寬搶佔:在主存和CPU之間引入頻繁且大量的數據複製(DRAM<-->L3 Cache<-->L2 Cache<--> L1 Cache<-->Registers),搶佔服務器PCIe 帶寬和內存帶寬,同時帶來潛在的CPU Cache Miss,進一步影響計算效率。

  • 時延不穩定:因爲CPU搶佔和帶寬搶佔,當OS負載較高時,OS中的時鐘中斷和任務調度增加了延遲的不確定性,這是IO密集型業務很難忍受的。

硬壓縮(基於壓縮卡)

如上圖所示,專有壓縮卡提供壓縮和解壓算力,釋放CPU資源,實現CPU-Offload,但是並不徹底。頻繁且大量的數據複製依然存在,即便壓縮卡使用DMA技術,也無法徹底實現Zero-Copy,DRAM和壓縮卡之間依然存在頻繁的數據複製,搶佔大量的服務器帶寬資源。同時,因爲數據鏈路中增加壓縮卡,勢必增加IO時延,尤其是數據庫和高速塊存儲系統的小數據塊(如4KB、8KB、16KB)場景。

可計算存儲

針對已經存在的問題,可計算存儲的思路如下:

  • CPU-Offload:採用FPGA完成壓縮和解壓縮計算,實現CPU-Offload。Look down(to the device),FPGA 在低延時上具備天然的優勢,非常適合計算密集型任務(比如矩陣運算、壓縮和非對稱加密)。首先,片上集成緩存和DRAM接口,減少與CPU交互,免於OS的進程調度和進程間干擾,從而提供可預期的時延。同時,FPGA 基於定製流水線 MIMD設計,同時擁有流水線並行和數據並行,進一步降低時延。下圖(Figure. 5和Figure. 6)是FPGA應用於Bing搜索排名中的查詢加速,可以觀察到更低的平均延時;
  • Zero-Copy:以內置FPGA的方式,不改變原有的數據路徑,完全在盤內進行壓縮解壓任務(又叫in-situ processing),避免額外的數據複製,這也是爲什麼可計算存儲又叫“近”存儲計算的原因;

如下圖所示:

可計算存儲和數據庫計算下推

Look forward(to the future),IDC(International Data Corporation)預計到2025年全球數據將達到175ZB。即便考慮壓縮技術,存儲介質的容量和數據量的增速剪刀差會越來越明顯。

可以做個簡單的算術題,讀取1PB數據,僅考慮數據從存儲介質傳輸到到主存(DRAM),PCIe 3.0 * 32、PCIe 4.0 * 32 和PCIe 5.0 * 32分別耗時多久?如果數據存放存儲陣列上,使用100Gbps存儲網絡,耗時多久?如下所示:

Look backward(to the past),在現代處理器系統中,CPU高速緩存處於內存系統的頂端,其下是主存(DRAM)和存儲介質。在一個現代處理器系統中,CPU高速緩存通常由多層次組成(L1,L2 和 L3 Cache)。基於時間局部性,CPU數據讀取時將訪問各級Cache直至到達主存(DRAM)。如果需要訪問的數據在CPU高速緩存中命中,將不會訪問主存(DRAM),以縮短訪問延時,訪問流程大致如下:

在聯機分析(OLAP)的場景中,如果同一作業的運行頻率低,不同作業之間數據的關聯度低,使得現有緩存體系極爲低效甚至失效,比如熱數據被換出引發Cache Miss,導致應用性能急劇下降。在數據庫領域有不同的解決思路,以 Oracle 爲例:

  • 縮短數據量的移動路徑:數據庫默認總是先將數據讀取到自己維護的高速緩衝,Oracle 11g開始採用直接路徑讀取來掃描大表(默認 2% * buffer cache),從而繞開buffer cache,避免熱數據被換出引發緩存命中率下降;

  • 減少移動的數據量:Oracle Exadata Smart Scan,該特性能通過將大部分的SQL操作下推(又叫卸載)到存儲節點完成,極大的減少了存儲節點和數據庫節點之間的數據量;

數據增長永無止境,硬件性能終會遇到天花板,減少移動的數據量似乎更有啓發。

當說下推時,到底指的是什麼?可以從 MySQL 特性 Index Condition Pushdown(簡稱ICP)入手,建立更具體的認識。

關閉 ICP

未啓用ICP特性時,會按照第一個索引條件列到存儲引擎查找數據,並把整行數據提取到數據庫實例層,數據庫實例層再根據Where後其他的條件過濾數據行。如下圖所示:

啓用 ICP

啓用ICP特性後,如果Where條件中同時包含檢索列和過濾列,且這些列上創建了一個多列索引的情況下,那麼數據庫實例層會把這些過濾列同時下推到存儲引擎層,在存儲引擎層過濾掉不滿足的數據,只讀取並返回需要的數據,減少存儲引擎層和數據庫實例層之間的數據傳輸和回表請求,通常情況下可以大幅提升查詢效率。如下圖所示:



數據庫計算下推

MySQL ICP雖然將MySQL Server層的過濾下推到存儲引擎層,但仍需要消耗CPU資源,嚴格來說,這不是真正意義的下推。如果要更進一步,可以考慮將第4步下推到可計算存儲,原因如下:

  • 收益大:關鍵步驟,由它完成實例層向存儲引擎層的下推,符合“近”存儲計算原則,實現收益相對大;

  • 成本低:從調用關係看,對數據庫實例層影響很小,絕大部分改動可在存儲引擎層完成,修改和驗證成本相對低;

  • 對FPGA友好:易於並行,對計算密集任務友好(比如壓縮,加密,計算,過濾和聚合);

如下圖所示:

受篇幅和能力所限,省略了一些細節。比如:

在壓縮和解壓縮的場景中,追求極致的壓縮率或性能都會相對容易,但是對於持久化業務而言,往往是既要(壓縮率)又要(時延)。在這些前提要求下,可計算存儲在提供穩定IO時延的同時實現了數據壓縮,降低了存儲成本。當然,要實現併發布商用產品涉及的內容就太多了,比如,FPGA選型(資源和功耗),如何調試壓縮算法以對FPGA更友好,面對不同壓縮比的數據如何提供可預期的時延,如何提供對應用透明的使用體驗,如何實現LBA(邏輯地址)和PBA(物理地址)變長映射等等。

在計算下推的場景中,設計的內容包括如何識別底層的CSD設備以及暴露的Pushdown接口,如何將下推的條件傳輸給硬件,如果優化設備內部邏輯(流式處理和並行數據過濾),存儲數據格式修改以對流式處理更友好,因爲bypass文件系統如何修改現有的監控...

Yesterday's technologies,today's problem

從曾經的專有計算,再到Intel奠定的通用計算,再到今天的異構計算,歷史總是驚人的相似又被賦予新的內涵。計算機領域的創新也未必都是天才們“靈光乍現”, 更多時候是建立在對已有系統(軟件和硬件)深刻理解之上,用一個新的角度解決問題。可計算存儲將會給持久化應用,尤其是數據庫,帶來更多深遠的影響和變化。

What we have before us are some breathtaking opportunities disguised as insoluble problems.

作者 :熊中哲@ScaleFlux

ScaleFlux 成立於2014年,其被證明爲可以批量部署複雜的計算和固態存儲解決方案的領導者。計算存儲是現代數據驅動的基礎,該架構可爲計算和I/O密集型應用提供低延時、易擴展和敏捷的能力

引用

  • A New Golden Age for Computer Architecture

  • A Reconfigurable Fabric for Accelerating Large-Scale Datacenter Services

  • A Cloud-Scale Acceleration Architecture

  • 淺談 Cache Memory

  • wiki Locality of reference

  • Index Condition Pushdown Optimization

  • Write Amplification Analysis in Flash-Based Solid State Drives

  • Write Amplification

文章來源:ScaleFlux

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