Домой Статьи и аналитика Технологии Использование GPU для ускорения обработки сетевых пакетов в ядре Linux

Использование GPU для ускорения обработки сетевых пакетов в ядре Linux

Новый проект KNOD переносит сетевую нагрузку на видеокарты, используя параллельные вычисления для обработки трафика в обход CPU.

Для обсуждения разработчиками ядра Linux был представлен проект KNOD — механизм, позволяющий использовать графические процессоры AMD для ускорения обработки сетевых пакетов. В отличие от традиционных решений, KNOD работает напрямую с GPU, минуя громоздкие фреймворки пользовательского пространства, такие как AMD ROCm или NVIDIA CUDA. Система самостоятельно управляет очередями графического ускорителя и выполняет JIT-компиляцию BPF-программ, перенаправляя пакеты из памяти сетевой карты в GPU с помощью технологий DMA и Device Memory TCP.

Оптимизация сетевых подсистем

Разработчики KNOD планируют делегировать GPU наиболее ресурсоемкие задачи сетевого стека. В списке потенциальных для ускорения функций значатся:

  • Обработка сетевых протоколов;
  • Шифрование и работа с IPsec;
  • Управление туннелированием;
  • Функциональность netfilter и Open vSwitch (OVS);
  • Подсистема XDP (eXpress Data Path).

Текущий фокус проекта сосредоточен на ускорении подсистемы XDP, которая позволяет запускать eBPF-программы на уровне сетевого драйвера. Это дает возможность обрабатывать пакеты еще до того, как они попадут в основной сетевой стек и потребуют выделения системной памяти.

Масштабируемость через архитектуру GPU

Традиционно производительность при выполнении задач вроде балансировки нагрузки на уровне L4 или IPsec-шифрования жестко ограничена мощностью центрального процессора (CPU). KNOD меняет этот подход: JIT-компилятор транслирует BPF-программы в машинный код GPU. Благодаря массовому параллелизму (архитектура SIMT) тысячи потоков видеокарты способны обрабатывать разные сетевые пакеты одновременно, что позволяет масштабировать пропускную способность сети без необходимости наращивать количество ядер CPU.

Выбор аппаратной базы

На текущий момент проект ориентирован на видеокарты AMD с архитектурой GCN. Выбор обусловлен наличием полноценного открытого драйвера AMDGPU, который уже включен в состав ядра Linux. Он предоставляет необходимую документацию и функциональность для низкоуровневых вычислений без лишних программных прослоек.

Разработчики не исключают, что в будущем KNOD получит поддержку графики Intel. Что касается видеокарт NVIDIA, то полноценная интеграция в настоящее время невозможна из-за отсутствия в основном составе ядра Linux открытого драйвера, подходящего для задач такого уровня (текущий драйвер Nouveau признан непригодным для реализации KNOD).

Источник: http://www.opennet.ru