Разработчики ядра Linux представили набор патчей с механизмом KNOD, который позволяет задействовать GPU AMD для ускорения обработки сетевых пакетов.
Новая технология взаимодействует с видеокартой напрямую, минуя пользовательские фреймворки вроде AMD ROCm и NVIDIA CUDA. KNOD самостоятельно управляет очередями GPU и выполняет JIT-компиляцию BPF-программ, преобразуя их в машинный код для исполнения на графическом процессоре. Пакеты данных передаются из памяти сетевого адаптера в GPU через механизмы DMA и Device Memory TCP.
Среди сетевых задач, которые можно ускорить с помощью GPU, разработчики отмечают обработчики сетевых протоколов, IPsec, туннелирование, шифрование, netfilter, управление трафиком, OVS (Open vSwitch) и XDP. На текущем этапе проект сосредоточен на подсистеме XDP (eXpress Data Path), которая расширяет eBPF возможностью запускать BPF-программы на уровне сетевого драйвера с прямым доступом к DMA-буферу пакетов до выделения памяти сетевым стеком.
При выполнении операций вроде балансировки нагрузки на транспортном уровне (L4 OSI) и IPsec-шифрования через XDP производительность ограничивается количеством ядер CPU. В KNOD такие BPF-программы транслируются JIT-компилятором в машинный код GPU, что позволяет тысячам потоков параллельно обрабатывать разные сетевые пакеты. Это переносит нагрузку с центрального процессора на графический и масштабирует пропускную способность за счет массового параллелизма GPU (SIMT), а не наращивания ядер CPU.
Проект работает на системах с видеокартами AMD на архитектуре GCN. Выбор в пользу AMD обусловлен наличием полноценного открытого драйвера AMDGPU, который интегрирован в основной состав ядра Linux и содержит документированную функциональность для вычислений на GPU без лишних прослоек. В будущем возможна реализация поддержки GPU Intel. Поддержка GPU NVIDIA пока затруднена из-за отсутствия полноценного открытого драйвера в ядре — имеющийся Nouveau непригоден для KNOD.
Информация основана на публикации разработчиков и материале OpenNews (https://opennet.ru/65983-knod).
