Возможно ли, чтобы приложение пользовательского пространства Linux использовало собственную память для DMA без блокировки IOMMU и без использования VFIO?Пользовательское пространство Linux DMA с iommu = вкл. И без VFIO
Наше приложение отлично работает, когда iommu отключен (intel_iommu = off) или в режиме перехода (intel_iommu = passthrough). Однако это не работает, когда включен IOMMU (intel_iommu = on), поскольку память, которую мы выделяем в пользовательском пространстве, не допускается для DMA.
Официальным решением было бы использовать интерфейс VFIO Linux для управления IOMMU, однако мы считаем, что функция VFIO не очень зрелая и предпочла бы найти более простое решение.
Можем ли мы как-то поручить IOMMU разрешить DMA для физической памяти, которую мы выделили? Это было бы замечательно, потому что тогда нам не пришлось бы инструктировать наших пользователей изменять свои параметры загрузки ядра.
Если есть простое и надежное решение на основе VFIO, это также было бы интересно.
См связанного предыдущий вопрос подробность о том, как мы выделяем память: mremap(2) with HugeTLB to change virtual address?
Спасибо за подробный ответ. На самом деле это не подходит для нас, потому что мы хотим, чтобы наше приложение строго занимало пространство пользователя и не зависело от новых модулей ядра. –