国产精品久久精品牛牛影视-国产精品久久精品视-国产精品久久九九-国产精品久久久-国产精品久久久99

芯片采購,IC采購,芯片采購平臺
芯片
每日新聞頭條
使用 NVIDIA BlueField DPU 和 DPDK 開發應用程序
(2025年1月29日更新)

數據中心轉型

芯片采購網專注于整合國內外授權IC代理商現貨資源,芯片庫存實時查詢,行業價格合理,采購方便IC芯片,國內專業芯片采購平臺

NVIDIA BlueField DPU (數據處理器)可用于加速網絡功能。這種網絡卸載可以使用 DPDK ,也可以用 NVIDIA DOCA 軟件框架。

在本系列中,我構建了一個應用程序,并以兩種方式卸載:DPDK 和 NVIDIA DOCA SDK 。我將每個步驟記錄為單獨的代碼補丁,并在每個系列中提供完整的步驟。這部分將向您展示如何使用它 DPDK 編程 BlueField DPU 。

用例

首先,我需要一個簡單但有意義的用例 DPU 上部署應用程序。我選擇了基于策略的路由( PBR )來根據第 3 層和第 4 層數據包屬性將流量引導到不同的網關,覆蓋(或補充) X86 主機選擇的網關。現實世界中需要這樣做的原因有很多,包括以下示例:

· 將選定的主機流量發送到外部防火墻進行額外審核

· 增強 Anycast 負載平衡服務器

· 應用 QoS



圖 1 . 使用 PBR 將流量從主機引導到兩個網關之一

我在 DPU (BF2-ARM)上使用 PBR 流量來自主機( server1-x86 )引導兩個網關 [leaf2, leaf3] 其中之一。葉交換機隨后將流量轉發給當地連接的選播服務提供商 [server2, server3] 。

構建應用程序

第一個問題:我是寫一個新的應用程序,還是卸載一個現有的應用程序?

我決定卸載我最喜歡的開源路由軟件棧 FRRouting ( FRR )的 PBR 功能。這使我能夠擴展現有的代碼庫和現有的代碼庫 sample apps 形成良好的對比。FRR 支持多種數據平面插件的框架可以輕松使用 DPDK 和 DOCA 實現新的數據平面插件并集成到 FRR 。



圖 2 . DPDK 和 DOCA 插件可以很容易地添加到 FRR中

DPU 應用程序原型

本節將介紹創作 DPU 應用程序需要準備硬件加速功能。

DPU 硬件

我有一個 x86 服務器安裝在上面 BlueFied-2 DPU , 該 DPU 有兩個 25G 上行鏈路和一個帶 8GB 內存的 ARM 處理器 。更多關于硬件安裝的信息,請參考 DOCA SDK 文檔 。也可使用 DPU PocKit 構建和引導您的系統環境.

我安裝了 BlueField 啟動流文件( BFB ),它為 DPU 提供了 Ubuntu 操作系統圖像附帶 DOCA-1.2 和 DPDK-20.11.3 的庫。



圖 3 . Netdev Representors

使用 SR-IOV ,我在主機上為兩臺虛擬機創建了兩個虛擬函數( VF )接口。

主機上的 PF 和 VF 分別映射到 DPU ARM 上的以下 netdev representors 。



表 1 .主機上 PF 和 VF 的映射

使用 DPDK testpmd 原型設計應用程序

首先,我用 DPDK 的 testpmd 我的用例原型化設計,位于 DPU 的 / opt / mellanox / 目錄下。

包括 testpmd 在內的任何 DPDK 必須設置所有應用程序 hugepages 。



(可選)保留配置,使其在 DPU 重啟后仍然有效。



啟動 testpmd 。



Testpmd 會消耗更多的內存,默認情況下會分配 3.5 GB 。因為我不需要在那里 CPU 處理數據流量時,我會 total-mem 的值設定為 200M ,其中 total-mem = total-num-mbufs * mbuf-size (默認 mbuf-size 為 2048 字節)。我還使用了 flowMarvell代理-isolation 模式,因為我必須 ARP 數據包發送到 DPU 內核網絡堆棧分析 PBR 下一跳)。初始化完成后,-i選項使得 testpmd 進入交互式 shell 。

作為 testpmd 完成 rte_eal 初始化的一部分, mlx5_pci 被探測并成為可訪問的設備 DPDK 端口。



你在這里看到的 DPDK 端口對應 PF / VF representor 和兩個上行鏈路。



表 2 . DPDK 端口映射

流創建

接下來,通過定義 ingress port 、源 IP 、目標 IP 、我用協議和端口 rte_flow 下發了PBR規則。此外,我還定義了匹配數據包采用的方法 ACTION 。源 MAC 和目標 MAC 被重寫, TTL 出口端口設置為物理上行鏈路 p0 。



這條 PBR 規則從 VM1接收 DNS 并將其發送到特定的流量 GW ( leaf2, server2 )。我還故障定位,我還增加了一個計數器。



DPU 卸載可以工作 Switch ( FDB )模式,也可以工作 NIC 模式。在這個用例中,經過幾次數據包修改,我需要將流量從 X86 主機重定向 25G 上行鏈路。所以在概念上,這里使用 Switch ( FDB ) 因此,需要設置模式 rte_flow 的 transfer 屬性。

流程驗證

我從 VM1 發送一些流量,看看它是否與我一起使用 testpmd 創建的 flow 通過執行是否匹配 query 命令來查看。



結果是匹配的,在 leaf2/server2 這些流量和修改后的數據包頭可以在上面看到。因為操作流量是 DNS ,所以為了測試流量,我從 VM1 發送 DNS 請求。我使用它來控制流量速率和其他數據包字段 mz 生成測試流量。



另一種健全檢查是檢查此流是否真的卸載。這樣做有兩種方法:

· 在 Arm CPU 上使用 tcpdump 確保內核不接收此類數據包。

· 檢查硬件 eSwitch 是否有相應的流量規則。

mlx_steering_dump 允許您在硬件上查看成功的流量規則。 git 下載并安裝工具。



使用 mlx_steering_dump_parser.py 腳本驗證硬件中發布的流量規則。



此命令打印出來 testpmd 應用程序發布的所有流程規則。硬件上設置的外部可以看到 頭部匹配信息和前面RTE_FLOW定義的匹配 [SIP = 172.20.0.8 , DIP = 172.30.0.8 , IP proto = UDP , UDP dport = 53] 是一致的。流量計數器的值作為打印輸出的一部分也被讀取和重置。

作為應用程序設計思維過程的最后一步,原型設計已經完成。現在我知道我可以了 DPDK 中建立一個 PBR 規則,將其安裝在硬件中,并修改我們感興趣的數據報告。現在在下一節添加 DPDK 數據平面。

構建 DPDK 數據平面插件

在這一節中,我將通過方向 Zebra 添加一個 DPDK 介紹數據平面插件 DPU 對 PBR進行 硬件加速步驟。我將這些步驟分解為單獨的代碼提交,整個補丁集 reference 提供形式。



圖 4 .路由基于策略 DPDK 卸載工作流

開發環境

因為目標體系結構是 DPU Arm ,所以可以直接在那里 DPU Arm上構建、在 X86 CPU 交叉編譯或在云中構建。在這篇文章中,我直接在那里 DPU Arm 編碼構建。

以 root 用戶身份操作應用程序

FRR 通常作為非 root 用戶運行。FRR 整個互聯網路由表可以下載和上傳;這可能有什么問題?然而,幾乎所有人 DPDK 應用程序都是以 root 用戶身份操作, DPDK 庫和驅動程序也是基于此設計的。

經過多次實驗并使用 root 重新編譯用戶選項 FRR, 我還是放不下 FRR 作為非 root 用戶工作。這是可以接受的,因為我在一個安全的空間,即 DPU Arm 中運行 FRR 。

向 Zebra 添加新插件

Zebra 是 FRR 其中一個守護過程負責整合路由協議守護過程的更新和構建轉發。Zebra 還有一個基礎設施可以將這些轉發表送到圖像 Linux 內核等數據平面。

將 DPDK 共享庫鏈接到 zebra

FRR 有自己的構建系統,限制直接導入外部 make 文件。由于 pkg-config 簡單優雅,鏈接相關庫 Zebra 很容易。

我找到了 libdpdk.pc 并添加 PKG_CONFIG_PATH 值中:



FRR 有自己的構建系統,限制直接導入外部 make 文件。由于 pkg-config 簡單優雅,鏈接相關庫 Zebra 很容易。

我找到了 libdpdk.pc 并添加 PKG_CONFIG_PATH 值中:



我在 FRR makefile (configure.ac)中為 DPDK 添加了 pkg check-and-define 宏。



我將 DPDK libs和cflags抽象包含在zebra-dp-dpdk make 宏( zebra/subdir.am )中。



有了這些,我就有了構建插件所需的所有頭文件和庫。

初始化硬件

第一步是硬件的初始化。



這將探測 PCIe 設備并填充 DPDK rte_eth_dev 數據庫。

初始化端口

然后設置硬件端口。

端口映射設置應用程序

FRR 有自己的基礎 Linux netdevs 使用表的接口(端口)表 NetLink 更新填充并使用 ifIndex 索引鍵值。PBR 將規則錨定到表中的一個接口。要編程 PBR 數據平面條目需要一個 Linux ifIndex 和 DPDK port-id 值之間的映射表。netdev 信息已經在 DPDK 可用于驅動程序 rte_eth_dev_info_get 查詢。



配置硬件端口

此外,所有端口都需要放置 flow-isolation 并啟動模式。



Flow-isolation 該模式將未命中的數據包發送到核心網絡堆棧,允許其處理 ARP 請求等等。



使用 rte _流 API 編程 PBR 規則

PBR 現在需要使用規則 rte_flow 以下是一個例子規則:



通過這些參數 rte_flow_attributes 、 rte_flow_item ( match ) 和 rte_flow_action 填充數據結構。

流屬性

該數據結構用于指示 PBR 流量用于分組重定向或 transfer flow 。



流匹配項

DPDK 使用數據包頭中的每一層 {key, mask} 匹配結構:以太網, IP 、 UDP 等。



填寫這些數據結構需要大量的重復代碼。

流動作

DPDK 為每個 Action 使用單獨的數據結構,然后允許您以可變長度數組的形式提供所有流量規則 Actions 。有關 Actions 如下:



驗證和創建流程

您可以驗證可選項 rte_flow_attr、rte_flow_item 和 rte_flow_action 列表。



驗證通常用于檢查底層 DPDK 驅動程序是否支持特定的流配置。在最終代碼中,您可以直接跳轉到流創建。



Rte_flow 命令錨定到輸入端口。可以創建多個流條目組并鏈接這些組。即使流條目沒有鏈的第一組,也就是不在組中 0 它仍然必須錨定到輸入端口。group-0 性能限制存在。

流量插入率為 group-0 受限制。繞過這個限制,你可以 group-0 安裝默認流,跳轉到 group-1 ”,然后在 group-1 創建流量規則。

流刪除

流創建 API 返回流指針,必須緩存后續流刪除。



FRR-PBR 分析保護過程管理狀態機,添加或刪除 PBR 因此,我不必使用它。 DPDK 衰老的原始函數 PBR 規則。

流量統計

在創建流量時,我將計數操作附加到流量中。可用于查詢流量統計信息和命中次數。



為了便于測試和驗證,我插入了統計顯示 FRR 的 vtysh CLI 。

測試應用程序

我以 root 啟動了用戶身份 FRR ,并通過 /etc/frr/daemons 新添加的文件啟用 DPDK 插件:

DPDK-port 映射表的 FRR 接口已填充:



接下來,我會 PBR 來自匹配的規則配置 VM1 的 DNS 并使用流量 frr.conf 重定向 leaf2 。



我從 VM1 發送 DNS 查詢到 anycast DNS 服務器。



匹配流量,并使用修改后的數據包頭將流量轉發到目的地 leaf2/server2 。這可以連接到流的計數器并使用 mlx_steering_dump 驗證硬件轉儲。



FRR 現在功能齊全了 DPDK 可用于數據平面插件 DPU 硬件上卸載 PBR 規則。

總結

本文回顧了使用情況 DPDK RTE_FLOW庫在 BlueField 上硬件加速 PBR 規則的 FRR 創建數據平面插件。在下一篇文章中,我將帶您了解 FRR DOCA 數據平面插件,并向您展示如何使用新的 DOCA_FLOW 庫卸載 PBR 規則。


芯片采購網|IC采購|IC代理商 - 國內專業的芯片采購平臺
芯片采購網專注整合國內外授權IC代理商的現貨資源,輕松采購IC芯片,是國內專業的芯片采購平臺
主站蜘蛛池模板: 欧美特黄三级在线观看 | 欧美黄色特级视频 | 亚洲精品综合一二三区在线 | 午夜视频免费 成人 | 久久电影精品久久99久久 | 亚洲日本在线观看视频 | 成熟自由日本语热亚洲人 | 免费一级欧美毛片 | 午夜激情网站 | 久久欧洲视频 | 久久综合香蕉 | 国产一区二区三区四区偷看 | 国产亚洲人成在线影院 | 日韩一区二区精品久久高清 | 快射视频在线观看 | 免费无毒片在线观看 | 国产伦精品一区二区三区视频金莲 | 国产羞羞的视频在线观看免费 | 国产一区二区三区在线影院 | 一级毛片特级毛片免费的 | 在线看亚洲 | 四虎永久免费地址ww 41.6 | 免费亚洲视频在线观看 | 2017天天天天做夜夜夜做 | 亚洲成人在线网站 | 日日插天天操 | 国产成人免费永久播放视频平台 | 国产区在线观看视频 | 免费看色视频 | 中文国产成人精品久久水 | 射狠狠| 男女晚上激烈的拍拍拍免费看 | 狠狠色婷婷综合天天久久丁香 | 97视频在线免费播放 | 欧美精品播放 | 国产成人精品永久免费视频 | 永久在线观看www免费视频 | 黄色三 | 国产免费啪视频观看网站 | 欧美黄色影视 | 日本a毛片 |