Отображение DMA буферизует к [закрытому] пространству пользователя

11
задан Ravi Gupta 26 July 2010 в 10:21
поделиться

2 ответа

Посмотрите внимательно на драйверы Infiniband. Они прилагают много усилий, чтобы заставить работать DMA с нулевым копированием и RDMA в пользовательском пространстве.

Я забыл добавить это перед сохранением:

Выполнение DMA непосредственно в отображениях памяти пользовательского пространства полно проблем, поэтому, если у вас нет очень высоких требований к производительности, таких как Infiniband или 10 Gb Ethernet, не делайте этого. Вместо этого скопируйте данные DMA в буферы пользовательского пространства. Это избавит вас от многих проблем.

Для примера, что если программа пользователя завершается до завершения DMA? Что если после выхода пользовательская память будет перераспределена другому процессу, но аппаратное обеспечение все еще настроено на DMA в этой странице? Катастрофа!

4
ответ дан 3 December 2019 в 03:17
поделиться

Ну, если у вас есть LDD, вы можете заглянуть в главу 15, а точнее на страницу 435, где описаны операции прямого ввода-вывода.

Вызов ядра, который поможет вам достичь этого, это get_user_pages. В вашем случае, поскольку вы хотите отправить данные из ядра в пользовательское пространство, вы должны установить флаг записи в 1.

Имейте также в виду, что асинхронный ввод/вывод может позволить вам достичь тех же результатов, но при этом вашему приложению пользовательского пространства не придется ждать завершения чтения, что может быть лучше.

5
ответ дан 3 December 2019 в 03:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: