lkml.org 
[lkml]   [2010]   [Nov]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [RFC 1/2] deactive invalidated pages
On Tue, 23 Nov 2010 16:44:50 +0900 Minchan Kim <minchan.kim@gmail.com> wrote:

> On Tue, Nov 23, 2010 at 4:15 PM, Andrew Morton
> <akpm@linux-foundation.org> wrote:
> > On Tue, 23 Nov 2010 15:05:39 +0900 Minchan Kim <minchan.kim@gmail.com> wrote:
> >
> >> On Tue, Nov 23, 2010 at 2:48 PM, Andrew Morton
> >> >> > move it to the head of the LRU anyway. __But given that the user has
> >> >>
> >> >> Why does it move into head of LRU?
> >> >> If the page which isn't mapped doesn't have PG_referenced, it would be
> >> >> reclaimed.
> >> >
> >> > If it's dirty or under writeback it can't be reclaimed!
> >>
> >> I see your point. And it's why I add it to head of inactive list.
> >
> > But that *guarantees* that the page will get a full trip around the
> > inactive list. __And this will guarantee that potentially useful pages
> > are reclaimed before the pages which we *know* the user doesn't want!
> > Bad!
> >
> > Whereas if we queue it to the tail, it will only get that full trip if
> > reclaim happens to run before the page is cleaned. __And we just agreed
> > that reclaim isn't likely to run immediately, because pages are being
> > freed.
> >
> > So we face a choice between guaranteed eviction of potentially-useful
> > pages (which are very expensive to reestablish) versus a *possible*
> > need to move an unreclaimable page to the head of the LRU, which is
> > cheap.
>
> How about flagging SetPageReclaim when we add it to head of inactive?
> If page write is complete, end_page_writeback would move it to tail of
> inactive.

ooh, that sounds clever. We'd want to do that for both PageDirty() and
for PageWriteback() pages.

But if we do it for PageDirty() pages, we'd need to clear PageReclaim()
if someone reuses the page for some reason. We'll end up with pages
all over the place which have PageReclaim set. I guess we could clear
PageReclaim() in mark_page_accessed(), but that's hardly going to give
us full coverage.

hmm. Maybe just do it for PageWriteback pages. Then userspace can do

sync_file_range(SYNC_FILE_RANGE_WRITE);
fadvise(DONTNEED);

and all those pages which now have PageWriteback set will also get
PageReclaim set.

But we'd need to avoid races against end_io when setting PageReclaim
against the PageWriteback pages - if the interrupt happens while we're
setting PageReclaim, it will end up being incorrectly set.


\
 
 \ /
  Last update: 2010-11-23 09:01    [W:0.854 / U:0.080 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site