Отображенный в памяти ввод-вывод против DMA? - PullRequest
0 голосов
/ 27 сентября 2019

Основываясь на том, что я узнал из комментариев и ответов (спасибо всем!), Я отредактировал вопрос так, чтобы он был более целенаправленным:

DMA:

Перед первым DMA ЦП долженнастроить такие вещи, как диапазон адресов RAM, зарезервированный для использования устройством для прямого доступа к памяти.После того, как работа по настройке завершена, может ли устройство инициировать передачу по своему желанию, в основном владея этой частью ОЗУ, или ему все равно необходимо снова получать какое-то разрешение от ЦП перед каждой передачей данных SIMLGE DMA?

MMIO:

Процессор, осуществляющий доступ к памяти устройства через mmio, стоит дороже по сравнению с процессором, обращающимся к оперативной памяти, но я вижу, что на моем настольном компьютере устройства pci резервируют для mmio сотни мегабайт, что является примером того, как это можно эффективно использовать(В отличие от копирования данных обратно в ОЗУ с использованием DMA и последующего доступа к ним)?

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

ЦП может обращаться к этой памяти, как если бы она была DRAM, посредством ввода-вывода в память.

Вы неправильно используете терминологию.
Вместо "DRAM" Вы должны использовать термин «основная память», или системная память или ОЗУ.
На современных компьютерах основная / системная память реализована с помощью некоторого типа SDRAM (синхронного динамического ОЗУ).
Сопоставление функционального термина (например,Основная память) с аппаратной реализацией (например, DDR3 SDRAM) кажется безвредным, но может привести к ложному силлогизму, что «ОЗУ изменчива» или другие недоразумения.

Отображение памяти может поместить память / память устройства PCIe в то же адресное пространство, что и основная память.

CPU может передавать порцию данных из памяти этого устройства PCIe в реальную физическую память через DMA.И тогда CPU может свободно обращаться к физической памяти.

«Реальная физическая память» является избыточной.Какие еще виды «физической памяти» существуют?Там нет "поддельной физической памяти".

Вы, похоже, имеете в виду использование буфера в основной памяти как "DMA" .
Это неверно.
DMA не требуется для использования илископировать данные в буфер в основной памяти.

Итак, вопрос в том, может ли ЦП получать доступ к памяти PCIe по картам памяти, зачем ему делать DMA?

Вы, похоже, неправильно используете терминологию.
Возможно, вы захотите изучить эту статью по PCIe .

Это потому, что шина PCIe медленная для произвольного доступа?

Доступ к данным с устройства PCIe очень медленный по сравнению с основной / системной памятью.
Это не имеет ничего общего с «произвольным доступом» .
Информация (например, извлечение данных) по шине PCIe осуществляется с помощью (высокоскоростных) пакетов (даже когда память PCIe отображается в адресное пространство процессора).

И если это так, DMA - это, по сути, один дампускорить частый произвольный доступ, а отображенный в память ввод-вывод - для случайного доступа?

Вы неправильно используете терминологию.

Если программное обеспечение написано неэффективно или необходимо использовать данные только один раз, то оно может получить доступ к памяти PCIe.

Но если программное обеспечение собирается получить доступ к данным более одного раза или считает «локальную» копию более эффективной, тогда программное обеспечение может выделить буфер в основной / системной памяти и скопировать данные из памяти PCIeв основную / системную память, используя PIO (запрограммированный ввод / вывод ЦПУ) или DMA (прямой доступ к памяти через мастер шины PCIe или системный контроллер DMA).

Использование буферов широко распространено в компьютерах.
Большая часть «вычислительного времени» тратится на буферизацию, копирование и перемещение данных.
Ввод-вывод почти всегда выполняется между устройством и буфером в основной памяти, даже если прямая передача с устройства на устройствовозможно.
Не маркируйте использование буфера как "DMA" .

Для получения дополнительной информации о DMA см. Почему драйверу необходимо отображать буферы DMA, когда dma-engine находится в устройстве?
и dma против ввода-вывода, управляемого прерыванием .

0 голосов
/ 27 сентября 2019

Посмотрите на это с точки зрения устройства.Устройство может:

  • напрямую обращаться к самой памяти (используя сам DMA)

  • ждать, пока центральный процессор передает данные в него (предоставляя памятьсопоставленный ввод-вывод для использования ЦП)

Итак, вопрос в том, может ли ЦП получать доступ к памяти PCIe по картам памяти, почему он должен выполнять DMA?

Процессор вообще не использует DMA.Весь смысл DMA состоит в том, чтобы позволить процессору делать другие вещи (или ничего), в то время как устройство выполняет DMA.Конечным результатом является значительное повышение производительности системы в целом - например, CPU / s выполняют много другой работы, в то время как множество устройств (контроллер жесткого диска, видеокарта, звуковая карта, сетевая карта и т. Д.) Также используютDMA для передачи данных вокруг.

...