Прямой доступ к памяти GPU через io_uring
В рамках окна слияния Linux 7.4, опубликованного 27 октября 2026 года, в основное дерево ядра был интегрирован механизм, позволяющий использовать DMA-BUF в пути ввода-вывода через фреймворк io_uring. Это решение устраняет необходимость в копировании данных процессором (CPU) при обмене буферами между подсистемами, что критически важно для высокопроизводительных вычислений и графики.
Технология DMA-BUF уже широко используется драйверами GPU, медиа- и сетевыми подсистемами для эффективного обмена памятью. Теперь же она официально поддерживается в io_uring, открывая путь к zero-copy операциям для блочных устройств.Технические детали и ограничения
Работу над патчем, который прошел одиннадцать раундов рецензирования, возглавил разработчик Павел Бегунков (Pavel Begunkov). Функция является опциональной: файлы должны явно реализовать новую операцию файла для её активации. На текущем этапе поддержка ограничена только устройствами NVMe PCIe.
API строится на базе «зарегистрированных буферов» (registered buffers) io_uring. Пользователь регистрирует DMA-BUF особым образом, после чего может использовать его в запросах IORING_OP_{READ,WRITE}_FIXED. Буферы для блочных устройств могут достигать размера до 4 ГБ.
Производительность и метрики
Хотя детальные бенчмарки в исходном тексте описаны обобщенно как «впечатляющие», ключевым фактором является архитектура решения. Отсутствие копирования данных через CPU снижает задержки и разгружает процессор, что особенно заметно при работе с большими объемами данных в сценариях, где GPU и NVMe-накопители обмениваются информацией в реальном времени.
| Параметр | Значение / Описание |
|---|---|
| Версия ядра | Linux 7.4 |
| Ключевая технология | DMA-BUF в io_uring |
| Поддерживаемые устройства | Только NVMe PCIe (на текущий момент) |
| Максимальный размер буфера | До 4 ГБ |
| Основной разработчик | Pavel Begunkov |
| Тип операций | Чтение/Запись без копирования (Zero-copy) |
Почему это важно
Интеграция DMA-BUF в io_uring знаменует собой важный шаг к унификации высокопроизводительного ввода-вывода. Для разработчиков приложений, работающих с графикой, видеообработкой или высоконагруженными базами данных, это означает возможность создавать более эффективные конвейеры данных, где память не перемещается лишний раз между ядром и пользовательским пространством, а напрямую адресуется устройствами.
Источник: Phoronix ↗
