Где отображается память устройства в виртуальной адресации при использовании Intel I / OAT?

Когда я использую Intel I / OAT для DMA с нулевым копированием / нулевым циклом (без CPU) через async_memcpy, тогда где отображается виртуальная адресация памяти устройства: в буфер ядра (пространство ядра) или в буфер пользователя (пространство пользователя)?

И имеет ли смысл использовать I / OAT в современных процессорах x86_64 (когда ядро ​​процессора может быстро получить доступ к оперативной памяти без северного моста чипсета)?

http://www.intel.com/content/www/us/en/wireless-network/accel-technology.html

1

Решение

Учитывая, что память является физической памятью, это может быть любая память, к которой может обращаться ядро, включая как буферы ядра, так и буферы пространства пользователя. Однако он должен быть «закреплен» или «заблокирован», чтобы память не отнималась (например, кто-то делает free в памяти не следует освобождать память обратно в ОС для переназначения другому процессу, поскольку в этом случае вы можете получить очень интересные эффекты). Это, конечно, те же правила, которые применяются к различным другим доступам DMA.

Я очень сомневаюсь, что это помогает в копировании структур данных для вашего обычного пользовательского приложения. С другой стороны, я не верю, что Intel внедрила бы такие функции в процессор, если они не думали, что это каким-то образом выгодно. Насколько я понимаю, это полезно для копирования сетевого приемного буфера в приложение пользовательского режима, которое получает данные, с меньшим использованием ЦП. Он не обязательно сильно ускоряет фактическую передачу памяти (если вообще), но он освобождает процессор от других действий.

Я почти уверен, что видел что-то не так давно об этой технологии [или что-то очень похожем], также входящей в последние модели процессоров, так что я ожидаю, что есть некоторое преимущество в этом.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]