PostgreSQL數據庫的智能存儲
- 2019 年 11 月 21 日
- 筆記
作者簡介
KaiGai Kohei,HeteroDB數據庫首席架構師、共同創始人,PG-Storm作者。
譯者簡介
朱君鵬,華東師範大學博士研究生,個人興趣主要集中在:新型硬件(GPU、RDMA、FPGA等)在數據庫中的應用,架構設計與並行計算。
校對者簡介
崔鵬,任職于海能達通信股份有限公司哈爾濱平台中心,數據庫開發高級工程師,致力於PostgreSQL數據庫在專網通信領域、公共安全領域的應用與推廣,個人興趣主要集中在:分佈式數據庫系統設計、高並發高可用數據庫架構設計與開源數據庫的源碼研究。
摘要
GPUDirect RDMA允許直接從PCIe設備到GPU RAM的對等數據加載。對於Linux內核和PostgreSQL的擴展模塊,我們通過將NVMe-SSD上的數據庫塊加載到GPU RAM以及在GPU設備上執行SQL來協同利用此基礎架構進行非常快速的表掃描。一旦數據塊加載到GPU RAM上,內核函數就會根據提供的SQL(WHERE clause,JOIN和GROUP BY)減少數據大小。在結果中,CPU / RAM將獲得比實際表大小小得多的數據大小,並且看起來存儲在理解SQL的情況下智能地執行。根據基於SQL星型模式的基準測試,我們的功能可以在80秒內掃描351GB平台;這是大約4.5GB / s的查詢處理吞吐量,比通常的文件系統基本I / O實現快2.5倍。此結果表明GPU對I / O密集型工作負載也很有價值,而不僅僅是計算密集型工作負載。
簡要架構

OLAP(聯機分析處理)是數據庫領域的一個主要工作。它的特點是查詢想要從大量數據中生成(相對)小的摘要;通常大於物理RAM大小。傳統上,存儲設備(如SSD)上的數據庫的數據塊被加載到主機系統的RAM一次,然後CPU或GPU處理它們。但是,由於數據塊中的大多數行都被過濾,所以效率不高,因為在GROUP BY操作的縮減過程中,數據塊中的大多數行都被過濾掉或僅被引用一次。在SQL工作負載的情況下,我們可以準確地知道如何在加載之後處理數據塊。因此,可以設計GPU內核以並行地在多個塊/行上運行SQL工作負載。我們實現了WHERE子句評估的GPU版本,Hash-Join和GROUP BY,作為PG-Strom [* 1]的功能。此外,我們開發了一個Linux內核模塊,用於將SSD從SSD塊傳輸到GPU RAM。PG-Strom是PostgreSQL [* 2]數據庫的擴展。它控制Linux內核模塊和GPU設備以卸載SQL工作負載。該架構允許一些SSD和GPU協同工作,並根據提供的SQL將預處理的數據流發送回主機系統。從應用程序的角度來看,存儲似乎可以智能化的在設備上運行一些SQL工作負載。使用GPU RAM(=相對罕見)處理大數據的關鍵是循環緩衝和異步執行。我們將映射的GPU內存分成多個塊,並逐個分配作業。在特定時刻,CPU在塊上發出SSD到GPU DMA請求,在另一個塊上的請求正在進行中,GPU內核正在運行以處理另一個塊,並且通常的GPU到RAM寫回DMA在 – 另一個塊上的進展。它可以非常有效地提取GPU和NVMe-SSD的硬件功能。

基準測試

我們在原始NVMe-SSD [* 3]上構建了一個具有上述數據結構的數據庫,以及由2或3個SSD設備組成的md-raid0卷。此工作負載是眾所周知的星型模式基準,它反映了典型的DWH工作負載,也類似於一些IoT類數據結構。我們運行一些報告查詢,如上面的Query-3。最大的表大小為351GB,但RAM大小為128GB。因此,此工作負載是典型的I / O密集型工作負載而非計算密集型。藍色條是每個RAID配置的vanilla PostgreSQL的結果,橙色條是PG-Strom的結果,具有SSD到GPU的P2P DMA支持。查詢處理時間的倒數(例如,如果查詢在80秒內完成,則其數據處理為351GB / 80.0s = 4492MB / s)。它顯示了更多的SSD設備使數據處理吞吐量更高。另一方面,PG-Strom的結果顯示,SSD-to-GPU P2P DMA比基於文件系統+ CPU的數據處理能夠提供更高的NVMe-SSD功能。特別是,「PG-Strom SSDx1」是原始NVMe-SSD設備的結果。其數據處理吞吐量約為2.1-2.2GB / s;這幾乎相當於SSD設備的目錄規範(SeqRead中為2.2GB / s)。這些結果向我們介紹了最近的半導體創新(GPU,SSD,……)使我們能夠以比以前更便宜的成本趕上高端DWH級性能。
結論和展望
我們的挑戰表明,從應用的角度來看,一對GPU和NVMe-SSD可以像智能存儲一樣運行。GPU可以根據應用程序端的知識處理數據流,但在數據到達CPU / RAM之前有GPUDirect RDMA支持。它將數據處理吞吐量提高到了硬件的理論極限值附近,但成本比現有的高端數據庫解決方案相對較小。目前,我們的實現仍然在md-raid0配置上具有不可忽視的開銷。它需要修改。然後,我們將嘗試每個計算節點10GB / s的數據處理吞吐量。
參考文獻
[1] PG-Strom – Extension of PostgreSQL for GPU acceleration, http://strom.kaigai.gr.jp/
[2] PostgreSQL – Well used open source RDBMS, https://www.postgresql.org/
[3] Intel SSD 750 (400GB) – http://www.intel.com/content/www/us/en/solid-state-drives/solid-state-drives-750-series.html
出自:http://heterodb.com/blobs/P7130_KAIGAI_SSD2GPU_FIXTYPO.pdf