網(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ù)包處理管線(xiàn)(Pipeline),以在 GPU 內(nèi)存中接收數(shù)據(jù)包(無(wú)需通過(guò) CPU 內(nèi)存暫存副本);與一個(gè)或多個(gè) CUDA 內(nèi)核并行地處理它們;然后運(yùn)行推斷、評(píng)估或通過(guò)網(wǎng)絡(luò)發(fā)送計(jì)算結(jié)果。 通常,在這個(gè)管線(xiàn)中,CPU 是協(xié)調(diào)人,因?yàn)樗仨毷咕W(wǎng)卡(NIC)接收活動(dòng)與 GPU 處理同步。一旦 GPU 內(nèi)存中接收到新的數(shù)據(jù)包,這將喚醒 CUDA 內(nèi)核。類(lèi)似的方法也可以應(yīng)用于管線(xiàn)的發(fā)送側(cè)。
圖 1 . 以 CPU 為中心的應(yīng)用程序, CPU 協(xié)調(diào) GPU 和網(wǎng)卡工作 數(shù)據(jù)平面開(kāi)發(fā)套件(DPDK)框架引入了 goudev 庫(kù)?來(lái)為此類(lèi)應(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)用程序可能需要專(zhuān)用整個(gè) CPU 物理核心來(lái)接收(和/或發(fā)送)數(shù)據(jù)包
不可擴(kuò)展:為了與不同的隊(duì)列并行接收(或發(fā)送),應(yīng)用程序可能需要使用多個(gè) CPU 核心,即使在 CPU 核心的總數(shù)可能被限制在較低數(shù)量(取決于平臺(tái))的系統(tǒng)上也是如此
平臺(tái)依賴(là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)存,處理就可以開(kāi)始。同樣的方法也適用于發(fā)送操作。 GPU 從 CUDA 內(nèi)核控制 NIC 活動(dòng)的能力稱(chēng)為 GPU 發(fā)起的通信。假設(shè)使用 NVIDIA GPU 和 NVIDIA NIC ,則可以將 NIC 寄存器暴露給 GPU 的直接訪(fǎng)問(wèn)。這樣,CUDA 內(nèi)核可以直接配置和更新這些寄存器,以協(xié)調(diào)發(fā)送或接收網(wǎng)絡(luò)操作,而無(wú)需 CPU 的干預(yù)。
圖 2 . 以 GPU 為中心的應(yīng)用程序,GPU 控制網(wǎng)卡和數(shù)據(jù)包處理,無(wú)需 CPU 根據(jù)定義,DPDK 是 CPU 框架。要啟用 GPU 發(fā)起的通信,需要在 GPU 上移動(dòng)整個(gè)控制路徑,這是不適用的。因此,通過(guò)創(chuàng)建新的 NVIDIA DOCA 庫(kù)來(lái)啟用此功能。 ?
02?NVIDIA DOCA GPUNetIO 庫(kù)
NVIDIA DOCA SDK 是新的 NVIDIA 框架,由驅(qū)動(dòng)程序、庫(kù)、工具、文檔和示例應(yīng)用程序組成。需要這些資源通過(guò)利用 NVIDIA 硬件可以在主機(jī)系統(tǒng)和 DPU 上可用的網(wǎng)絡(luò)、安全性和計(jì)算功能來(lái)支持應(yīng)用程序。 NVIDIA DOCA GPUNetIO 是在 NVIDIA DOCA 1.5 版本的基礎(chǔ)上開(kāi)發(fā)的一個(gè)新庫(kù),用于在 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ù)(通過(guò) GDRCopy 功能)和 GPU 發(fā)起的通信。 這使 CUDA 內(nèi)核能夠直接控制 NVIDIA ConnectX 網(wǎng)卡。為了最大化性能, DOCA GPUNetIO 庫(kù)必須用于 GPUDirect 友好的平臺(tái),其中 GPU 和網(wǎng)卡通過(guò)專(zhuān)用 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)用程序那樣,通過(guò) OOB 機(jī)制跨對(duì)等端進(jìn)行預(yù)同步階段。也無(wú)需假設(shè)其他對(duì)等端將使用 DOCA GPUNetIO 進(jìn)行通信,也無(wú)需了解拓?fù)?。在未?lái)的版本中,RDMA 選項(xiàng)將被啟用以覆蓋更多的用例。 DOCA 當(dāng)前版本中啟用的 GPUNetIO 功能包括:
GPU 發(fā)起的通信: CUDA 內(nèi)核可以調(diào)用 DOCA GPUNetIO 庫(kù)中的 CUDA device 函數(shù),以指示網(wǎng)卡發(fā)送或接收數(shù)據(jù)包
精確的發(fā)送調(diào)度:通過(guò) GPU 發(fā)起的通信,可以根據(jù)用戶(hù)提供的時(shí)間戳來(lái)調(diào)度未來(lái)的數(shù)據(jù)包傳輸
GPU Direct RDMA :以連續(xù)固定大小 GPU 內(nèi)存步幅接收或發(fā)送數(shù)據(jù)包,無(wú)需 CPU 內(nèi)存暫存副本
信號(hào)量:在 CPU 和 GPU 之間或不同 GPU CUDA 內(nèi)核之間提供標(biāo)準(zhǔn)化的低延遲消息傳遞協(xié)議
CPU 對(duì) CUDA 內(nèi)存的直接訪(fǎng)問(wèn):CPU 可以在不使用 GPU 內(nèi)存 API 的情況下修改 GPU 內(nèi)存緩沖區(qū)
圖 3 . NVIDIA DOCA GPUNetIO 是一個(gè)新的 DOCA 庫(kù),需要在同一平臺(tái)上安裝 GPU 和 CUDA 驅(qū)動(dòng)程序和庫(kù) 如圖 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ì)列中放置哪種類(lèi)型的數(shù)據(jù)包(例如,IP 地址的子集、TCP 或 UDP 協(xié)議等)
啟動(dòng)一個(gè)或多個(gè) CUDA 內(nèi)核(執(zhí)行數(shù)據(jù)包處理/過(guò)濾/分析)
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ù)包處理管線(xiàn)數(shù)據(jù)流 以下各節(jié)概述了結(jié)合 DOCA GPUNetIO 構(gòu)建塊的可能 GPU 數(shù)據(jù)包處理管線(xiàn)應(yīng)用程序布局。 ?
03?CPU 接收和 GPU 處理
第一個(gè)示例以 CPU 為中心,不使用 GPU 發(fā)起的通信功能。它可以被視為以下章節(jié)的基線(xiàn)。CPU 創(chuàng)建可從 CPU 自身管理的接收隊(duì)列,以接收 GPU 存儲(chǔ)器中的數(shù)據(jù)包,并為每個(gè)隊(duì)列分配流量控制規(guī)則。 在運(yùn)行時(shí),CPU 接收 GPU 存儲(chǔ)器中的數(shù)據(jù)包。它通過(guò) DOCA GPUNetIO 信號(hào)量向一個(gè)或多個(gè) CUDA 內(nèi)核通知每個(gè)隊(duì)列新一組數(shù)據(jù)包的到達(dá),提供 GPU 內(nèi)存地址和數(shù)據(jù)包數(shù)量等信息。在 GPU 上,CUDA 內(nèi)核輪詢(xún)信號(hào)量,檢測(cè)更新并開(kāi)始處理數(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)量具有類(lèi)似于 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)重依賴(lài) CPU 型號(hào)、功率和內(nèi)核數(shù)量。 ?
04?GPU 接收和 GPU 處理
上一節(jié)中描述的以 CPU 為中心的管線(xiàn)可以通過(guò)以 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è)專(zhuān)用于接收數(shù)據(jù)包,另一個(gè)專(zhuān)用用于數(shù)據(jù)包處理。接收器 CUDA 內(nèi)核可以通過(guò)信號(hào)量向第二 CUDA 內(nèi)核提供數(shù)據(jù)包信息。
圖 6 . GPU 數(shù)據(jù)包處理管線(xiàn),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ì)列,并行地接收來(lái)自所有隊(duì)列的所有數(shù)據(jù)包。 ?
06?單CUDA內(nèi)核
通過(guò)使單個(gè) CUDA 內(nèi)核負(fù)責(zé)接收和處理數(shù)據(jù)包,仍然為每個(gè)隊(duì)列專(zhuān)用一個(gè) CUDA 塊,可以簡(jiǎn)化先前的實(shí)現(xiàn)。
圖 7 . GPU 數(shù)據(jù)包處理管線(xiàn),單個(gè) GPU CUDA 內(nèi)核接收 GPU 內(nèi)存中的數(shù)據(jù)包并進(jìn)行數(shù)據(jù)包處理 這種方法的一個(gè)缺點(diǎn)是每個(gè) CUDA 塊兩個(gè)接收操作之間的延遲。如果數(shù)據(jù)包處理需要很長(zhǎng)時(shí)間,應(yīng)用程序可能無(wú)法跟上在高速網(wǎng)絡(luò)中接收新數(shù)據(jù)包的速度。 ?
07?GPU 接收、 GPU 處理和 GPU 發(fā)送
到目前為止,大多數(shù)關(guān)注點(diǎn)都集中在管線(xiàn)的“接收和處理”部分。然而,DOCA GPUNetIO 還可以在 GPU 上生成一些數(shù)據(jù),制作數(shù)據(jù)包并從 CUDA 內(nèi)核發(fā)送,而無(wú)需 CPU 干預(yù)。圖 8 描述了一個(gè)完整的接收、處理和發(fā)送管線(xiàn)的示例
圖 8 . 具有 GPU CUDA 內(nèi)核的 GPU 數(shù)據(jù)包處理管線(xiàn)在 GPU 內(nèi)存中接收數(shù)據(jù)包,進(jìn)行數(shù)據(jù)包處理,最后制作新數(shù)據(jù)包 ?
08?NVIDIA DOCA?
GPUNetIO 示例應(yīng)用程序
與任何其他 NVIDIA DOCA 庫(kù)一樣,DOCA GPUNetIO 有一個(gè)專(zhuān)用應(yīng)用程序,用于 API 使用參考和測(cè)試系統(tǒng)配置和性能。該應(yīng)用程序?qū)崿F(xiàn)了前面描述的管線(xiàn),提供了不同類(lèi)型的數(shù)據(jù)包處理,如 IP 校驗(yàn)和、HTTP 數(shù)據(jù)包過(guò)濾和流量轉(zhuǎn)發(fā)。 以下部分概述了應(yīng)用程序的不同操作模式。報(bào)告了一些性能數(shù)據(jù),將其視為可能在未來(lái)版本中更改和改進(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 ,其通過(guò) 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 無(wú)關(guān)。 請(qǐng)注意,DOCA GPUNetIO 最低要求是具有 GPU 和具有直接 PCIe 連接的 NIC 的系統(tǒng)。DPU 并不是嚴(yán)格要求。 ?
09?IP 校驗(yàn)和, GPU 僅接收
應(yīng)用程序使用 GPU 發(fā)起的通信來(lái)創(chuàng)建一個(gè)或多個(gè)接收隊(duì)列以接收分?jǐn)?shù)據(jù)包??梢允褂脝?CUDA 內(nèi)核或多 CUDA 內(nèi)核模式。
圖 10 . NVIDIA DOCA GPUNetIO 應(yīng)用程序中的第一個(gè)管線(xiàn)模式:GPU 接收、計(jì)算 IP 校驗(yàn)和并向 CPU 報(bào)告 每個(gè)數(shù)據(jù)包都通過(guò)簡(jiǎn)單的 IP 校驗(yàn)和驗(yàn)證進(jìn)行處理,只有通過(guò)此測(cè)試的數(shù)據(jù)包才算作“好數(shù)據(jù)包”。通過(guò)信號(hào)量,好數(shù)據(jù)包的數(shù)量被報(bào)告給 CPU ,CPU 可以在控制臺(tái)上打印報(bào)告。 通過(guò)使用 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)行了測(cè)試,結(jié)果相同,證明了 GPU 發(fā)起的通信是一個(gè)獨(dú)立于平臺(tái)的解決方案。 由于數(shù)據(jù)包大小為 512 字節(jié),T-Rex 數(shù)據(jù)包生成器無(wú)法發(fā)送超過(guò) 86 Gbps(約 20.9 Mpps)的數(shù)據(jù)包。即使每秒數(shù)據(jù)包的數(shù)量幾乎是兩倍,DOCA GPUNetIO 也沒(méi)有報(bào)告任何數(shù)據(jù)包丟失。 ?
10?HTTP 過(guò)濾, GPU 僅接收
假設(shè)一個(gè)更復(fù)雜的場(chǎng)景,數(shù)據(jù)包處理 CUDA 內(nèi)核只過(guò)濾具有特定特征的 HTTP 數(shù)據(jù)包。它將“好數(shù)據(jù)包”信息復(fù)制到第二個(gè) GPU 內(nèi)存 HTTP 數(shù)據(jù)包列表中。一旦此 HTTP 數(shù)據(jù)包列表中的下一個(gè)項(xiàng)目充滿(mǎn)了數(shù)據(jù)包,通過(guò)專(zhuān)用信號(hào)量,過(guò)濾 CUDA 內(nèi)核就會(huì)解除第二個(gè) CUDA 內(nèi)核的阻止,從而對(duì)累積的 HTTP 數(shù)據(jù)包進(jìn)行一些推斷。信號(hào)量還可用于向 CPU 線(xiàn)程報(bào)告統(tǒng)計(jì)信息。
圖 11 . ?NVIDIA DOCA GPUNetIO 應(yīng)用程序中的第二種管線(xiàn)模式。GPU 只接收、過(guò)濾 HTTP 數(shù)據(jù)包,并通過(guò)專(zhuān)用信號(hào)量解除阻止 CUDA 內(nèi)核對(duì)這些數(shù)據(jù)包進(jìn)行分析 該管線(xiàn)配置提供了復(fù)雜流水線(xiàn)的示例,該復(fù)雜管線(xiàn)包括多個(gè)數(shù)據(jù)處理和過(guò)濾階段以及諸如 AI 管線(xiàn)之類(lèi)的推理功能。 ?
11?流量轉(zhuǎn)發(fā)
本節(jié)介紹如何通過(guò) GPU 發(fā)起的通信使用 DOCA GPUNetIO 啟用流量轉(zhuǎn)發(fā)。在每個(gè)接收到的數(shù)據(jù)包中,在通過(guò)網(wǎng)絡(luò)發(fā)送回?cái)?shù)據(jù)包之前,交換 MAC 和 IP 源地址和目的地址。
圖 12 . NVIDIA DOCA GPUNetIO 應(yīng)用程序中的第三種管線(xiàn)模式。GPU 接收、交換每個(gè)數(shù)據(jù)包的 MAC 和 IP 地址,并發(fā)送回修改后的數(shù)據(jù)包。 通過(guò)使用 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)用程序的越來(lái)越多的對(duì)等端時(shí)可能成為瓶頸。GPU 提供的高度并行化可以提供可擴(kuò)展的實(shí)現(xiàn),以并行處理大量對(duì)等端,而不會(huì)影響性能。 NVIDIA Aerial 是一個(gè)用于構(gòu)建高性能、軟件定義的 5G L1 堆棧的 SDK,該堆棧通過(guò) GPU 上的并行處理進(jìn)行了優(yōu)化。具體而言,NVIDIA Aero SDK 可用于構(gòu)建基帶單元(BBU)軟件,該軟件負(fù)責(zé)通過(guò)無(wú)線(xiàn)電單元(RU)發(fā)送(下行鏈路)或接收(上行鏈路)無(wú)線(xiàn)客戶(hù)端數(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)核專(zhuān)用于每個(gè)時(shí)隙的每個(gè) RU ,以重建幀并觸發(fā) GPU 信號(hào)處理的 CUDA 內(nèi)核序列。 通過(guò) DPDK gpudev 庫(kù)實(shí)現(xiàn)了網(wǎng)卡接收數(shù)據(jù)包以及 GPU 重新排序和處理數(shù)據(jù)包的編排(圖 13)。
圖 13 .?NVIDIA Aerial 5G L1 以 CPU 為中心的架構(gòu),帶有 DPDK gpudev 庫(kù) 第一個(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 核心接收和管理越來(lái)越多的 RU 流量,同一 RU 的兩次接收之間的時(shí)間取決于 RU 的數(shù)量。對(duì)于 2 個(gè) CPU 核,每個(gè)核在 RU 的子集上工作,相同 RU 的兩次接收之間的時(shí)間減半。然而,這種方法對(duì)于越來(lái)越多的客戶(hù)端是不可擴(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ò)展的方法。 為了克服所有這些問(wèn)題,NVIDIA Aerial SDK 的以 GPU 為中心的新版本已通過(guò) DOCA GPUNetIO 庫(kù)實(shí)現(xiàn)。每個(gè) CUDA 內(nèi)核負(fù)責(zé)在每個(gè)時(shí)隙重建來(lái)自特定 RU 的數(shù)據(jù)包,并通過(guò)接收能力進(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í)處理越來(lái)越多的 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 通過(guò) DOCA GPUNetIO API 將 GPU 發(fā)起的通信與精確發(fā)送調(diào)度相結(jié)合。 一旦 GPU 信號(hào)處理準(zhǔn)備好要在未來(lái)時(shí)隙中發(fā)送的數(shù)據(jù),每個(gè) RU 的專(zhuān)用 CUDA 內(nèi)核將該數(shù)據(jù)分割成每個(gè) RU 的以太網(wǎng)數(shù)據(jù)包,并在未來(lái)的特定時(shí)間調(diào)度它們的未來(lái)傳輸。然后,同一 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)度功能,通過(guò) NVIDIA DOCA GPUNetIO 實(shí)現(xiàn) ?
13?盡早訪(fǎng)問(wèn) NVIDIA DOCA GPUNetIO
作為研究項(xiàng)目的一部分,DOCA GPUNetIO 包處于實(shí)驗(yàn)狀態(tài)。它可以早期訪(fǎng)問(wèn),是最新 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)用程序源代碼來(lái)測(cè)試功能,并了解如何使用 DOCA GPUNetIO API
硬件要求是 ConnectX-6 Dx 或更新的網(wǎng)卡和 GPU Volta 或更新的。強(qiáng)烈建議在兩者之間使用專(zhuān)用 PCIe 網(wǎng)橋。軟件要求為 Ubuntu 20.04 或更新版本、CUDA 11.7 或更新版本以及 MOFED 5.8 或更新版本。
編輯:黃飛
?
評(píng)論