Где отображается память устройства в виртуальной адресации при использовании Intel I/OAT?
Когда я использую Intel I/OAT для передачи без копий / нулевых циклов DMA (без ЦП) через async_memcpy, то где отображается память устройства в виртуальной адресации: в буфер ядра (пространство ядра) или в пользовательский буфер (пространство пользователя)?
И имеет ли смысл использовать I/OAT в современных процессорах x86_64 (когда ядро CPU может быстро получить доступ к оперативной памяти без северного моста чипсета)?
http://www.intel.com/content/www/us/en/wireless-network/accel-technology.html
1 ответ
Учитывая, что память является физической памятью, это может быть любая память, к которой может обращаться ядро, включая как буферы ядра, так и буферы пространства пользователя. Однако он должен быть "закреплен" или "заблокирован", чтобы не забрать память (например, кто-то делает free
в памяти не следует освобождать память обратно в ОС для переназначения другому процессу, поскольку в этом случае вы можете получить очень интересные эффекты). Это, конечно, те же правила, которые применяются к различным другим доступам DMA.
Я очень сомневаюсь, что это помогает в копировании структур данных для вашего обычного пользовательского приложения. С другой стороны, я не верю, что Intel внедрила бы такие функции в процессор, если они не думали, что это каким-то образом выгодно. Насколько я понимаю, это полезно для копирования сетевого приемного буфера в приложение пользовательского режима, которое получает данные, с меньшим участием ЦП. Он не обязательно сильно ускоряет фактическую передачу памяти (если вообще), но освобождает ЦП от других действий.
Я почти уверен, что видел что-то не так давно об этой технологии [или что-то очень похожем], также входящей в последние модели процессоров, так что я ожидаю, что есть некоторое преимущество в этом.