DOCA介紹

本文分為兩個部分:

  1. DOCA及BlueField介紹
  2. 如何運行DOCA應用,這里以DNS_Filter為例子做大致介紹。

DOCA及BlueField介紹:

現代企業數據中心是軟件定義的、完全可編程的基礎設施,旨在服務于跨云、核心和邊緣環境的高度分布式應用工作負載。盡管軟件定義的數據中心提供了類似云的靈活性和敏捷性,但它們往往會消耗大量的CPU資源,進而降低服務器和數據中心的整體效率。通過利用DPU(Data Processing Uint)和DOCA(Data Center Infrastructure on a Chip Architecture),可以實現硬件加速的軟件定義基礎設施,從而顯著提升數據中心的性能和靈活性。

DPU被定義為一種可編程的網絡系統級芯片(SoC),它集成了從網絡端口到PCI Express(PCIe)接口的所有主要功能。NVIDIA于2020年進入DPU市場,并推出了BlueField系列產品。已發布的BlueField-2能夠作為智能網卡和存儲控制器使用,支持高達200Gbps的以太網端口和高帶寬的PCIe接口。BlueField-3于2022年上市,而更強大的BlueField-4預計將在2024年推出。????

圖1

不同于傳統的服務器處理器,DPU(Data Processing Uint)專為網絡數據包處理而設計。盡管其架構有所不同,但大多數DPU都包含一個可編程的數據平面,以及用于控制平面和應用代碼的CPU核心。與使用CPU核心相比,DPU的專用數據路徑不僅更高效,而且性能顯著提升。

如圖所示,BlueField架構本質上將網卡子系統(基于ConnectX)與可編程數據路徑、用于加密、壓縮和正則表達式的硬件加速器,以及用于控制平面的Arm控制器融為一體。在BlueField-3中,包含16個核心的可編程包處理器能夠處理多達256個線程,實現了在Arm核心上零負載的數據路徑處理。在許多應用中,數據路徑可以自主處理已知的網絡流量,而Arm核心則負責處理新流量等異常情況及控制平面功能。

圖2

盡管DPU具備顯著的優勢,但由于需要用戶編寫底層代碼,其早期應用僅限于少數用戶群體。為了解決這一限制,并推動獨立軟件供應商(ISV)、服務提供商和學術界更廣泛地采用DPU,NVIDIA開發了DOCA(Data Center On A Chip Architecture)。

DOCA是一個由庫文件、運行時組件和服務組成的框架,構建在一套經過驗證的驅動程序之上。其中一些庫與開源項目相關,而另一些則是NVIDIA獨有的。正如CUDA為GPU編程提供了抽象化一樣,DOCA為DPU編程提供了更高級別的抽象化。

圖3

如上圖所示,DOCA軟件棧包括驅動程序、庫、服務代理和參考應用。NVIDIA 提供的軟件棧包含兩部分內容,一部分是面向開發者的 DOCA SDK,另一部分是用于實現開箱即用部署的 DOCA Runtime 軟件。

從軟件棧上層看,流量網關庫能夠實現一個建立在數據路徑 SFT 上的硬件加速網關,為過濾和分發網絡流量的網關應用提供了更高級別的抽象化。在存儲方面,DOCA 支持用戶態庫開源 SPDK。在 HPC 和 AI 方面,DOCA 初期加入了作為運行時組件的統一集合通信(UCC)庫,在未來版本中還將加入 SDK 支持。

DOCA應用體驗:

DNS過濾應用程序被設計為在BlueField-2 DPU實例上運行。DPU攔截來自網絡的流量(入站流量),并根據流量分類來決定是將其傳遞給Arm處理器(根據列表類型過濾接收到的數據包),還是通過發夾轉發到出口端口,整個系統設計如圖4所示。

圖4

DNS過濾器運行在DOCA Flow之上,用于對DNS請求進行分類。然后,它利用硬件正則表達式引擎,根據域名列表規則(編譯后的正則表達式)查找匹配項。

5

以下是DNS過濾應用程序的工作流程:

  1. 用戶將正則表達式列表規則文件編譯成rof2.binary文件。
  2. 正則表達式二進制規則文件被加載到正則表達式引擎中。
  3. 通過管道識別入站數據包類型,這些管道封裝了流規則匹配模式和動作。
  4. DNS過濾應用程序為每個端口構建三個管道:DNS丟棄管道、DNS轉發管道和發夾管道。除了丟棄管道外,每個管道只包含一個條目。丟棄管道在運行時包含許多條目,每個條目代表一個被丟棄的數據包。在應用程序初始化和配置之后,接受任何流量之前,管道是空的。
  5. 丟棄管道匹配已經被阻止的DNS數據包以丟棄它們。發夾管道匹配每個數據包(無遺漏)。丟棄管道作為根管道,DNS轉發管道作為丟棄管道的轉發未命中組件,發夾管道作為DNS轉發管道的轉發未命中組件。

操作流程:

1.解析應用程序參數。

doca_argp_init();

a).初始化arg解析器資源。

b).注冊DOCA通用旗幟。

Register_dns_filter_params();

c).注冊DNS過濾器應用程序標志。

doca_argp_start();

d).解析DPDK標志并調用rte_eal_init()函數。

e)解析應用程序標記。

2.DPDK初始化。

dpdk_init();

a).初始化DPDK端口,包括mempool分配。

b).如果需要,可以初始化發夾隊列。

c).將每個端口的發夾隊列綁定到其對等端口。

3.DNS過濾器初始化。

dns_filter_init();

a).DOCA流量和DOCA流量端口初始化。

b).為兩個端口創建發夾管道。該管道包括一個與每種類型的數據包匹配的條目(無遺漏), 并通過發夾將其轉發到出口端口。

c).為兩個端口創建DNS轉發管道。構建的管道有一個條目用于匹配DNS流量并將其?? 轉發到Arm。此外,如果DNS條目不匹配(例如,對于每個非DNS包,包將被轉發), 則使用hairpin管道進行轉發。

d).創建掉包管道,作為兩個端口的根管道。開始時,管道是空的。但隨著應用程序的 運行,它會添加掉包的條目。此外,DNS轉發管道用于轉發,如果掉包管道條目不匹 配。

e).DOCA RegEx初始化。

f).用已編譯的規則文件配置RegEx。

4.處理和過濾DNS包。

dns_worker_lcores_run()

a).Arm上接收到的所有數據包都是DNS數據包,而非DNS數??? 據包則通過使用允許? 過濾DNS數據包的發夾轉發到出口端口。

b).提取您所查詢的DNS。

c).將DNS查詢作為作業發送到RegEx引擎:

d).根據RegEx響應篩選DNS包。

e).如果需要,可通過向DNS刪除管道添加條目來阻止數據包。

5.DNS過濾器被銷毀。

dns filter destroy();

a).釋放所有分配的資源。

b).釋放提供所有DOCA RegEx資源。

6.Arg解析器銷毀。

doca_argp_destroy()

a).釋放DPDK資源。

具體步驟:DNS過濾器示例二進制文件位置/opt/mellanox/doca/applications/ dns_filter/bin/doca_dns_filter,

構建所有應用程序:

打開終端并導航到應用程序目錄:

cd /opt/mellanox/doca/applications/

使用Meson構建系統進行配置:

meson build

使用Ninja構建所有應用程序:

ninja -C build

如果僅構建DNS過濾器應用程序:

編輯構建選項:/opt/mellanox/doca/applications/meson_option.txt。

將 enable_all_applications 設置為 false。

將 enable_dns_filter 設置為 true。

運行與步驟2相同的命令來配置和構建:

meson build

ninja -C build

注意:

構建成功后,doca_dns_filter二進制文件將創建在./build/dns_filter/src/目錄下。

應用實例:

這里使用文本文件指定列表來添加url,并創建簽名數據庫將其添加到dpi引擎,使用dpdk庫中的狀態表模塊可以識別分類入口數據流量。

6

7

現在讓我們將此數據包從對端服務器發送到 DPU

8

我們可以看到,DPU 已將數據包識別為匹配簽名ID 1

9

當嘗試訪問被阻止的 URL時,將會被識別和過濾流量,隨后的數據包將被丟棄。主機完全不知道該過程并于此過程隔離。

10

總結一下DNS過濾器應用程序的包處理流程:

  1. 每個接收到的數據包首先與丟棄管道進行匹配檢查。如果匹配成功,則數據包被丟棄。
  2. 如果在丟棄管道中沒有匹配(未命中),則數據包會被檢查與DNS轉發管道進行匹配。如果在DNS轉發管道中匹配成功,數據包將被轉發到處理器。
  3. 如果在DNS轉發管道中仍然沒有匹配(再次未命中),數據包將被轉發到發夾管道進行匹配處理。

這種處理流程確保了數據包根據預定義的規則進行分類和處理,優化了DNS流量的管理和安全性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77948.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77948.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77948.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mybatis mapper.xml中使用枚舉

重點:application.propertis配置類 #TypeEnumHandler 這個類的包名,不是全路徑 mybatis.type-handlers-packagecom.fan.test.handler兩個枚舉類: public enum StatusEnum {DELETED(0),ACTIVE(1);private final int code;StatusEnum(int cod…

鴻蒙生態:鴻蒙生態校園行心得

(個人觀點,僅供參考) 兄弟們,今天來淺淺聊一聊這次的設立在長沙的鴻蒙生態行活動。 老樣子,我們先來了解一下這個活動: Harmon&#x…

【速寫】多LoRA并行衍生的一些思考

遷移學習上的一個老問題,怎么做多領域的遷移?以前的邏輯認為領域遷移屬于是對參數做方向性的調整,如果兩個領域方向相左,實際上不管怎么加權相加都是不合理的。 目前一些做法想著去觀察LoRA權重矩陣中的稠密塊與稀疏塊&#xff0…

【Delphi 基礎知識 44】接口interface的應用

目錄 1. 前言2. 接口有哪些優勢2.1. 實現多態性2.2 實現多重(解決單繼承限制)2.3 解耦代碼(依賴注入)2.4 便于測試(模擬接口)2.5 跨語言互操作性(COM支持)1. 前言 總結為一句話就是:接口只告訴你要做什么,而類會告訴你應該怎么做 下面是最簡單的接口實現 typeIMyIn…

09.傳輸層協議 ——— TCP協議

文章目錄 TCP協議 談談可靠性TCP協議格式 序號與確認序號窗口大小六個標志位 確認應答機制(ACK)超時重傳機制連接管理機制 三次握手四次揮手 流量控制滑動窗口擁塞控制延遲應答捎帶應答面向字節流粘包問題TCP異常情況TCP小結基于TCP的應用層協議 TCP協…

NLP高頻面試題(五十一)——LSTM詳解

長短期記憶網絡(LSTM)相較于傳統循環神經網絡(RNN)的核心改進在于通過引入記憶單元(cell state)和門機制(gating mechanism)來有效緩解梯度消失與梯度爆炸問題,從而更好地捕捉長距離依賴關系 。在其網絡結構中,信息通過輸入門(input gate)、遺忘門(forget gate)和…

SpringCloud組件—Eureka

一.背景 1.問題提出 我們在一個父項目下寫了兩個子項目,需要兩個子項目之間相互調用。我們可以發送HTTP請求來獲取我們想要的資源,具體實現的方法有很多,可以用HttpURLConnection、HttpClient、Okhttp、 RestTemplate等。 舉個例子&#x…

無需花錢購買域名服務器!使用 VuePress + Github 30分鐘搭建屬于自己的博客網站(保姆級教程)

前言 GitHub Pages 提供免費全球加速的服務器資源,VuePress 將 Markdown 變成藝術品級的網頁,僅需 30 分鐘,你便可以像提交代碼一樣發布文章,過程完全免費。 博客搭建好的效果如下:https://honorsong.github.io/exam…

提交到Gitee倉庫

文章目錄 注冊配置公鑰創建空白的碼云倉庫把本地項目上傳到碼云對應的空白倉庫中 注冊 注冊并激活碼云賬號( 注冊頁面地址:https://gitee.com/signup ) 可以在自己C盤/用戶/用戶名/.ssh 可以看到 有id_rsa.pub 以前在GitHub注冊時搞過&…

如何在 Java 中從 PDF 文件中刪除頁面(教程)

由于 PDF 文件格式不是 Java 原生支持的,因此要從 PDF 中刪除頁面,你需要使用外部庫。 本教程介紹如何使用 JPedal 來實現這一功能。 開始使用 ? 將 JPedal 添加到你的類路徑或模塊路徑中(可從官網下載安裝試用版 JAR 文件) ?…

機器學習第二篇 多變量線性回歸

數據集:世界幸福指數數據集中的變量有幸福指數排名、國家/地區、幸福指數得分、人均國內生產總值、健康預期壽命、自由權、社會支持、慷慨程度、清廉指數。我們選擇GDP per Capita和Freedom,來預測幸福指數得分。 文件一:linear,…

位運算,狀態壓縮dp(算法競賽進階指南學習筆記)

目錄 移位運算一些位運算的操作最短 Hamilton 路徑(狀態壓縮dp模板,位運算) 0x是十六進制常數的開頭;本身是聲明進制,后面是對應具體的數; 數組初始化最大值時用0x3f賦值; 移位運算 左移 把二…

Java高頻面試之并發編程-05

hello啊,各位觀眾姥爺們!!!本baby今天來報道了!哈哈哈哈哈嗝🐶 面試官:線程有哪些調度方法? 在Java中,線程的調用方法主要包括以下幾種方式,每種方式適用于…

進程的同步和互斥

進程同步(synchronous) ?通俗理解: 就像在排隊買飯,一個一個來,前面的人不走,后面的人就不能干事。 進程同步就是:多個進程之間需要協調,有先后順序,一個進程要等另一…

PDF處理控件Aspose.PDF指南:使用 Python 將 EPUB 轉換為 PDF

EPUB是一種流行的電子書格式,用于可重排內容,而PDF則廣泛用于固定版式文檔,非常適合共享和打印。如果您想使用 Python 將 EPUB 轉換為 PDF,Aspose.PDF for Python 提供了一個簡單可靠的解決方案。在本教程中,我們將向您…

day4-小白學習JAVA---開發軟件_Scanner鍵盤錄入_Random隨機數_流程控制語句

開發軟件_Scanner鍵盤錄入_Random隨機數_流程控制語句 一、開發軟件idea(MAC版)1、軟件安裝-安裝社區版2、中英文設置3、保存時格式化配置4、注釋和代碼對不齊5、idea快捷鍵 二、鍵盤錄入--Scanner1、next和nextInt2、next和nextLine區別 三、Random隨機…

MySQL基本查詢與數據操作全面解析

目錄 1. CRUD操作概述 2. Create操作詳解 2.1 表的創建 2.2 單行數據插入 2.3 多行數據插入 2.4 插入沖突處理 3. Retrieve操作詳解 3.1 基礎查詢 全列查詢(慎用) 指定列查詢 表達式查詢 結果去重 3.2 條件查詢(WHERE子句&#…

01.Python代碼Pandas是什么?pandas的簡介

01.Python代碼Pandas是什么?pandas的簡介 提示:幫幫志會陸續更新非常多的IT技術知識,希望分享的內容對您有用。本章分享的是pandas的使用語法。前后每一小節的內容是存在的有:學習and理解的關聯性,希望對您有用~ pyth…

(8)ECMAScript語法詳解

本系列教程目錄:Vue3Element Plus全套學習筆記-目錄大綱 文章目錄 第2章 ECMAScript2.1 ECMAScript 的發展歷史2.2 什么是ES62.3 ES6語法新特性2.3.1 變量聲明let2.3.2 常量聲明2.3.3 模板字符串2.3.4 函數默認參數2.3.5 箭頭函數2.3.6 對象初始化簡寫2.3.7 解構2.3…

Android JNI開發中頭文件引入的常見問題與解決方案?,提示:file not found

Android JNI開發中頭文件引入的常見問題與解決方案 問題場景(新手易犯錯誤) 假設你在開發一個JNI項目,想要實現一個線程安全的隊列(SafeQueue),于是直接在cpp目錄下創建了safe_queue.h文件,并開…