Исследователи из университета Юты представили проект 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.

Источник: http://www.opennet.ru/opennews/art.shtml?num=30484