From: Jerome Glisse <j.glisse@gmail.com>
To: Christoph Lameter <cl@linux.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>,
paulmck@linux.vnet.ibm.com, linux-kernel@vger.kernel.org,
linux-mm@kvack.org, jglisse@redhat.com, mgorman@suse.de,
aarcange@redhat.com, riel@redhat.com, airlied@redhat.com,
aneesh.kumar@linux.vnet.ibm.com,
Cameron Buschardt <cabuschardt@nvidia.com>,
Mark Hairgrove <mhairgrove@nvidia.com>,
Geoffrey Gerfin <ggerfin@nvidia.com>,
John McKenna <jmckenna@nvidia.com>,
akpm@linux-foundation.org
Subject: Re: Interacting with coherent memory on external devices
Date: Fri, 24 Apr 2015 15:29:00 -0400 [thread overview]
Message-ID: <20150424192859.GF3840@gmail.com> (raw)
In-Reply-To: <alpine.DEB.2.11.1504241353280.11285@gentwo.org>
On Fri, Apr 24, 2015 at 01:56:45PM -0500, Christoph Lameter wrote:
> On Fri, 24 Apr 2015, Jerome Glisse wrote:
>
> > > Right this is how things work and you could improve on that. Stay with the
> > > scheme. Why would that not work if you map things the same way in both
> > > environments if both accellerator and host processor can acceess each
> > > others memory?
> >
> > Again and again share address space, having a pointer means the same thing
> > for the GPU than it means for the CPU ie having a random pointer point to
> > the same memory whether it is accessed by the GPU or the CPU. While also
> > keeping the property of the backing memory. It can be share memory from
> > other process, a file mmaped from disk or simply anonymous memory and
> > thus we have no control whatsoever on how such memory is allocated.
>
> Still no answer as to why is that not possible with the current scheme?
> You keep on talking about pointers and I keep on responding that this is a
> matter of making the address space compatible on both sides.
So if do that in a naive way, how can we migrate a chunk of memory to video
memory while still handling properly the case where CPU try to access that
same memory while it is migrated to the GPU memory.
Without modifying a single line of mm code, the only way to do this is to
either unmap from the cpu page table the range being migrated or to mprotect
it in some way. In both case the cpu access will trigger some kind of fault.
This is not the behavior we want. What we want is same address space while
being able to migrate system memory to device memory (who make that decision
should not be part of that discussion) while still gracefully handling any
CPU access.
This means if CPU access it we want to migrate memory back to system memory.
To achieve this there is no way around adding couple of if inside the mm
page fault code path. Now do you want each driver to add its own if branch
or do you want a common infrastructure to do just that ?
As i keep saying the solution you propose is what we have today, today we
have fake share address space through the trick of remapping system memory
at same address inside the GPU address space and also enforcing the use of
a special memory allocator that goes behind the back of mm code.
But this limit to only using system memory, you can not use video memory
transparently through such scheme. Some trick use today is to copy memory
to device memory and to not bother with CPU access pretend it can not happen
and as such the GPU and CPU can diverge in what they see for same address.
We want to avoid trick like this that just lead to some weird and unexpected
behavior.
As you pointed out, not using GPU memory is a waste and we want to be able
to use it. Now Paul have more sofisticated hardware that offer oportunities
to do thing in a more transparent and efficient way.
>
> > Then you had transparent migration (transparent in the sense that we can
> > handle CPU page fault on migrated memory) and you will see that you need
> > to modify the kernel to become aware of this and provide a common code
> > to deal with all this.
>
> If the GPU works like a CPU (which I keep hearing) then you should also be
> able to run a linu8x kernel on it and make it a regular NUMA node. Hey why
> dont we make the host cpu a GPU (hello Xeon Phi).
I am not saying it works like a CPU, i am saying it should face the same kind
of pattern when it comes to page fault, ie page fault are not the end of the
world for the GPU and you should not assume that all GPU threads will wait
for a pagefault because this is not the common case on CPU. Yes we prefer when
page fault never happen, so does the CPU.
No, you can not run the linux kernel on the GPU unless you are willing to allow
having the kernel runs on heterogneous architecture with different instruction
set. Not even going into the problematic of ring level/system level. We might
one day go down that road but i see no compeling point today.
Cheers,
Jerome
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2015-04-24 19:29 UTC|newest]
Thread overview: 97+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-21 21:44 Interacting with coherent memory on external devices Paul E. McKenney
2015-04-21 23:46 ` Jerome Glisse
2015-04-22 0:36 ` Benjamin Herrenschmidt
2015-04-22 12:42 ` Paul E. McKenney
2015-04-21 23:49 ` Christoph Lameter
2015-04-22 0:05 ` Jerome Glisse
2015-04-22 0:50 ` Christoph Lameter
2015-04-22 1:01 ` Benjamin Herrenschmidt
2015-04-22 13:35 ` Paul E. McKenney
2015-04-22 13:18 ` Paul E. McKenney
2015-04-22 16:16 ` Christoph Lameter
2015-04-22 17:07 ` Jerome Glisse
2015-04-22 18:17 ` Christoph Lameter
2015-04-22 18:52 ` Paul E. McKenney
2015-04-23 14:12 ` Christoph Lameter
2015-04-23 19:24 ` Paul E. McKenney
2015-04-24 14:01 ` Christoph Lameter
2015-04-24 14:13 ` Paul E. McKenney
2015-04-24 15:53 ` Rik van Riel
2015-04-23 2:36 ` Benjamin Herrenschmidt
2015-04-23 14:10 ` Christoph Lameter
2015-04-23 15:42 ` Jerome Glisse
2015-04-24 14:04 ` Christoph Lameter
2015-04-23 22:29 ` Benjamin Herrenschmidt
2015-04-23 2:30 ` Benjamin Herrenschmidt
2015-04-23 14:25 ` Christoph Lameter
2015-04-23 15:25 ` Austin S Hemmelgarn
2015-04-23 19:33 ` Paul E. McKenney
2015-04-24 14:12 ` Christoph Lameter
2015-04-24 14:57 ` Paul E. McKenney
2015-04-24 15:09 ` Jerome Glisse
2015-04-25 11:20 ` Paul E. McKenney
2015-04-24 15:52 ` Christoph Lameter
2015-04-23 22:37 ` Benjamin Herrenschmidt
2015-04-24 14:09 ` Christoph Lameter
2015-04-23 16:04 ` Rik van Riel
2015-04-22 0:42 ` Benjamin Herrenschmidt
2015-04-22 0:57 ` Paul E. McKenney
2015-04-22 1:04 ` Benjamin Herrenschmidt
2015-04-22 15:25 ` Christoph Lameter
2015-04-22 16:31 ` Jerome Glisse
2015-04-22 17:14 ` Christoph Lameter
2015-04-22 19:07 ` Jerome Glisse
2015-04-23 2:34 ` Benjamin Herrenschmidt
2015-04-23 14:38 ` Christoph Lameter
2015-04-23 16:11 ` Jerome Glisse
2015-04-24 14:29 ` Christoph Lameter
2015-04-24 15:08 ` Jerome Glisse
2015-04-24 16:03 ` Christoph Lameter
2015-04-24 16:43 ` Jerome Glisse
2015-04-24 16:58 ` Christoph Lameter
2015-04-24 17:19 ` Jerome Glisse
2015-04-24 18:56 ` Christoph Lameter
2015-04-24 19:29 ` Jerome Glisse [this message]
2015-04-24 20:00 ` Christoph Lameter
2015-04-24 20:32 ` Jerome Glisse
2015-04-25 11:46 ` Paul E. McKenney
2015-04-27 15:08 ` Christoph Lameter
2015-04-27 15:47 ` Jerome Glisse
2015-04-27 16:17 ` Christoph Lameter
2015-04-27 16:29 ` Rik van Riel
2015-04-27 16:48 ` Christoph Lameter
2015-04-27 23:54 ` Benjamin Herrenschmidt
2015-05-13 14:10 ` Vlastimil Babka
2015-05-13 23:38 ` Benjamin Herrenschmidt
2015-05-14 7:39 ` Vlastimil Babka
2015-05-14 7:51 ` Benjamin Herrenschmidt
2015-05-28 18:18 ` Paul E. McKenney
2015-04-27 16:43 ` Jerome Glisse
2015-04-27 16:51 ` Christoph Lameter
2015-04-27 17:21 ` Jerome Glisse
2015-04-27 19:26 ` Christoph Lameter
2015-04-27 19:35 ` Rik van Riel
2015-04-27 20:52 ` Jerome Glisse
2015-04-28 14:18 ` Christoph Lameter
2015-04-28 17:20 ` Jerome Glisse
2015-04-27 16:15 ` Paul E. McKenney
2015-04-27 16:31 ` Christoph Lameter
2015-04-24 23:45 ` Benjamin Herrenschmidt
2015-04-23 18:52 ` Paul E. McKenney
2015-04-24 14:30 ` Christoph Lameter
2015-04-24 14:54 ` Paul E. McKenney
2015-04-24 15:49 ` Christoph Lameter
2015-04-24 16:06 ` Rik van Riel
2015-04-25 11:49 ` Paul E. McKenney
2015-04-24 16:00 ` Jerome Glisse
2015-04-24 16:08 ` Rik van Riel
2015-04-23 17:28 ` Rik van Riel
2015-04-23 2:27 ` Benjamin Herrenschmidt
2015-04-23 14:20 ` Christoph Lameter
2015-04-23 16:22 ` Jerome Glisse
2015-04-24 18:41 ` Oded Gabbay
2015-04-23 19:00 ` Paul E. McKenney
2015-04-22 15:20 ` Christoph Lameter
2015-04-25 2:32 ` Rik van Riel
2015-04-25 3:32 ` Benjamin Herrenschmidt
2015-04-25 11:55 ` Paul E. McKenney
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150424192859.GF3840@gmail.com \
--to=j.glisse@gmail.com \
--cc=aarcange@redhat.com \
--cc=airlied@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=aneesh.kumar@linux.vnet.ibm.com \
--cc=benh@kernel.crashing.org \
--cc=cabuschardt@nvidia.com \
--cc=cl@linux.com \
--cc=ggerfin@nvidia.com \
--cc=jglisse@redhat.com \
--cc=jmckenna@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@suse.de \
--cc=mhairgrove@nvidia.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=riel@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).