From mboxrd@z Thu Jan 1 00:00:00 1970 From: chen tang Subject: Re: [PATCH V2 1/2] mm: hotplug: implement non-movable version of get_user_pages() called get_user_pages_non_movable() Date: Tue, 14 May 2013 23:16:41 +0800 Message-ID: References: <1360056113-14294-2-git-send-email-linfeng@cn.fujitsu.com> <20130205120137.GG21389@suse.de> <20130206004234.GD11197@blaptop> <20130206095617.GN21389@suse.de> <5190AE4F.4000103@cn.fujitsu.com> <20130513091902.GP11497@suse.de> <20130513143757.GP31899@kvack.org> <20130513150147.GQ31899@kvack.org> <5191926A.2090608@cn.fujitsu.com> <20130514135850.GG13845@kvack.org> Mime-Version: 1.0 Content-Type: multipart/alternative; boundary=e89a8fb202c2d5c37704dcaf1e5d Cc: Tang Chen , Jeff Moyer , Mel Gorman , Minchan Kim , Lin Feng , Andrew Morton , viro@zeniv.linux.org.uk, khlebnikov@openvz.org, walken@google.com, kamezawa.hiroyu@jp.fujitsu.com, riel@redhat.com, rientjes@google.com, Yasuaki Ishimatsu , wency@cn.fujitsu.com, laijs@cn.fujitsu.com, jiang.liu@huawei.com, zab@redhat.com, linux-mm@kvack.org, linux-aio@kvack.org, linux-fsdevel@vger.kernel.org, Linux Kernel Mailing List , Marek Szyprowski To: Benjamin LaHaise Return-path: In-Reply-To: <20130514135850.GG13845@kvack.org> Sender: owner-linux-aio@kvack.org List-Id: linux-fsdevel.vger.kernel.org --e89a8fb202c2d5c37704dcaf1e5d Content-Type: text/plain; charset=ISO-8859-1 Hi Benjamin, Thank you for the explaination. But would you please give me more info about aio ? See below. 2013/5/14 Benjamin LaHaise > On Tue, May 14, 2013 at 09:24:58AM +0800, Tang Chen wrote: > > Hi Mel, Benjamin, Jeff, > > > > On 05/13/2013 11:01 PM, Benjamin LaHaise wrote: > > >On Mon, May 13, 2013 at 10:54:03AM -0400, Jeff Moyer wrote: > > >>How do you propose to move the ring pages? > > > > > >It's the same problem as doing a TLB shootdown: flush the old pages from > > >userspace's mapping, copy any existing data to the new pages, then > > >repopulate the page tables. It will likely require the addition of > > >address_space_operations for the mapping, but that's not too hard to do. > > > > > > > I think we add migrate_unpin() callback to decrease page->count if > > necessary, > > and migrate the page to a new page, and add migrate_pin() callback to pin > > the new page again. > > You can't just decrease the page count for this to work. The pages are > pinned because aio_complete() can occur at any time and needs to have a > place to write the completion events. When changing pages, aio has to > take the appropriate lock when changing one page for another. > I saw in aio_complete(), it holds kioctx->ctx_lock. Can we hold this lock when we migrate aio ring pages ? > > > The migrate procedure will work just as before. We use callbacks to > > decrease > > the page->count before migration starts, and increase it when the > migration > > is done. > > > > And migrate_pin() and migrate_unpin() callbacks will be added to > > struct address_space_operations. > > I think the existing migratepage operation in address_space_operations can > be used. Does it get called when hot unplug occurs? That is: is testing > with the migrate_pages syscall similar enough to the memory removal case? > For anonymous pages, they don't have address_space, so they don't have address_space_operations. And aio ring pages are anonymous pages, right ? In move_to_new_page(), kernel will decide which function to call. if (!mapping) rc = migrate_page(mapping, newpage, page, mode); else if (mapping->a_ops->migratepage) rc = mapping->a_ops->migratepage(mapping, newpage, page, mode); else rc = fallback_migrate_page(mapping, newpage, page, mode); And for aio ring pages, it always call migrate_page(), right ? Thanks. :) > > -ben > > > Is that right ? > > > > If so, I'll be working on it. > > > > Thanks. :) > > -- > "Thought is the essence of where you are now." > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > --e89a8fb202c2d5c37704dcaf1e5d Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
Hi=A0Benjamin,

Thank you for the explaination. But would you pleas= e give me more info about aio ?
See below.<= br>
2013/5/14 Benjamin LaHaise <= ;bcrl@kvack.org>=
On Tue, May 14, 2013 at 09:24:58AM +0800, Tang Chen wrote= :
> Hi Mel, Benjamin, Jeff,
>
> On 05/13/2013 11:01 PM, Benjamin LaHaise wrote:
> >On Mon, May 13, 2013 at 10:54:03AM -0400, Jeff Moyer wrote:
> >>How do you propose to move the ring pages?
> >
> >It's the same problem as doing a TLB shootdown: flush the old = pages from
> >userspace's mapping, copy any existing data to the new pages, = then
> >repopulate the page tables. =A0It will likely require the addition= of
> >address_space_operations for the mapping, but that's not too h= ard to do.
> >
>
> I think we add migrate_unpin() callback to decrease page->count if<= br> > necessary,
> and migrate the page to a new page, and add migrate_pin() callback to = pin
> the new page again.

You can't just decrease the page count for this to work. =A0The p= ages are
pinned because aio_complete() can occur at any time and needs to have a
place to write the completion events. =A0When changing pages, aio has to take the appropriate lock when changing one page for another.

I saw in aio_complete(), it holds=A0kioctx->= ;ctx_lock. Can we hold this lock when=A0
we migrate aio rin= g pages ?
=A0

> The migrate procedure will work just as before. We use callbacks to > decrease
> the page->count before migration starts, and increase it when the m= igration
> is done.
>
> And migrate_pin() and migrate_unpin() callbacks will be added to
> struct address_space_operations.

I think the existing migratepage operation in address_space_operation= s can
be used. =A0Does it get called when hot unplug occurs? =A0That is: is testi= ng
with the migrate_pages syscall similar enough to the memory removal case?

For anonymous pages, they don'= t have address_space, so they don't have=A0
address_spa= ce_operations. And aio ring pages are anonymous pages, right ?

In move_to_new_page(), kernel will de= cide which function to call.

if (!mapping)
rc =3D migrate_page(mapping= , newpage, page, mode);
else if (mapping-&g= t;a_ops->migratepage)
rc =3D mapping->a_ops->migratepage(mapping,
newpage, page, mode);<= /div>
else
rc =3D fallback_migrate_pag= e(mapping, newpage, page, mode);

And for aio= ring pages, it always call migrate_page(), right ?

Thanks. :)
=A0

=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 -ben

> Is that right ?
>
> If so, I'll be working on it.
>
> Thanks. :)

--
"Thought is the essence of where you are now.&= quot;
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel= " in
the body of a message to major= domo@vger.kernel.org
More majordomo info at =A0http://vger.kernel.org/majordomo-info.html
Please read the FAQ at =A0http://www.tux.org/lkml/

--e89a8fb202c2d5c37704dcaf1e5d-- -- To unsubscribe, send a message with 'unsubscribe linux-aio' in the body to majordomo@kvack.org. For more info on Linux AIO, see: http://www.kvack.org/aio/ Don't email: aart@kvack.org