On Mon, Nov 21, 2016 at 12:36 PM, Deucher, Alexander
<alexander.deuc...@amd.com> wrote:
> This is certainly not the first time this has been brought up, but I'd like 
> to try and get some consensus on the best way to move this forward.  Allowing 
> devices to talk directly improves performance and reduces latency by avoiding 
> the use of staging buffers in system memory.  Also in cases where both 
> devices are behind a switch, it avoids the CPU entirely.  Most current APIs 
> (DirectGMA, PeerDirect, CUDA, HSA) that deal with this are pointer based.  
> Ideally we'd be able to take a CPU virtual address and be able to get to a 
> physical address taking into account IOMMUs, etc.  Having struct pages for 
> the memory would allow it to work more generally and wouldn't require as much 
> explicit support in drivers that wanted to use it.
>
> Some use cases:
> 1. Storage devices streaming directly to GPU device memory
> 2. GPU device memory to GPU device memory streaming
> 3. DVB/V4L/SDI devices streaming directly to GPU device memory
> 4. DVB/V4L/SDI devices streaming directly to storage devices
>
> Here is a relatively simple example of how this could work for testing.  This 
> is obviously not a complete solution.
> - Device memory will be registered with Linux memory sub-system by created 
> corresponding struct page structures for device memory
> - get_user_pages_fast() will  return corresponding struct pages when CPU 
> address points to the device memory
> - put_page() will deal with struct pages for device memory
>
[..]
> 4. iopmem
> iopmem : A block device for PCIe memory (https://lwn.net/Articles/703895/)

The change I suggest for this particular approach is to switch to
"device-DAX" [1]. I.e. a character device for establishing DAX
mappings rather than a block device plus a DAX filesystem. The pro of
this approach is standard user pointers and struct pages rather than a
new construct. The con is that this is done via an interface separate
from the existing gpu and storage device. For example it would require
a /dev/dax instance alongside a /dev/nvme interface, but I don't see
that as a significant blocking concern.

[1]: https://lists.01.org/pipermail/linux-nvdimm/2016-October/007496.html
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to