Miután tavaly a japán Linux Plumbers Conference rendezvényen bemutatta az ötletét, Taehee Yoo tegnap RFC (Request For Comments) jelzéssel elküldte a KNOD javítócsomagokat a Linux kernel levelezőlistára.
A KNOD egy in-kernel hálózati offload eszköz, amely teljesen a kernel vezérlése alatt működik, és gyorsítja a csomagfeldolgozást ROCm vagy bármilyen más felhasználói térbeli komponens nélkül. Maga a kernel kód kezeli a GPU queue-kat, JIT-tel lefordítja a csomagonként futó programot GPU gépi kódra, majd kiosztja a munkát. A hálózati adapter DMA-val közvetlenül a GPU memóriájába másolja a beérkező csomagokat. A koncepció lehetővé teszi meglévő XDP programok és IPsec SA-k átlátható, közvetlen offloadolását is a GPU-ra.
„A vonali sebességű csomagfeldolgozás, amely nem triviális csomagonkénti munkát végez – például egy XDP program L4 terheléselosztással vagy IPsec titkosítással – a gazdagép CPU-ján akad el: minden mag egyszerre egy csomagot kezel, így a skálázás több magot igényel. A GPU ennek pont az ellentéte – több ezer végrehajtó egység futtatja ugyanazt a kis programot egyszerre rengeteg csomagon (SIMT) –, ami jól illeszkedik az XDP csomagonkénti programmodelljéhez.
A knod ezt a csomagonkénti számítást leveszi a gazdagép CPU-járól, és a GPU-ra helyezi át. A NIC DMA-val közvetlenül a GPU memóriájába tölti a beérkező csomagokat, a GPU párhuzamosan, egy csomagcsomagon futtatja a programot, és csak az eredmény kerül vissza: egy döntés minden csomagra, plusz maga a csomag azoknál, amelyek a gazdagép felé tartanak. A CPU többé nem fizeti meg a csomagonkénti programköltséget, az áteresztőképesség pedig a GPU kihasználtságával skálázódik, nem a magok számával.
A döntő különbség, hogy mindez teljes egészében a kernel-ben történik. A GPU-s csomagfeldolgozás ma általában felhasználói térbeli GPU runtime-ból (CUDA és társai) indítja a munkát, és ezt a runtime-ot a datapath-ben tartja; a knod ezzel szemben a kernel-ből építi fel a GPU queue-kat, fordítja le a programot és indítja a futtatást, így a meglévő offload útvonalakhoz (XDP, xfrm) csatlakozik, anélkül hogy bármit telepíteni vagy futtatni kellene felhasználói térben.”
A fejlesztés GCN hardveren, Radeon RX Vega kártyákon, valamint RDNA2 hardveren zajlott. Az AMD itt egyértelmű előnyben van a teljesen nyílt forráskódú, upstream driver stack miatt. Az NVIDIA oldalán ugyan létezik hivatalos nyílt forráskódú kernel driver, de nem upstream, a Nouveau/NOVA driverek pedig még nem elég érettek ilyen feladatokhoz. Idővel az Intel GPU-k támogatása is szóba jöhet a KNOD esetében, de eddig minden munka AMD GPU-kon történt.
A KNOD-hoz készült, nagyon ígéretes Linux kernel javítócsomagokat itt lehet áttekinteni: Linux kernel mailing list.
További háttérinformációk erről a közvetlenül GPU-kon futó, in-kernel hálózati csomagfeldolgozásról itt érhetők el: LPC 2025 presentation.

