精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用CCIX進行高速緩存一致性主機到FPGA接口的評估

FPGA技術江湖 ? 來源:網絡交換FPGA ? 2023-06-29 09:56 ? 次閱讀

Chiplet技術和NoC技術目前已經成為解決摩爾定律無法延續的一種重要方法,現在的CPU芯片對外的接口已經不是普通的IO了,而是一套標準的NoC總線接口,可以與專門的NoC總線DIE(暫稱為IO DIE)利用Chiplet技術連接,多個CPU核或異構核與多個IO DIE再通過Chiplet技術進行集成,就可以做出來更大規模的芯片。正是Chiplet技術和NoC技術的出現給體系結構帶來了發展的黃金時代,異構計算和DSA(Domain-Specific Architecture,領域特定體系結構)慢慢走上舞臺,人工智能領域各種高效的架構層出不窮,甚至Nvidia最新的Hopper GPU也開始向DSA慢慢靠攏;異構計算的核心之一是互連,傳統的PCIe總線缺乏緩存一致性機制,導致內存性能低下,延遲低于可接受水平,因此出現了CCIX和CXL等協議,這些協議基于PCIe又高于PCIe,在繼承PCIe兼容性的基礎上,又提供了緩存一致性支持。在今年的FCCM會議上,德國TU Darmstadt和Reutlingen University聯合發表了一篇CCIX相關的文章,該文章使用CCIX作為FPGA與Host之間的接口,并詳細評估了CCIX與PCIe之間的差異,現將該文章譯文奉上,以饗讀者。

摘要:長期以來,大多數分立加速器都使用各代 PCI-Express 接口連接到主機系統。然而,由于缺乏對加速器和主機緩存之間一致性的支持,細粒度的交互需要頻繁的緩存刷新,甚至需要使用低效的非緩存內存區域。加速器緩存一致性互連 (CCIX) 是第一個支持緩存一致性主機加速器附件的多供應商標準,并且已經表明了即將推出的標準的能力,例如 Compute Express Link (CXL)。在我們的工作中,當基于 ARM 的主機與兩代支持 CCIX 的 FPGA 連接時,我們比較了 CCIX 與 PCIe 的使用情況。我們為訪問和地址轉換提供低級吞吐量和延遲測量,并檢查使用 CCIX 在 FPGA 加速數據庫系統中進行細粒度同步的應用級用例。我們可以證明,從 FPGA 到主機的特別小的讀取可以從 CCIX 中受益,因為其延遲比 PCIe 短約 33%。不過,對主機的小寫入延遲大約比 PCIe 高 32%,因為它們攜帶更高的一致性開銷。對于數據庫用例,即使在主機-FPGA 并行度很高的情況下,使用 CCIX 也可以保持恒定的同步延遲。

01引言

當將主機 CPU 上基于軟件的傳統處理與專用硬件加速器相結合以執行異構計算以獲得更高的性能或更高的效率時,主機和加速器之間接口的性質是一個關鍵的設計決策。

對于大多數離散加速器,例如 GPU 或 FPGA 板卡,PCI Express(簡稱:PCIe)長期以來一直是主要的接口。其性能穩步提升,最新廣泛部署的 PCIe4.0 版本達到每通道 1.97 GB/s。然而,PCIe 主要針對高吞吐量批量傳輸進行了優化。例如,如 [1] 所示,需要 128 到 256 KB 的傳輸才能達到至少 50% 的理論帶寬。對于細粒度主機-加速器交互所需的較小傳輸大小(降至緩存行大?。?,可實現的吞吐量顯著下降。雖然 PCIe 添加了諸如地址轉換服務 (ATS) / 頁面請求接口 (PRI) 之類的擴展來支持共享虛擬內存或原子操作,但大多數實現并不包含緩存一致性機制。

這使得細粒度的交互變得非常昂貴,因為在同步執行或交換小參數或結果時,主機或加速器端都需要緩存刷新,或者用于數據傳輸的內存區域必須標記為未緩存,從而減慢它們所在物理位置的處理元件(主機或加速器)的訪問速度。

為了解決這個問題,已經提出了許多還涵蓋高速緩存一致性的接口和協議。在這項工作中,我們研究了加速器緩存一致性互連 (CCIX) 的使用,這是第一個被指定為多供應商標準并跨多個不同加速器和主機架構實現的接口。一旦獲得更廣泛行業支持的 Compute Express Link (CXL) 等協議進入市場,預計在不久的將來會有進一步的改進。

我們提供了各種 CCIX 訪問場景的詳細低級測量,以及應用程序級用例。后者在運行利用近數據處理 (NDP) 的數據庫管理系統(DBMS) 時,采用 CCIX 實現 FPGA 加速器和主機之間的高性能同步。據我們所知,這是第一次為此目的使用緩存一致的加速器接口。

我們將在下一節中概述一些接口和協議,然后在第 III 節中討論 CCIX 細節,尤其是關于FPGA加速器的內容。不過,我們的主要貢獻是評估,我們在第四節中介紹了低級特征,在第五節中介紹了應用程序級用例。我們在第六節中總結并期待未來的工作。

02相關工作

a) PCIe:PCI Express [2] 是將外圍設備連接到桌面和服務器系統的標準。PCIe 通過為單個設備捆綁多個通道來擴展鏈路的帶寬。在 1.0 版中,它能夠以每通道 250 MB/s 的速度傳輸。每個后續版本的帶寬大約翻了一番,現在在 6.0 版本中達到了每通道 7.88 GB/s。目前,6.0 版本剛剛被指定,而 5.0 的硬件即將推出,4.0 是當前硬件上部署最廣泛的版本。PCIe 使用全雙工串行鏈路,采用點對點拓撲結構,在電氣鏈路層之上有兩個附加層,即數據鏈路層和事務層。這些附加層提供糾錯和基于數據包的通信。除了傳輸數據、設備初始化等基本操作外,PCIe 還支持更高級(可選)的功能,例如 PRI 和 ATS,但不包括緩存一致性。

b) CCIX:CCIX [3]、[4] 是一種高級 I/O 互連,它使兩個或多個設備能夠以一致的方式共享數據。在物理層上,它可以與PCIe 兼容(盡管它可以選擇允許更高的信令速率),并且僅在協議和端點控制器上有所不同。它由 CCIX 聯盟于 2016 年推出,該聯盟由 AMD、ARM、華為、IBM、Mellanox、高通賽靈思 [5] 創立。CCIX 已在基于 ARM 和基于 x86 的 CPU 上實現。

c) 其他共享虛擬內存 (SVM) 或緩存一致性 SVM 互連:CCIX 并不是共享虛擬內存互連的唯一競爭者。阿里巴巴集團、思科系統、戴爾/EMC、Facebook、谷歌、HPE、華為、英特爾和微軟在 2019 年基于英特爾之前的工作提出了 CXL [6]。雖然 CCIX 可以在較舊的 PCIe 連接上運行,但 CXL 最初是基于 PCIe 5.0 設計的。因此,CXL 可以達到每個通道高達 32 GT/s(即 3.94 GB/s),它提供與 CCIX 類似的功能,但使用不同的邏輯視圖。CXL 已經看到比 CCIX 更廣泛的工業應用,并有望成為未來幾年的主要解決方案。

另一種選擇是 IBM 于 2014 年推出的 Coherent Accelerator ProcessorInterface(CAPI,后來的 OpenCAPI)。雖然第一個版本也是在PCIe 之上實現的,但最近的版本是供應商特定的接口。CAPI 主要用于基于 IBM POWER 的主機,因此其范圍比CCIX 和 CXL 更有限。在 OpenCAPI 3.0(x8 通道)中,它提供 22 GB/s 的帶寬和 298/80 ns[7] 的讀/寫延遲。

雖然不是像 CCIX 那樣直接擴展 PCIe,但支持緩存一致性協議的另一個互連是 Gen-Z [8]。它每通道提供高達 56 GT/s 的速度,并允許與 PCIe 類似地組合多個通道。盡管具有令人鼓舞的功能,但尚未商業發布 Gen-Z 硬件,該技術將合并到 CXL中。

d) FPGA 上的數據庫加速:[9] 很好地概述了使用 FPGA 加速數據庫操作。最常見的方法,例如在 Centaur [10] 等最先進的解決方案中使用的方法,采用 FPGA 作為大規模過濾、排序、連接或算術計算的卸載加速器。但是,這種操作模式會帶來大量數據從 FPGA 傳輸到 FPGA 的成本,并且與這里研究的旨在避免這些傳輸的近數據處理方法不同。

03CCIX架構及在FPGA上的使用

本節將概述通用 CCIX 架構,并討論如何在兩個不同的 FPGA 系列中使用它。

A.總體概述

設備在端點連接到 CCIX。對于這里的討論,相關類型的端點是歸屬代理 (HA) 和請求代理 (RA)。HA 充當物理內存的“所有者”,它提供對物理內存的一致訪問,而 RA 通過與擁有的 HA 通信來執行對遠程內存的非本地讀取和寫入。CCIX 與 PCIe 的區別在于 RA 可以提供自己的緩存,但通過 CCIX 保持與 HA 的一致性。在 HA 側,緩存狀態的變化將通過發送適當的消息傳播到訪問的 RA。CCIX 本身使用物理地址進行訪問,但可以選擇使用現有的 PCIe 機制來允許加速器使用虛擬地址。為了執行實際的地址轉換,CCIX 依賴于 PCIe ATS 機制,這也是 CCIX 附加的加速器也在不同的 PCIe 虛擬通道 (VC) 上保持與主機的傳統 PCIe 連接的原因之一。在包括網格和交換層次結構在內的各種 CCIX 拓撲中,我們采用了一種簡單的拓撲,它依賴于主機和加速器之間的直接連接。此外,由于硬件接口級別支持所有必需的操作,包括地址轉換和一致性,因此主機上不需要特殊的設備驅動程序或自定義固件。

6de0e286-1601-11ee-962d-dac502259ad0.png

圖1 中間 (A):具有 CCIX 功能的主機的架構,充當 HA,附加 CCIX 的加速器充當 RA。 左 (B):在 Xilinx UltraScale+ HBM 器件上實現CCIX-RA 的 SoC。 右 (C):在 Versal ACAP 設備上實現 CCIX-RA 的 SoC。

圖 1-(A) 顯示了支持 CCIX 設備的高速緩存一致性主機 FPGA 附件的高級架構。此框圖的頂部是主機,底部是加速器,兩者都通過支持 CCIX 的 PCIe 接口連接。CCIX 在 PCIe 事務層上使用多個VC,在同一個 PCIe 插槽上傳輸 PCIe 和 CCIX 流量。在支持 CCIX 的插槽上,事務層對 PCIe 數據包使用 VC0,對 CCIX 數據包使用 VC1,共享相同的物理層和鏈路層。但是,CCIX 可以選擇使用擴展速度模式 (ESM),這會增加信令速率。對于我們使用的 PCIe 4.0 附件,ESM 將速率從 16 GT/s 提高到 25 GT/s,每次傳輸 128 個有效負載位。如果雙方(即 RA 和 HA)都支持,ESM 模式將在引導時的 CCIX 發現階段自動啟用。

B.使用 Xilinx XDMA的 FPGA RA

Xilinx Virtex UltraScale+ HBM 器件支持 CCIX,但必須以擴展 XDMA IP 塊的形式將 CCIX 功能實現為可重新配置的“軟”邏輯。如圖 1-(B) 所示,關鍵模塊包括一個支持 CCIX 的 PCIe 控制器、一個 ATS 交換機和一個 PCIe-AXIMM 橋。ATS 開關用于通過 PCIe VC0 將虛擬到物理地址轉換請求插入到常規 PCIe 通信中,然后檢索它們的結果。它還包括一個小的地址轉換緩存 (ATC) 來緩沖現有的轉換結果,以避免對已知映射進行相對昂貴的地址轉換。AXIMM 橋提供主機和加速器之間的內存映射通信(主要是控制平面流量)。對于數據平面訪問,加速器采用了使用賽靈思系統緩存 IP 塊 [11] 實現的片上緩存,該緩存又使用 CCIX 流協議與 CCIX 一致性機制交互。此緩存中的未命中成為遠程內存訪問,通過 CCIX 轉發到 HA 以檢索數據。反過來,HA 確保了 FPGA 端 SC 與主機端緩存的一致性。

C.使用 Xilinx CPM 的 FPGA RA

最新的 Xilinx Versal 器件在其芯片中優化了對 CCIX 的“強化”支持。具體來說,一致性和 PCIe 模塊 (CPM) IP 塊 [12] 包括一個集成的 L2 緩存,使用ARM的CHI協議與芯片范圍內的一致性網狀網絡通信,后者又使用CXS 與支持 CCIX 的 PCIe 控制器接口。與之前在UltraScale+設備中一樣,兩個 PCIeVC 用于分離在同一PCIe插槽上運行的PCIe和CCIX流量。我們的設置只需要CPM模塊提供的兩個支持CCIX的PCIe 控制器之一。ATS Switch 和 AXIMM 塊與以前一樣使用。

D. 地址翻譯

在系統緩存 (SC) 收到來自加速器的讀/寫請求后,它會檢查 ATC 的虛擬到物理映射。如果 SC 在 ATC 中沒有找到有效的轉換(即ATC未命中),它會通過 VC0 使用 PCIe ATS 功能向主機請求轉換。系統緩存上的 ATS 接口使用請求完成協議 [13] 通過四個流接口提供翻譯服務:傳入完成者請求 (CQ)、傳出完成者完成 (CC)、傳出請求者請求 (RQ) 和傳入請求者完成(RC)。來自主機的回復(例如,保留物理地址)使用相同的機制傳遞回 FPGA。

E. CCIX 時序模型

CCIX 事務的平均延遲如公式 1 所示。每個事務的延遲取決于ATC中可用的有效緩存地址轉換的概率與ATS必須從主機請求新轉換的概率,以及所請求的數據是否存在于本地片上緩存中。必須從遠程 HA 請求。請注意,使用 ESM 時,物理 CCIX 延遲可能比物理 PCIe 延遲更短。

6e2c705c-1601-11ee-962d-dac502259ad0.png

04實驗設置和評估

我們在真實硬件中進行實際評估,即使用支持 CCIX 的 ARM N1-SDP 平臺作為主機,使用分別具有UltraScale+ HBM 和 Versal ACAP FPGA Xilinx 的Alveo U280 (AU280) 和 VCK5000 CCIX附加板作為加速器。表I顯示了不同設備的規格

6e7eff84-1601-11ee-962d-dac502259ad0.png

A. 測量設置

稍后描述的所有低級基準測試都使用相同的基本測量方法,該方法由三個主要組件組成:軟件應用程序編程接口 (API)、硬件模塊和上述片上 CCIX 組件。軟件 API 在主機上運行,負責執行基準測試并讀取硬件分析的 CCIX 延遲特性。軟件 API 有四個主要任務:a) 在主機內存中分配緩沖區,b) 初始化硬件模塊以訪問測量,c) 檢索硬件模塊記錄的延遲數據,以及 d) 分析結果。軟件 API 的偽代碼如算法 1 所示。請注意,我們將地址隨機化以強制 SC 未命中,從而確保我們感興趣的 CCIX 傳輸實際發生。

6eb0ed50-1601-11ee-962d-dac502259ad0.png

稱為 CCIX 流量生成器 (CTG) 的硬件模塊使用獲取/存儲方法來捕獲 CCIX延遲。該模塊接受來自主機中軟件API的 startTrans 調用的請求(包括類型、虛擬地址和長度)。在 API 請求之后,CTG 通過 AXI4-MM 接口向 SC 創建請求,SC 執行 CCIX RA 的角色,然后計算響應到達 SC 的時間。然后可以通過軟件 API 讀取捕獲的時序。請注意,我們僅在其所有數據到達后才認為事務完成。

表II 顯示了我們檢查的簡單 CCIX-RA 所需的 FPGA 資源。如圖 1-(C) 所示,VCK5000 使用硬化 CPM 模塊形式的 PCIe 控制器,但仍需要一些額外的“軟”邏輯來支持 PCIe 傳輸和 ATS 轉換。

6ef2685c-1601-11ee-962d-dac502259ad0.png

B.Low-Level實驗評估

實驗 1:CCIX 與 PCIe - 延遲和吞吐量。

在這個實驗中,我們比較了細粒度交互中相對較小的塊大?。?2B 到 16KiB)的 CCIX 和 PCIe 傳輸延遲(并且比 [1] 中檢查的 PCIe 批量傳輸要小得多)。開源 TaPaSCo[14] 框架用于測試 DMA 傳輸。在這個實驗中,通過確保地址轉換已經存在于ATC中來消除 ATS 延遲。圖 2-(A) 和圖 2-(B) 分別顯示了 PCIe 和 CCIX 流量的讀取和寫入延遲。對于 PCIe-DMA 傳輸,我們使用TaPaSCo 的高性能 DMA 引擎,通過設置不同的數據傳輸大小,直接使用主機內存數據的物理地址。對于 CCIX 測量,在主機內存中分配一個緩沖區,并將其虛擬地址傳遞給 CTG 模塊。

6f231f88-1601-11ee-962d-dac502259ad0.png

圖2 比較 AU280 和 VCK5000 上的 CCIX 和 PCIe 讀/寫訪問延遲

我們的評估表明,在AU280和VCK5000上,與 PCIe-DMA 傳輸相比,CCIX 傳輸具有更好的主機讀取延遲,只要傳輸的數據短于 4 KiB。在這兩種情況下,加速都是由于 CCIX 使用的優化數據包協議。但是,當使用優化的數據包協議從 FPGA 寫入主機存儲器時,CCIX 會產生比 PCIe 傳輸更長的延遲,因為這些寫入參與了一致性機制。我們的吞吐量測量顯示,對于 1KiB、16KiB 和 32KiB 的數據集大小,CCIX 的讀取吞吐量相對于 PCIe 分別為 3.3x、1.29x、0.87x。讀取和寫入吞吐量的其他數據點顯示在表 III 中。

6f501e02-1601-11ee-962d-dac502259ad0.png

實驗 2:ATS 的成本。

透明地解析虛擬地址的能力大大簡化了加速器設計和主機接口。但是,該操作可能代價高昂,因為如果請求的轉換不存在于主機 IOMMU 的 TLB 之一中,它可能會觸發主機上緩慢的完整頁表遍歷。在實驗 1 中,我們檢查了不需要地址轉換 (noATS) 的訪問。但是為了檢查 ATS 的成本,我們現在構建了兩個訪問場景,如圖 3 所示:在第一個場景中(使用 ATS),我們強制在 SC 和 ATC 中未命中,因此總是會產生 ATS 開銷。在第二個(noATS)中,我們允許 ATC 命中,但仍然強制 SC 未命中,以便實際發生 CCIX 事務。結果表明,特別是對于較小的傳輸,ATS 開銷可能很大,導致 ATC 未命中時的訪問延遲增加三倍。但是,對于 32KB 及以上的傳輸,傳輸時間開始主導 ATS 開銷。

6fa923f8-1601-11ee-962d-dac502259ad0.png

圖3 ATS 對從 Alveo U280 卡和 VCK5000 上的 CTG 模塊隨機訪問 RA 模塊的 CCIX 訪問延遲的影響

為了進一步研究 ATS 延遲,我們可以利用整個 ATS 機制在 SoC 的 ATS Switch 塊中實現的事實。因此,我們可以監控該模塊的請求/回復接口,以捕獲 ATS 操作本身的確切請求-響應時間。圖4顯示了 64 B(高速緩存行大小)、128 B 和 4 KiB 塊的 CCIX 訪問延遲。由于 Linux Page Size 為 4KiB,因此這些請求每個只需要一個 ATS 轉換。通過增加請求的大小,需要更多的翻譯。對主機內存中分配的緩沖區的初始訪問具有最長的延遲。以后的順序訪問具有較少的 ATS 開銷,即使在 4 KiB 跨到另一個頁面時也是如此。我們假設這是由于主機 IOMMU 對此處使用的順序訪問執行了預翻譯。對于重復 64 B 讀取的情況,通過比較主機 IOMMU 響應 ATS 請求所需的延遲(≈ 617 ns,在 ATS 交換機處捕獲),以及在 SC 未命中情況下讀取 64B 的已知延遲(≈ 700 ns,來自圖 3-(A)),ATC 本身似乎需要 (2453 - 617 - 700 ≈ 1136 ns) 進行操作。

6ffe899c-1601-11ee-962d-dac502259ad0.png

圖4 比較 Alveo U280 卡上 CCIX-RA 的讀/寫延遲和 ATS 延遲

改善 CCIX 流量延遲的一種方法是減輕地址轉換的影響。例如,這可以通過使用Linux大頁面支持來實現。這將導致更大的頁面,進而需要新翻譯的頁面邊界交叉更少。N1-SDP平臺在啟動時確實支持不同大小(即 64KB、2MB、32MB 和 1GB)的巨頁。我們在數據庫用例(第 V 節)中采用了這種方法來提高性能。

實驗 3:數據局部性。

CCIX 的使用允許加速器使用自己的緩存,確信它們將始終與主機保持一致。為了展示兩個 SoC 的最佳情況基線性能,我們評估了保證所有訪問都在設備上緩存中命中的情況,在圖 5 中稱為本地數據,并測量這些命中的延遲。為了比較,我們還展示了覆蓋緩存未命中的數據遠程案例。AU280 中更簡單的緩存層次結構實現了比 VCK5000 上的二級緩存(寫入 ≈150 ns,讀取 ≈ 170 ns)更小的延遲(寫入 ≈ 80 ns,讀取 ≈ 100 ns),以實現更小的傳輸大小。但是,對于較大的傳輸,兩級層次結構變得更快。

70453658-1601-11ee-962d-dac502259ad0.png

圖5 數據局部性對 AU280 和 VCK5000 的 CCIX 延遲的影響

實驗 4:一致性努力。

在這種情況下,主機上的應用程序分配一個共享緩沖區,主機和加速器同時訪問和修改該緩沖區。這些并發訪問/修改增加了一致性工作,進而增加了訪問延遲。大頁面用于避免 ATS 開銷。如算法 2 所述,硬件 CTG 和軟件 API 同時修改共享緩沖區中的緩存行。最初,我們使用 2 MiB 的緩沖區進行測量,然后分別縮小到 512 KiB、128 KiB 和 32 KiB,以增加爭用程度,從而增加保持一致性所需的努力。緩沖區的這種縮小顯示在圖 6 左側的 Y 軸上。對于這些共享緩沖區大小中的每一個,我們使用單個 CPU 內核和 FPGA 從兩個主機對緩沖區中的隨機地址執行 1024 次訪問,并跟蹤它們的延遲。正如預期的那樣,隨著訪問次數的增加以及緩沖區大小的縮小,爭用都會增加。在這兩種情況下,必須解決的一致性沖突的可能性都會增加。有趣的是,額外的一致性工作主要影響主機的訪問,FPGA 端訪問的延遲幾乎保持不變。這在圖 6 的右側進行了更詳細的檢查,該圖繪制了訪問時間的直方圖,現在為 20,000 次訪問,對于 32 KiB 和 2 MiB 共享緩沖區大小。雖然時間更長,但來自 FPGA 端的遠程訪問比本地主機端訪問的“抖動”(分布更窄)要少得多。請注意,FPGA 端訪問的非常短的異常值實際上是 SC 中的命中,其概率在較小的 32 KiB 中大于在較大的共享緩沖區中。在這個實驗中,主機上只有一個內核訪問共享緩沖區。為了進一步調查,我們使用主機上的多個內核來修改和訪問共享緩沖區。我們的評估表明,由于更多的緩存命中,將 32 KiB 地址范圍的內核數量從 1 個增加到 3 個實際上將本地主機端平均訪問延遲從 333 ns 縮短到 235 ns。另一方面,由于更多的緩存未命中,設備訪問延遲從 674 ns 增長到 741 ns。對于更大的內存范圍,訪問時間將再次保持幾乎恒定。

709164f6-1601-11ee-962d-dac502259ad0.png

70d5284e-1601-11ee-962d-dac502259ad0.png

圖6 使用單個 CPU 內核增加主機-FPGA 訪問爭用的一致性工作。左 (A):在從 2 MiB 縮小到 32 KiB 的地址范圍內同時進行1024 次隨機訪問。右 (B):直方圖顯示兩個地址范圍的訪問延遲“抖動”。

實驗 5:原子操作。

CCIX 還能夠通過支持AtomicStore、AtomicLoad、AtomicSwap 和AtomicCompare 操作在 RA(例如 AU280)和 HA(例如 N1-SDP)之間執行原子事務。它們在RA 端構建為 AXI4-MM 請求的多步序列。我們的評估表明,從主機啟動的 AtomicCompare 需要 50 ns,而從加速器啟動的 AtomicCompare 需要 740-800 ns。

05數據庫應用

在這些詳細的低級別測量之后,我們現在檢查 CCIX 在應用程序級別的使用,用于需要細粒度主機加速器交互的場景。作為一個現實場景,我們選擇了數據庫加速領域。所研究的系統是 neoDBMS(圖 7)[15]、[16],一種基于 PostgreSQL 的 DBMS,使用 FPGA 加速的 NDP。以這種方式,計算被移到更靠近存儲(例如,閃存、NVM)的地方,假設存儲直接連接到 加速器。使用 NDP 可減少數據傳輸并提高整體系統性能。然而,數據庫應用程序中的 NDP 面臨一些挑戰,例如同步和事務一致性。在數據庫中,NDP模式下的事務有兩種,只讀NDP和更新NDP。在只讀NDP中,為了使事務免于干預,每個事務都針對自己的快照進行操作。這需要首先收集主機主內存中的所有 DBMS 更新,然后在每次 NDP 調用 [15] 時將更改的 DBMS 狀態傳送到加速器。

713ed816-1601-11ee-962d-dac502259ad0.png

圖7 具有共享鎖表的 neoDBMS 架構

在更新 NDP 中,由于主機和加速器對同一記錄的并發修改,使事務免干預具有挑戰性。最初,相同的當前版本記錄存在于加速器和 DBMS 的內存中。如果兩者同時創建記錄的新后繼版本,則會導致兩個當前版本分支,從而導致無法解決的不一致,稱為寫入/寫入沖突。減輕這種不一致性的一種方法是在執行之前以獨占方式鎖定整個數據庫表,但這會嚴重限制并發性。另一種方法是使用支持記錄級鎖定的細粒度緩存一致性共享鎖表,從而可以鎖定每條記錄的版本,以同步 DBMS 和加速器之間的修改。

A. 共享鎖表

為了在 DBMS 和加速器之間實現一致且無干預的更新 NDP 操作,需要低延遲的緩存一致性失效和同步機制。為了處理上述neoDBMS中的寫/寫沖突,我們通過采用基于CCIX的解決方案來實現共享鎖表。如果沒有 CCIX,同步的成本會高得多,并且很可能會浪費 NDP 處理所獲得的任何性能增益。為此,我們修改后的 neoDBMS 在主機內存中分配了一個共享鎖表,主機和 FPGA 雙方在更新記錄之前請求鎖定記錄。neoDBMS 依靠 Linux 內核中的大頁面(即HugeTLB Page)支持來請求物理上連續的內存頁面,用于分配鎖表并確保它們被固定。由于鎖表的大小相對較小,并且在 DBMS 的整個運行時間內都非常頻繁地訪問條目,因此將表固定在物理主機內存中是有效的。

通過在位于哈希桶中的隊列中插入一個條目來執行獲取行級鎖。因此,隊列可以同時包含多個鎖條目。通過對記錄版本標識符應用哈希函數來計算存儲桶位置。圖 8 顯示了兩個并發進程的示例,一個在主機上,一個在設備上,請求相同記錄版本(即 Rv2)的鎖。對記錄版本標識符應用哈希函數會導致兩個進程嘗試將鎖插入位于同一哈希桶中的同一鎖定隊列中,此處編號為 2。在此示例中,首先,設備請求鎖并立即獲取鎖.第一個槽代表當前持有鎖并且允許修改數據的進程。稍后,主機嘗試也請求相同的鎖。由于鎖隊列的第一個槽已經被占用,主機無法獲取鎖,并將其請求附加到鎖隊列的尾部并等待。一旦設備完成,它通過將整個隊列向左移動來釋放鎖,將現在位于隊列頭的鎖授予下一個進程。然后主機獲取鎖并且可以繼續執行。

716e474a-1601-11ee-962d-dac502259ad0.png

圖8 共享鎖表中的單個哈希桶(用于哈希鍵 2)的示例,來自主機和設備的并發鎖請求在桶中排隊等待相同的記錄版本。

在 FPGA 上,已經開發了一個 Bluespec 模塊來處理來自NDP-update 模塊的鎖定請求。該模塊在提供的虛擬地址上創建一個哈希表組織的鎖表。分配的緩沖區地址和鎖表由 neoDBMS 指定。模塊通過流接口接收/發送鎖定請求/響應。收到鎖請求后,模塊會創建 CCIX 原子比較和交換 (CAS) 操作來放置鎖并更新隊列,然后AU280 上的 CCIX-RA 將其發送給主機。通過緩存一致性共享鎖表和所采用的CCIX原子操作,我們實現了DBMS和FPGA之間數據的細粒度協同處理。

B. 評估

為了評估基于 CCIX 的同步機制的性能,我們測量了在 N1-SDP 平臺和基于 AU280 的加速器上運行的 neoDBMS 的端到端鎖定請求延遲,如圖9 所示。由于共享鎖表的大小大于Linux 4KiB 頁面,因此訪問會產生較長的 ATS 開銷的風險很高。這已經通過使用大頁面來避免。硬件模塊執行一個獨立于實際共享鎖操作的請求,以通過對大頁面的物理轉換來“預熱”ATC。然后,所有實際的鎖定請求都會有 ATC 命中,并且不會受到 ATS 開銷的影響。

71b699b4-1601-11ee-962d-dac502259ad0.png

圖9 并行訪問共享鎖表的影響

在實驗中,neoDBMS(在單個 CPU 內核上)和加速器都會不斷地創建鎖請求,而我們在另一側增加了爭用。在低競爭下,neoDBMS 能夠在 80 ns 內鎖定本地駐留鎖表中的記錄版本。在高競爭下,neoDBMS 的本地鎖定延遲增加到200-250 ns。從加速器鎖定當然需要更長的時間,因為遠程訪問是對主機內存執行的,但觀察到的 750 到 800 ns 的延遲是 CCIX 原子 CAS 操作的典型延遲(參見上面的實驗 5),最重要的是,不受競爭增加的影響。雖然這證實了上面實驗 4 中已經觀察到的行為,但有趣的是,它不僅適用于實驗 4 的簡單讀/寫操作,還適用于此處使用的更復雜的原子 CAS 訪問。

06結論

我們研究了使用 CCIX 在主機和基于 FPGA 的加速器之間進行細粒度交互。在我們的結果中,我們表明,尤其是對于較小的傳輸塊大小,與 PCIe 相比,可以實現更短的延遲。此外,地址轉換與 CCIX 操作的透明集成支持主機和 FPGA 加速器之間的緩存一致共享虛擬內存 (ccSVM) 編程模型,該模型傳統上僅適用于高度專業化的平臺,例如 Convey HC 級機器。對于數據庫用例,可以看出 CCIX 遠程訪問雖然比本地訪問慢,但即使對鎖表等共享數據結構的更高程度的競爭訪問也不會受到影響。

從我們的結果也可以看出,優化潛力存在于硬件/軟件協議棧的多個級別。例如,我們已經演示了使用大頁面來減少地址轉換開銷。還可以在 SoC 中插入更有效的特定于應用程序的翻譯機制,因為所有翻譯都發生在 ATSSwitch 模塊中,該模塊具有良好記錄的接口,可以用自定義版本替換。這可以被利用,例如,在 Sec.V 的 DBMS 用例中,即使對于超過 ATC 容量的隨機訪問模式,也可以完全避免 ATS。ATC 本身似乎也有優化潛力,但這需要更大的工程努力,因為它與供應商提供的系統黑盒部分更緊密地集成在一起。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1620

    文章

    21510

    瀏覽量

    598942
  • 接口
    +關注

    關注

    33

    文章

    8257

    瀏覽量

    149959
  • 加速器
    +關注

    關注

    2

    文章

    785

    瀏覽量

    37151
  • chiplet
    +關注

    關注

    6

    文章

    404

    瀏覽量

    12513
收藏 人收藏

    評論

    相關推薦

    如何解決數據庫與緩存一致性

    緩存一致性 每次逢年過節的時候搶票非常艱難,放票的時候那么多人同時去搶票,如果所有人查詢、購票等都去訪問數據庫,那數據庫的壓力得有多大,這時候很多都會引入緩存, 把車票信息放入緩存,這
    的頭像 發表于 09-25 15:25 ?909次閱讀
    如何解決數據庫與<b class='flag-5'>緩存</b><b class='flag-5'>一致性</b>

    高速緩存/海量緩存的設計實現

    /D轉換結果并進行處理。高速緩存IS61LV25616的數據總線方面連到FPGA以便在采樣期間接受復用的A/D轉換結果;方面則通過三態門
    發表于 12-04 15:59

    改進的基于目錄的Cache一致性協議

    介紹幾種典型目錄一致性協議并分析它們的優缺點。在綜合全映射目錄和有限目錄優點的基礎上,通過在存儲器層上增加個存儲器高速緩存(Cache)層的方式,提出并討論種改進后
    發表于 04-02 09:05 ?32次下載

    C64x+ DSP高速緩存一致性分析與維護

    C64x+ DSP高速緩存一致性分析與維護 高速緩存(CACHE)作為內核和低速存儲器之間的橋梁,基于代碼和數據的時間和空間相關,以塊為單位由硬件控制器自動加載內核所需
    發表于 01-04 12:00 ?1395次閱讀
    C64x+ DSP<b class='flag-5'>高速緩存</b><b class='flag-5'>一致性</b>分析與維護

    基于C64x+ DSP高速緩存一致性分析

    的運行機制,內核始終能夠得到存儲器中最新的數據。但是當有其它可以更改存儲器內容的部件存在時,例如不需要內核干預的直接數據存取(DMA)引擎,就可能出現由于CACHE的存在而導致內核或者DMA不能夠得到最新數據的現象,也就是CACHE一致性的問題
    發表于 10-25 16:16 ?0次下載
    基于C64x+ DSP<b class='flag-5'>高速緩存</b><b class='flag-5'>一致性</b>分析

    加速器一致性接口

    提供異步緩存一致性直接訪問PS的入口。處理器可以標記ACP上的傳輸為一致性或非一致性。PL端的AXI主機通過ARUSERS[1:0]指示是否
    發表于 11-17 15:04 ?3474次閱讀

    Cache一致性協議優化研究

    問題的由來.總結了多核時代高速緩存一致性協議設計的關鍵問題,綜述了近年來學術界對一致性的研究.從程序訪存行為模式、目錄組織結構、一致性粒度、一致性
    發表于 12-30 15:04 ?0次下載
    Cache<b class='flag-5'>一致性</b>協議優化研究

    自主駕駛系統將使用緩存一致性互連IP和非一致性互連IP

    代ASIL B(D)自主駕駛系統將使用符合ISO 26262標準的緩存一致性互連IP和非一致性互連IP來實現。 美國加利福尼亞州坎貝爾2019年4月26日消息—Arteris IP
    的頭像 發表于 05-09 17:13 ?3116次閱讀

    談CPU緩存緩存一致性

    左圖為最簡單的高速緩存的配置,數據的讀取和存儲都經過高速緩存,CPU核心與高速緩存條特殊的快速通道;主存與高速緩存都連在系統總線上(BU
    的頭像 發表于 05-03 17:51 ?2088次閱讀
    談<b class='flag-5'>一</b>談CPU<b class='flag-5'>緩存</b>和<b class='flag-5'>緩存</b><b class='flag-5'>一致性</b>

    管理基于Cortex?-M7的MCU的高速緩存一致性

    本文檔概述了不同場景下的高速緩存一致性問題,并就如何管理或避免高速緩存一致性問題提供了些方法建議。
    發表于 04-01 10:12 ?5次下載
    管理基于Cortex?-M7的MCU的<b class='flag-5'>高速緩存</b><b class='flag-5'>一致性</b>

    使用MPLAB Harmony v3基于PIC32MZ MCU在運行時使用高速緩存維護操作處理高速緩存一致性問題

    電子發燒友網站提供《使用MPLAB Harmony v3基于PIC32MZ MCU在運行時使用高速緩存維護操作處理高速緩存一致性問題.pdf》資料免費下載
    發表于 09-19 16:28 ?0次下載
    使用MPLAB Harmony v3基于PIC32MZ MCU在運行時使用<b class='flag-5'>高速緩存</b>維護操作處理<b class='flag-5'>高速緩存</b><b class='flag-5'>一致性</b>問題

    利用MPLAB Harmony v3在Cortex-M7 MCU上在運行時使用高速緩存維護操作處理高速緩存一致性問題

    電子發燒友網站提供《利用MPLAB Harmony v3在Cortex-M7 MCU上在運行時使用高速緩存維護操作處理高速緩存一致性問題.pdf》資料免費下載
    發表于 09-20 11:40 ?0次下載
    利用MPLAB Harmony v3在Cortex-M7 MCU上在運行時使用<b class='flag-5'>高速緩存</b>維護操作處理<b class='flag-5'>高速緩存</b><b class='flag-5'>一致性</b>問題

    管理基于Cortex-M7的MCU的高速緩存一致性

    電子發燒友網站提供《管理基于Cortex-M7的MCU的高速緩存一致性.pdf》資料免費下載
    發表于 09-25 10:11 ?0次下載
    管理基于Cortex-M7的MCU的<b class='flag-5'>高速緩存</b><b class='flag-5'>一致性</b>

    如何保證緩存一致性

    “ 本文的參考文章是2022年HOT 34上Intel Rob Blakenship關于CXL緩存一致性篇介紹?!?/div>
    的頭像 發表于 10-19 17:42 ?856次閱讀
    如何保證<b class='flag-5'>緩存</b><b class='flag-5'>一致性</b>

    Redis緩存與Mysql如何保證一致性

    基本流程就是客戶端A請求,先去刪除緩存,然后將數據寫入數據庫,此時客戶端B查詢先去查詢緩存,緩存沒有返回,去查數據庫,此時還沒有完成主從同步,拿到是從庫的舊數據,然后將舊數據進行
    的頭像 發表于 12-02 14:23 ?817次閱讀
    Redis<b class='flag-5'>緩存</b>與Mysql如何保證<b class='flag-5'>一致性</b>?