越來越多的網(wǎng)絡(luò)應(yīng)用程序需要進(jìn)行 GPU 實(shí)時(shí)數(shù)據(jù)包處理,以實(shí)現(xiàn)高數(shù)據(jù)率解決方案:數(shù)據(jù)過濾、數(shù)據(jù)放置、網(wǎng)絡(luò)分析、傳感器信號(hào)處理等。
一個(gè)主要?jiǎng)訖C(jī)是 GPU 可以實(shí)現(xiàn)并行處理多個(gè)數(shù)據(jù)包的高度并行性,同時(shí)提供可擴(kuò)展性和可編程性。
有關(guān)這些技術(shù)的基本概念以及基于 DPDK gpudev 庫的初始解決方案的概述,請(qǐng)掃描下方二維碼參見文章《通過 GPU 使用 DPDK 和 GPUdev 增強(qiáng)內(nèi)聯(lián)數(shù)據(jù)包處理 》。
這篇文章解釋了新的 NVIDIA DOCA GPUNetIO 庫如何克服以前 DPDK 解決方案中的一些限制,向以 GPU 為中心的數(shù)據(jù)包處理應(yīng)用程序邁進(jìn)了一步。
介紹
網(wǎng)絡(luò)數(shù)據(jù)包的實(shí)時(shí) GPU 處理是一種適用于幾個(gè)不同應(yīng)用領(lǐng)域的技術(shù),包括信號(hào)處理、網(wǎng)絡(luò)安全、信息收集和輸入重建。這些應(yīng)用程序的目標(biāo)是實(shí)現(xiàn)一個(gè)內(nèi)聯(lián)數(shù)據(jù)包處理管線(Pipeline),以在 GPU 內(nèi)存中接收數(shù)據(jù)包(無需通過 CPU 內(nèi)存暫存副本);與一個(gè)或多個(gè) CUDA 內(nèi)核并行地處理它們;然后運(yùn)行推斷、評(píng)估或通過網(wǎng)絡(luò)發(fā)送計(jì)算結(jié)果。
通常,在這個(gè)管線中,CPU 是協(xié)調(diào)人,因?yàn)樗仨毷咕W(wǎng)卡(NIC)接收活動(dòng)與 GPU 處理同步。一旦 GPU 內(nèi)存中接收到新的數(shù)據(jù)包,這將喚醒 CUDA 內(nèi)核。類似的方法也可以應(yīng)用于管線的發(fā)送側(cè)。
圖 1 . 以 CPU 為中心的應(yīng)用程序, CPU 協(xié)調(diào) GPU 和網(wǎng)卡工作
數(shù)據(jù)平面開發(fā)套件(DPDK)框架引入了 goudev 庫來為此類應(yīng)用提供解決方案:使用 GPU 內(nèi)存(GPUDirect RDMA 技術(shù))結(jié)合低延遲 CPU 同步進(jìn)行接收或發(fā)送。
GPU 發(fā)起的通信
從圖 1 中可以看出,CPU 是主要瓶頸。它在同步 NIC 和 GPU 任務(wù)以及管理多個(gè)網(wǎng)絡(luò)隊(duì)列方面承擔(dān)了太多的責(zé)任。例如,考慮一個(gè)具有多個(gè)接收隊(duì)列和 100 Gbps 傳入流量的應(yīng)用程序。以 CPU 為中心的解決方案將具有:
-
CPU 調(diào)用每個(gè)接收隊(duì)列上的網(wǎng)絡(luò)功能,以使用一個(gè)或多個(gè) CPU 核心接收 GPU 存儲(chǔ)器中的數(shù)據(jù)包
-
CPU 收集數(shù)據(jù)包信息(數(shù)據(jù)包地址、編號(hào))
-
CPU 向 GPU 通知新接收的數(shù)據(jù)包
-
GPU 處理數(shù)據(jù)包
這種以 CPU 為中心的方法是:
-
資源消耗:為了處理高速率網(wǎng)絡(luò)吞吐量(100 Gbps 或更高),應(yīng)用程序可能需要專用整個(gè) CPU 物理核心來接收(和/或發(fā)送)數(shù)據(jù)包
-
不可擴(kuò)展:為了與不同的隊(duì)列并行接收(或發(fā)送),應(yīng)用程序可能需要使用多個(gè) CPU 核心,即使在 CPU 核心的總數(shù)可能被限制在較低數(shù)量(取決于平臺(tái))的系統(tǒng)上也是如此
-
平臺(tái)依賴性:低功耗 CPU 上的同一應(yīng)用程序?qū)⒔档托阅?/p>
GPU 內(nèi)聯(lián)分組處理應(yīng)用程序的下一個(gè)自然步驟是從關(guān)鍵路徑中刪除 CPU 。移動(dòng)到以 GPU 為中心的解決方案,GPU 可以直接與 NIC 交互以接收數(shù)據(jù)包,因此數(shù)據(jù)包一到達(dá) GPU 內(nèi)存,處理就可以開始。同樣的方法也適用于發(fā)送操作。
GPU 從 CUDA 內(nèi)核控制 NIC 活動(dòng)的能力稱為 GPU 發(fā)起的通信。假設(shè)使用 NVIDIA GPU 和 NVIDIA NIC ,則可以將 NIC 寄存器暴露給 GPU 的直接訪問。這樣,CUDA 內(nèi)核可以直接配置和更新這些寄存器,以協(xié)調(diào)發(fā)送或接收網(wǎng)絡(luò)操作,而無需 CPU 的干預(yù)。
圖 2 . 以 GPU 為中心的應(yīng)用程序,GPU 控制網(wǎng)卡和數(shù)據(jù)包處理,無需 CPU
根據(jù)定義,DPDK 是 CPU 框架。要啟用 GPU 發(fā)起的通信,需要在 GPU 上移動(dòng)整個(gè)控制路徑,這是不適用的。因此,通過創(chuàng)建新的 NVIDIA DOCA 庫來啟用此功能。
NVIDIA DOCA GPUNetIO 庫
NVIDIA DOCA SDK 是新的 NVIDIA 框架,由驅(qū)動(dòng)程序、庫、工具、文檔和示例應(yīng)用程序組成。需要這些資源通過利用 NVIDIA 硬件可以在主機(jī)系統(tǒng)和 DPU 上可用的網(wǎng)絡(luò)、安全性和計(jì)算功能來支持應(yīng)用程序。
NVIDIA DOCA GPUNetIO 是在 NVIDIA DOCA 1.5 版本的基礎(chǔ)上開發(fā)的一個(gè)新庫,用于在 DOCA 生態(tài)系統(tǒng)中引入 GPU 設(shè)備的概念(圖 3)。為了促進(jìn)創(chuàng)建以 DOCA GPU 為中心的實(shí)時(shí)數(shù)據(jù)包處理應(yīng)用程序,DOCA GPUNetIO 結(jié)合了 GPUDirect RDMA 用于數(shù)據(jù)路徑加速、智能 GPU 內(nèi)存管理、CPU 和 GPU 之間的低延遲消息傳遞技術(shù)(通過 GDRCopy 功能)和 GPU 發(fā)起的通信。
這使 CUDA 內(nèi)核能夠直接控制 NVIDIA ConnectX 網(wǎng)卡。為了最大化性能, DOCA GPUNetIO 庫必須用于 GPUDirect 友好的平臺(tái),其中 GPU 和網(wǎng)卡通過專用 PCIe 網(wǎng)橋直接連接。DPU 融合卡就是一個(gè)示例,但同樣的拓?fù)湟部梢栽谥鳈C(jī)系統(tǒng)上實(shí)現(xiàn)。
DOCA GPUNetIO 目標(biāo)是 GPU 數(shù)據(jù)包處理網(wǎng)絡(luò)應(yīng)用程序,使用以太網(wǎng)協(xié)議在網(wǎng)絡(luò)中交換數(shù)據(jù)包。對(duì)于這些應(yīng)用程序,不需要像基于 RDMA 的應(yīng)用程序那樣,通過 OOB 機(jī)制跨對(duì)等端進(jìn)行預(yù)同步階段。也無需假設(shè)其他對(duì)等端將使用 DOCA GPUNetIO 進(jìn)行通信,也無需了解拓?fù)?。在未來的版本中,RDMA 選項(xiàng)將被啟用以覆蓋更多的用例。
DOCA 當(dāng)前版本中啟用的 GPUNetIO 功能包括:
-
GPU 發(fā)起的通信: CUDA 內(nèi)核可以調(diào)用 DOCA GPUNetIO 庫中的 CUDA device 函數(shù),以指示網(wǎng)卡發(fā)送或接收數(shù)據(jù)包
-
精確的發(fā)送調(diào)度:通過 GPU 發(fā)起的通信,可以根據(jù)用戶提供的時(shí)間戳來調(diào)度未來的數(shù)據(jù)包傳輸
-
GPU Direct RDMA :以連續(xù)固定大小 GPU 內(nèi)存步幅接收或發(fā)送數(shù)據(jù)包,無需 CPU 內(nèi)存暫存副本
-
信號(hào)量:在 CPU 和 GPU 之間或不同 GPU CUDA 內(nèi)核之間提供標(biāo)準(zhǔn)化的低延遲消息傳遞協(xié)議
-
CPU 對(duì) CUDA 內(nèi)存的直接訪問:CPU 可以在不使用 GPU 內(nèi)存 API 的情況下修改 GPU 內(nèi)存緩沖區(qū)
圖 3 . NVIDIA DOCA GPUNetIO 是一個(gè)新的 DOCA 庫,需要在同一平臺(tái)上安裝 GPU 和 CUDA 驅(qū)動(dòng)程序和庫
如圖 4 所示,典型的 DOCA GPUNetIO 應(yīng)用程序步驟如下:
CPU 上的初始配置階段:
-
使用 DOCA 識(shí)別和初始化 GPU 設(shè)備和網(wǎng)絡(luò)設(shè)備
-
使用 DOCA GPUNetIO 創(chuàng)建可從 CUDA 內(nèi)核管理的接收或發(fā)送隊(duì)列
-
使用DOCA Flow確定應(yīng)在每個(gè)接收隊(duì)列中放置哪種類型的數(shù)據(jù)包(例如,IP 地址的子集、TCP 或 UDP 協(xié)議等)
-
啟動(dòng)一個(gè)或多個(gè) CUDA 內(nèi)核(執(zhí)行數(shù)據(jù)包處理/過濾/分析)
CUDA 內(nèi)核內(nèi) GPU 上的運(yùn)行時(shí)控制和數(shù)據(jù)路徑:
-
使用 DOCA GPUNetIO CUDA 設(shè)備函數(shù)發(fā)送或接收數(shù)據(jù)包
-
使用 DOCA GPUNetIO CUDA 設(shè)備函數(shù)與信號(hào)量交互,以使工作與其他 CUDA 內(nèi)核或 CPU 同步
圖 4 . 由多個(gè)構(gòu)建塊組成的通用 GPU 數(shù)據(jù)包處理管線數(shù)據(jù)流
以下各節(jié)概述了結(jié)合 DOCA GPUNetIO 構(gòu)建塊的可能 GPU 數(shù)據(jù)包處理管線應(yīng)用程序布局。
CPU 接收和 GPU 處理
第一個(gè)示例以 CPU 為中心,不使用 GPU 發(fā)起的通信功能。它可以被視為以下章節(jié)的基線。CPU 創(chuàng)建可從 CPU 自身管理的接收隊(duì)列,以接收 GPU 存儲(chǔ)器中的數(shù)據(jù)包,并為每個(gè)隊(duì)列分配流量控制規(guī)則。
在運(yùn)行時(shí),CPU 接收 GPU 存儲(chǔ)器中的數(shù)據(jù)包。它通過 DOCA GPUNetIO 信號(hào)量向一個(gè)或多個(gè) CUDA 內(nèi)核通知每個(gè)隊(duì)列新一組數(shù)據(jù)包的到達(dá),提供 GPU 內(nèi)存地址和數(shù)據(jù)包數(shù)量等信息。在 GPU 上,CUDA 內(nèi)核輪詢信號(hào)量,檢測更新并開始處理數(shù)據(jù)包。
圖 5 . GPU 數(shù)據(jù)包處理管道,CPU 在 GPU 內(nèi)存中接收數(shù)據(jù)包,并使用 NVIDIA DOCA GPUNetIO 信號(hào)量通知數(shù)據(jù)包處理 CUDA 內(nèi)核有關(guān)傳入數(shù)據(jù)包
這里,DOCA GPUNetIO 信號(hào)量具有類似于 DPDK gpudev communication list 的功能,使得 CPU 接收數(shù)據(jù)包和 GPU 在處理這些數(shù)據(jù)包之前等待接收這些數(shù)據(jù)包之間能夠?qū)崿F(xiàn)低延遲通信機(jī)制。信號(hào)量還可用于 GPU 在包處理完成時(shí)通知 CPU ,或在兩個(gè) GPU CUDA 內(nèi)核之間共享關(guān)于已處理包的信息。
該方法可作為性能評(píng)估的基準(zhǔn)。由于它以 CPU 為中心,因此嚴(yán)重依賴 CPU 型號(hào)、功率和內(nèi)核數(shù)量。
GPU 接收和 GPU 處理
上一節(jié)中描述的以 CPU 為中心的管線可以通過以 GPU 為中心的方法進(jìn)行改進(jìn),該方法使用 GPU 發(fā)起的通信,使用 CUDA 內(nèi)核管理接收隊(duì)列。以下部分提供了兩個(gè)示例:多 CUDA 內(nèi)核和單 CUDA 內(nèi)核。
多 CUDA 內(nèi)核
使用這種方法,至少涉及兩個(gè) CUDA 內(nèi)核,一個(gè)專用于接收數(shù)據(jù)包,另一個(gè)專用用于數(shù)據(jù)包處理。接收器 CUDA 內(nèi)核可以通過信號(hào)量向第二 CUDA 內(nèi)核提供數(shù)據(jù)包信息。
圖 6 . GPU 數(shù)據(jù)包處理管線,CPU 在 GPU 內(nèi)存中接收數(shù)據(jù)包,并使用 DOCA GPUNetIO 信號(hào)量通知數(shù)據(jù)包處理 CUDA 內(nèi)核有關(guān)傳入數(shù)據(jù)包
這種方法適用于高速網(wǎng)絡(luò)和延遲敏感的應(yīng)用程序,因?yàn)閮蓚€(gè)接收操作之間的延遲不會(huì)被其他任務(wù)延遲。期望將接收器 CUDA 內(nèi)核的每個(gè) CUDA 塊關(guān)聯(lián)到不同的隊(duì)列,并行地接收來自所有隊(duì)列的所有數(shù)據(jù)包。
單 – CUDA 內(nèi)核
通過使單個(gè) CUDA 內(nèi)核負(fù)責(zé)接收和處理數(shù)據(jù)包,仍然為每個(gè)隊(duì)列專用一個(gè) CUDA 塊,可以簡化先前的實(shí)現(xiàn)。
圖 7 . GPU 數(shù)據(jù)包處理管線,單個(gè) GPU CUDA 內(nèi)核接收 GPU 內(nèi)存中的數(shù)據(jù)包并進(jìn)行數(shù)據(jù)包處理
這種方法的一個(gè)缺點(diǎn)是每個(gè) CUDA 塊兩個(gè)接收操作之間的延遲。如果數(shù)據(jù)包處理需要很長時(shí)間,應(yīng)用程序可能無法跟上在高速網(wǎng)絡(luò)中接收新數(shù)據(jù)包的速度。
GPU 接收、 GPU 處理和 GPU 發(fā)送
到目前為止,大多數(shù)關(guān)注點(diǎn)都集中在管線的“接收和處理”部分。然而,DOCA GPUNetIO 還可以在 GPU 上生成一些數(shù)據(jù),制作數(shù)據(jù)包并從 CUDA 內(nèi)核發(fā)送,而無需 CPU 干預(yù)。圖 8 描述了一個(gè)完整的接收、處理和發(fā)送管線的示例。
圖 8 . 具有 GPU CUDA 內(nèi)核的 GPU 數(shù)據(jù)包處理管線在 GPU 內(nèi)存中接收數(shù)據(jù)包,進(jìn)行數(shù)據(jù)包處理,最后制作新數(shù)據(jù)包
NVIDIA DOCA GPUNetIO 示例應(yīng)用程序
與任何其他 NVIDIA DOCA 庫一樣,DOCA GPUNetIO 有一個(gè)專用應(yīng)用程序,用于 API 使用參考和測試系統(tǒng)配置和性能。該應(yīng)用程序?qū)崿F(xiàn)了前面描述的管線,提供了不同類型的數(shù)據(jù)包處理,如 IP 校驗(yàn)和、HTTP 數(shù)據(jù)包過濾和流量轉(zhuǎn)發(fā)。
以下部分概述了應(yīng)用程序的不同操作模式。報(bào)告了一些性能數(shù)據(jù),將其視為可能在未來版本中更改和改進(jìn)的初步結(jié)果。使用兩個(gè)基準(zhǔn)系統(tǒng),一個(gè)用于接收數(shù)據(jù)包,另一個(gè)用于發(fā)送數(shù)據(jù)包,背靠背連接(圖 9)。
運(yùn)行 DOCA GPUNetIO 應(yīng)用程序的接收器是帶有 NVIDIA BlueField-2X DPU 融合卡的 Dell PowerEdge R750 。該配置為嵌入式 CPU 模式,因此應(yīng)用程序使用 DPU 上的 NVIDIA ConnectX-6 Dx 網(wǎng)卡和 GPU A100X 在主機(jī)系統(tǒng) CPU 上運(yùn)行。軟件配置為 Ubuntu 20.04 、MOFED 5.8 和 CUDA 11.8 。
發(fā)送器是 Gigabyte Intel Xeon Gold 6240R ,其通過 PCIe Gen 3 與 NVIDIA ConnectX-6 Dx 連接。此計(jì)算機(jī)不需要任何 GPU ,因?yàn)樗\(yùn)行 T-Rex DPDK packet generator v2.99 。軟件配置為 Ubuntu 20.04 和 MOFED 5.8 。
圖 9 . 接收器(Dell R750)和發(fā)送器(Gigabyte)系統(tǒng)背靠背連接到基準(zhǔn) NVIDIA DOCA GPUNetIO 應(yīng)用程序
該應(yīng)用程序也已在 DPU Arm 內(nèi)核上執(zhí)行,導(dǎo)致了相同的性能結(jié)果,并證明了以 GPU 為中心的解決方案與 CPU 無關(guān)。
請(qǐng)注意,DOCA GPUNetIO 最低要求是具有 GPU 和具有直接 PCIe 連接的 NIC 的系統(tǒng)。DPU 并不是嚴(yán)格要求。
IP 校驗(yàn)和, GPU 僅接收
應(yīng)用程序使用 GPU 發(fā)起的通信來創(chuàng)建一個(gè)或多個(gè)接收隊(duì)列以接收分?jǐn)?shù)據(jù)包??梢允褂脝?CUDA 內(nèi)核或多 CUDA 內(nèi)核模式。
圖 10 . NVIDIA DOCA GPUNetIO 應(yīng)用程序中的第一個(gè)管線模式:GPU 接收、計(jì)算 IP 校驗(yàn)和并向 CPU 報(bào)告
每個(gè)數(shù)據(jù)包都通過簡單的 IP 校驗(yàn)和驗(yàn)證進(jìn)行處理,只有通過此測試的數(shù)據(jù)包才算作“好數(shù)據(jù)包”。通過信號(hào)量,好數(shù)據(jù)包的數(shù)量被報(bào)告給 CPU ,CPU 可以在控制臺(tái)上打印報(bào)告。
通過使用 T-Rex 數(shù)據(jù)包生成器以約 100 Gbps(約 11.97 Mpps)的速度發(fā)送 30 億個(gè) 1 KB 大小的數(shù)據(jù)包,并在 DOCA GPUNetIO 應(yīng)用程序側(cè)報(bào)告相同數(shù)量的數(shù)據(jù)包以及正確的 IP 校驗(yàn)和,實(shí)現(xiàn)了單隊(duì)列零數(shù)據(jù)包丟失。相同的配置在 BlueField-2 融合卡上進(jìn)行了測試,結(jié)果相同,證明了 GPU 發(fā)起的通信是一個(gè)獨(dú)立于平臺(tái)的解決方案。
由于數(shù)據(jù)包大小為 512 字節(jié),T-Rex 數(shù)據(jù)包生成器無法發(fā)送超過 86 Gbps(約 20.9 Mpps)的數(shù)據(jù)包。即使每秒數(shù)據(jù)包的數(shù)量幾乎是兩倍,DOCA GPUNetIO 也沒有報(bào)告任何數(shù)據(jù)包丟失。
HTTP 過濾, GPU 僅接收
假設(shè)一個(gè)更復(fù)雜的場景,數(shù)據(jù)包處理 CUDA 內(nèi)核只過濾具有特定特征的 HTTP 數(shù)據(jù)包。它將“好數(shù)據(jù)包”信息復(fù)制到第二個(gè) GPU 內(nèi)存 HTTP 數(shù)據(jù)包列表中。一旦此 HTTP 數(shù)據(jù)包列表中的下一個(gè)項(xiàng)目充滿了數(shù)據(jù)包,通過專用信號(hào)量,過濾 CUDA 內(nèi)核就會(huì)解除第二個(gè) CUDA 內(nèi)核的阻止,從而對(duì)累積的 HTTP 數(shù)據(jù)包進(jìn)行一些推斷。信號(hào)量還可用于向 CPU 線程報(bào)告統(tǒng)計(jì)信息。
圖 11 . NVIDIA DOCA GPUNetIO 應(yīng)用程序中的第二種管線模式。GPU 只接收、過濾 HTTP 數(shù)據(jù)包,并通過專用信號(hào)量解除阻止 CUDA 內(nèi)核對(duì)這些數(shù)據(jù)包進(jìn)行分析
該管線配置提供了復(fù)雜流水線的示例,該復(fù)雜管線包括多個(gè)數(shù)據(jù)處理和過濾階段以及諸如 AI 管線之類的推理功能。
流量轉(zhuǎn)發(fā)
本節(jié)介紹如何通過 GPU 發(fā)起的通信使用 DOCA GPUNetIO 啟用流量轉(zhuǎn)發(fā)。在每個(gè)接收到的數(shù)據(jù)包中,在通過網(wǎng)絡(luò)發(fā)送回?cái)?shù)據(jù)包之前,交換 MAC 和 IP 源地址和目的地址。
圖 12 . NVIDIA DOCA GPUNetIO 應(yīng)用程序中的第三種管線模式。GPU 接收、交換每個(gè)數(shù)據(jù)包的 MAC 和 IP 地址,并發(fā)送回修改后的數(shù)據(jù)包。
通過使用 T-Rex 數(shù)據(jù)包生成器以 ~90 Gbps 的速度發(fā)送 30 億個(gè) 1KB 大小的數(shù)據(jù)包,實(shí)現(xiàn)了只有一個(gè)接收隊(duì)列和一個(gè)發(fā)送隊(duì)列的零數(shù)據(jù)包丟失。
用于 5G 的 NVIDIA Aerial SDK
決定采用以 GPU 為中心的解決方案的動(dòng)機(jī)可能是性能和低延遲要求,但也可能是為了提高系統(tǒng)容量。CPU 在處理連接到接收器應(yīng)用程序的越來越多的對(duì)等端時(shí)可能成為瓶頸。GPU 提供的高度并行化可以提供可擴(kuò)展的實(shí)現(xiàn),以并行處理大量對(duì)等端,而不會(huì)影響性能。
NVIDIA Aerial 是一個(gè)用于構(gòu)建高性能、軟件定義的 5G L1 堆棧的 SDK,該堆棧通過 GPU 上的并行處理進(jìn)行了優(yōu)化。具體而言,NVIDIA Aero SDK 可用于構(gòu)建基帶單元(BBU)軟件,該軟件負(fù)責(zé)通過無線電單元(RU)發(fā)送(下行鏈路)或接收(上行鏈路)無線客戶端數(shù)據(jù)幀,該數(shù)據(jù)幀被拆分為多個(gè)以太網(wǎng)數(shù)據(jù)包。
在上行鏈路中,BBU 接收數(shù)據(jù)包,驗(yàn)證數(shù)據(jù)包,并在觸發(fā)信號(hào)處理之前重建每個(gè) RU 的原始數(shù)據(jù)幀。使用 NVIDIA Aerial SDK ,這在 GPU 中發(fā)生:CUDA 內(nèi)核專用于每個(gè)時(shí)隙的每個(gè) RU ,以重建幀并觸發(fā) GPU 信號(hào)處理的 CUDA 內(nèi)核序列。
通過 DPDK gpudev 庫實(shí)現(xiàn)了網(wǎng)卡接收數(shù)據(jù)包以及 GPU 重新排序和處理數(shù)據(jù)包的編排(圖 13)。
圖 13 .NVIDIA Aerial 5G L1 以 CPU 為中心的架構(gòu),帶有 DPDK gpudev 庫
第一個(gè)實(shí)現(xiàn)在現(xiàn)代 Intel x86 系統(tǒng)上僅使用一個(gè) CPU 內(nèi)核,就能夠以 25 Gbps 的速度保持 4 個(gè) RU 的工作速度。然而,隨著基站數(shù)量的增加,網(wǎng)卡和 GPU 之間的 CPU 功能成為瓶頸。
CPU 按順序工作。隨著單個(gè) CPU 核心接收和管理越來越多的 RU 流量,同一 RU 的兩次接收之間的時(shí)間取決于 RU 的數(shù)量。對(duì)于 2 個(gè) CPU 核,每個(gè)核在 RU 的子集上工作,相同 RU 的兩次接收之間的時(shí)間減半。然而,這種方法對(duì)于越來越多的客戶端是不可擴(kuò)展的。此外,PCIe 事務(wù)的數(shù)量從 NIC 增加到 CPU ,然后從 CPU 增加到 GPU (圖 14)。
圖 14 . NVIDIA Aerial 5G 應(yīng)用程序以 CPU 為中心的控制流程,連接了多個(gè) RU 。CPU 內(nèi)核順序地接收并通知每個(gè)連接的 RU 的 GPU 重建內(nèi)核。這不是一種可擴(kuò)展的方法。
為了克服所有這些問題,NVIDIA Aerial SDK 的以 GPU 為中心的新版本已通過 DOCA GPUNetIO 庫實(shí)現(xiàn)。每個(gè) CUDA 內(nèi)核負(fù)責(zé)在每個(gè)時(shí)隙重建來自特定 RU 的數(shù)據(jù)包,并通過接收能力進(jìn)行了改進(jìn)(圖 15)。
圖 15 . 以 GPU 為中心的 NVIDIA Aerial SDK 5G 架構(gòu),采用 NVIDIA DOCA GPUNetIO
此時(shí),關(guān)鍵路徑中不需要 CPU ,因?yàn)槊總€(gè) CUDA 內(nèi)核都是完全獨(dú)立的,能夠并行和實(shí)時(shí)處理越來越多的 RU 。這增加了系統(tǒng)容量,并減少了每個(gè)時(shí)隙處理數(shù)據(jù)包的延遲和 PCIe 事務(wù)的數(shù)量。CPU 不必與 GPU 通信以提供數(shù)據(jù)包信息。
圖 16 . NVIDIA Aerial 5G SDK 以 GPU 為中心的控制流程,連接了多個(gè) RU 。這是一種可擴(kuò)展的方法,它保證了對(duì)所有連接的平等和公平服務(wù)。
根據(jù)標(biāo)準(zhǔn),5G 網(wǎng)絡(luò)必須根據(jù)特定模式交換數(shù)據(jù)包。每個(gè)時(shí)隙(例如 500 微秒),數(shù)據(jù)包應(yīng)該以 14 個(gè)所謂的符號(hào)發(fā)送。每個(gè)符號(hào)由若干個(gè)數(shù)據(jù)包組成(取決于使用情況),這些數(shù)據(jù)包將在較小的時(shí)間窗口(例如,36 微秒)內(nèi)發(fā)送。為了在下行鏈路側(cè)支持這種定時(shí)傳輸模式,NVIDIA Aerial SDK 通過 DOCA GPUNetIO API 將 GPU 發(fā)起的通信與精確發(fā)送調(diào)度相結(jié)合。
一旦 GPU 信號(hào)處理準(zhǔn)備好要在未來時(shí)隙中發(fā)送的數(shù)據(jù),每個(gè) RU 的專用 CUDA 內(nèi)核將該數(shù)據(jù)分割成每個(gè) RU 的以太網(wǎng)數(shù)據(jù)包,并在未來的特定時(shí)間調(diào)度它們的未來傳輸。然后,同一 CUDA 內(nèi)核將數(shù)據(jù)包推送到 NIC ,NIC 將負(fù)責(zé)在正確的時(shí)間發(fā)送每個(gè)數(shù)據(jù)包(圖 17)。
圖 17 . NVIDIA Aerial 5G SDK 定時(shí)傳輸模式使用 GPU 發(fā)起的通信和精確發(fā)送調(diào)度功能,通過 NVIDIA DOCA GPUNetIO 實(shí)現(xiàn)
盡早訪問 NVIDIA DOCA GPUNetIO
作為研究項(xiàng)目的一部分,DOCA GPUNetIO 包處于實(shí)驗(yàn)狀態(tài)。它可以早期訪問,是最新 DOCA 版本的擴(kuò)展。它可以安裝在主機(jī)系統(tǒng)或 DPU 融合卡上,包括:
-
應(yīng)用程序初始設(shè)置階段的一組 CPU 函數(shù),用于準(zhǔn)備環(huán)境并創(chuàng)建隊(duì)列和其他對(duì)象
-
您可以在 CUDA 內(nèi)核中調(diào)用一組特定于 GPU 的函數(shù),以發(fā)送或接收數(shù)據(jù)包,并與 DOCA GPUNetIO 信號(hào)量交互
-
您可以構(gòu)建和運(yùn)行應(yīng)用程序源代碼來測試功能,并了解如何使用 DOCA GPUNetIO API
硬件要求是 ConnectX-6 Dx 或更新的網(wǎng)卡和 GPU Volta 或更新的。強(qiáng)烈建議在兩者之間使用專用 PCIe 網(wǎng)橋。軟件要求為 Ubuntu 20.04 或更新版本、CUDA 11.7 或更新版本以及 MOFED 5.8 或更新版本。
如果您有興趣了解更多信息并獲得 NVIDIA DOCA GPUNetIO 的實(shí)踐經(jīng)驗(yàn),以幫助您開發(fā)下一個(gè)關(guān)鍵應(yīng)用程序,請(qǐng)聯(lián)系 NVIDIA 技術(shù)支持獲取早期訪問權(quán)限。請(qǐng)注意,DOCA GPUNetIO 庫目前僅在 NVIDIA 的 NDA 下可用。
想要與更多開發(fā)者交流學(xué)習(xí),請(qǐng)掃描下方二維碼加入我們的論壇。
查看以下精彩內(nèi)容,了解更多關(guān)于 NVIDIA BlueField DPU 和 DOCA 的信息
NVIDIA BlueField DPU 和 DOCA 連獲三獎(jiǎng),大放光彩
NVIDIA DOCA 推出基于主機(jī)的網(wǎng)絡(luò)(HBN)1.2.0 版本
NVIDIA DOCA 1.5 長期支持版本發(fā)布
免費(fèi)學(xué) DOCA 軟件開發(fā)入門課程 釋放 DPU 潛力
原文標(biāo)題:使用 NVIDIA DOCA GPUNetIO 進(jìn)行內(nèi)聯(lián) GPU 數(shù)據(jù)包處理
文章出處:【微信公眾號(hào):NVIDIA英偉達(dá)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
英偉達(dá)
+關(guān)注
關(guān)注
22文章
3780瀏覽量
91205
原文標(biāo)題:使用 NVIDIA DOCA GPUNetIO 進(jìn)行內(nèi)聯(lián) GPU 數(shù)據(jù)包處理
文章出處:【微信號(hào):NVIDIA_China,微信公眾號(hào):NVIDIA英偉達(dá)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論