Исследователи из университета Юты представили проект KGPU, в рамках которого разработан способ перенести исполнение частей кода ядра Linux на графический процессор, поддерживающий технологию NVIDIA CUDA. Код KGPU распространяется в рамках лицензии GPLv2.
Фреймворк CUDA использует закрытые драйверы NVIDIA, функции которых могут быть вызваны только из пространства пользователя с использованием фирменного SDK, поэтому в KGPU использован метод вызова функций ядра через программу, работающую в пространстве пользователя. Эта программа принимает запросы на обработку данных от модуля ядра и, с помощью CUDA API, передает их программе NSK, работающей на GPU.
NSK или Non-Stop Kernel представляет собой код, исполняемый на GPU и способный загружать дополнительные модули (сервисы в терминологии KGPU), каждый из которых может выполнять определенный вид работы по обработке данных. NSK принимает запросы, загружает сервис (для повышения производительности он может быть загружен заранее) и отдает ему данные, ожидая результатов исполнения, которые затем будут переданы обратно по цепочке модулю ядра. Для передачи данных между компонентами системы используется коммуникационный протокол, реализованный с помощью быстрой pinned-памяти, выделяемой драйвером CUDA.
Такая архитектура позволяет перенести фрагменты кода ядра на графический процессор просто переписав их в виде NSK-сервисов. В подтверждение авторы KGPU создали реализацию алгоритма AES, которая позволила поднять скорость шифрования файловой системы eCryptfs в 6 раз.
В будущем планируется реализовать поддержку режима шифрования CTR, вместо уязвимого ECB, используемого сейчас, поддержку алгоритмов шифрования Blowfish/Twofish, а также добавить поддержку KGPU в подсистему dm-crypt.