Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1552215 > unrolled thread
| Started by | Jerome Glisse <j.glisse@gmail.com> |
|---|---|
| First post | 2017-01-05 19:50 +0100 |
| Last post | 2017-01-06 16:10 +0100 |
| Articles | 18 — 7 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
Re: Enabling peer to peer device transactions for PCIe devices Jerome Glisse <j.glisse@gmail.com> - 2017-01-05 19:50 +0100
Re: Enabling peer to peer device transactions for PCIe devices Jason Gunthorpe <jgunthorpe@obsidianresearch.com> - 2017-01-05 20:10 +0100
Re: Enabling peer to peer device transactions for PCIe devices Jerome Glisse <jglisse@redhat.com> - 2017-01-05 21:00 +0100
Re: Enabling peer to peer device transactions for PCIe devices Jason Gunthorpe <jgunthorpe@obsidianresearch.com> - 2017-01-05 21:10 +0100
Re: Enabling peer to peer device transactions for PCIe devices Jerome Glisse <jglisse@redhat.com> - 2017-01-05 21:20 +0100
Re: Enabling peer to peer device transactions for PCIe devices Jason Gunthorpe <jgunthorpe@obsidianresearch.com> - 2017-01-06 00:30 +0100
Re: Enabling peer to peer device transactions for PCIe devices Jerome Glisse <jglisse@redhat.com> - 2017-01-06 00:30 +0100
Re: Enabling peer to peer device transactions for PCIe devices Jason Gunthorpe <jgunthorpe@obsidianresearch.com> - 2017-01-06 01:40 +0100
Re: Enabling peer to peer device transactions for PCIe devices Jerome Glisse <j.glisse@gmail.com> - 2017-01-06 03:00 +0100
Re: Enabling peer to peer device transactions for PCIe devices Jerome Glisse <jglisse@redhat.com> - 2017-01-06 18:40 +0100
Re: Enabling peer to peer device transactions for PCIe devices Jason Gunthorpe <jgunthorpe@obsidianresearch.com> - 2017-01-06 19:30 +0100
RE: Enabling peer to peer device transactions for PCIe devices "Deucher, Alexander" <Alexander.Deucher@amd.com> - 2017-01-06 20:20 +0100
Re: Enabling peer to peer device transactions for PCIe devices Logan Gunthorpe <logang@deltatee.com> - 2017-01-06 23:20 +0100
Re: Enabling peer to peer device transactions for PCIe devices "Stephen Bates" <sbates@raithlin.com> - 2017-01-12 06:30 +0100
Re: Enabling peer to peer device transactions for PCIe devices Jerome Glisse <jglisse@redhat.com> - 2017-01-12 16:20 +0100
Re: Enabling peer to peer device transactions for PCIe devices Jason Gunthorpe <jgunthorpe@obsidianresearch.com> - 2017-01-12 18:40 +0100
Re: Enabling peer to peer device transactions for PCIe devices Logan Gunthorpe <logang@deltatee.com> - 2017-01-12 23:40 +0100
Re: Enabling peer to peer device transactions for PCIe devices Henrique Almeida <hdante.lnls@gmail.com> - 2017-01-06 16:10 +0100
| From | Jerome Glisse <j.glisse@gmail.com> |
|---|---|
| Date | 2017-01-05 19:50 +0100 |
| Subject | Re: Enabling peer to peer device transactions for PCIe devices |
| Message-ID | <sWlgR-6MA-3@gated-at.bofh.it> |
Sorry to revive this thread but it fells through my filters and i
miss it. I have been going through it and i think the discussion
has been hinder by the fact that distinct problems were merge while
they should be address separately.
First for peer-to-peer we need to be clear on how this happens. Two
cases here :
1) peer-to-peer because of userspace specific API like NVidia GPU
direct (AMD is pushing its own similar API i just can't remember
marketing name). This does not happen through a vma, this happens
through specific device driver call going through device specific
ioctl on both side (GPU and RDMA). So both kernel driver are aware
of each others.
2) peer-to-peer because RDMA/device is trying to access a regular
vma (ie non special either private anonymous or share memory or
mmap of a regular file not a device file).
For 1) there is no need to over complicate thing. Device driver must
have a back-channel between them and must be able to invalidate their
respective mapping (ie GPU must be able to ask RDMA device to kill/
stop its MR).
So remaining issue for 1) is how to enable effective peer-to-peer
mapping given that it might not work reliably on all platform. Here
Alex was listing existing proposal:
A P2P DMA DMA-API/PCI map_peer_resource support for peer-to-peer
http://www.spinics.net/lists/linux-pci/msg44560.html
B ZONE_DEVICE IO irect I/O and DMA for persistent memory
https://lwn.net/Articles/672457/
C DMA-BUF RDMA subsystem DMA-BUF support
http://www.spinics.net/lists/linux-rdma/msg38748.html
D iopmem iopmem : A block device for PCIe memory
https://lwn.net/Articles/703895/
E HMM (not interesting for case 1)
F Something new
Of the above D is ill suited for for GPU as we do not want to pin
GPU memory and D is design with long live object that do not move.
Also i do not think that exposing device PCIe bar through a new
/dev/somefilename is a good idea for GPU. So i think this should
be discarded.
HMM should be discard in respect of case 1 too. It is useful for
case 2. I don't think dma-buf is the right path either.
So we i think there is only A and B that make sense. Now for use
case 1 i think A is the best solution. No need to have struct page
and it require explicit knowlegde for device driver that it is
mapping another device memory which is a given in usecase 1.
If we look at case 2 the situation is bit more complex. Here RDMA
is just trying to access a regular VMA but it might happens that
some memory inside that VMA reside inside a device memory. When
that happens we would like to avoid to move that memory back to
system memory assuming that a peer mapping is doable.
Usecase 2 assume that the GPU is either on platform with CAPI or
CCTX (or something similar) in which case it is easy as device
memory will have struct page and is always accessible by CPU and
transparent from device to device access (AFAICT).
So we left with platform that do not have proper support for
device memory (ie CPU can not access it the same as DDR or as
limited access). Which apply to x86 for the foreseeable future.
This is the problem HMM address, allowing to transparently use
device memory inside a process even if direct CPU access are not
permited. I have plan to support peer-to-peer with HMM because
it is an important usecase. The idea is to have the device driver
fault against ZONE_DEVICE page and communicate through common API
to establish mapping. HMM will only handle keeping track of device
to device mapping and allowing to invalidate such mapping at any
time to allow memory to be migrated.
I do not intend to solve the IOMMU side of the problem or even
the PCI hierarchy issue where you can't peer-to-peer between device
accross some PCI bridge. I believe this is an orthogonal problem
and that it is best solve inside the DMA API ie with solution A.
I do not think we should try to solve all the problems with a
common solutions. They are too disparate from capabilities (what
the hardware can and can't do).
From my point of view there is few take aways:
- device should only access regular vma
- device should never try to access vma that point to another
device (mmap of any file in /dev)
- peer to peer access through dedicated userspace API must
involve dedicated API between kernel driver taking part into
the peer to peer access
- peer to peer of regular vma must involve a common API for
drivers to interact so no driver can block the other
So i think the DMA-API proposal is the one to pursue and others
problem relating to handling GPU memory and how to use it is a
different kind of problem. One with either an hardware solution
(CAPI, CCTX, ...) or a software solution (HMM so far).
I don't think we should conflict the 2 problems into one. Anyway
i think this should be something worth discussing face to face
with interested party to flesh out a solution (can be at LSF/MM
or in another forum).
Cheers,
Jérôme
[toc] | [next] | [standalone]
| From | Jason Gunthorpe <jgunthorpe@obsidianresearch.com> |
|---|---|
| Date | 2017-01-05 20:10 +0100 |
| Message-ID | <sWlAe-791-23@gated-at.bofh.it> |
| In reply to | #1552215 |
On Thu, Jan 05, 2017 at 01:39:29PM -0500, Jerome Glisse wrote: > 1) peer-to-peer because of userspace specific API like NVidia GPU > direct (AMD is pushing its own similar API i just can't remember > marketing name). This does not happen through a vma, this happens > through specific device driver call going through device specific > ioctl on both side (GPU and RDMA). So both kernel driver are aware > of each others. Today you can only do user-initiated RDMA operations in conjection with a VMA. We'd need a really big and strong reason to create an entirely new non-VMA based memory handle scheme for RDMA. So my inclination is to just completely push back on this idea. You need a VMA to do RMA. GPUs need to create VMAs for the memory they want to RDMA from, even if the VMA handle just causes SIGBUS for any CPU access. Jason
[toc] | [prev] | [next] | [standalone]
| From | Jerome Glisse <jglisse@redhat.com> |
|---|---|
| Date | 2017-01-05 21:00 +0100 |
| Message-ID | <sWmmB-7rW-21@gated-at.bofh.it> |
| In reply to | #1552244 |
On Thu, Jan 05, 2017 at 12:01:13PM -0700, Jason Gunthorpe wrote: > On Thu, Jan 05, 2017 at 01:39:29PM -0500, Jerome Glisse wrote: > > > 1) peer-to-peer because of userspace specific API like NVidia GPU > > direct (AMD is pushing its own similar API i just can't remember > > marketing name). This does not happen through a vma, this happens > > through specific device driver call going through device specific > > ioctl on both side (GPU and RDMA). So both kernel driver are aware > > of each others. > > Today you can only do user-initiated RDMA operations in conjection > with a VMA. > > We'd need a really big and strong reason to create an entirely new > non-VMA based memory handle scheme for RDMA. > > So my inclination is to just completely push back on this idea. You > need a VMA to do RMA. > > GPUs need to create VMAs for the memory they want to RDMA from, even > if the VMA handle just causes SIGBUS for any CPU access. Mellanox and NVidia support peer to peer with what they market a GPUDirect. It only works without IOMMU. It is probably not upstream : https://www.mail-archive.com/linux-rdma@vger.kernel.org/msg21402.html I thought it was but it seems it require an out of tree driver to work. Wether there is a vma or not isn't important to the issue anyway. If you want to enforce VMA rule for RDMA it is an RDMA specific discussion in which i don't want to be involve, it is not my turf :) What matter is the back channel API between peer-to-peer device. Like the above patchset points out for GPU we need to be able to invalidate a mapping at any point in time. Pining is not something we want to live with. So the VMA consideration does not change what i was saying there is 2 cases: 1) device vma (might be restricted to specific userspace API) 2) regular vma (!VM_MIXED and no special pte entry) For 1) you need back channel it can be per device driver or we can agree to some common API that can add to vm_operations_struct. For 2) expectation is that you will have valid struct page but you still need special handling at the dma API level. In 1) the peer-to-peer mapping is track at vma level and mediated there. For 2) it is per page and it is mediated at that level. In both case on you have setup mapping you need to handle the IOMMU and the PCI bridge restriction that might apply and i believe that the DMA API is the place where we want to solve that second side of the problem. Cheers, Jérôme
[toc] | [prev] | [next] | [standalone]
| From | Jason Gunthorpe <jgunthorpe@obsidianresearch.com> |
|---|---|
| Date | 2017-01-05 21:10 +0100 |
| Message-ID | <sWmwi-7Lg-27@gated-at.bofh.it> |
| In reply to | #1552290 |
On Thu, Jan 05, 2017 at 02:54:24PM -0500, Jerome Glisse wrote: > Mellanox and NVidia support peer to peer with what they market a > GPUDirect. It only works without IOMMU. It is probably not upstream : > > https://www.mail-archive.com/linux-rdma@vger.kernel.org/msg21402.html > > I thought it was but it seems it require an out of tree driver to work. Right, it is out of tree and not under consideration for mainline. > Wether there is a vma or not isn't important to the issue anyway. If > you want to enforce VMA rule for RDMA it is an RDMA specific discussion > in which i don't want to be involve, it is not my turf :) Always having a VMA changes the discussion - the question is how to create a VMA that reprensents IO device memory, and how do DMA consumers extract the correct information from that VMA to pass to the kernel DMA API so it can setup peer-peer DMA. > What matter is the back channel API between peer-to-peer device. Like > the above patchset points out for GPU we need to be able to invalidate > a mapping at any point in time. Pining is not something we want to > live with. We have MMU notifiers to handle this today in RDMA. Async RDMA MR Invalidate like you see in the above out of tree patches is totally crazy and shouldn't be in mainline. Use ODP capable RDMA hardware. Jason
[toc] | [prev] | [next] | [standalone]
| From | Jerome Glisse <jglisse@redhat.com> |
|---|---|
| Date | 2017-01-05 21:20 +0100 |
| Message-ID | <sWmFY-7Qg-31@gated-at.bofh.it> |
| In reply to | #1552296 |
On Thu, Jan 05, 2017 at 01:07:19PM -0700, Jason Gunthorpe wrote: > On Thu, Jan 05, 2017 at 02:54:24PM -0500, Jerome Glisse wrote: > > > Mellanox and NVidia support peer to peer with what they market a > > GPUDirect. It only works without IOMMU. It is probably not upstream : > > > > https://www.mail-archive.com/linux-rdma@vger.kernel.org/msg21402.html > > > > I thought it was but it seems it require an out of tree driver to work. > > Right, it is out of tree and not under consideration for mainline. > > > Wether there is a vma or not isn't important to the issue anyway. If > > you want to enforce VMA rule for RDMA it is an RDMA specific discussion > > in which i don't want to be involve, it is not my turf :) > > Always having a VMA changes the discussion - the question is how to > create a VMA that reprensents IO device memory, and how do DMA > consumers extract the correct information from that VMA to pass to the > kernel DMA API so it can setup peer-peer DMA. Well my point is that it can't be. In HMM case inside a single VMA you can have one page inside GPU memory at address A but next page inside regular memory at A+4k. So handling this at the VMA level does not make sense. So in this case you would get the device from the struct page and you would query through common API to determine if you can do peer to peer. If not it would trigger migration back to regular memory. If yes then you still have to solve the IOMMU issue and hence the DMA API changes that were propose. In the GPUDirect case the idea is that you have a specific device vma that you map for peer to peer. Here thing can be at vma level and not at a page level. Expectation here is that the GPU userspace expose a special API to allow RDMA to directly happen on GPU object allocated through GPU specific API (ie it is not regular memory and it is not accessible by CPU). Both case are disjoint. Both case need to solve the IOMMU issue which seems to be best solve at the DMA API level. > > What matter is the back channel API between peer-to-peer device. Like > > the above patchset points out for GPU we need to be able to invalidate > > a mapping at any point in time. Pining is not something we want to > > live with. > > We have MMU notifiers to handle this today in RDMA. Async RDMA MR > Invalidate like you see in the above out of tree patches is totally > crazy and shouldn't be in mainline. Use ODP capable RDMA hardware. Well there is still a large base of hardware that do not have such feature and some people would like to be able to keep using those. I believe allowing direct access to GPU object that are otherwise hidden from regular kernel memory management is still meaningfull. Cheers, Jérôme
[toc] | [prev] | [next] | [standalone]
| From | Jason Gunthorpe <jgunthorpe@obsidianresearch.com> |
|---|---|
| Date | 2017-01-06 00:30 +0100 |
| Message-ID | <sWpDQ-1oE-23@gated-at.bofh.it> |
| In reply to | #1552301 |
On Thu, Jan 05, 2017 at 03:19:36PM -0500, Jerome Glisse wrote: > > Always having a VMA changes the discussion - the question is how to > > create a VMA that reprensents IO device memory, and how do DMA > > consumers extract the correct information from that VMA to pass to the > > kernel DMA API so it can setup peer-peer DMA. > > Well my point is that it can't be. In HMM case inside a single VMA > you [..] > In the GPUDirect case the idea is that you have a specific device vma > that you map for peer to peer. [..] I still don't understand what you driving at - you've said in both cases a user VMA exists. From my perspective in RDMA, all I want is a core kernel flow to convert a '__user *' into a scatter list of DMA addresses, that works no matter what is backing that VMA, be it HMM, a 'hidden' GPU object, or struct page memory. A '__user *' pointer is the only way to setup a RDMA MR, and I see no reason to have another API at this time. The details of how to translate to a scatter list are a MM subject, and the MM folks need to get I just don't care if that routine works at a page level, or a whole VMA level, or some combination of both, that is up to the MM team to figure out :) > a page level. Expectation here is that the GPU userspace expose a special > API to allow RDMA to directly happen on GPU object allocated through > GPU specific API (ie it is not regular memory and it is not accessible > by CPU). So, how do you identify these GPU objects? How do you expect RDMA convert them to scatter lists? How will ODP work? > > We have MMU notifiers to handle this today in RDMA. Async RDMA MR > > Invalidate like you see in the above out of tree patches is totally > > crazy and shouldn't be in mainline. Use ODP capable RDMA hardware. > > Well there is still a large base of hardware that do not have such > feature and some people would like to be able to keep using those. Hopefully someone will figure out how to do that without the crazy async MR invalidation. Jason
[toc] | [prev] | [next] | [standalone]
| From | Jerome Glisse <jglisse@redhat.com> |
|---|---|
| Date | 2017-01-06 00:30 +0100 |
| Message-ID | <sWpDQ-1oE-21@gated-at.bofh.it> |
| In reply to | #1552404 |
On Thu, Jan 05, 2017 at 03:42:15PM -0700, Jason Gunthorpe wrote: > On Thu, Jan 05, 2017 at 03:19:36PM -0500, Jerome Glisse wrote: > > > > Always having a VMA changes the discussion - the question is how to > > > create a VMA that reprensents IO device memory, and how do DMA > > > consumers extract the correct information from that VMA to pass to the > > > kernel DMA API so it can setup peer-peer DMA. > > > > Well my point is that it can't be. In HMM case inside a single VMA > > you > [..] > > > In the GPUDirect case the idea is that you have a specific device vma > > that you map for peer to peer. > > [..] > > I still don't understand what you driving at - you've said in both > cases a user VMA exists. In the former case no, there is no VMA directly but if you want one than a device can provide one. But such VMA is useless as CPU access is not expected. > > From my perspective in RDMA, all I want is a core kernel flow to > convert a '__user *' into a scatter list of DMA addresses, that works no > matter what is backing that VMA, be it HMM, a 'hidden' GPU object, or > struct page memory. > > A '__user *' pointer is the only way to setup a RDMA MR, and I see no > reason to have another API at this time. > > The details of how to translate to a scatter list are a MM subject, > and the MM folks need to get > > I just don't care if that routine works at a page level, or a whole > VMA level, or some combination of both, that is up to the MM team to > figure out :) And that's what i am trying to get accross. There is 2 cases here. What exist on today hardware. Thing like GPU direct, that works on VMA level. Versus where some new hardware is going were want to do thing on page level. Both require different API at different level. What i was trying to get accross is that no matter what level you consider in the end you still need something at the DMA API level. And that the 2 different use case (device vma or regular vma) means 2 differents API for the device driver. > > > a page level. Expectation here is that the GPU userspace expose a special > > API to allow RDMA to directly happen on GPU object allocated through > > GPU specific API (ie it is not regular memory and it is not accessible > > by CPU). > > So, how do you identify these GPU objects? How do you expect RDMA > convert them to scatter lists? How will ODP work? No ODP on those. If you want vma, the GPU device driver can provide one. GPU object are disjoint from regular memory (coming from some form of mmap). They are created through ioctl and in many case are never expose to the CPU. They only exist inside the GPU driver realm. None the less there is usecase where exchanging those object accross computer over a network make sense. I am not an end user here :) > > > We have MMU notifiers to handle this today in RDMA. Async RDMA MR > > > Invalidate like you see in the above out of tree patches is totally > > > crazy and shouldn't be in mainline. Use ODP capable RDMA hardware. > > > > Well there is still a large base of hardware that do not have such > > feature and some people would like to be able to keep using those. > > Hopefully someone will figure out how to do that without the crazy > async MR invalidation. Personnaly i don't care too much about this old hardware and thus i am fine without supporting them. The open source userspace is playing catchup and doing feature for old hardware probably does not make sense. Cheers, Jérôme
[toc] | [prev] | [next] | [standalone]
| From | Jason Gunthorpe <jgunthorpe@obsidianresearch.com> |
|---|---|
| Date | 2017-01-06 01:40 +0100 |
| Message-ID | <sWqJA-2cg-9@gated-at.bofh.it> |
| In reply to | #1552405 |
On Thu, Jan 05, 2017 at 06:23:52PM -0500, Jerome Glisse wrote: > > I still don't understand what you driving at - you've said in both > > cases a user VMA exists. > > In the former case no, there is no VMA directly but if you want one than > a device can provide one. But such VMA is useless as CPU access is not > expected. I disagree it is useless, the VMA is going to be necessary to support upcoming things like CAPI, you need it to support O_DIRECT from the filesystem, DPDK, etc. This is why I am opposed to any model that is not VMA based for setting up RDMA - that is shorted sighted and does not seem to reflect where the industry is going. So focus on having VMA backed by actual physical memory that covers your GPU objects and ask how do we wire up the '__user *' to the DMA API in the best way so the DMA API still has enough information to setup IOMMUs and whatnot. > What i was trying to get accross is that no matter what level you > consider in the end you still need something at the DMA API level. > And that the 2 different use case (device vma or regular vma) means > 2 differents API for the device driver. I agree we need new stuff at the DMA API level, but I am opposed to the idea we need two API paths that the *driver* has to figure out. That is fundamentally not what I want as a driver developer. Give me a common API to convert '__user *' to a scatter list and pin the pages. This needs to figure out your two cases. And Huge Pages. And ZONE_DIRECT.. (a better get_user_pages) Give me an API to take the scatter list and DMA map it, handling all the stuff associated with peer-peer. (a better dma_map_sg) Give me a notifier scheme to rework my scatter list when physical pages need to change (mmu notifiers) Use the scatter list memory to convey needed information from the first step to the second. Do not bother the driver with distinctions on what kind of memory is behind that VMA. Don't ask me to use get_user_pages or gpu_get_user_pages, do not ask me to use dma_map_sg or dma_map_sg_peer_direct. The Driver Doesn't Need To Know. IMHO this is why GPU direct is not mergable - it creates a crazy parallel mini-mm subsystem inside RDMA and uses that to connect to a GPU driver, everything is expected to have parallel paths for GPU direct and normal MM. No good at all. > > So, how do you identify these GPU objects? How do you expect RDMA > > convert them to scatter lists? How will ODP work? > > No ODP on those. If you want vma, the GPU device driver can provide You said you needed invalidate, that has to be done via ODP. Jason
[toc] | [prev] | [next] | [standalone]
| From | Jerome Glisse <j.glisse@gmail.com> |
|---|---|
| Date | 2017-01-06 03:00 +0100 |
| Message-ID | <sWrYZ-2TE-13@gated-at.bofh.it> |
| In reply to | #1552430 |
On Thu, Jan 05, 2017 at 05:30:34PM -0700, Jason Gunthorpe wrote: > On Thu, Jan 05, 2017 at 06:23:52PM -0500, Jerome Glisse wrote: > > > > I still don't understand what you driving at - you've said in both > > > cases a user VMA exists. > > > > In the former case no, there is no VMA directly but if you want one than > > a device can provide one. But such VMA is useless as CPU access is not > > expected. > > I disagree it is useless, the VMA is going to be necessary to support > upcoming things like CAPI, you need it to support O_DIRECT from the > filesystem, DPDK, etc. This is why I am opposed to any model that is > not VMA based for setting up RDMA - that is shorted sighted and does > not seem to reflect where the industry is going. > > So focus on having VMA backed by actual physical memory that covers > your GPU objects and ask how do we wire up the '__user *' to the DMA > API in the best way so the DMA API still has enough information to > setup IOMMUs and whatnot. I am talking about 2 different thing. Existing hardware and API where you _do not_ have a vma and you do not need one. This is just existing stuff. Some close driver provide a functionality on top of this design. Question is do we want to do the same ? If yes and you insist on having a vma we could provide one but this is does not apply and is useless for where we are going with new hardware. With new hardware you just use malloc or mmap to allocate memory and then you use it directly with the device. Device driver can migrate any part of the process address space to device memory. In this scheme you have your usual VMAs but there is nothing special about them. Now when you try to do get_user_page() on any page that is inside the device it will fails because we do not allow any device memory to be pin. There is various reasons for that and they are not going away in any hw in the planing (so for next few years). Still we do want to support peer to peer mapping. Plan is to only do so with ODP capable hardware. Still we need to solve the IOMMU issue and it needs special handling inside the RDMA device. The way it works is that RDMA ask for a GPU page, GPU check if it has place inside its PCI bar to map this page for the device, this can fail. If it succeed then you need the IOMMU to let the RDMA device access the GPU PCI bar. So here we have 2 orthogonal problem. First one is how to make 2 drivers talks to each other to setup mapping to allow peer to peer and second is about IOMMU. > > What i was trying to get accross is that no matter what level you > > consider in the end you still need something at the DMA API level. > > And that the 2 different use case (device vma or regular vma) means > > 2 differents API for the device driver. > > I agree we need new stuff at the DMA API level, but I am opposed to > the idea we need two API paths that the *driver* has to figure out. > That is fundamentally not what I want as a driver developer. > > Give me a common API to convert '__user *' to a scatter list and pin > the pages. This needs to figure out your two cases. And Huge > Pages. And ZONE_DIRECT.. (a better get_user_pages) Pining is not gonna happen like i said it would hinder the GPU to the point it would become useless. > Give me an API to take the scatter list and DMA map it, handling all > the stuff associated with peer-peer. (a better dma_map_sg) > > Give me a notifier scheme to rework my scatter list when physical > pages need to change (mmu notifiers) > > Use the scatter list memory to convey needed information from the > first step to the second. > > Do not bother the driver with distinctions on what kind of memory is > behind that VMA. Don't ask me to use get_user_pages or > gpu_get_user_pages, do not ask me to use dma_map_sg or > dma_map_sg_peer_direct. The Driver Doesn't Need To Know. I understand you want it easy but there must be part that must be aware, at very least the ODP logic. Creating a peer to peer mapping is a multi step process and some of those step can fails. Fallback is always to migrate back to system memory as a default path that can not fail, except if we are out of memory. > IMHO this is why GPU direct is not mergable - it creates a crazy > parallel mini-mm subsystem inside RDMA and uses that to connect to a > GPU driver, everything is expected to have parallel paths for GPU > direct and normal MM. No good at all. Existing hardware and new hardware works differently. I am trying to explain the two different design needed for each one. You understandtably dislike the existing hardware that has more stringent requirement and can not be supported transparently and need dedicated communication with the two driver. New hardware that have a completely different API in userspace. We can decide to only support the latter and forget about the former. > > > So, how do you identify these GPU objects? How do you expect RDMA > > > convert them to scatter lists? How will ODP work? > > > > No ODP on those. If you want vma, the GPU device driver can provide > > You said you needed invalidate, that has to be done via ODP. Invalidate is needed for both old and new hardware. With new hardware the mmu_notifier is good enough. But you still need special handling when trying to establish a mapping in HMM case where not all of the GPU memory can be accessed through the bar. So no matter what it will need special handling but this can happen in the common infrastructure code (in ODP fault path). Cheers, Jérôme
[toc] | [prev] | [next] | [standalone]
| From | Jerome Glisse <jglisse@redhat.com> |
|---|---|
| Date | 2017-01-06 18:40 +0100 |
| Message-ID | <sWGEF-59N-9@gated-at.bofh.it> |
| In reply to | #1552464 |
On Fri, Jan 06, 2017 at 11:56:30AM -0500, Serguei Sagalovitch wrote: > On 2017-01-05 08:58 PM, Jerome Glisse wrote: > > On Thu, Jan 05, 2017 at 05:30:34PM -0700, Jason Gunthorpe wrote: > > > On Thu, Jan 05, 2017 at 06:23:52PM -0500, Jerome Glisse wrote: > > > > > > > > I still don't understand what you driving at - you've said in both > > > > > cases a user VMA exists. > > > > In the former case no, there is no VMA directly but if you want one than > > > > a device can provide one. But such VMA is useless as CPU access is not > > > > expected. > > > I disagree it is useless, the VMA is going to be necessary to support > > > upcoming things like CAPI, you need it to support O_DIRECT from the > > > filesystem, DPDK, etc. This is why I am opposed to any model that is > > > not VMA based for setting up RDMA - that is shorted sighted and does > > > not seem to reflect where the industry is going. > > > > > > So focus on having VMA backed by actual physical memory that covers > > > your GPU objects and ask how do we wire up the '__user *' to the DMA > > > API in the best way so the DMA API still has enough information to > > > setup IOMMUs and whatnot. > > I am talking about 2 different thing. Existing hardware and API where you > > _do not_ have a vma and you do not need one. This is just existing stuff. > I do not understand why you assume that existing API doesn't need one. > I would say that a lot of __existing__ user level API and their support in > kernel (especially outside of graphics domain) assumes that we have vma and > deal with __user * pointers. Well i am thinking to GPUDirect here. Some of GPUDirect use case do not have vma (struct vm_area_struct) associated with them they directly apply to GPU object that aren't expose to CPU. Yes some use case have vma for share buffer. In the open source driver it is true that we have vma most often than not. > > Some close driver provide a functionality on top of this design. Question > > is do we want to do the same ? If yes and you insist on having a vma we > > could provide one but this is does not apply and is useless for where we > > are going with new hardware. > > > > With new hardware you just use malloc or mmap to allocate memory and then > > you use it directly with the device. Device driver can migrate any part of > > the process address space to device memory. In this scheme you have your > > usual VMAs but there is nothing special about them. > > Assuming that the whole device memory is CPU accessible and it looks > like the direction where we are going: > - You forgot about use case when we want or need to allocate memory > directly on device (why we need to migrate anything if not needed?). > - We may want to use CPU to access such memory on device to avoid > any unnecessary migration back. > - We may have more device memory than the system one. > E.g. if you have 12 GPUs w/64GB each it will already give us ~0.7 TB > not mentioning NVDIMM cards which could also be used as memory > storage for other device access. > - We also may want/need to share GPU memory between different > processes. Here i am talking about platform where GPU memory is not accessible at all by the CPU (because of PCIe restriction, think CPU atomic operation on IO memory). So i really distinguish between CAPI/CCIX and PCIe. Some platform will have CAPI/CCIX other wont. HMM apply mostly to the latter. Some of HMM functionalities are still usefull with CAPI/CCIX. Note that HMM do support allocation on GPU first. In current design this can happen when GPU is the first to access an unpopulated virtual address. For platform where GPU memory is accessible plan is either something like CDM (Coherent Device Memory) or rely on ZONE_DEVICE. So all GPU memory have struct page and those are like ordinary pages. CDM still wants some restrictions like avoiding CPU allocation to happen on GPU when there is memory pressure ... For all intent and purposes this will work transparently in respect to RDMA because we assume on those system that the RDMA is CAPI/CCIX and that it can peer to other device. > > Now when you try to do get_user_page() on any page that is inside the > > device it will fails because we do not allow any device memory to be pin. > > There is various reasons for that and they are not going away in any hw > > in the planing (so for next few years). > > > > Still we do want to support peer to peer mapping. Plan is to only do so > > with ODP capable hardware. Still we need to solve the IOMMU issue and > > it needs special handling inside the RDMA device. The way it works is > > that RDMA ask for a GPU page, GPU check if it has place inside its PCI > > bar to map this page for the device, this can fail. If it succeed then > > you need the IOMMU to let the RDMA device access the GPU PCI bar. > > > > So here we have 2 orthogonal problem. First one is how to make 2 drivers > > talks to each other to setup mapping to allow peer to peer But I would assume and second is > > about IOMMU. > > > I think that there is the third problem: A lot of existing user level API > (MPI, IB Verbs, file i/o, etc.) deal with pointers to the buffers. > Potentially it would be ideally to support use cases when those buffers are > located in device memory avoiding any unnecessary migration / > double-buffering. > Currently a lot of infrastructure in kernel assumes that this is the user > pointer and call "get_user_pages" to get s/g. What is your opinion > how it should be changed to deal with cases when "buffer" is in > device memory? For HMM plan is to restrict to ODP and either to replace ODP with HMM or change ODP to not use get_user_pages_remote() but directly fetch informations from CPU page table. Everything else stay as it is. I posted patchset to replace ODP with HMM in the past. For the older kind of API (GPUDirect on yesterday hardware) it uses special userspace API. If we don't care about supporting those i don't mind much but some people see benefit in not having to deal with vma (struct vm_area_struct). Cheers, Jérôme
[toc] | [prev] | [next] | [standalone]
| From | Jason Gunthorpe <jgunthorpe@obsidianresearch.com> |
|---|---|
| Date | 2017-01-06 19:30 +0100 |
| Message-ID | <sWHr4-5KI-33@gated-at.bofh.it> |
| In reply to | #1552988 |
On Fri, Jan 06, 2017 at 12:37:22PM -0500, Jerome Glisse wrote: > On Fri, Jan 06, 2017 at 11:56:30AM -0500, Serguei Sagalovitch wrote: > > On 2017-01-05 08:58 PM, Jerome Glisse wrote: > > > On Thu, Jan 05, 2017 at 05:30:34PM -0700, Jason Gunthorpe wrote: > > > > On Thu, Jan 05, 2017 at 06:23:52PM -0500, Jerome Glisse wrote: > > > > > > > > > > I still don't understand what you driving at - you've said in both > > > > > > cases a user VMA exists. > > > > > In the former case no, there is no VMA directly but if you want one than > > > > > a device can provide one. But such VMA is useless as CPU access is not > > > > > expected. > > > > I disagree it is useless, the VMA is going to be necessary to support > > > > upcoming things like CAPI, you need it to support O_DIRECT from the > > > > filesystem, DPDK, etc. This is why I am opposed to any model that is > > > > not VMA based for setting up RDMA - that is shorted sighted and does > > > > not seem to reflect where the industry is going. > > > > > > > > So focus on having VMA backed by actual physical memory that covers > > > > your GPU objects and ask how do we wire up the '__user *' to the DMA > > > > API in the best way so the DMA API still has enough information to > > > > setup IOMMUs and whatnot. > > > I am talking about 2 different thing. Existing hardware and API where you > > > _do not_ have a vma and you do not need one. This is just > > > > existing stuff. > > I do not understand why you assume that existing API doesn't need one. > > I would say that a lot of __existing__ user level API and their support in > > kernel (especially outside of graphics domain) assumes that we have vma and > > deal with __user * pointers. +1 > Well i am thinking to GPUDirect here. Some of GPUDirect use case do not have > vma (struct vm_area_struct) associated with them they directly apply to GPU > object that aren't expose to CPU. Yes some use case have vma for share buffer. Lets stop talkind about GPU direct. Today we can't even make VMA pointing at a PCI bar work properly in the kernel - lets start there please. People can argue over other options once that is done. > For HMM plan is to restrict to ODP and either to replace ODP with HMM or change > ODP to not use get_user_pages_remote() but directly fetch informations from > CPU page table. Everything else stay as it is. I posted patchset to replace > ODP with HMM in the past. Make a generic API for all of this and you'd have my vote.. IMHO, you must support basic pinning semantics - that is necessary to support generic short lived DMA (eg filesystem, etc). That hardware can clearly do that if it can support ODP. Jason
[toc] | [prev] | [next] | [standalone]
| From | "Deucher, Alexander" <Alexander.Deucher@amd.com> |
|---|---|
| Date | 2017-01-06 20:20 +0100 |
| Message-ID | <sWIdr-6kw-9@gated-at.bofh.it> |
| In reply to | #1553021 |
> -----Original Message----- > From: Jason Gunthorpe [mailto:jgunthorpe@obsidianresearch.com] > Sent: Friday, January 06, 2017 1:26 PM > To: Jerome Glisse > Cc: Sagalovitch, Serguei; Jerome Glisse; Deucher, Alexander; 'linux- > kernel@vger.kernel.org'; 'linux-rdma@vger.kernel.org'; 'linux- > nvdimm@lists.01.org'; 'Linux-media@vger.kernel.org'; 'dri- > devel@lists.freedesktop.org'; 'linux-pci@vger.kernel.org'; Kuehling, Felix; > Blinzer, Paul; Koenig, Christian; Suthikulpanit, Suravee; Sander, Ben; > hch@infradead.org; Zhou, David(ChunMing); Yu, Qiang > Subject: Re: Enabling peer to peer device transactions for PCIe devices > > On Fri, Jan 06, 2017 at 12:37:22PM -0500, Jerome Glisse wrote: > > On Fri, Jan 06, 2017 at 11:56:30AM -0500, Serguei Sagalovitch wrote: > > > On 2017-01-05 08:58 PM, Jerome Glisse wrote: > > > > On Thu, Jan 05, 2017 at 05:30:34PM -0700, Jason Gunthorpe wrote: > > > > > On Thu, Jan 05, 2017 at 06:23:52PM -0500, Jerome Glisse wrote: > > > > > > > > > > > > I still don't understand what you driving at - you've said in both > > > > > > > cases a user VMA exists. > > > > > > In the former case no, there is no VMA directly but if you want one > than > > > > > > a device can provide one. But such VMA is useless as CPU access is > not > > > > > > expected. > > > > > I disagree it is useless, the VMA is going to be necessary to support > > > > > upcoming things like CAPI, you need it to support O_DIRECT from the > > > > > filesystem, DPDK, etc. This is why I am opposed to any model that is > > > > > not VMA based for setting up RDMA - that is shorted sighted and > does > > > > > not seem to reflect where the industry is going. > > > > > > > > > > So focus on having VMA backed by actual physical memory that > covers > > > > > your GPU objects and ask how do we wire up the '__user *' to the > DMA > > > > > API in the best way so the DMA API still has enough information to > > > > > setup IOMMUs and whatnot. > > > > I am talking about 2 different thing. Existing hardware and API where > you > > > > _do not_ have a vma and you do not need one. This is just > > > > > existing stuff. > > > > I do not understand why you assume that existing API doesn't need one. > > > I would say that a lot of __existing__ user level API and their support in > > > kernel (especially outside of graphics domain) assumes that we have vma > and > > > deal with __user * pointers. > > +1 > > > Well i am thinking to GPUDirect here. Some of GPUDirect use case do not > have > > vma (struct vm_area_struct) associated with them they directly apply to > GPU > > object that aren't expose to CPU. Yes some use case have vma for share > buffer. > > Lets stop talkind about GPU direct. Today we can't even make VMA > pointing at a PCI bar work properly in the kernel - lets start there > please. People can argue over other options once that is done. > > > For HMM plan is to restrict to ODP and either to replace ODP with HMM or > change > > ODP to not use get_user_pages_remote() but directly fetch informations > from > > CPU page table. Everything else stay as it is. I posted patchset to replace > > ODP with HMM in the past. > > Make a generic API for all of this and you'd have my vote.. > > IMHO, you must support basic pinning semantics - that is necessary to > support generic short lived DMA (eg filesystem, etc). That hardware > can clearly do that if it can support ODP. We would definitely like to have support for hardware that can't handle page faults gracefully. Alex
[toc] | [prev] | [next] | [standalone]
| From | Logan Gunthorpe <logang@deltatee.com> |
|---|---|
| Date | 2017-01-06 23:20 +0100 |
| Message-ID | <sWL1F-8lb-67@gated-at.bofh.it> |
| In reply to | #1553021 |
On 06/01/17 11:26 AM, Jason Gunthorpe wrote: > Make a generic API for all of this and you'd have my vote.. > > IMHO, you must support basic pinning semantics - that is necessary to > support generic short lived DMA (eg filesystem, etc). That hardware > can clearly do that if it can support ODP. I agree completely. What we want is for RDMA, O_DIRECT, etc to just work with special VMAs (ie. at least those backed with ZONE_DEVICE memory). Then GPU/NVME/DAX/whatever drivers can just hand these VMAs to userspace (using whatever interface is most appropriate) and userspace can do what it pleases with them. This makes _so_ much sense and actually largely already works today (as demonstrated by iopmem). Though, of course, there are many aspects that could still be improved like denying CPU access to special VMAs and having get_user_pages avoid pinning device memory, etc, etc. But all this would just be enhancements to how VMAs work and not be effected by the basic design described above. We experimented with GPU Direct and the peer memory patchset for IB and they were broken by design. They were just a very specific hack into the IB core and thus didn't help to support O_DIRECT or any other possible DMA user. And the invalidation thing was completely nuts. We had to pray an invalidation would never occur because, if it did, our application would just break. Logan
[toc] | [prev] | [next] | [standalone]
| From | "Stephen Bates" <sbates@raithlin.com> |
|---|---|
| Date | 2017-01-12 06:30 +0100 |
| Message-ID | <sYG7v-8s2-7@gated-at.bofh.it> |
| In reply to | #1553299 |
On Fri, January 6, 2017 4:10 pm, Logan Gunthorpe wrote: > > > On 06/01/17 11:26 AM, Jason Gunthorpe wrote: > > >> Make a generic API for all of this and you'd have my vote.. >> >> >> IMHO, you must support basic pinning semantics - that is necessary to >> support generic short lived DMA (eg filesystem, etc). That hardware can >> clearly do that if it can support ODP. > > I agree completely. > > > What we want is for RDMA, O_DIRECT, etc to just work with special VMAs > (ie. at least those backed with ZONE_DEVICE memory). Then > GPU/NVME/DAX/whatever drivers can just hand these VMAs to userspace > (using whatever interface is most appropriate) and userspace can do what > it pleases with them. This makes _so_ much sense and actually largely > already works today (as demonstrated by iopmem). +1 for iopmem ;-) I feel like we are going around and around on this topic. I would like to see something that is upstream that enables P2P even if it is only the minimum viable useful functionality to begin. I think aiming for the moon (which is what HMM and things like it are) are simply going to take more time if they ever get there. There is a use case for in-kernel P2P PCIe transfers between two NVMe devices and between an NVMe device and an RDMA NIC (using NVMe CMBs or BARs on the NIC). I am even seeing users who now want to move data P2P between FPGAs and NVMe SSDs and the upstream kernel should be able to support these users or they will look elsewhere. The iopmem patchset addressed all the use cases above and while it is not an in kernel API it could have been modified to be one reasonably easily. As Logan states the driver can then choose to pass the VMAs to user-space in a manner that makes sense. Earlier in the thread someone mentioned LSF/MM. There is already a proposal to discuss this topic so if you are interested please respond to the email letting the committee know this topic is of interest to you [1]. Also earlier in the thread someone discussed the issues around the IOMMU. Given the known issues around P2P transfers in certain CPU root complexes [2] it might just be a case of only allowing P2P when a PCIe switch connects the two EPs. Another option is just to use CONFIG_EXPERT and make sure people are aware of the pitfalls if they invoke the P2P option. Finally, as Jason noted, we could all just wait until CAPI/OpenCAPI/CCIX/GenZ comes along. However given that these interfaces are the remit of the CPU vendors I think it behooves us to solve this problem before then. Also some of the above mentioned protocols are not even switchable and may not be amenable to a P2P topology... Stephen [1] http://marc.info/?l=linux-mm&m=148156541804940&w=2 [2] https://community.mellanox.com/docs/DOC-1119
[toc] | [prev] | [next] | [standalone]
| From | Jerome Glisse <jglisse@redhat.com> |
|---|---|
| Date | 2017-01-12 16:20 +0100 |
| Message-ID | <sYPkt-5y0-1@gated-at.bofh.it> |
| In reply to | #1557124 |
On Wed, Jan 11, 2017 at 10:54:39PM -0600, Stephen Bates wrote: > On Fri, January 6, 2017 4:10 pm, Logan Gunthorpe wrote: > > > > > > On 06/01/17 11:26 AM, Jason Gunthorpe wrote: > > > > > >> Make a generic API for all of this and you'd have my vote.. > >> > >> > >> IMHO, you must support basic pinning semantics - that is necessary to > >> support generic short lived DMA (eg filesystem, etc). That hardware can > >> clearly do that if it can support ODP. > > > > I agree completely. > > > > > > What we want is for RDMA, O_DIRECT, etc to just work with special VMAs > > (ie. at least those backed with ZONE_DEVICE memory). Then > > GPU/NVME/DAX/whatever drivers can just hand these VMAs to userspace > > (using whatever interface is most appropriate) and userspace can do what > > it pleases with them. This makes _so_ much sense and actually largely > > already works today (as demonstrated by iopmem). > > +1 for iopmem ;-) > > I feel like we are going around and around on this topic. I would like to > see something that is upstream that enables P2P even if it is only the > minimum viable useful functionality to begin. I think aiming for the moon > (which is what HMM and things like it are) are simply going to take more > time if they ever get there. > > There is a use case for in-kernel P2P PCIe transfers between two NVMe > devices and between an NVMe device and an RDMA NIC (using NVMe CMBs or > BARs on the NIC). I am even seeing users who now want to move data P2P > between FPGAs and NVMe SSDs and the upstream kernel should be able to > support these users or they will look elsewhere. > > The iopmem patchset addressed all the use cases above and while it is not > an in kernel API it could have been modified to be one reasonably easily. > As Logan states the driver can then choose to pass the VMAs to user-space > in a manner that makes sense. > > Earlier in the thread someone mentioned LSF/MM. There is already a > proposal to discuss this topic so if you are interested please respond to > the email letting the committee know this topic is of interest to you [1]. > > Also earlier in the thread someone discussed the issues around the IOMMU. > Given the known issues around P2P transfers in certain CPU root complexes > [2] it might just be a case of only allowing P2P when a PCIe switch > connects the two EPs. Another option is just to use CONFIG_EXPERT and make > sure people are aware of the pitfalls if they invoke the P2P option. iopmem is not applicable to GPU what i propose is to split the issue in 2 so that everyone can reuse the part that needs to be common namely the DMA API part where you have to create IOMMU mapping for one device to point to the other device memory. We can have a DMA API that is agnostic to how the device memory is manage (so does not matter if device memory have struct page or not). This what i have been arguing in this thread. To make progress on this issue we need to stop conflicting different use case. So i say let solve the IOMMU issue first and let everyone use it in their own way with their device. I do not think we can share much more than that. Cheers, Jérôme
[toc] | [prev] | [next] | [standalone]
| From | Jason Gunthorpe <jgunthorpe@obsidianresearch.com> |
|---|---|
| Date | 2017-01-12 18:40 +0100 |
| Message-ID | <sYRvY-6LY-15@gated-at.bofh.it> |
| In reply to | #1557497 |
On Thu, Jan 12, 2017 at 10:11:29AM -0500, Jerome Glisse wrote: > On Wed, Jan 11, 2017 at 10:54:39PM -0600, Stephen Bates wrote: > > > What we want is for RDMA, O_DIRECT, etc to just work with special VMAs > > > (ie. at least those backed with ZONE_DEVICE memory). Then > > > GPU/NVME/DAX/whatever drivers can just hand these VMAs to userspace > > > (using whatever interface is most appropriate) and userspace can do what > > > it pleases with them. This makes _so_ much sense and actually largely > > > already works today (as demonstrated by iopmem). > So i say let solve the IOMMU issue first and let everyone use it in their > own way with their device. I do not think we can share much more than > that. Solve it for the easy ZONE_DIRECT/etc case then. Jason
[toc] | [prev] | [next] | [standalone]
| From | Logan Gunthorpe <logang@deltatee.com> |
|---|---|
| Date | 2017-01-12 23:40 +0100 |
| Message-ID | <sYWci-196-17@gated-at.bofh.it> |
| In reply to | #1557124 |
On 11/01/17 09:54 PM, Stephen Bates wrote: > The iopmem patchset addressed all the use cases above and while it is not > an in kernel API it could have been modified to be one reasonably easily. > As Logan states the driver can then choose to pass the VMAs to user-space > in a manner that makes sense. Just to clarify: the iopmem patchset had one patch that allowed for slightly more flexible zone device mappings which ought to be useful for everyone. The other patch (which was iopmem proper) was more of an example of how the zone_device memory _could_ be exposed to userspace with "iopmem" hardware that looks similar to nvdimm hardware. Iopmem was not really useful, in itself, for NVMe devices and it was never expected to be useful for GPUs. Logan
[toc] | [prev] | [next] | [standalone]
| From | Henrique Almeida <hdante.lnls@gmail.com> |
|---|---|
| Date | 2017-01-06 16:10 +0100 |
| Message-ID | <sWEjv-3EM-11@gated-at.bofh.it> |
| In reply to | #1552244 |
Hello, I've been watching this thread not as a kernel developer, but as an user interested in doing peer-to-peer access between network card and GPU. I believe that merging raw direct access with vma overcomplicates things for our use case. We'll have a very large camera streaming data at high throughput (up to 100 Gbps) to the GPU, which will operate in soft real time mode and write back the results to a RDMA enabled network storage. The CPU will only arrange the connection between GPU and network card. Having things like paging or memory overcommit is possible, but they are not required and they might consistently decrease the quality of the data acquisition. I see my use case something likely to exist for others and a strong reason to split the implementation in two. 2017-01-05 16:01 GMT-03:00 Jason Gunthorpe <jgunthorpe@obsidianresearch.com>: > On Thu, Jan 05, 2017 at 01:39:29PM -0500, Jerome Glisse wrote: > >> 1) peer-to-peer because of userspace specific API like NVidia GPU >> direct (AMD is pushing its own similar API i just can't remember >> marketing name). This does not happen through a vma, this happens >> through specific device driver call going through device specific >> ioctl on both side (GPU and RDMA). So both kernel driver are aware >> of each others. > > Today you can only do user-initiated RDMA operations in conjection > with a VMA. > > We'd need a really big and strong reason to create an entirely new > non-VMA based memory handle scheme for RDMA. > > So my inclination is to just completely push back on this idea. You > need a VMA to do RMA. > > GPUs need to create VMAs for the memory they want to RDMA from, even > if the VMA handle just causes SIGBUS for any CPU access. > > Jason > -- > To unsubscribe from this list: send the line "unsubscribe linux-rdma" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web