網(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ā)送。 ?
01?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 庫來啟用此功能。 ?
02?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)用程序布局。 ?
03?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ù)量。 ?
04?GPU 接收和 GPU 處理
上一節(jié)中描述的以 CPU 為中心的管線可以通過以 GPU 為中心的方法進(jìn)行改進(jìn),該方法使用 GPU 發(fā)起的通信,使用 CUDA 內(nèi)核管理接收隊(duì)列。以下部分提供了兩個(gè)示例:多 CUDA 內(nèi)核和單 CUDA 內(nèi)核。 ?
05?多 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ù)包。 ?
06?單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ù)包的速度。 ?
07?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ù)包 ?
08?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)。 請注意,DOCA GPUNetIO 最低要求是具有 GPU 和具有直接 PCIe 連接的 NIC 的系統(tǒng)。DPU 并不是嚴(yán)格要求。 ?
09?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ù)包丟失。 ?
10?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 管線之類的推理功能。 ?
11?流量轉(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ù)包丟失。 ?
12?用于 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) ?
13?盡早訪問 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 或更新版本。
編輯:黃飛
?
評(píng)論