[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <AANLkTikkAs5jUPhsq5=_Efv-MbbfCNmT10rcV6VUc54D@mail.gmail.com>
Date: Wed, 15 Sep 2010 07:52:39 -0700
From: Linus Torvalds <torvalds@...ux-foundation.org>
To: Christopher Yeoh <cyeoh@....ibm.com>
Cc: Avi Kivity <avi@...hat.com>, linux-kernel@...r.kernel.org,
Linux Memory Management List <linux-mm@...ck.org>,
Ingo Molnar <mingo@...e.hu>
Subject: Re: [RFC][PATCH] Cross Memory Attach
On Wed, Sep 15, 2010 at 7:42 AM, Christopher Yeoh <cyeoh@....ibm.com> wrote:
> On Wed, 15 Sep 2010 12:58:15 +0200
> Avi Kivity <avi@...hat.com> wrote:
>
>> On 09/15/2010 03:18 AM, Christopher Yeoh wrote:
>> > The basic idea behind cross memory attach is to allow MPI programs
>> > doing intra-node communication to do a single copy of the message
>> > rather than a double copy of the message via shared memory.
>>
>> If the host has a dma engine (many modern ones do) you can reduce
>> this to zero copies (at least, zero processor copies).
>
> Yes, this interface doesn't really support that. I've tried to keep
> things really simple here, but I see potential for increasing
> level/complexity of support with diminishing returns:
I think keeping things simple is a good goal. The vmfd() approach
might be worth looking into, but your patch certainly is pretty simple
as-is.
That said, it's also buggy. You can't just get a task and then do
down_read(task->mm->mmap_sem)
on it. Not even if you have a refcount. The mm may well go away. You
need to do the same thing "get_task_mm()" does, ie look up the mm
under task_lock, and get a reference to it. You already get the
task-lock for permission testing, so it looks like doing it there
would likely work out.
> 3. ability to map part of another process's address space directly into
> the current one. Would have setup/tear down overhead, but this would
> be useful specifically for reduction operations where we don't even
> need to really copy the data once at all, but use it directly in
> arithmetic/logical operations on the receiver.
Don't even think about this. If you want to map another tasks memory,
use shared memory. The shared memory code knows about that. The races
for anything else are crazy.
Linus
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists